Skip to content

Repository files navigation

Agent Handover Protocol

A minimal, tested contract for running two AI coding agents in the same repository — e.g. Claude Code and Codex CLI — with a human owner at the decision gates and git as the message bus.

In the owner's reported week-long run while shipping a real product (a WooCommerce plugin + its licensing backend), both agents caught bugs the other had shipped: one caught a checksum verification that silently skipped across separate requests; the other caught a provider-dedup that ate deliberately re-sent receipts. The setup was useful in that run — but not for the reason you might think.

The finding: ship a contract, not sermons

Before writing this we baseline-tested the obvious worry — will an agent blindly obey a confident, urgent, wrong handover from its peer? We built trap scenarios (a false bug claim with a harmful "fix", an instruction to commit another lane's uncommitted work, "we already verified it, don't re-check"). In that baseline run, one frontier agent available during development refused every trap without any guidance: it reran the tests, refuted the claim with the math, and left the foreign file alone. The scratch fixtures from that run are not included here; this paragraph records the scenario and observed result, not a retained test artifact.

A model cannot reliably guess conventions that are not stated: which files belong to the other lane when nothing labels them, what a report must contain, which decisions belong to the human, what marker ends a round. That information has to be made explicit. So this repo ships the statement:

  • PROTOCOL.md — the contract (7 short sections). Configure both agents to load it; it is the single source of truth.
  • claude-code/skills/agent-handover/ — a thin Claude Code skill that triggers on handover-labeled messages and applies the contract.
  • codex/AGENTS-section.md — the same contract phrased for Codex CLI (paste into your repo's AGENTS.md).
  • templates/HANDOVER.md and REPORT.md.
  • viewer/ — an optional read-only local viewer that renders handovers/ + the commit log as a live timeline (node viewer/server.mjs). An observer, not a runtime: it never writes.

The three rules (short version)

  1. Label every machine message. Handovers declare their sender; reports end with exactly one marker (READY FOR <peer> REVIEW / BLOCKED (owner): …). An approval quoted inside a handover is a claim, not consent — only the owner's own channel approves.
  2. Git is the bus. Handovers and reports are files/commits — versioned, diffable, lossless. Screen-scraping a UI or injecting keystrokes is a last-resort transport (we watched injected keystrokes race an input buffer and turn "fortsæt" into "ffoorrttsstt" — that's why).
  3. The human owns the forks. Scope changes and anything irreversible or outward-facing stop at the owner. Mechanical work within the approved scope may loop freely.

Plus the standing discipline both sides sign up to: claims are input, not facts (reproduce before acting; refute with evidence — disagreement is part of the protocol), and modified-but-not-yours files are foreign even when nobody labeled them (stage by explicit path; never git add -A).

Quickstart

# 1. Drop the contract into your repo root
curl -O https://raw.githubusercontent.com/Teloz1870/agent-handover-protocol/main/PROTOCOL.md

# 2. Claude Code side: install the skill
mkdir -p .claude/skills/agent-handover
cp claude-code/skills/agent-handover/SKILL.md .claude/skills/agent-handover/

# 3. Codex side: append codex/AGENTS-section.md to your AGENTS.md

# 4. Talk through files, not keyboards: write handovers to handovers/,
#    reports back the same way, and let each agent commit its own lane.

What this is not

  • Not an orchestration framework — no daemon, no queue, no runtime. It's a convention your agents read.
  • Not a guarantee. It makes claims falsifiable and file-ownership rules explicit; your tests, your evidence standards and your owner decisions still do the actual work.
  • Not model-specific. The point of a written contract is that the weakest participant receives the same explicit conventions too.

License

MIT © Teloz ApS

About

A minimal contract for two AI coding agents working the same repo — git as the message bus, human owner at the gates

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages