agent-coord
A zero-dependency MCP server that allows multiple coding agents to coordinate work on the same repository using file locks, task claims, and status messages.
README
agent-coord
A tiny, zero-dependency coordination layer that lets multiple coding agents β Claude Code, Codex, or anything that speaks MCP β work on the same repository at the same time without clobbering each other.
It solves a specific, real problem: when two agents run in parallel (e.g. each in
its own git worktree), they edit the same files, claim the same task, and
generally trip over each other. agent-coord gives them a shared board to
coordinate through:
- π File locks β reserve repo-relative globs before editing; others see them.
- π§© Task claims β claim a plan/task id so the other agent picks something else.
- π£ Status messages β a lightweight broadcast channel between agents.
- π‘οΈ Hard enforcement on Claude Code β a
PreToolUsehook blocks edits to a file another agent has locked, and auto-claims files Claude touches.
No SDK, no npm install, no database. The board is a single JSON file
(~/.agent-coord/board.json) guarded by an atomic, multi-process-safe mutex.
How it works
Claude Code βββ βββ Codex
(MCP client) β stdio MCP ββββββββββββββ β (MCP client)
βββββββββββββββββΆβ server.mjs ββββββ€
PreToolUse β βββββββ¬βββββββ β (cooperative:
hook (guard) β β β calls the tools)
blocks edits ββ βββββββΌβββββββ β
to locked files β board.json ββββββ
β (shared) β
ββββββββββββββ
- Every agent points at the same board file, which lives outside any worktree β so locks made in worktree A are visible in worktree B.
- Locks are keyed on the repo-relative path (+ a project id derived from the
git top-level dir), so
src/cart.tsis the same lock in every worktree of the repo, and unrelated repos never collide. - Claude Code gets enforcement (the hook can deny an edit). Codex has no pre-tool hook, so it cooperates voluntarily by calling the MCP tools β which is why the agent instructions (below) matter for it.
Best paired with separate git worktrees per agent. With one worktree per agent, git itself handles file merges;
agent-coordstops the two agents from duplicating work or racing the same file before it's committed.
Install
git clone https://github.com/ThatHunky/agent-coord
cd agent-coord
node test/smoke.mjs # optional: verify (no deps required)
Requires Node β₯ 18. There is nothing to build.
Wire up Claude Code
Register the MCP server (user scope, identity = claude):
claude mcp add agent-coord -s user \
-e AGENT_COORD_AGENT=claude \
-- node /ABSOLUTE/PATH/TO/agent-coord/src/server.mjs
Add the enforcement hook to ~/.claude/settings.json (see
examples/claude-settings.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write|MultiEdit|NotebookEdit",
"hooks": [
{
"type": "command",
"command": "AGENT_COORD_AGENT=claude node /ABSOLUTE/PATH/TO/agent-coord/src/guard.mjs"
}
]
}
]
}
}
Wire up Codex
Add to ~/.codex/config.toml (see examples/codex-config.toml):
[mcp_servers.agent_coord]
command = "node"
args = ["/ABSOLUTE/PATH/TO/agent-coord/src/server.mjs"]
env = { AGENT_COORD_AGENT = "codex" }
Tell both agents to use it
Paste docs/AGENTS-snippet.md into your project's
CLAUDE.md and AGENTS.md so each agent knows the protocol.
MCP tools
| Tool | What it does |
|---|---|
coord_status |
Show the board: active locks, task claims, recent messages. Call first. |
coord_claim_paths |
Reserve repo-relative path globs; returns cross-agent conflicts. |
coord_release_paths |
Release a lock (lockId) or all of yours (all: true). |
coord_claim_task |
Claim a task/plan id; fails if another agent holds it. |
coord_complete_task |
Mark a claimed task done. |
coord_post |
Broadcast a status message. |
coord_whoami |
Show this agent's identity, project, and board path. |
CLI (for humans)
Watch what both agents are doing, live:
agent-coord watch # live board for the current repo
agent-coord status [project] # one-shot
agent-coord post "message" # broadcast (set AGENT_COORD_AGENT first)
agent-coord locks # every lock across all projects
agent-coord clear # drop all of your agent's locks
(Run via node src/cli.mjs β¦, or npm link to get the agent-coord binary.)
Configuration
All optional, via environment variables:
| Variable | Default | Meaning |
|---|---|---|
AGENT_COORD_AGENT |
unknown |
This agent's identity (claude, codex, β¦). Set this. |
AGENT_COORD_DIR |
~/.agent-coord |
Where the shared board lives. |
AGENT_COORD_PROJECT |
git top-level basename | Project id for scoping locks. |
AGENT_COORD_LOCK_TTL_MINUTES |
120 |
Default lock expiry. |
AGENT_COORD_AUTOCLAIM |
1 |
Claude hook auto-claims edited files (0 to disable). |
AGENT_COORD_AUTOCLAIM_MINUTES |
20 |
TTL for auto-claimed locks. |
AGENT_COORD_MAX_MESSAGES |
50 |
Message ring-buffer size. |
Design notes & limits
- Fail-open. The Claude hook never blocks your work on a bug β any unexpected error allows the edit. The only thing that denies is a genuine, unexpired lock held by a different agent.
- Locks expire. They're a coordination hint with a TTL, not a permanent reservation, so a crashed agent can't wedge the repo.
- Codex is cooperative, not enforced. Without a pre-tool hook, Codex respects the board only by calling the tools. The agent instructions make that reliable.
- One machine. The board is a local file; this is for agents sharing a filesystem, not across machines.
License
MIT β see LICENSE.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.