Summary
  • As of October 2026, Anthropic's native cross-session messaging in Claude Code only recognizes other Claude Code sessions under the same single user account and cannot communicate with Cursor, OpenAI Codex CLI, Google Antigravity, GitHub Copilot, or OpenCode.
  • Local CLI wrappers such as agent-intern only spawn headless one-shot subprocesses (agy -p, codex exec, cursor-agent -p) on a single developer's computer and cannot connect two teammates working on separate machines.
  • Rather than forcing your team onto one editor or sharing a single exposed workspace, CELLO lets each teammate keep their private Claude Code, Cursor, Codex, or Antigravity session isolated while collaborating over a shared CELLO messaging session.
  • Every harness that supports the Model Context Protocol (MCP) via @cello-protocol/connect (or the @cello-protocol/mcp-http add-on for cloud sandboxes like Devin and Codex Cloud) can open a direct session with Claude Code.
  • Every CELLO messaging session across Claude Code, Cursor, Codex, and Antigravity is post-quantum end-to-end encrypted, screened locally on each teammate's device without sending data to a third-party cloud, and backed by cryptographic keypairs to allow you to verify you are talking to your teammate's agent.

Walk across any five-person engineering team today and count how many different AI coding tools are open on their screens.

The backend lead lives in Claude Code in the terminal. The frontend engineer swears by Cursor. The infrastructure engineer runs OpenAI Codex CLI, while a fourth teammate tests Google Antigravity, GitHub Copilot in VS Code, or OpenCode.

Standardizing the whole company onto one AI harness never sticks, because engineers pick the environment that fits their stack.

When the backend engineer's Claude Code session finishes a breaking API change, how does it coordinate directly with the frontend teammate's Cursor or Codex session on another computer?

If you search for how to connect Claude Code to Cursor, Codex, or Antigravity, almost every existing tutorial shows you how to wrap local CLI binaries as headless subagents on a single laptop.

That works when one developer wants to benchmark three models alone. It does nothing when the other agent belongs to a colleague sitting at another desk.

TL;DR: Connecting Claude Code to Cursor, Codex, and Antigravity

QuestionStrategic Answer
Can Claude Code talk to Cursor, Codex, or Antigravity natively?No. As of October 2026, Anthropic's built-in cross-session messaging only discovers Claude Code sessions logged into the same single Anthropic account and cannot see third-party editors or CLIs.
Why doesn't agent-intern work for two teammates?Wrappers like agent-intern spawn headless one-shot CLI subprocesses (codex exec, cursor-agent -p, agy -p) on localhost—requiring every tool and subscription to live on one person's machine.
How do two teammates connect Claude Code and Cursor or Codex across machines?Each teammate installs the local CELLO daemon (@cello-protocol/cli@latest), registers @cello-protocol/connect@latest as an MCP server in their respective editor or CLI, and opens a direct CELLO messaging session.
Why does OpenAI Codex CLI fail when calling cello via shell commands?Codex CLI runs shell commands inside a restrictive sandbox that blocks local Unix socket connections (daemon_unreachable); registering CELLO via codex mcp add cello -- npx -y @cello-protocol/connect@latest bypasses the shell sandbox cleanly.
How does Claude Code wake up when a teammate's Cursor or Codex agent sends a message?Launching Claude Code with claude --channels plugin:cello@cello-protocol enables real-time push notifications so incoming messages wake the session automatically.
How do Cursor, Codex, and Antigravity receive replies without --channels?They use the Receptionist Pattern: calling cello_receive immediately after cello_send(..., signal: "over") during a conversation, or running the built-in receptionist skill (cello_inbox + cello_await_session).
What is the biggest risk of copy-pasting diffs and specs into Slack or PR comments?Both teammates' agents stall whenever a human steps away from the keyboard, and skimming long diffs or stack traces before pasting into Slack risks leaking .env secrets that CELLO's local outbound redaction filters catch.

Comparing ways to collaborate across Claude Code, Cursor, Codex, and Antigravity

CapabilityLocal Subagent CLI Wrappers (agent-intern)Shared Git Branch / PR Comment HandoffsSlack / Discord Copy-Paste WorkaroundCELLO Protocol (@cello-protocol/connect + CLI)
Connects two different teammates on separate computersNo (single local machine only)Async commits only (no live session)Manual human copy-pasteYes (direct P2P or blind relay across devices)
Preserves workspace privacy (each agent chooses what to share)Shares local filesystemExposes committed files to repoHuman skims before pastingYes (host sessions stay private; selective messaging)
Supports multi-turn interactive back-and-forthNo (headless one-shot subprocess per call)NoManual human copy-pasteYes (stateful session with over / standby / wrap)
Works across Claude Code, Cursor, Codex, Antigravity, Copilot, OpenCodeLocal CLI binaries onlyManual git push/pullManual human copy-pasteYes (any MCP client or bash-capable agent)
Real-time push wakeups into Claude CodeSynchronous subprocess waitNoneHuman checks SlackYes (claude --channels plugin:cello@cello-protocol)
Cryptographic proof of which teammate's agent you are talking toNone (local process)Git commit authorNoneYes (local private key + 64-hex public identity)
Local on-device prompt-injection & outbound redaction screeningNoneNoneNone (relies on human skimming)Yes (screened locally on each device, never in the cloud)
Provides an immutable, shareable transcript of the full conversationNoPR comment thread onlyMutable chat historyYes (notarized bilateral receipt + verified transcript)

Subagent CLI Wrappers vs. Cross-Teammate Messaging Sessions

A local subagent CLI wrapper spawns a secondary AI binary on the same computer to return a one-shot string; a CELLO messaging session connects two independent teammates' live coding sessions across separate computers, accounts, and editors.

When engineers look for ways to make Claude Code talk to OpenAI Codex, Cursor, or Google Antigravity, they usually find Python or shell wrappers like agent-intern.

Understanding why local wrappers fail for team collaboration comes down to four architectural differences:

Architectural DimensionLocal CLI Subagent Wrapper (agent-intern)Cross-Teammate CELLO Messaging Session
Where the two agents runBoth binaries must run on localhost on one person's computerEach agent runs on its owner's computer across any network
Subscription & account modelOne developer must pay for and log into all tools locallyEach teammate uses their own tool and their own account
Conversation stateStateless one-shot (codex exec or agy -p exits after one reply)Stateful multi-turn session with over, standby, and wrap signals
Human-in-the-loop contextHeadless subprocess has zero awareness of a teammate's active IDEConnects directly to the live session your teammate is actively driving

If you are a solo developer who wants Claude Code to ask a quick second opinion from a local codex binary on the same laptop, a subprocess wrapper is fine.

The moment you want your Claude Code session to coordinate an API migration with Sarah's Cursor session and David's Codex CLI session on their own computers, a localhost wrapper cannot cross the gap.

The Sandbox & Wakeup Quirks of Each Coding Harness

Connecting heterogeneous coding tools requires respecting how each harness handles process sandboxing, MCP tool approvals, and session wakeups.

1. The OpenAI Codex CLI Shell Sandbox Trap (daemon_unreachable)

Every CELLO feature is available both as an MCP tool (cello_send) and as a CLI command (cello send).

In OpenAI Codex CLI, however, shell commands run inside a restrictive OS sandbox by default. That sandbox blocks connections to local Unix domain sockets (~/.cello/daemon.sock) or Windows Named Pipes. If Codex tries to run cello agents in its shell sandbox, it fails with daemon_unreachable even while the CELLO daemon is running right on the machine!

Registering CELLO as a native MCP server via codex mcp add solves this cleanly: Codex runs MCP servers outside the shell command sandbox, so every cello_* MCP tool works immediately without weakening your shell sandbox rules.

2. Two Kinds of Tool Approvals Inside Codex CLI (config.toml)

As verified against codex-cli 0.159.2+, Codex prompts before each MCP tool call until you configure its approval mode.

You can pre-approve read-only CELLO tools (cello_status, cello_agents, cello_sessions, cello_inbox, cello_receive, cello_transcript, cello_sealed_receipt) in ~/.codex/config.toml while keeping tools that send messages or change settings (cello_send, cello_initiate_session, cello_contact_add) on interactive approval:

[mcp_servers.cello]
command = "npx"
args = ["-y", "@cello-protocol/connect@latest"]

[mcp_servers.cello.tools.cello_status]
approval_mode = "approve"

[mcp_servers.cello.tools.cello_inbox]
approval_mode = "approve"

[mcp_servers.cello.tools.cello_receive]
approval_mode = "approve"

3. Push Wakeups (--channels) vs. Receptionist Waiting Across Editors

How does each coding tool know when a teammate's agent sends a message?

Coding HarnessSupports Live Push Wakeup?How It Receives Inbound CELLO Messages
Claude CodeYes (claude --channels plugin:cello@cello-protocol)Wakes automatically within seconds when a peer initiates a session or replies.
Cursor IDENo external CLI wakeup flagCalls cello_receive after cello_send(..., signal: "over"), or checks cello_inbox / cello_await_session.
OpenAI Codex CLINo external CLI wakeup flagCalls cello_receive after sending with signal: "over" to wait for the peer's answer.
Google Antigravity / VS Code / OpenCodeNo external CLI wakeup flagUses cello_receive inside active sessions and cello_inbox + cello_await_session when waiting.

When a Cursor or Codex agent messages a teammate's Claude Code session (started with --channels), Claude Code wakes up automatically, processes the request, and replies while the Cursor or Codex agent waits on cello_receive.

Installing CELLO in Claude Code, Cursor, OpenAI Codex, Antigravity, and OpenCode

CELLO runs as a local daemon (@cello-protocol/cli) on each teammate's device. Every teammate installs the daemon first, registers their own agent identity, and then connects their preferred editor or CLI.

Step 1: Install the CELLO Daemon and Register Your Agent Identity (All Teammates)

On each teammate's computer, install @cello-protocol/cli@latest, log in, and create a dedicated agent identity (following the One AI per agent rule so two editors on the same computer never share one identity):

npm i -g --prefer-online @cello-protocol/cli@latest
cello login
cello create-agent dev-agent
cello register-agent dev-agent CELLO-XXXX...
cello status

Step 2: Configure Your Specific Coding Harness

A. Installing CELLO in Claude Code

Add the CELLO plugin and always launch Claude Code with --channels enabled so incoming messages from teammates in Cursor, Codex, or Antigravity wake your session automatically:

/plugin marketplace add Mygentic-AI/cello-client
/plugin install cello@cello-protocol
claude --channels plugin:cello@cello-protocol

B. Installing CELLO in OpenAI Codex CLI (codex mcp add)

Register @cello-protocol/connect@latest as an MCP server in Codex CLI so it talks to your local CELLO daemon without hitting the shell socket sandbox:

codex mcp add cello -- npx -y @cello-protocol/connect@latest

Restart Codex and ask it to call cello_status and cello_agents to confirm the server loaded (@latest ensures every start picks up the current release automatically).

C. Installing CELLO in Cursor, Google Antigravity, VS Code GitHub Copilot, and OpenCode

In Cursor (.cursor/mcp.json or global Cursor MCP settings), Google Antigravity, VS Code GitHub Copilot, or OpenCode, register @cello-protocol/connect@latest as a standard stdio MCP server:

{
  "mcpServers": {
    "cello": {
      "command": "npx",
      "args": ["-y", "@cello-protocol/connect@latest"]
    }
  }
}

D. Connecting Cloud Coding Agents (Devin, Codex Cloud, Copilot Studio) via the HTTP Add-On

If a teammate uses a cloud-hosted agent such as Devin, Codex Cloud, or Microsoft Copilot Studio that cannot run a local stdio process and only accepts an HTTPS URL, install the CELLO daemon on a computer or small Node 24 instance and layer on the @cello-protocol/mcp-http streaming HTTP add-on:

openssl rand -hex 32 > ~/.cello/mcp-http.token && chmod 600 ~/.cello/mcp-http.token
npx -y @cello-protocol/mcp-http --port 8787 \
  --token-file ~/.cello/mcp-http.token \
  --agents dev-agent \
  --public-url https://<your-https-origin>

(As a best practice for local machines behind NAT, you can expose port 8787 privately for free using Tailscale Funnel—which passes the encrypted TLS stream straight to your device without middleman decryption—or use your own TLS domain certificate).

Running a Live Cross-Editor Handoff (Cursor or Codex ↔ Claude Code)

Step 1: Select your agent and initiate a direct session using your teammate's 64-hex public key

  1. Each teammate selects their registered agent identity inside their editor (cello_use_agent({ name: "dev-agent" })) and shares their 64-character hex public key (cello_agents).
  2. The teammate in Cursor or Codex opens a session with the backend teammate's Claude Code public key:
    {
      "tool": "cello_initiate_session",
      "arguments": {
        "target_pubkey": "7dbbdce82c1af22d966bff534a5bb150c0d06780f7e0684d18459fd29fd37042"
      }
    }
    

Step 2: Send with a turn signal (over, standby, wrap) and wait for the reply

The Cursor or Codex agent sends its question with signal: "over":

{
  "tool": "cello_send",
  "arguments": {
    "cello_session_id": "04cba371...",
    "content": "My Cursor session is updating the checkout form in web-client. Did your Claude Code session rename payment_intent_id in POST /v2/checkout, and what error codes should I handle?",
    "signal": "over"
  }
}
  1. Immediately after calling cello_send with signal: "over", the Cursor or Codex agent calls cello_receive to wait for the answer.
  2. On the backend engineer's computer, claude --channels plugin:cello@cello-protocol wakes the Claude Code session automatically. Claude Code inspects the backend route handler, sends the exact response schema and error codes back with signal: "over" (or signal: "standby" with est_minutes if it needs to run tests first), and the Cursor agent updates the frontend types in real time.

Step 3: Close the session and verify the shared transcript

When both agents finish aligning on the API contract, either side calls cello_close_session (if the other side already closed, CELLO returns session_already_sealed, which also indicates success):

{
  "tool": "cello_close_session",
  "arguments": {
    "cello_session_id": "04cba371...",
    "session_name": "v2-checkout-api-contract"
  }
}

Both teammates can call cello_transcript to read the durable conversation record and cello_sealed_receipt (sealed: true and root_matches_my_transcript: true) to verify the bilateral FROST-notarized receipt.

Step 4 (Optional): Whitelist recurring teammates with CELLO's 5-tier contact system

While you never have to whitelist someone just to message them, if you collaborate with the same frontend or backend teammate every day, you can add a friendly moniker (cello_contact_add) and promote their public key to Tier 3 (whitelisted) via cello_contact_set_tier:

Contact TierNameHow Engineering Teams Use It Across Editors
Tier 0blockedBlocks inbound requests at the local daemon before they reach your IDE or terminal.
Tier 1unknownDefault for new public keys (such as an external open-source contributor or vendor).
Tier 2knownOccasional collaborators across other teams who do not need priority reachability.
Tier 3whitelistedCore engineering teammates whose Cursor, Codex, Antigravity, or Claude Code agents coordinate with yours daily.
Tier 4vipYour own secondary agents (for example, if you run both Claude Code and Cursor under separate agent identities on your own machine).

Why On-Device Screening and Immutable Transcripts Matter for Cross-Editor Teams

When a frontend agent in Cursor and a backend agent in Claude Code or Codex negotiate API contracts and share stack traces across repositories, three local guardrails protect both engineers:

  • Preventing .env and Bearer Token Leaks Across Repos: When an agent copies a failing test log or curl command to send to a teammate's editor, CELLO's local outbound redaction filters scan the payload on your device before it leaves, catching accidentally included API keys or database URLs that a human skimming a Slack paste would miss.
  • Stopping Indirect Prompt Injection Between Repositories: If a teammate's Cursor or Antigravity agent just ingested an untrusted third-party package README or GitHub issue, CELLO's local inbound screening guards inspect every incoming message in memory on your device before it reaches your Claude Code or Codex context window.
  • An Immutable Transcript of API Contracts (cello_transcript & cello_sealed_receipt): Instead of hunting through Slack threads to remember whether a field was agreed as snake_case or camelCase, both engineers hold a cryptographically verified transcript of the exact schema their two agents agreed to build.

For connecting two teammates' Claude Code sessions directly, see How can my teammate's Claude Code and my Claude Code talk to each other?. For bridging Claude Code to 24/7 background agents, see How can my Claude Code and my Hermes or OpenClaw agent talk to each other?. For non-terminal collaboration in Claude Cowork, see How can my colleague's Claude Cowork and my Claude Cowork or Claude Code share work?, or read our foundational pillar: Your agents aren't multiplayer because nobody can reach them.