A Model Context Protocol server that provides shared workspace infrastructure for AI agents, enabling presence awareness, task coordination, ownership tracking, and evidence-rich handoffs across repositories. Built for multi-agent coding workflows, it replaces implicit chat history with explicit assignments, live rosters, and structured review state.
"Google Workspace" for your AI Agents
README
⚠️ Early and under active development. The public surface is five workflow tools covering presence, task memory, versioned ownership, and evidence-rich handoffs.
One workspace. Every agent.
Google Workspace gave human teams a shared place to see, create, and coordinate work. Concord brings that collaboration layer to coding agents — local-first, model-agnostic, and built around the repository.
| Without Concord | With Concord |
|---|---|
| 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 | A live roster and work-state show what is happening now |
| Review starts with “what changed?” | Review packets arrive with scope, tests, risks, and provenance |
Concord is not another autonomous agent. It is the shared workspace around your agents: presence, task memory, ownership, handoffs, and review state through one small MCP server.
Quick start
npm install -g @concord-ai/concord-mcp
cd /path/to/your/repository
concord setup
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 Claude Code, Codex,
Cursor, Gemini CLI, and Grok Build 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. Restart clients afterwards so they load new config.
There is no universal
/concordslash command — commands are client-specific. Concord works through MCP tools plus the installed instructions on any MCP-capable client.
Upgrade
When a new Concord version is available, update the global package and confirm the installed version:
npm install -g @concord-ai/concord-mcp@latest
concord --version
Concord does not auto-update. Upgrading preserves each repository's local
.concord/ workspace; any required database migrations run automatically when
the workspace is next opened. The interactive concord CLI checks npm at most
once per day and prints an update command when a newer stable release is
available. Set CONCORD_NO_UPDATE_CHECK=1 to disable this best-effort check.
The tools
| 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.
Migrating from the granular surface
The five tools replace the earlier public names; there are no legacy aliases.
Update the package and re-run concord setup to refresh generated
instructions. concord doctor reports stale instruction blocks.
| Earlier tools | Replacement |
|---|---|
register_agent, claim_work |
start_work |
accept_task |
start_work or transfer_work with action: "accept" |
get_work_state, get_task_context |
inspect_work |
update_task |
update_work |
assign_task, release_task, reassign_task |
transfer_work |
offer_handoff, accept_handoff, decline_handoff |
transfer_work |
handoff, review_ready, close_task, reopen_task |
finish_work or transfer_work |
What you get
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)
CLI
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.
Try the demo
pnpm demo
Runs the Whack-a-Mole live demo: Claude and Codex claim overlapping work, resolve it through a live prompt/reply, build a playable app, transfer ownership with evidence, and hand the result to a separate Claude Code reviewer. Three visible tmux panes put both builders on the left and the full-height shared dashboard on the right; the reviewer runs in the background while the browser hot-reloads the result.
What this is / is not
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?
Contributing
See CONTRIBUTING.md and CLAUDE.md. This
repo is strictly typed (no any, no typecasts) and modular. Good first issues
are labelled good first issue.
Star History
Privacy & telemetry
Concord sends anonymous product-usage metadata to getconcord.ai so we can
measure active installations, feature adoption, errors, and performance. Events
contain random installation/session identifiers, an irreversible per-install
workspace pseudonym, Concord/Node/platform versions, normalized MCP client
metadata, and MCP tool or CLI command names, outcomes, and durations.
Concord never sends code, raw file or repository paths, remotes, usernames,
task or agent identifiers, command arguments, tool inputs/outputs, or task
content. 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.
License
Comments (0)
Sign in to join the discussion.
No comments yet
Be the first to share your take.