The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Dibs listing page.
Call dibs on files. Run parallel coding agents without collisions.
dibs is a coordination layer for AI coding agents that share a repository: file claims with expiry, enforcement hooks, agent presence, handoff notes, and a git-native knowledge base. One static binary — no server, no database, no background processes.
Overview · Demo · How it works · Installation · Usage · Enforcement · Lessons · MCP server · Comparison · FAQ

Running several coding agents — Claude Code, Codex, Cline, Cursor — against one repository in parallel is now a common workflow, typically with one git worktree per agent. The sessions share no state: an agent cannot see what its peers are doing, and two agents that touch the same files produce silent overwrites and unmergeable diffs.
dibs provides the missing coordination primitives:
| Problem | What dibs does |
|---|---|
| Two agents edit the same file; last write wins. | Claims are checked before editing, and hooks can block colliding edits outright. |
| No visibility into other sessions. | dibs status lists every agent, claim, reason, and expiry. |
| A crashed agent leaves stale locks. | Claims are leases with a TTL. They expire on their own; there is nothing to clean up and no way to deadlock. |
| Handoffs between agents are ad hoc. | dibs note broadcasts a message to every agent on the repository, with per-agent read tracking. |
| Knowledge is lost between sessions. | Lessons are markdown files under .dibs/lessons/, committed with the repository and searched with BM25. |
The design rationale is covered in more depth in the introduction post: Why Parallel Coding Agents Need a Coordination Layer.
Two agents, one repository:
With the Claude Code hook installed, an edit that violates a claim is blocked before it happens, and the model is told why:
dibs relies on a property of git worktrees: every worktree of a repository
shares a single common directory (git rev-parse --git-common-dir). State
written there is visible to all worktrees immediately, without commits, and
never appears in git status.
--agent, then DIBS_AGENT, then a stable
name derived from the worktree path — so each worktree has a consistent
identity with zero configuration.dibs log).Prebuilt binaries for Linux, macOS, and Windows (amd64/arm64) are on the releases page. Building from source requires Go 1.25+; runtime requires git.
A multi-arch container image is published to GHCR — mount your repository
at /workspace:
The same image builds locally from the included Dockerfile (docker build -t dibs .).
| Command | Description |
|---|---|
dibs claim <pattern>... [--reason ...] [--ttl 30m] | Lease files or globs. Default TTL 30m, maximum 24h. |
dibs release [pattern]... [--all] | Release leases. Bare dibs release releases everything you hold. |
dibs renew [--ttl 30m] | Extend all of your leases. |
dibs check <path>... | Report whether paths are covered by another agent's lease. |
dibs status [--json] | Agents, claims, and unread note count. |
dibs note <message> | Broadcast a note to all agents on the repository. |
dibs notes | Read notes and mark them read. |
dibs log [-n 20] | Show recent journal events. |
dibs lesson add|list|show|search | Manage the lessons knowledge base. |
dibs mcp | Run the MCP server on stdio. |
dibs hook install|uninstall | Manage enforcement hooks. |
dibs whoami, dibs version | Identity and build information. |
Exit codes: 0 ok/free · 1 error · 2 denied or held by another agent.
All state-reading commands accept --json for scripting.
Protocol adherence that depends on a model remembering instructions degrades under context pressure. dibs therefore supports enforcement at two levels, both opt-in:
dibs hook install claude registers a PreToolUse
hook. When an agent attempts to edit a file covered by another agent's
claim, the tool call is blocked (exit code 2) and the model receives a
message naming the holder, their reason, and the expiry. Agents
consistently adjust course when given this context.dibs hook install pre-commit registers a git hook that
rejects commits touching files claimed by another agent.Hook installation is additive and idempotent: existing entries in
.claude/settings.json and existing git hooks are preserved, and
dibs hook uninstall claude removes exactly what was added. Both hooks
fail open — if dibs cannot run, editing and committing proceed normally.
Lessons capture what an agent learned so the next session does not rediscover it:
Lessons are markdown files with YAML frontmatter under .dibs/lessons/:
git pull; there is no per-machine database to synchronize.dibs mcp runs a stdio MCP server, so agents coordinate through typed
tools rather than shell commands. The server instructions and tool
descriptions encode the protocol (claim before editing, release when done,
leave notes, record lessons):
| Tool | Purpose |
|---|---|
dibs_claim | Claim patterns with a reason and TTL; returns GRANTED or DENIED with holder details. |
dibs_check | Report whether paths are free or held. |
dibs_release | Release claims. |
dibs_status | Agents, claims, and unread notes. |
dibs_note / dibs_notes | Broadcast and read handoff notes. |
dibs_lesson_add / dibs_lesson_search | Write and search the knowledge base. |
Client configuration:
Any MCP client with stdio transport is supported.
Adjacent tools solve different problems; the table shows where dibs fits.
| dibs | Server-based orchestration platforms | beads | claude-squad / vibe-kanban | |
|---|---|---|---|---|
| Primary job | coordination + shared lessons | memory + orchestration suites | issue tracking as agent memory | running and managing sessions |
| File claims with expiry | ✅ | ✅ via a central server | ❌ | ❌ |
| Blocks colliding edits | ✅ hooks | ❌ advisory | ❌ | ❌ (isolation via worktrees) |
| Cross-worktree visibility | ✅ instant, via .git common dir | while the server is running | n/a | creates the worktrees |
| Runtime dependencies | none | server + web UI + database | none | varies |
| Memory search | BM25 over in-repo files | vector embeddings | issue graph | ❌ |
| Installation | single static binary | docker compose stack | single binary | binary / app |
dibs composes with these tools rather than replacing them. It pairs
naturally with beads for task
tracking (dibs claim src/auth --reason "bd-142: refactor auth") and with
any session manager, since coordination is independent of how sessions are
launched.
What if an agent never calls dibs at all? Install the hooks. The Claude Code hook checks every file-modifying tool call regardless of what the model remembers; the pre-commit hook catches everything else at commit time.
What happens when an agent crashes while holding a claim? The claim expires after its TTL (default 30 minutes). The expiry is recorded in the journal.
Is dibs useful with a single agent? Yes, in a reduced role: lessons provide persistent knowledge across sessions, and the journal provides an audit trail of what was claimed and when.
Why not git lfs locks or lock files committed to the repository?
LFS locks require a server and do not expire; committed lock files create
commit noise and are invisible to uncommitted worktrees. Neither supports
glob patterns or communicates context to the blocked agent.
dibs tui — live terminal dashboard of agents and claimsdibs claim --wait — block until a lease becomes freenpx dibs and MCP registry listingContributions are welcome. The project intentionally stays small: stdlib plus three dependencies, no daemons, no databases. See CONTRIBUTING.md for guidelines and docs/protocol.md for the full coordination protocol.