theseus/PENDING.md
Hermes Dev baf86fc5a6 Claude connector: reach add-on sidebar panels (Aegis, Hermes, Pithos, …)
The connector only drove web pages. Add-on sidebar panels — Aegis's
wallet, Hermes's messenger, Pithos's storage panel, anything with
a sidebar-panel capability — were walled off: list_tabs skipped them
and webContents() refused anything that was not kind:"web".

Panels are now first-class tabs with a negative id, kind:"panel", and
an addon/panelId pair. Each open panel is listed next to the real
tabs; a closed one is still listed so a client can see what exists.
screenshot / snapshot / read_page_text / click / type / press_key /
paste_html / paste_text / wait_for / upload_file / evaluate all work
on them with the same TabDriver a web page uses. navigate /
activate_tab / close_tab refuse panels — the user owns panel
visibility, not the connector.

Approval is per add-on under a synthetic theseus-panel://<addon>
origin, so Aegis is approved once and every Aegis panel is reachable
from then on. The approval modal titles itself "Let Claude control
the Aegis panel?" when the origin is a panel origin, and the body
explains the panel is read, not the whole browser profile. Origin
pinning is skipped (the panel is served from the add-on scheme and
never navigates under us); password-field refusal and the action log
still apply, so a PIN input in a wallet panel is never typed into
and every call is in the connector's log.
2026-10-29 00:06:51 +02:00

3.7 KiB

Pending — uncommitted Theseus changes

Working-tree state that hasn't been committed or shipped. Read this before touching the same files. Update when you land or add work.

Format: each group has a session: label so parallel sessions can see what belongs to whom and coordinate. Naming convention: YYYY-MM-DD:short-slug for date-bounded work, or parallel:<theme> for work owned by a session that isn't the current one.

Last updated: 2026-10-28.


Releases are no longer recorded here: the live version and hashes are in ../site/releases-manifest.json and https://dl.silentmode.st/releases-manifest.json, and each release commit is Theseus 0.3.x: ... in git history.

Staged for the next release (post-0.3.128)

Queue of asks for the next cut. Items marked LANDED are edited in the working tree waiting for a bump + build. Items marked TODO still need the code change.

  • TODO: Home — swap SilentMode.X out, Game.X in on the Silent Mode cards section (home.html:366-375 defaultState().sections.sm). Game.X should pick up its own description + favicon from the live site, so the entry is a stub ({ title: "Game.X", url: "https://game.x/", brand: "game" }) until game.x goes live. SilentMode.X moves to a short link somewhere else — the user suggested either under the search field, at the bottom of the home page, or in the quicklinks (sections.q). The canonical remote list at https://dl.silentmode.st/home-cards.json needs the same swap so existing profiles pick it up without a reset (local sections.sm isn't reseeded by migrateCards — the remote cache is the only way through to installed users). game.x isn't resolving yet (no s3 pointer on-chain, no manifest); wait until the service is up before baking its description/favicon.
  • LANDED: Claude connector reaches add-on sidebar panels (Aegis, Hermes, Pithos, and any other sidebar add-on). The tab-control hook now exposes each open panel as a tab with a negative id, kind: "panel", addon and panelId fields (main.js panelCtrlEntries / tabControlHook.list). The connector's use() branches to _usePanel, approves control under a synthetic theseus-panel://<addonId> origin (one approval covers every panel owned by that add-on), skips origin pinning (panels load from the add-on scheme and never change under us) and drives the panel's webContents with the same TabDriver as a web tab. navigate / activate_tab / close_tab refuse panels — the user owns panel visibility. The approval modal says "Let Claude control the Aegis panel?" when the origin is a panel origin. list_tabs returns closed panels too so a client can see what exists; webContents(-N) throws " is not open; ask the user to open the panel from the sidebar first" until the user docks it. Password-field refusal and the action log still apply.

session: parallel:collision-policy

Owner's focus: BCNR ↔ ICANN name collision handling. Not mine — leave for that session to land or bundle by explicit ask.

Live state

Shipped hashes live at ../site/releases-manifest.json and https://dl.silentmode.st/releases-manifest.json. On-chain pointer at releases.silentmode.bch. See GOTCHAS.md for the release gotchas.