Startpage sidebar is now a real left column that starts at the Theseus
title's top edge and runs the full page height. The slot grid is 3
columns stretched to the full sidebar width, with enough rows to cover
the sidebar vertically (count derived from the main column's height on
each render, and re-derived on viewport resize). Empty cells sit as
semi-transparent dashed outlines in the exact position a filled tile
would occupy, so the grid reads as one uniform surface; any empty cell
doubles as the "add link" surface and clicking it opens the Add-link
modal with that cell pre-pinned, so new links land exactly where the
click did instead of being pushed to the end. The dedicated "+" button
is gone — the pin-location is the click target. A "Theseus v0.3.X —
What's new" link appears under the search tip, pointing at
silentmode.st/releases; version comes from a new getVersion exposed on
window.home over the existing app-version IPC.
Chrome toolbar: 0.3.128's "give the searchbox more room while typing"
rule is removed — focusing the search field was pulling the drag handle
with it, which made the URL / search ratio impossible to set by hand.
The URL bar now caps at 75% of the pair's shared budget via a hard CSS
max-width (so a wide urlBarWidthPx stored under the old 80% ceiling
clamps on load without the user having to re-drag), and the drag floor
matches at 25 % so the search field always keeps at least a quarter of
the pair.
Claude connector: bumped bundled-addons/claude-connector from 0.2.0 to
0.2.1. The clients.cjs Store-install detection and the panel-access
work shipped in 0.3.129's bundled 0.2.0, but seedBundledAddons only
overwrites the installed copy when the bundle is strictly newer, so
every user with an existing 0.2.0 kept the stale pre-fix copy from
%APPDATA%/Theseus/extensions/claude-connector/. The version bump
surfaces the Store-install detection ("Claude Desktop not installed on
this computer" was false on every Microsoft Store install) and the
add-on-panel approvals split in the connector panel, both of which
were already in-tree but gated behind the version check.
|
||
|---|---|---|
| addon-build/docx-editor | ||
| bundled-addons | ||
| dev | ||
| docs | ||
| engine-icons | ||
| home-brand | ||
| lib | ||
| nsis | ||
| scripts | ||
| snapshots | ||
| tests | ||
| addon-inject-preload.js | ||
| addon-tab-preload.js | ||
| addon-update-pubkeys.js | ||
| addon-updater.js | ||
| addons-host.js | ||
| address-picker-preload.js | ||
| address-picker.html | ||
| approval-preload.js | ||
| approval.html | ||
| auth-prompt-preload.js | ||
| auth-prompt.html | ||
| bcnr-origin.js | ||
| bcnr-preload.js | ||
| blocked.html | ||
| bns-indexer.js | ||
| BROWSER-PROMPT.md | ||
| chrome.html | ||
| collision-preload.js | ||
| collision.html | ||
| DESIGN-bns-indexer-service.md | ||
| DESIGN-claude-connector.md | ||
| DESIGN-integrated-wallet.md | ||
| DESIGN-password-manager.md | ||
| DESIGN-wallet-multi-account-amendment.md | ||
| downloads-preload.js | ||
| downloads.html | ||
| engine-picker-preload.js | ||
| engine-picker.html | ||
| error-preload.js | ||
| error.html | ||
| GOTCHAS.md | ||
| home-preload.js | ||
| home.html | ||
| js-dialog-preload.js | ||
| js-dialog.html | ||
| lang-picker-preload.js | ||
| lang-picker.html | ||
| LICENSE | ||
| link-status-preload.js | ||
| link-status.html | ||
| llm-picker-preload.js | ||
| llm-picker.html | ||
| main.js | ||
| messages-preload.js | ||
| messages.html | ||
| no-badge-preload.js | ||
| package-lock.json | ||
| package.json | ||
| PACKAGING-PROMPT.md | ||
| panel-grip-preload.js | ||
| panel-grip.html | ||
| panel-header-preload.js | ||
| panel-header.html | ||
| PENDING.md | ||
| popover-preload.js | ||
| popover.html | ||
| preload.js | ||
| pw-fill-preload.js | ||
| pw-fill.html | ||
| quicklinks-preload.js | ||
| quicklinks.html | ||
| README.md | ||
| RELEASE-HANDOFF.md | ||
| ROADMAP-identity-wallet.md | ||
| SESSION-PROMPT-identity-wallet.md | ||
| settings-preload.js | ||
| settings.html | ||
| sidebar-preload.js | ||
| strip-icons.js | ||
| test-installer.wsb | ||
| theseus-id-preload.js | ||
| THIRD-PARTY-NOTICES.md | ||
| TRADEMARKS.md | ||
| unlock-preload.js | ||
| unlock.html | ||
| webapps.js | ||
Theseus Navigator
The browser — the consumer face of the stack. Native .bch support with the
resolver built in, so a user installs one app instead of modifying their
operating system. Named for the thread through the labyrinth: the chain is the
thread.
Scope
- Electron shell (Chromium engine, no forking): tabs, address bar, history.
- In-process
.bchresolution — no system daemon, no NRPT, no OS trust-store changes; reusesbns.jsfrom the BNS repo as a library. - Record handling:
hrender,ipconnect,p/s3via in-app gateway,uredirect. - TLS via cert-verify hook (Electron
setCertificateVerifyProc) against the BNS root / on-chaintlsfingerprints — no OS store touched. - Provenance indicator: shows whether a page came from the chain / Sia / a direct server, with NFT category and record type — the decentralized padlock.
Status: not started
Build it in its own session/repo. The ready-to-paste brief is
BROWSER-PROMPT.md (a reference copy in this folder; canonical source is
D:\Dev\NameCoin\BROWSER-PROMPT.md — if they diverge, NameCoin wins). It points
here and reuses the resolver core. theseus.bch is registered and should
eventually serve the browser's own homepage over the protocol it implements.
Roadmap
BUILD-ROADMAP.md Stage 5.
Claude connector (MCP)
A built-in extension, off by default, that lets Claude Code or Claude Desktop on the same computer work in your signed-in Theseus tabs: open and read pages, click, type into rich editors, paste formatted text, upload files. Design: DESIGN-claude-connector.md.
Turn it on. Settings › Extensions › Claude connector. Its panel opens by itself the first time; later it is the connector icon in the toolbar dock. It shows the address, the token, the approved sites, the upload folders and a live log of every action.
Connect Claude. In the panel, click Connect next to Claude Code or
Claude Desktop. Theseus registers itself in that app's own configuration
(Claude Code through its claude mcp command, user scope; Claude Desktop in
claude_desktop_config.json, backup kept beside it) and keeps the entry
current: the token changes whenever the connector stops or is revoked, and
the entry follows. Remove takes it out again. Claude Desktop needs a
restart after a change; a running Claude Code session picks it up with /mcp.
By hand, if you prefer (panel › Set up by hand), the same entry for
Claude Code is (once; --scope user makes it available in every project):
claude mcp add --scope user --transport http theseus http://127.0.0.1:47800/mcp --header "Authorization: Bearer <token from the panel>"
Check it with claude mcp list. Claude Desktop speaks stdio only; the
panel's Claude Desktop entry is a ready claude_desktop_config.json entry
that runs stdio-shim.cjs through the Theseus executable itself
(ELECTRON_RUN_AS_NODE=1), so nothing else needs installing.
What protects you
- Listens on
127.0.0.1only, behind a random 256-bit token. Requests from web pages (anyOriginheader) and foreignHostheaders are refused. No--remote-debugging-port: each tab is driven through its ownwebContents.debugger. - Theseus asks the first time Claude acts on each site (Allow, Until Theseus restarts, Don't allow). Approved sites are listed in the panel.
- Never types or pastes into password or one-time-code fields.
- Uploads only from folders you add in the panel (none by default).
evaluate(arbitrary page JavaScript) is a separate switch, off by default.- A Claude chip in the toolbar shows while a client is connected, and the tabs it controls get a dashed outline. The chip's ✕ stops the connector at once; Revoke token in the panel issues a new token, cutting off every configured client.
Tools: list_tabs, open_tab, navigate, activate_tab, close_tab,
screenshot, read_page_text, snapshot (accessibility tree with element
refs), click, type, press_key, paste_html, paste_text,
upload_file, wait_for, and evaluate while allowed.
Tests
node tests/claude-connector-unit.test.mjs
node tests/claude-connector.test.mjs
The second starts this checkout on a throwaway profile (THESEUS_USER_DATA,
THESEUS_NO_UPDATE_CHECK) and drives a local test page over MCP: typing into
a contenteditable editor, paste_html with a heading and a link, a PNG upload,
and the refusals (password fields, a file outside the upload folder, no token,
a browser origin).