Forge Chat (Chrome extension)¶
Toolbar icon that opens the Forge session launcher as a docked Chrome side panel (right edge of the browser, resizes/moves with the window, stays open when you click into the page). Click the icon, the panel docks; use + New Session to push an agent.
How it works (thin shell, 2026-07-04)¶
The panel is a full-bleed iframe of the LIVE app, not a bundled copy. All
JS/CSS/HTML come from the server, so a website change shows up on the next
panel reload with no reinstall. Before this the extension bundled launcher.js
and every launcher change meant re-downloading the extension on each machine (MV3
bans loading remote JS into an extension page; iframing the site sidesteps that,
since the site's own JS runs in the site's origin, not the extension's).
side_panel.default_path=sidepanel.html; the background worker callschrome.sidePanel.setPanelBehavior({openPanelOnActionClick:true})so the toolbar icon toggles the panel (Chrome 114+).sidepanel.htmlis just an<iframe id="app">.config.jssetswindow.FORGE_CHAT_URL;panel.jspoints the iframe at it. Both external because the MV3 extension-page CSP (script-src 'self') blocks inline scripts.manifest.jsoncarries a fixed"key"so the extension id is stable (oolcpdakkjdlmodlinblbalhaodhiflb). The app sendsContent-Security-Policy: frame-ancestors 'self' chrome-extension://<that-id>so this one extension , and nobody else , may frame it.
LAN build (committed) vs works-anywhere build (downloaded)¶
- This committed folder = LAN build.
config.jspoints the iframe athttp://192.168.86.50:7365/ui/. Auth is the launcher's bearer-token path: pasteSESSION_LAUNCHER_TOKEN(fromforge/.env) once into the app's token field; it lives in the iframe origin's localStorage, never in git. - Off-LAN = works-anywhere build. Download it from the app itself
(
GET /api/extension/download, behind CF Access). That build points the iframe athttps://chat.justinsforge.com/ui/and adds adeclarativeNetRequestrules.jsonthat injects the CF Access service token on every request to that host, so it authenticates on any network with no login.rules.jsonholds the secret and exists only in the downloaded zip.
Install (per machine running Chrome: Sol, Vector)¶
- Get the folder: Get the extension button in the app (off-LAN, recommended)
or
scp/git pullthis folder (LAN). chrome://extensions-> Developer mode on.- Load unpacked -> select the folder (unzip first if downloaded).
- Pin Forge Chat, click the icon, accept the permissions.
Requires Chrome 114+ (side panel API). This is the last manual install; after it, launcher changes auto-load on reload.
Files¶
manifest.jsonMV3 manifest:sidePanel+declarativeNetRequest, stablekey.background.jsservice worker: enables open-on-action-click.sidepanel.htmlthe docked panel: a single iframe.config.jssetsFORGE_CHAT_URL(LAN default; download build overrides it).panel.jspoints the iframe atFORGE_CHAT_URL.rules.json(download build only) DNR rule injecting the CF Access token.icons/16/48/128 px toolbar icons.
Notes¶
- The launcher SPA (
launcher.js/css) is NOT here anymore , it's served live fromsites/justinsforge.com/chat/and loaded in the iframe. Edit it there. scripts/forge_chat_ext_sync.sh --pushnow only pushes the SHELL files to Vector, needed only when a shell file (manifest/background/sidepanel/config/panel.js) changes. Launcher edits need nothing here.- No store listing: load-unpacked, private to your machines.