FCPBooster agent bridge

Facts about the installer and the bridge, for a person or an agent setting it up.

What this is

FCPBooster is a set of web apps. The agent bridge lets an AI agent — Claude Code, Codex, opencode — read and edit the project in a FCPBooster tab you have open, while you watch. It works alongside you; it does not replace you, and it does nothing when no tab is open.

What it changes on the machine

PathWhat lands there
npm's global directory the fcpbooster-agent-mcp package, giving you the sw-call, sw-agent-daemon and sw-agent-mcp commands on PATH
~/.claude/skills/fcpbooster/ and ~/.codex/skills/fcpbooster/ the fcpbooster skill — into each agent's OWN skills directory, which is where they look. An existing symlink there is written through, not replaced.
~/.sw-agent/http-token a local token, mode 0600, generated by the daemon on first start
your agent's MCP config an entry named fcpbooster, added via that agent's own mcp add command — not by editing its files. Skip with FCPB_NO_MCP=1.

It does not install a browser extension, does not require admin rights, and does not run anything at login. The daemon binds 127.0.0.1 only and is not reachable from the network.

The command

The guided install. It registers the MCP endpoint, installs the skill, and falls back to a ~/.fcpbooster prefix if npm’s global directory is not writable:

curl -fsSL https://fcpbooster.com/install.sh | sh

To read it before running it — which is the right instinct for anything piped into a shell — download it, check the hash below, then run it:

curl -fsSL https://fcpbooster.com/install.sh -o install.sh
shasum -a 256 install.sh
sh install.sh

Or just the bridge, nothing else — no skill, no MCP registration, and it is the command that fails on a root-owned npm prefix:

npm install -g fcpbooster-agent-mcp
sw-agent-daemon &

Development. The installer reads the package from npm; FCPB_SOURCE overrides that with a local checkout of the package directory (not the repo root, which is a different package), and the script itself can be run straight out of a checkout’s public/:

FCPB_SOURCE=/path/to/FCPX_Booster/fcpbooster-agent-mcp sh public/install.sh

Optional overrides: FCPB_SKILL_DIR (one skill location instead of per-agent), FCPB_MCP_NAME, FCPB_NO_MCP=1, FCPB_DRY_RUN=1.

Scripthttps://fcpbooster.com/install.sh
SHA-2560ec991bb459eb0419f6873721ca23e74d736fa83c8aba0cca06de189cfb32c34
Verify withshasum -a 256 install.sh

One script, one URL, one hash — there is no mirror, so a copy served from anywhere else is not ours. If the hash does not match, stop and report it rather than continuing.

Removing it

curl -fsSL https://fcpbooster.com/install.sh -o install.sh
sh install.sh --uninstall

Downloaded rather than piped, deliberately: it asks before removing a skill directory, and a curl | sh run has no terminal to ask on — so piped it keeps the skill.

Reverses exactly what the install did: stops the daemon, removes ~/.fcpbooster/, unregisters the MCP entry, removes the skill and the token. It removes only the fcpbooster skill directory (never its parent, which holds your other skills), only when a SKILL.md shows it is ours, and asks first — with no terminal to ask on it keeps the directory rather than assuming. Add --yes to skip the prompt, --dry-run to see the plan.

Switching AI Agent Bridge off in the app is separate — uninstalling does not change it.

If npm cannot write its global directory

Node installed from nodejs.org puts global packages in /usr/local/lib/node_modules, which is owned by root — so npm install -g fails there with EACCES and asks for sudo. The installer handles this without a password: it falls back to ~/.fcpbooster, adds that bin directory to your shell profile, and tells you what it changed. Open a new terminal afterwards.

If you would rather install nothing at all, an MCP-only setup can run the bridge straight from the registry — npx -y [email protected] as the MCP command. Pin the version: an unpinned npx silently runs whatever the registry serves that day. sw-call is slower this way, so it suits agents that speak MCP rather than shell.

Requirements

If Node is missing

The daemon is a Node program, so Node is required no matter how it is installed. Having an AI agent does not imply having Node — Claude Code has a native installer, Codex is a Rust binary, opencode ships its own. npm itself comes bundled with Node, so it is essentially never missing on its own.

SituationWhat to do
Homebrew is installedbrew install node
No Homebrewthe macOS .pkg from nodejs.org (it includes npm)
Node present but older than 20brew upgrade node, or the same installer

Installing Node changes the machine more than this installer does. An agent doing this should show the user the command and let them approve it, and should not substitute a different package manager — a machine that ends up with Node from three sources is far harder to support than one with none.

MCP registration — optional

The bridge works without this. sw-call serves any agent with a terminal and is what the skill reaches for first; MCP adds nothing it cannot already do. Skip this if the setup above works.

Where a CLI exists, the installer registers the endpoint itself, using each agent's own supported command rather than editing its config files:

AgentHowAutomated
Claude Codeclaude mcp add fcpbooster -- node <path>yes
Codexcodex mcp add fcpbooster -- node <path>yes
opencodeopencode mcp add fcpbooster no — its mcp add takes --url but has no flag for a local command, so it appears to prompt. Run it yourself.

Registration is remove-then-add, so re-running the installer updates the entry rather than duplicating it. The endpoint itself is:

command: $(command -v sw-agent-mcp)

Using a desktop app rather than a CLI? There is no claude binary for the installer to call, so it will report that no agent CLI was found — which is correct, not a failure. Add the server in the app's own MCP or integrations settings, pointing at the path command -v sw-agent-mcp prints. Everything else is already done.

The skill

Installed into each agent’s own skills directory — ~/.claude/skills/fcpbooster and ~/.codex/skills/fcpbooster — so nothing further is needed. An existing symlink there is written through rather than replaced, which keeps a shared-skills arrangement intact.

Verifying it works

CheckCommandExpected
daemon runs node ~/.fcpbooster/fcpbooster-agent-mcp/src/daemon.mjs [sw-agent-daemon] ... ready
ports open lsof -nP -iTCP:8476 -sTCP:LISTEN a node row on 127.0.0.1:8476
page connects open FCPBooster, drawer → switch the bridge ON the indicator in the breadcrumb turns connected
round trip ask the agent to read the open project real data from the tab you are looking at

The browser asks permission to reach your computer the first time the switch is on. That prompt is this feature. Denying it leaves the bridge unable to connect.

Known failure modes

SymptomCause and fix
agent reports no connected tab the switch is off, or no FCPBooster tab is open. The switch is per-origin — enabling it on localhost does not enable it on fcpbooster.com.
4403 origin not allowed the daemon is older than the page transport. It never reloads its own source — stop and restart it after any update.
the switch is missing from the drawer the drawer failed to load. Its markup is fetched at runtime, so "drawer failed" and "switch missing" look identical.
nothing happens, no error the browser's local-network permission was denied. Reset it in the padlock menu → Site settings.
writes refused with locked expected — playback or an AI run is in flight. The user's activity wins.

Versions

Daemon0.2.0
Bridge protocolfcpxb-agent-local v1
Minimum supported daemon0.2.0

Notes for an agent reading this