Site approvals and panel approvals share one allowedOrigins list on disk because the policy is one SitePolicy either way, but on screen they are two different things: a URL you signed in on versus an Aegis sidebar panel you unlocked. The panel showed them in one mono list under "Sites Claude may control", so an Aegis approval read as "theseus-panel://aegis" with no label and no clue it was a panel at all. publicState() now splits allowedOrigins into allowedSites (web origins) and allowedPanels (theseus-panel://<addon>, enriched with the add-on's own title via api.tabControl.list()). The panel.html renders them in their own sections: "Sites Claude may control" and "Add-on panels Claude may control", the latter hidden when nothing is approved. Each panel row shows the add-on title in bold with the mono origin as a subtitle. The ✕ button goes through the existing remove-origin IPC — removing either kind takes one call. The renderer falls back to deriving the split from allowedOrigins so a UI loaded against an older host still renders both sections. |
||
|---|---|---|
| .. | ||
| lib | ||
| addon.json | ||
| index.js | ||
| panel.html | ||
| README.md | ||
| stdio-shim.cjs | ||
Claude connector
Built-in Theseus extension: a local MCP server through which Claude Code or Claude Desktop works in the user's tabs. Setup and safety model are in the Theseus README ("Claude connector (MCP)") and DESIGN-claude-connector.md.
| file | role |
|---|---|
index.js |
activation, settings (add-on store), server start/stop, panel messages |
lib/mcp-server.cjs |
Streamable HTTP + JSON-RPC, token, Host/Origin guards, sessions, SSE presence |
lib/tools.cjs |
tool definitions and handlers; resolves tabs through api.tabControl |
lib/tab-driver.cjs |
one tab over its own webContents.debugger (CDP 1.3) |
lib/policy.cjs |
site approvals, upload-folder checks, password-field detection |
lib/clipboard.cjs |
put / save / restore the system clipboard around a paste |
lib/clients.cjs |
"Connect": registers the connector with Claude Code (its CLI, user scope) and Claude Desktop (its config file), reports status, re-registers after token/port changes |
lib/action-log.cjs |
timestamped action log (panel + actions.log) |
panel.html |
the sidebar panel |
stdio-shim.cjs |
stdio ⇄ HTTP relay for Claude Desktop, run by Theseus in Node mode |
Stored in <userData>/extensions-data/claude-connector.json (token, port,
switches, approved origins, upload folders) and
<userData>/extensions-data/claude-connector/ (endpoint.json while
listening, actions.log).
Needs the host's tab-control capability, which only built-in add-ons get.
Turning any extension on or off restarts every add-on, this one included,
which ends the connected clients' sessions. A client that does not start a
new session by itself reconnects from its MCP menu (/mcp in Claude Code).