pastilhasandClaude Opus 5 23820ddbaf the preview never had a tab: the URL param is :section, not :tabId
Selecting a tab put its id in the URL and the preview still said "Select a tab to preview".

A plugin gets exactly two routes from the shell — /<route> and /<route>/:section — so :section is the
only param name that ever arrives, whatever the plugin means by it. This read :tabId, which was right
while it was a platform screen with its own /browser/:tabId route and stayed in place through the
extraction. The route matched, the id was in the URL, and useParams().tabId was undefined.

Nothing typechecks this: the param is a string key, and the wrong one is simply absent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 02:27:09 +00:00

Browser

Drive your own browser from Officer — your tabs, your sessions, your logins.

This is not a scraper. It attaches to the Chrome you are already using, so a page behind a login is a page Officer can see, because you are signed in to it. Ask an agent about what is on your screen, have it read a tab, navigate, or take a screenshot of something no headless browser could reach.

You install an extension. The plugin ships it; Chrome loads it from disk, and you paste one address and one token from Settings to pair. extension/SETUP.md has the steps.

Each account pairs its own browser. Two people on one server drive two different browsers, and neither can see the other's tabs.

Not yet tested end to end. The relay moved from inside the platform to its own process as part of this extraction, and no browser has been paired against it since. It typechecks and installs; whether an extension connects is the next thing to find out. BLOCKERS.md is honest about the rest.

Needs no host packages — the relay is Bun, and Chrome is on whatever machine you are sitting at.

S
Description
Drive your own browser from Officer — your tabs, your sessions, your logins
Readme
114 KiB
Languages
TypeScript 63%
JavaScript 31.6%
HTML 5.4%