🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@essentialai/cogent-bridge

Package Overview
Dependencies
Maintainers
1
Versions
75
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@essentialai/cogent-bridge

MCP server for inter-Claude-Code session communication bridge

latest
Source
npmnpm
Version
3.14.1
Version published
Weekly downloads
1K
106.79%
Maintainers
1
Weekly downloads
 
Created
Source

@essentialai/cogent-bridge

npm version license downloads

MCP server for inter-agent communication between Claude Code, OpenAI Codex, and Slack. AI coding agents (Claude Code, OpenAI Codex) can exchange messages in real time while staying fully isolated in their own repositories -- locally via shared files or across machines via cogent.tools cloud relay.

Quick Start

# Claude Code — recommended: no git, no Xcode (works on a fresh Mac)
claude plugin marketplace add https://cogent.tools/marketplace.json
claude plugin install cogent@cogent

# Claude Code — alternative (developers with git installed):
claude plugin marketplace add https://github.com/eaisdevelopment/cogent.git
claude plugin install cogent@cogent

# OpenAI Codex
codex mcp add cogent \
  --env COGENT_ENDPOINT=https://cogent.tools \
  --env COGENT_PLATFORM=codex \
  -- npx -y @essentialai/cogent-bridge

New Mac? Install Node from nodejs.org (the installer) — not Homebrew, which pulls in the Xcode Command Line Tools. The recommended command above needs no git at all.

If your Codex CLI supports plugins (0.133.0+), you can also use: codex plugin marketplace add eaisdevelopment/cogent && codex plugin add cogent@cogent

Restart Claude Code. Use /cogent:register to join the bridge — session discovery, registration, and message protocol are all handled automatically.

Alternative: Manual Setup

Add .mcp.json to both project repositories:

{
  "mcpServers": {
    "cogent": {
      "command": "npx",
      "args": ["-y", "@essentialai/cogent-bridge"],
      "env": {}
    }
  }
}

Or use the CLI:

claude mcp add --transport stdio cogent -- npx -y @essentialai/cogent-bridge

This is also git-free (npx fetches over HTTPS), but it installs the MCP server only — the cogent_* tools without the bundled skills and /cogent:* slash-commands. For the full experience use the recommended plugin command above.

Restart Claude Code in both repos. The bridge tools are now available.

OpenAI Codex

codex mcp add cogent \
  --env COGENT_ENDPOINT=https://cogent.tools \
  --env COGENT_PLATFORM=codex \
  -- npx -y @essentialai/cogent-bridge

Restart Codex. Use cogent_register_peer to join the bridge.

If your Codex CLI supports plugins (0.133.0+), you can also use: codex plugin marketplace add eaisdevelopment/cogent && codex plugin add cogent@cogent

Local vs Cloud mode

Cogent runs in one of two modes. Cloud is the default — you don't have to configure anything.

Cloud mode (default)Local mode (opt-in)
How to get itJust install (zero config)Set COGENT_LOCAL=1
Who can talkAgents (and humans) on any machine, plus Slack / browser / other surfacesOnly agents on this one machine
TransportThe cogent.tools relay (free password channels) or app.cogent.tools for Team (Org_ID) channelsA shared file in ~/.cogent/ — no network
Needs an account / internetNo account for free channels; needs internetNeither — fully offline & private
Best forCross-machine / cross-vendor collaboration, remote teammates, SlackAir-gapped work, a single-box multi-agent setup, and self-hosted / local-LLM deployments where nothing should leave the machine

Routing is automatic — you never point at a server by hand:

  • No Org_ID → the free relay (cogent.tools).
  • With an Org_ID → the Team relay (app.cogent.tools).
  • COGENT_LOCAL=1 → local files, no relay (wins over any endpoint).

An explicit COGENT_ENDPOINT (e.g. a self-hosted free relay) always overrides the default. This is why a hand-written config that simply omits the endpoint now reaches the free cloud automatically instead of silently staying local.

Switching to local: add "COGENT_LOCAL": "1" to the env block of your .mcp.json (or export COGENT_LOCAL=1), then restart the agent. This is the recommended mode once you run a local LLM and want a self-contained, offline agent mesh.

Set model = "gpt-5.4" in ~/.codex/config.toml if using a ChatGPT account.

See docs/installation.md for all installation options, configuration, and troubleshooting.

What It Does

Two AI agents — Claude Code on backend, Codex on frontend, or any combination — need to negotiate testing scenarios and debug collaboratively in real-time without mixing their accumulated project context.

Cogent_Backend                                Cogent_Frontend
    |                                         |
    +-- .mcp.json --> @essentialai/cogent-bridge    |
    |                    |                    |
    |                    +-- ~/.cogent/cogent-state.json
    |                    |                    |
    |                    |   <-- .mcp.json ---+
    |                                         |
    +-- claude --resume <sessionId> -p "msg" -+

Each CC instance spawns its own MCP server process via stdio transport. Shared state is persisted to ~/.cogent/cogent-state.json with file locking so both processes see the same peer registry and message history.

Messages are relayed by calling claude --resume <sessionId> -p "message" as a subprocess. Before sending, the bridge validates that the target session file exists on disk — if the session has ended, it fails immediately instead of waiting for timeout. On timeout, it retries once with a shorter 30-second timeout. File locking uses fs.writeFile with flag: "wx" (O_CREAT | O_EXCL), stale lock detection via process.kill(pid, 0), and atomic writes via temp-file-then-rename.

Tools Reference

The server exposes six tools, all prefixed with cogent_:

cogent_register_peer

Register a Claude Code session as a named peer on the bridge.

ParameterTypeRequiredDescription
peerIdstringyesUnique identifier, e.g. "backend" or "frontend"
sessionIdstringyesClaude Code session ID (used with --resume)
cwdstringyesAbsolute path to the project working directory
labelstringyesHuman-readable label, e.g. "Cogent_Backend" or "Cogent_Frontend"

cogent_deregister_peer

Remove a previously registered peer from the bridge.

ParameterTypeRequiredDescription
peerIdstringyesPeer ID to deregister, e.g. "backend"

cogent_send_message

Send a message from one registered peer to another. The message is relayed by resuming the target's Claude Code session via CLI subprocess. Returns the target's response.

ParameterTypeRequiredDescription
fromPeerIdstringyesPeer ID of the sender, e.g. "backend"
toPeerIdstringyesPeer ID of the recipient, e.g. "frontend"
messagestringyesThe message content to send

cogent_list_peers

List all currently registered peers. Returns peer IDs, session IDs, working directories, labels, and a potentiallyStale flag for peers idle beyond the configured timeout. No parameters.

cogent_get_history

Retrieve the message history for the bridge. Returns messages in chronological order, most recent last.

ParameterTypeRequiredDescription
peerIdstringnoFilter history to messages involving this peer
limitnumbernoMaximum number of messages to return (default 50)

cogent_health_check

Diagnose the bridge's operational status. No parameters required.

Checks performed:

  • State file -- Can the state directory be read and written?
  • Lock mechanism -- Can file locks be acquired and released?
  • Claude CLI -- Is the claude binary available and responsive?

Response fields:

FieldTypeDescription
healthybooleanAll checks passed
serverVersionstringCurrent server version
statePathstringPath to state file
claudePathstringPath to Claude CLI
checksobjectPer-check pass/fail with detail messages
timestampstringISO timestamp of the check

Configuration

All settings are configured via environment variables with sensible defaults:

VariableDefaultDescription
COGENT_STATE_PATH~/.cogentDirectory for state file and logs
COGENT_TIMEOUT_MS120000 (2 min)CLI subprocess timeout in milliseconds
COGENT_CHAR_LIMIT0 (unlimited)Max characters in relayed message (0 = no limit)
COGENT_LOG_LEVELinfoLog verbosity: debug, info, warn, error
COGENT_CLAUDE_PATHclaudePath to the Claude Code CLI executable
COGENT_STALE_TIMEOUT_MS1800000 (30 min)Idle time before peer is flagged stale (0 = disabled)
COGENT_CHECK_ON_STOPonAfter each turn, catch messages that arrived while you were busy and reply to them. Disable with 0/false in your shell/system env (see FAQ).
COGENT_CHECK_ON_STOP_SCOPEdirected,human-broadcastWhich messages check-on-stop acts on.

To override defaults, set environment variables in your .mcp.json:

{
  "mcpServers": {
    "cogent": {
      "command": "npx",
      "args": ["-y", "@essentialai/cogent-bridge"],
      "env": {
        "COGENT_STATE_PATH": "/custom/path",
        "COGENT_LOG_LEVEL": "debug"
      }
    }
  }
}

Usage Workflow

  • Start two Claude Code sessions, one per repo.

  • In each session, find your session ID:

    ls -t ~/.claude/projects/$(pwd | sed 's/[^a-zA-Z0-9-]/-/g')/*.jsonl 2>/dev/null | head -1 | xargs -I{} basename {} .jsonl
    
  • Each session registers itself on the bridge:

    # In Cogent_Backend:
    Use cogent_register_peer:
      peerId: "backend", sessionId: "<backend-session-id>",
      cwd: "/path/to/backend", label: "Cogent_Backend"
    
    # In Cogent_Frontend:
    Use cogent_register_peer:
      peerId: "frontend", sessionId: "<frontend-session-id>",
      cwd: "/path/to/frontend", label: "Cogent_Frontend"
    
  • Send a message from either session:

    Use cogent_send_message:
      fromPeerId: "backend", toPeerId: "frontend",
      message: "What endpoint does the login form POST to?"
    
  • The bridge validates the target session exists, resumes it with the message, and returns the response. On timeout, it automatically retries once.

  • Check message history at any time:

    Use cogent_get_history to see all exchanges, or filter by peerId.
    
  • When done, deregister peers:

    Use cogent_deregister_peer:
      peerId: "backend"
    

Troubleshooting

Fresh install: Cogent tools aren't available / /cogent:register can't run

Fixed in 3.12.3. Older versions launched the bridge via npx, whose first-run download could exceed Claude Code's MCP startup budget, so the tools never loaded (and the interrupted download could corrupt the npx cache). The plugin now ships a self-contained bundle and starts instantly. If you already hit the broken state, run once then fully quit + relaunch:

rm -rf ~/.npm/_npx && claude plugin marketplace update && claude plugin update cogent@cogent

NVM/PATH: "npx not found" or server fails to start

MCP servers are spawned as subprocesses and may not inherit your NVM configuration.

Option 1: Use absolute path to npx

Find your npx path with which npx (e.g., /Users/you/.nvm/versions/node/v22.11.0/bin/npx), then update .mcp.json:

{
  "mcpServers": {
    "cogent": {
      "command": "/Users/you/.nvm/versions/node/v22.11.0/bin/npx",
      "args": ["-y", "@essentialai/cogent-bridge"]
    }
  }
}

Option 2: Use claude mcp add (handles PATH automatically)

claude mcp add --transport stdio cogent -- npx -y @essentialai/cogent-bridge

Option 3: Ensure NVM loads in non-interactive shells

Add to ~/.zshrc or ~/.bashrc:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

State file location

The bridge stores state at ~/.cogent/cogent-state.json by default.

  • Override with: COGENT_STATE_PATH=/your/path
  • Logs are stored at: <state-path>/logs/
  • First-run config is persisted to ~/.cogent-config.json

Common errors

ErrorCauseFix
CLI_NOT_FOUNDclaude not on PATHInstall Claude Code or set COGENT_CLAUDE_PATH
CLI_TIMEOUTResponse took > 2 min (retried once at 30s)Increase COGENT_TIMEOUT_MS, or check target session is active
LOCK_TIMEOUTLock held by dead processDelete <state-path>/cogent-state.json.lock
STATE_CORRUPTInvalid JSON in stateAuto-recovers; backup saved as .corrupt.<timestamp>
PEER_NOT_FOUNDTarget peer not registeredRegister both peers before sending messages
CLI_EXEC_FAILED (session not found)Target session file missingAsk peer to re-register with current session ID

"After I finished, the agent got a follow-up about Cogent messages"

That is check-on-stop (feature "C", 3.12.2+, default on): after each turn a plugin Stop hook catches directed / human-broadcast messages that arrived while the agent was busy (so the real-time wake was missed) and hands them back so nothing is silently lost. It is silent when there's nothing new. To disable, set COGENT_CHECK_ON_STOP=0 in your shell/system environment (e.g. your shell profile) — the hook runs as its own process and does not read the .mcp.json env block. Narrow what it acts on with COGENT_CHECK_ON_STOP_SCOPE.

Development

Build from source:

git clone https://github.com/eaisdevelopment/cogent.git
cd cogent-bridge
npm install
npm run build
npm test

Project Structure

src/
├── index.ts                 # Server entry point, registers tools, starts stdio transport
├── config.ts                # Environment variable loading and validation (zod)
├── constants.ts             # Server name and version from package.json
├── errors.ts                # BridgeError class and error code enum
├── logger.ts                # Timestamped file + stderr logger
├── startup.ts               # First-run prompt, config loading, CLI validation
├── types.ts                 # Core interfaces (PeerInfo, MessageRecord, etc.)
├── services/
│   ├── cc-cli.ts            # CLI subprocess wrapper (spawn with claude --resume)
│   ├── health-check.ts      # State file, lock, and CLI diagnostic checks
│   └── peer-registry.ts     # File-based shared state with locking
└── tools/
    ├── register-peer.ts     # cogent_register_peer
    ├── deregister-peer.ts   # cogent_deregister_peer
    ├── send-message.ts      # cogent_send_message
    ├── list-peers.ts        # cogent_list_peers
    ├── get-history.ts       # cogent_get_history
    └── health-check.ts      # cogent_health_check

npm Scripts

ScriptCommandDescription
npm run buildtscCompile TypeScript to dist/
npm run devtsx watch src/index.tsDevelopment mode with auto-reload
npm startnode dist/index.jsRun compiled server
npm run cleanrm -rf distRemove build artifacts
npm testvitest runRun test suite
npm run test:watchvitestRun tests in watch mode
npm run test:coveragevitest run --coverageRun tests with coverage report

License

Apache-2.0

watch — proactive notifier for a peer

Watches a channel and fires an OS notification when a message is directed at a peer that can't auto-respond (e.g. a Claude Desktop agent). Read-only; it does not reply.

# run from the SAME directory you registered the channel in (so it finds the saved creds)
npx @essentialai/cogent-bridge watch --peer dnarc-architect --label DARC --interval 15

Flags: --peer <peerId> (required), --label <displayLabel> (optional, for [→ Label] tags), --interval <seconds> (default 15), --cwd <dir> (informational). Credentials are read from the per-cwd store the bridge writes on join (~/.cogent/credentials/…), or COGENT_CREDENTIALS_FILE. Notifications use osascript (macOS) / notify-send (Linux), falling back to a stdout line.

Keywords

mcp

FAQs

Package last updated on 07 Aug 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts