# Show HN: Concord – let Claude Code, Codex and Cursor talk to each other

> Source: <https://github.com/Get-Concord-AI/concord-mcp>
> Published: 2026-08-27 13:34:54+00:00

**Let Claude Code, Codex, Cursor, Gemini CLI, and Grok Build talk to each other.**

The 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.

[Demo](#see-it-work) ·
[Quick start](#quick-start) ·
[Supported agents](#supported-agents) ·
[Website](https://getconcord.ai) ·
[Contributing](/Get-Concord-AI/concord-mcp/blob/main/CONTRIBUTING.md)

Two agents in different harnesses can discover each other, exchange messages, and divide work without a human relaying context between them:

```
Claude Code → Concord   Claim src/app/page.tsx
Codex       → Concord   Claim src/app/page.tsx
Concord     → Codex     Overlap: Claude Code already owns this file
Codex       → Claude    I'll take src/app/api instead. Does that work?
Claude      → Codex     Yes. I'll keep the page and use your API contract.
```

Run the [real Claude Code ↔ Codex demo](/Get-Concord-AI/concord-mcp/blob/main/examples/whack-a-mole) to watch both
agents resolve an overlapping claim through a live prompt/reply, build a playable
app, transfer ownership, and hand the result to an independent reviewer.

```
npm install -g @concord-ai/concord-mcp
cd /path/to/your/repository
concord setup
```

Restart 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.

## What `concord setup`

changes

`concord setup`

creates the local `.concord/`

workspace, registers the MCP server
for Claude, Cursor, Gemini, Grok, and Codex (`.mcp.json`

, `.cursor/mcp.json`

,
`.gemini/settings.json`

, `.grok/config.toml`

, and `~/.codex/config.toml`

) and writes
Concord's tool instructions into your client configs (`CLAUDE.md`

, `AGENTS.md`

,
`.codex/`

, `.cursor/rules/`

). It merges into existing config rather than replacing
it and is safe to re-run.

Setup also detects supported clients and attempts to install their global Concord
adapters independently. Use `--no-adapters`

to skip that step or
`--require-adapters`

in managed installs that should fail on degraded support.
Pass `--no-mcp`

to write only the workspace and instructions while managing MCP
registration yourself.

| Agent | Integration guide |
|---|---|
| Claude Code |
|

[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

`/concord`

slash command — commands are client-specific. Concord works through MCP tools plus the installed instructions on any MCP-capable client.

Live delivery depends on the receiving harness and session state. Run
`concord adapters status`

to see which installed agents are reachable and how
messages will be delivered.

Messaging gets agents talking. Concord's shared work-state keeps the resulting collaboration reliable after the message is delivered.

| Without Concord | With Concord |
|---|---|
| Agents cannot contact peers in another harness | Agents send direct, replyable prompts across supported clients |
| Agents discover collisions after editing | Agents claim files and modules before work begins |
| Context disappears when a session ends | Decisions, assumptions, and findings stay attached to the task |
| Ownership is implied by chat history | Assignments and handoffs are explicit and acknowledged |
| Humans reconstruct progress from branches and diffs | Review packets arrive with scope, tests, risks, and provenance |

Concord 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.

| Tool | Purpose |
|---|---|
`start_work` |
registers presence, claims or accepts one task, and reports scope overlaps before editing |
`inspect_work` |
reads workspace/task state, an agent inbox/outbox, or a durable prompt/reply thread |
`update_work` |
records task context or immediately prompts/replies to another promptable workspace agent |
`transfer_work` |
assigns, accepts, declines, releases, reassigns, offers handoffs, or reopens versioned work |
`finish_work` |
records evidence and optionally marks a task review-ready, complete, or closed |

Writes accept an `agent_id`

, which keeps presence live just by working.
`inspect_work`

shows **who is here** and flags **stale claims** — an active
claim whose owning agent has gone away without handing off.

For live agent-to-agent communication, run `concord setup`

, then restart existing
client sessions once. A prompt uses `update_work`

with `operation: "prompt"`

, the
target `to_agent_id`

, content, and an `idempotency_key`

; a reply uses
`operation: "reply"`

and `reply_to_message_id`

. A receipt-bearing adapter steers
a busy turn or starts an idle turn. Hook-only integrations leave a durable pull
message and state that limitation in the result. Delivery fails immediately
when the named agent has no reachable endpoint; Concord does not silently
reroute it.

`concord adapters status`

reports each harness separately, including its
monitor/controller kind, verified reachability, required action, and version
probe result. `concord adapters install`

, `doctor`

, and `uninstall`

provide the
same global lifecycle outside repository setup.

Concord resolves the repository workspace automatically. Operations return its
`workspace_id`

and repository root so a client can detect a misrouted call; the
id can be passed explicitly when one server is coordinating multiple roots.

Lifecycle-changing operations use the task's monotonic `version`

as
`expected_version`

. If two agents act on the same version, only the first
transition succeeds. Assignment leaves work in `assigned`

until the named agent
uses `transfer_work`

with `action: "accept"`

; a handoff offer likewise keeps
ownership with the sender until the recipient accepts. Every ownership change
is retained in an append-only audit history.

SQLite is the local source of truth, kept in the `.concord/`

at the **root of
the repo** the work is happening in. The MCP server resolves that root from
`CONCORD_REPO_ROOT`

if set, then Claude Code's `CLAUDE_PROJECT_DIR`

(which Claude
Code sets automatically, even for a user-scoped server), then its working
directory — so every agent in one repo shares one store. Set `CONCORD_REPO_ROOT`

when running the server somewhere its working directory is not inside the repo.

Linked Git worktrees follow Git's `commondir`

metadata to the primary checkout,
so the main checkout and all linked worktrees intentionally share one Concord
database and workspace id.

To restrict explicit workspace selection, set `CONCORD_ALLOWED_ROOTS`

to a
path-delimited list of allowed repository roots. Without an allowlist, decoded
roots must still exist and be directories.

`concord setup`

adds `.concord/`

to the
repository's `.gitignore`

, so the generated workspace stays local by default.
Teams that want selected artifacts in PRs can remove that rule or force-add the
human-readable files:

```
.concord/
├── concord.db          local source of truth
├── HANDOFF.md          human-readable handoff
├── REVIEW_PACKET.md    review-ready evidence
└── WORK_STATE.json     generated export (optional)
```

Concord supports both typed MCP tools and a regular CLI. MCP-capable agents can
call the tools directly; humans and CLI-oriented agents can work with the same
shared workspace through `concord`

commands.

```
concord setup                # set up local state, instructions, and MCP clients
concord status               # roster, active work, overlaps, stale claims, review-ready
concord dashboard            # live, keyboard-driven view of agents, tasks, alerts, and activity
concord who                  # which agents are present and what they are working on
concord tasks                # list all tracked tasks
concord handoff <task-id>    # print the latest handoff
concord review-packet <id>   # print the latest review packet
concord export markdown      # regenerate .concord/ artifacts
concord doctor               # workspace checks + per-task tool adoption
concord adapters status      # global harness delivery capability matrix

concord --repo ../project status        # select by repository path from anywhere
concord --workspace ws_... status       # select an id returned by a Concord operation
```

`--repo`

and `--workspace`

are global, mutually exclusive options. The CLI uses
the same `CONCORD_REPO_ROOT`

→ `CLAUDE_PROJECT_DIR`

→ working-directory priority
and the same linked-worktree canonicalization as MCP.

`concord dashboard`

is a read-only, full-screen local TUI. It refreshes from the
shared SQLite workspace every second while keeping agents, tasks, alerts,
context, and timeline inside a fixed terminal viewport. Use `Tab`

to change
panes, `j`

/`k`

or the arrow keys to select work, `/`

to filter, `?`

for help,
and `q`

to quit.

```
npm install -g @concord-ai/concord-mcp@latest
concord --version
```

Concord checks daily and surfaces available updates in the CLI, MCP tools, and
dashboard; `concord setup`

can install one with confirmation, and
`CONCORD_NO_UPDATE_CHECK=1`

disables checks.

Shared work-state and task memory for coding agents using the same local
checkout. **Not** an orchestrator, code reviewer, hosted sync service, memory
vector DB, or autonomous coding agent.

See also: [Why not just use markdown?](/Get-Concord-AI/concord-mcp/blob/main/docs/why-not-markdown.md)

See [ CONTRIBUTING.md](/Get-Concord-AI/concord-mcp/blob/main/CONTRIBUTING.md) and

[. This repo is strictly typed (no](/Get-Concord-AI/concord-mcp/blob/main/CLAUDE.md)

`CLAUDE.md`

`any`

, no typecasts) and modular. Good first issues
are labelled [.](https://github.com/Get-Concord-AI/concord-mcp/labels/good%20first%20issue)

`good first issue`

Concord sends product and coordination telemetry to `getconcord.ai`

. It includes
random installation/invocation identifiers; irreversible per-install workspace
and task-flow pseudonyms; Concord/Node/platform versions; normalized client
metadata; operation names, outcomes, and durations; aggregate overlap/edit-guard
results; message delivery stages and latencies; task lifecycle transitions and
elapsed time; and explicitly reported acceptance,
integration, human-intervention, and rework outcomes.

Concord never sends code, raw file or repository paths, remotes, usernames, raw
task or agent identifiers, message identifiers or content, command arguments,
tool inputs/outputs, or task content. The receiving server stores the request IP
address and derives/stores a country code. Those server-side fields currently
have no automatic expiry. Set `CONCORD_TELEMETRY_DISABLED=1`

(or
`DO_NOT_TRACK=1`

) to disable telemetry. Delivery is best effort and can never
make a Concord operation fail.
