Centina desktop
Centina desktop is the macOS app. It is the same Centina that the centina binary serves, in its own window. The app contains that binary and runs it for you. You do not install anything else.
The address is fixed
The app serves Centina at one address:
http://localhost:8462
This address never changes. Your canvases autosave in the window's own storage, keyed by that address. A different address would show an empty library.
The app's library is separate from a browser's library at the same address. To move a canvas between them, use Canvas actions → Export canvas and import the file on the other side. See Data and backups.
Connect an agent
Once per machine, give your agent Centina's MCP server. For Claude Code:
claude mcp add centina -- /Applications/Centina.app/Contents/Resources/app/centina mcp --port 8462
Other clients take the same command and arguments in their mcpServers JSON. See the self-hosting playbook.
Then, every time you want the agent on a canvas:
- Open the canvas.
- Click Agent in the top-right corner, beside Share, then Copy for agent. ⇧⌘C with nothing selected does the same.
- Paste it into the agent's chat.
The clipboard holds a reference to this canvas and the page you are on:
[Centina localhost:8462#p1a2b3 “Untitled” · canvas · page “Page 1” — use centina MCP tools here: pass this token as instance, or as page to draw on this page]
The agent reads the address and the page from it and paints there. No ports, no setup questions. The same reference works from a browser tab.
The Agent panel lists who is connected, what each agent did last, and which pages each session has written. A live dot beside a page means the agent is still crafting there; select a page name to go to that page. Ask the agent to call ping and the reply names this app:
{ "instance": "localhost:8462", "url": "http://localhost:8462", "app": "desktop" }
app: "desktop" means that the agent reached the app window, not a browser tab. The sparkle in the Agent capsule lights up while an agent is connected and sweeps while the agent works. With something selected, Copy for agent (⇧⌘C) hands the agent that node instead.
The one-time setup names the app's location on disk. If you move the app, run claude mcp remove centina and add it again from the new path.
Screenshots
get_screenshot captures the app window directly. The window opens a Chrome DevTools port on 127.0.0.1:14795 for this purpose. The port accepts connections from this machine only.
A node on a page that you are not viewing renders in a throwaway Chrome instead. That path needs Google Chrome on this Mac.
Troubleshooting
"Centina isn't running at http://localhost:8462"
The app is not open, or it is still starting. Open Centina and try again. When you quit the app, its server stops. Agents get this message until you open the app again.
"The Centina desktop app has no canvas window open"
The app runs, but the window is not connected to it. Open a canvas. If the window shows a canvas already, reload it with ⌘R.
"Another window took over agent connections"
A browser tab at http://localhost:8462 connected after the app window. The newest window carries the agent connection. Close the tab, then press ⌘R in the app window.
The agent stopped reaching Centina after you moved the app
The registered setup names the old path. Run claude mcp remove centina, then add it again with the app's new path.
Get the app
The app is distributed by hand for now. It is not signed or notarized.
- Verify the download against its
.sha256file. - Unzip it and move
Centina.appto your Applications folder. - Remove the quarantine attribute from the bundle:
bash xattr -dr com.apple.quarantine /Applications/Centina.app
- Open the app.
Do the xattr step only after the checksum matches. Do not disable Gatekeeper globally. If the checksum does not match, delete the download.