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

  1. Have Node.js 20 or newer (node -v). Get it from nodejs.org.
  2. Sign in to the apps you want, once:
    claude auth login
    cursor-agent login
    Don't have them? Claude Code · Cursor CLI · OpenCode (free models need no sign-in).
  3. Download chromind-bridge.mjs into a folder you keep, and in that folder run:
    node chromind-bridge.mjs install
    That starts it now and every time you sign in. node chromind-bridge.mjs on 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
  4. 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.1 only, answers only requests addressed to 127.0.0.1 or localhost, 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 variableDefaultDoes
CHROMIND_BRIDGE_PORT8765Port. Change the Bridge URL under Settings → ChroMind Bridge to match.
CHROMIND_BRIDGE_HOST127.0.0.1Bind address. Keep it local.
CHROMIND_HOME~/.chromindWhere bridge.json lives
CHROMIND_CLAUDE_BINfound on PATHPath to claude
CHROMIND_CURSOR_BINfound automaticallyPath to cursor-agent
CHROMIND_OPENCODE_BINfound automaticallyPath to opencode
CHROMIND_BRIDGE_TIMEOUT300Seconds 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"}]}'
EndpointReturns
GET /healthLiveness check
GET /v1/pairThe token, for the extension (refused for web pages)
GET /v1/statusApps, versions, sign-in state, models. ?fresh checks again now.
GET /v1/modelsclaude-code/sonnet, cursor/auto, opencode/big-pickle, …
POST /v1/chat/completionsStreaming (SSE) or plain JSON. Thinking arrives as reasoning_content, tool use as event: chromind.tool.

Edit this page on GitHub