{"slug": "show-hn-concord-let-claude-code-codex-and-cursor-talk-to-each-other", "title": "Show HN: Concord – let Claude Code, Codex and Cursor talk to each other", "summary": "Concord, an open-source, local-first communication layer for AI coding agents, lets Claude Code, Codex, Cursor, Gemini CLI, and Grok Build exchange live messages, claim files to avoid overlapping edits, and hand off tasks with evidence through a single MCP server. The tool, available via npm as @concord-ai/concord-mcp, sets up a shared workspace and registers the server across multiple agent clients, enabling agents in different harnesses to coordinate without human relay.", "body_md": "**Let Claude Code, Codex, Cursor, Gemini CLI, and Grok Build talk to each other.**\n\nThe open-source, local-first communication and coordination layer for AI coding agents. Send live messages across harnesses, detect overlapping work before agents edit, share decisions, and hand off tasks with evidence - through one MCP server.\n\n[Demo](#see-it-work) ·\n[Quick start](#quick-start) ·\n[Supported agents](#supported-agents) ·\n[Website](https://getconcord.ai) ·\n[Contributing](/Get-Concord-AI/concord-mcp/blob/main/CONTRIBUTING.md)\n\nTwo agents in different harnesses can discover each other, exchange messages, and divide work without a human relaying context between them:\n\n```\nClaude Code → Concord   Claim src/app/page.tsx\nCodex       → Concord   Claim src/app/page.tsx\nConcord     → Codex     Overlap: Claude Code already owns this file\nCodex       → Claude    I'll take src/app/api instead. Does that work?\nClaude      → Codex     Yes. I'll keep the page and use your API contract.\n```\n\nRun the [real Claude Code ↔ Codex demo](/Get-Concord-AI/concord-mcp/blob/main/examples/whack-a-mole) to watch both\nagents resolve an overlapping claim through a live prompt/reply, build a playable\napp, transfer ownership, and hand the result to an independent reviewer.\n\n```\nnpm install -g @concord-ai/concord-mcp\ncd /path/to/your/repository\nconcord setup\n```\n\nRestart your agent clients, then ask two of them to work in the same repository. Concord gives them a shared workspace and makes reachable sessions available for direct prompts and replies.\n\n## What `concord setup`\n\nchanges\n\n`concord setup`\n\ncreates the local `.concord/`\n\nworkspace, registers the MCP server\nfor Claude, Cursor, Gemini, Grok, and Codex (`.mcp.json`\n\n, `.cursor/mcp.json`\n\n,\n`.gemini/settings.json`\n\n, `.grok/config.toml`\n\n, and `~/.codex/config.toml`\n\n) and writes\nConcord's tool instructions into your client configs (`CLAUDE.md`\n\n, `AGENTS.md`\n\n,\n`.codex/`\n\n, `.cursor/rules/`\n\n). It merges into existing config rather than replacing\nit and is safe to re-run.\n\nSetup also detects supported clients and attempts to install their global Concord\nadapters independently. Use `--no-adapters`\n\nto skip that step or\n`--require-adapters`\n\nin managed installs that should fail on degraded support.\nPass `--no-mcp`\n\nto write only the workspace and instructions while managing MCP\nregistration yourself.\n\n| Agent | Integration guide |\n|---|---|\n| Claude Code |\n|\n\n[Setup and delivery](/Get-Concord-AI/concord-mcp/blob/main/docs/codex.md)[Setup and delivery](/Get-Concord-AI/concord-mcp/blob/main/docs/cursor.md)[Setup and delivery](/Get-Concord-AI/concord-mcp/blob/main/docs/gemini-cli.md)[Setup and delivery](/Get-Concord-AI/concord-mcp/blob/main/docs/grok-build.md)There is no universal\n\n`/concord`\n\nslash command — commands are client-specific. Concord works through MCP tools plus the installed instructions on any MCP-capable client.\n\nLive delivery depends on the receiving harness and session state. Run\n`concord adapters status`\n\nto see which installed agents are reachable and how\nmessages will be delivered.\n\nMessaging gets agents talking. Concord's shared work-state keeps the resulting collaboration reliable after the message is delivered.\n\n| Without Concord | With Concord |\n|---|---|\n| Agents cannot contact peers in another harness | Agents send direct, replyable prompts across supported clients |\n| Agents discover collisions after editing | Agents claim files and modules before work begins |\n| Context disappears when a session ends | Decisions, assumptions, and findings stay attached to the task |\n| Ownership is implied by chat history | Assignments and handoffs are explicit and acknowledged |\n| Humans reconstruct progress from branches and diffs | Review packets arrive with scope, tests, risks, and provenance |\n\nConcord is not another autonomous agent or orchestrator. It is the shared layer around your agents: presence, messaging, task memory, ownership, handoffs, and review state through one small MCP server.\n\n| Tool | Purpose |\n|---|---|\n`start_work` |\nregisters presence, claims or accepts one task, and reports scope overlaps before editing |\n`inspect_work` |\nreads workspace/task state, an agent inbox/outbox, or a durable prompt/reply thread |\n`update_work` |\nrecords task context or immediately prompts/replies to another promptable workspace agent |\n`transfer_work` |\nassigns, accepts, declines, releases, reassigns, offers handoffs, or reopens versioned work |\n`finish_work` |\nrecords evidence and optionally marks a task review-ready, complete, or closed |\n\nWrites accept an `agent_id`\n\n, which keeps presence live just by working.\n`inspect_work`\n\nshows **who is here** and flags **stale claims** — an active\nclaim whose owning agent has gone away without handing off.\n\nFor live agent-to-agent communication, run `concord setup`\n\n, then restart existing\nclient sessions once. A prompt uses `update_work`\n\nwith `operation: \"prompt\"`\n\n, the\ntarget `to_agent_id`\n\n, content, and an `idempotency_key`\n\n; a reply uses\n`operation: \"reply\"`\n\nand `reply_to_message_id`\n\n. A receipt-bearing adapter steers\na busy turn or starts an idle turn. Hook-only integrations leave a durable pull\nmessage and state that limitation in the result. Delivery fails immediately\nwhen the named agent has no reachable endpoint; Concord does not silently\nreroute it.\n\n`concord adapters status`\n\nreports each harness separately, including its\nmonitor/controller kind, verified reachability, required action, and version\nprobe result. `concord adapters install`\n\n, `doctor`\n\n, and `uninstall`\n\nprovide the\nsame global lifecycle outside repository setup.\n\nConcord resolves the repository workspace automatically. Operations return its\n`workspace_id`\n\nand repository root so a client can detect a misrouted call; the\nid can be passed explicitly when one server is coordinating multiple roots.\n\nLifecycle-changing operations use the task's monotonic `version`\n\nas\n`expected_version`\n\n. If two agents act on the same version, only the first\ntransition succeeds. Assignment leaves work in `assigned`\n\nuntil the named agent\nuses `transfer_work`\n\nwith `action: \"accept\"`\n\n; a handoff offer likewise keeps\nownership with the sender until the recipient accepts. Every ownership change\nis retained in an append-only audit history.\n\nSQLite is the local source of truth, kept in the `.concord/`\n\nat the **root of\nthe repo** the work is happening in. The MCP server resolves that root from\n`CONCORD_REPO_ROOT`\n\nif set, then Claude Code's `CLAUDE_PROJECT_DIR`\n\n(which Claude\nCode sets automatically, even for a user-scoped server), then its working\ndirectory — so every agent in one repo shares one store. Set `CONCORD_REPO_ROOT`\n\nwhen running the server somewhere its working directory is not inside the repo.\n\nLinked Git worktrees follow Git's `commondir`\n\nmetadata to the primary checkout,\nso the main checkout and all linked worktrees intentionally share one Concord\ndatabase and workspace id.\n\nTo restrict explicit workspace selection, set `CONCORD_ALLOWED_ROOTS`\n\nto a\npath-delimited list of allowed repository roots. Without an allowlist, decoded\nroots must still exist and be directories.\n\n`concord setup`\n\nadds `.concord/`\n\nto the\nrepository's `.gitignore`\n\n, so the generated workspace stays local by default.\nTeams that want selected artifacts in PRs can remove that rule or force-add the\nhuman-readable files:\n\n```\n.concord/\n├── concord.db          local source of truth\n├── HANDOFF.md          human-readable handoff\n├── REVIEW_PACKET.md    review-ready evidence\n└── WORK_STATE.json     generated export (optional)\n```\n\nConcord supports both typed MCP tools and a regular CLI. MCP-capable agents can\ncall the tools directly; humans and CLI-oriented agents can work with the same\nshared workspace through `concord`\n\ncommands.\n\n```\nconcord setup                # set up local state, instructions, and MCP clients\nconcord status               # roster, active work, overlaps, stale claims, review-ready\nconcord dashboard            # live, keyboard-driven view of agents, tasks, alerts, and activity\nconcord who                  # which agents are present and what they are working on\nconcord tasks                # list all tracked tasks\nconcord handoff <task-id>    # print the latest handoff\nconcord review-packet <id>   # print the latest review packet\nconcord export markdown      # regenerate .concord/ artifacts\nconcord doctor               # workspace checks + per-task tool adoption\nconcord adapters status      # global harness delivery capability matrix\n\nconcord --repo ../project status        # select by repository path from anywhere\nconcord --workspace ws_... status       # select an id returned by a Concord operation\n```\n\n`--repo`\n\nand `--workspace`\n\nare global, mutually exclusive options. The CLI uses\nthe same `CONCORD_REPO_ROOT`\n\n→ `CLAUDE_PROJECT_DIR`\n\n→ working-directory priority\nand the same linked-worktree canonicalization as MCP.\n\n`concord dashboard`\n\nis a read-only, full-screen local TUI. It refreshes from the\nshared SQLite workspace every second while keeping agents, tasks, alerts,\ncontext, and timeline inside a fixed terminal viewport. Use `Tab`\n\nto change\npanes, `j`\n\n/`k`\n\nor the arrow keys to select work, `/`\n\nto filter, `?`\n\nfor help,\nand `q`\n\nto quit.\n\n```\nnpm install -g @concord-ai/concord-mcp@latest\nconcord --version\n```\n\nConcord checks daily and surfaces available updates in the CLI, MCP tools, and\ndashboard; `concord setup`\n\ncan install one with confirmation, and\n`CONCORD_NO_UPDATE_CHECK=1`\n\ndisables checks.\n\nShared work-state and task memory for coding agents using the same local\ncheckout. **Not** an orchestrator, code reviewer, hosted sync service, memory\nvector DB, or autonomous coding agent.\n\nSee also: [Why not just use markdown?](/Get-Concord-AI/concord-mcp/blob/main/docs/why-not-markdown.md)\n\nSee [ CONTRIBUTING.md](/Get-Concord-AI/concord-mcp/blob/main/CONTRIBUTING.md) and\n\n[. This repo is strictly typed (no](/Get-Concord-AI/concord-mcp/blob/main/CLAUDE.md)\n\n`CLAUDE.md`\n\n`any`\n\n, no typecasts) and modular. Good first issues\nare labelled [.](https://github.com/Get-Concord-AI/concord-mcp/labels/good%20first%20issue)\n\n`good first issue`\n\nConcord sends product and coordination telemetry to `getconcord.ai`\n\n. It includes\nrandom installation/invocation identifiers; irreversible per-install workspace\nand task-flow pseudonyms; Concord/Node/platform versions; normalized client\nmetadata; operation names, outcomes, and durations; aggregate overlap/edit-guard\nresults; message delivery stages and latencies; task lifecycle transitions and\nelapsed time; and explicitly reported acceptance,\nintegration, human-intervention, and rework outcomes.\n\nConcord never sends code, raw file or repository paths, remotes, usernames, raw\ntask or agent identifiers, message identifiers or content, command arguments,\ntool inputs/outputs, or task content. The receiving server stores the request IP\naddress and derives/stores a country code. Those server-side fields currently\nhave no automatic expiry. Set `CONCORD_TELEMETRY_DISABLED=1`\n\n(or\n`DO_NOT_TRACK=1`\n\n) to disable telemetry. Delivery is best effort and can never\nmake a Concord operation fail.", "url": "https://wpnews.pro/news/show-hn-concord-let-claude-code-codex-and-cursor-talk-to-each-other", "canonical_source": "https://github.com/Get-Concord-AI/concord-mcp", "published_at": "2026-08-27 13:34:54+00:00", "updated_at": "2026-08-27 13:49:16.850087+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents"], "entities": ["Concord", "Claude Code", "Codex", "Cursor", "Gemini CLI", "Grok Build", "MCP"], "alternates": {"html": "https://wpnews.pro/news/show-hn-concord-let-claude-code-codex-and-cursor-talk-to-each-other", "markdown": "https://wpnews.pro/news/show-hn-concord-let-claude-code-codex-and-cursor-talk-to-each-other.md", "text": "https://wpnews.pro/news/show-hn-concord-let-claude-code-codex-and-cursor-talk-to-each-other.txt", "jsonld": "https://wpnews.pro/news/show-hn-concord-let-claude-code-codex-and-cursor-talk-to-each-other.jsonld"}}