Using Concord with Codex
August 21, 2026 · View on GitHub
1. Install
npm install -g @concord-ai/concord-mcp
2. Set up your repo
concord setup
This creates .concord/ and registers the MCP server in your Codex config
(~/.codex/config.toml, or $CODEX_HOME/config.toml when that is set):
[mcp_servers.concord]
command = "concord-mcp"
and writes a Concord block into AGENTS.md (and .codex/concord.md) describing
when to claim work, share task context, and hand off. The rest of your config —
other tables, and the comments around them — is left as-is, and re-running is a
no-op. Pass --no-mcp to write only the instructions and add the table above
yourself.
Note this is the one file concord setup writes outside the repo, since Codex
keeps MCP servers in user-global config rather than per-project. Refer to the
current Codex MCP documentation if the config format has changed.
3. Use it
Codex should call start_work before editing, update_work while working, and
inspect_work when resuming or coordinating. Assignments, acceptance, and
handoffs use transfer_work with the task's current version. Before a PR it
calls finish_work with outcome: "review_ready" and the evidence needed for
review. Track it from your terminal:
concord status
concord doctor
concord setup installs lifecycle hooks and attempts to bootstrap Codex's
managed app-server daemon with remote control enabled. On SessionStart the hook
launches a per-session Concord bridge. The bridge uses the official
turn/steer request with expectedTurnId while a turn is active and
turn/start while idle. If the daemon or bridge probe fails, the endpoint keeps
the hook-based pull fallback and reports that the message is queued instead of
claiming immediate delivery.
Codex app-server delivery is version-gated to the verified protocol baseline.
Run concord adapters doctor after upgrades; unsupported_version deliberately
fails closed until the adapter contract is updated.
Bare Codex CLI does support session-owned background terminals (visible through
/ps and stoppable with /stop), but terminal completion does not start a new
model turn. Codex's asynchronous hook contract has the same boundary: output is
delivered at the next safe point during an active turn, or waits for the next
user turn when idle. A background concord inbox watch therefore cannot replace
the app-server controller for idle wakeup. Concord uses turn/steer for a busy
turn and turn/start for an idle thread instead. See the official
Codex developer commands
and hooks behavior.
Codex asks you to trust newly installed hooks. Until they are trusted, the bridge cannot learn the native session id and delivery is degraded.