agent-coord

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.

Category
Visit Server

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 PreToolUse hook 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.ts is 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-coord stops 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

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.

Official
Featured
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured