Connect
ChroMind Bridge
Optional. Lets ChroMind use Claude Code, Cursor and OpenCode's free models on this computer. One file, one command, pairs by itself.
You only need the Bridge for the apps marked App on this PC in the picker: Claude Code, Cursor, and OpenCode's free models. Everything else (claude.ai, your server, API keys, local models) works without it.
Browsers can't start programs, so the Bridge does it for them: a single Node.js file with no dependencies that listens
on 127.0.0.1:8765, runs the app you picked for each message and streams the answer back. Your logins stay
in the apps.
#Set it up
-
Have Node.js 20 or newer (
node -v). Get it from nodejs.org. -
Sign in to the apps you want, once:
Don't have them? Claude Code · Cursor CLI · OpenCode (free models need no sign-in).claude auth login cursor-agent login -
Download chromind-bridge.mjs into a folder you keep,
and in that folder run:
That starts it now and every time you sign in.node chromind-bridge.mjs installnode chromind-bridge.mjson its own shows which apps it found:ChroMind Bridge 0.3.1 on http://127.0.0.1:8765 Checking the apps on this computer… Claude Code 2.1.288 Cursor 2026.10.16-e3cb207 OpenCode 1.4.2 - Pick an app from the AI pill in the panel. ChroMind finds the Bridge and pairs with it by itself, so there's no token to copy.
Rather not install it? node chromind-bridge.mjs runs it until you close the window.
node chromind-bridge.mjs uninstall removes the startup entry.
#What starts it
- Windows: a hidden starter in your Startup folder (
ChroMind Bridge.vbs). - macOS: a LaunchAgent (
~/Library/LaunchAgents/com.chromind.bridge.plist). - Linux: a systemd user service (
chromind-bridge).
#How it keeps you safe
Web pages are untrusted text, and a page could try to tell the AI to do something. So the Bridge:
- Listens on
127.0.0.1only, answers only requests addressed to127.0.0.1orlocalhost, and needs its token on every chat. - Refuses any request from a web page (anything with an
http(s)://Origin), so sites can't reach it or pair with it. - Runs Claude Code with every tool off (no MCP servers, no slash commands, no saved session).
- Runs Cursor in read-only ask mode, and OpenCode with every permission set to ask (so nothing runs).
- Runs each message in a fresh, empty scratch folder that's deleted afterwards.
The token lives in ~/.chromind/bridge.json. Delete the file and restart the Bridge for a new one; ChroMind pairs again.
#Thinking depth
Claude Code models come in five depths (Low to Max) in the picker, sent as Claude Code's --effort.
Cursor lists depths the way Cursor names its models (…-high, …-max, -fast).
#Settings
| Environment variable | Default | Does |
|---|---|---|
CHROMIND_BRIDGE_PORT | 8765 | Port. Change the Bridge URL under Settings → ChroMind Bridge to match. |
CHROMIND_BRIDGE_HOST | 127.0.0.1 | Bind address. Keep it local. |
CHROMIND_HOME | ~/.chromind | Where bridge.json lives |
CHROMIND_CLAUDE_BIN | found on PATH | Path to claude |
CHROMIND_CURSOR_BIN | found automatically | Path to cursor-agent |
CHROMIND_OPENCODE_BIN | found automatically | Path to opencode |
CHROMIND_BRIDGE_TIMEOUT | 300 | Seconds before a message gives up |
#API
The Bridge speaks the OpenAI chat API, so other local tools can use it too:
curl http://127.0.0.1:8765/v1/chat/completions \
-H "Authorization: Bearer $(node chromind-bridge.mjs token)" \
-H "Content-Type: application/json" \
-d '{"model":"claude-code/sonnet@high","stream":true,"messages":[{"role":"user","content":"Hi"}]}'
| Endpoint | Returns |
|---|---|
GET /health | Liveness check |
GET /v1/pair | The token, for the extension (refused for web pages) |
GET /v1/status | Apps, versions, sign-in state, models. ?fresh checks again now. |
GET /v1/models | claude-code/sonnet, cursor/auto, opencode/big-pickle, … |
POST /v1/chat/completions | Streaming (SSE) or plain JSON. Thinking arrives as reasoning_content, tool use as event: chromind.tool. |