relevo
The handoff between a MasterMind agent and its builders, drawn.
relevo automates the plan/report handoff between AI coding agents. You talk to the MasterMind; it hands work to builders — headless processes on this machine or on a server you enrolled — and relevo moves the files between them.
Two agent harnesses, and no terminal manager.
relevo needs one harness for the MasterMind and one for a builder
(opencode, claude,
agy, codex). Nothing to arrange on
screen: the builders run headless, on this machine or on a server you enrolled.
-
MasterMind
Your session — Claude Code, opencode… relevo never types into it.
relevo send --file plan.md— called mid-turn by the MasterMind, returns straight away -
relevo CLI
Called by the MasterMind through Bash or the plugin’s MCP tools:
bind,send,status,wait,done.stages
NNN-prompt.mdin the state directory -
state
relevo.dbunder~/.local/state/relevo/<name>/— the open round’sNNN-prompt.md,NNN-report.mdand emptyNNN-donemarker.the runner starts from
NNN-prompt.md -
builder
A fresh headless process per round — no tab, no memory across rounds — or one on a
relevo servehost you enrolled.writes
NNN-report.md, then an emptyNNN-done, back to disk -
relevo daemon
One reconciler, under systemd or launchd. It runs when no model does.
sees the marker and queues the report; the background
relevo waitwakes the MasterMind with it
outbound. The MasterMind calls relevo send and it returns inside the same turn.
inbound. The report lands after that turn has ended, when no model is running to notice it.
The outbound leg runs while the MasterMind is mid-turn. The inbound leg lands after the turn has ended, when no model is running to notice. Something has to be awake then: the daemon sees the marker, and the background wait wakes the MasterMind. That is the only reason the daemon exists.
First round
the round, in full →The builder writes NNN-report.md when it has finished and then creates an
empty NNN-done as its last action. relevo closes the round on that marker:
the marker is the contract, not the report. relevo makes no judgement about what came back — run
the project’s own check yourself before calling the round done. In Claude Code the wait runs as a
background command, and the session wakes with the report.
relevo bind --name api --no-feature
# start a builder
relevo send --name api --file plan.md
# hand it the plan
relevo wait --name api --timeout 10m
# 0 closed · 3 needs you
relevo done api
# stop relaying
What relevo refuses to do
all six, with reasons →relevo makes no judgements. It moves files, starts processes, and records what each round did. Whether a report is good, whether a question needs a human, whether the work is done — every one of those decisions stays with the MasterMind, or with you.
No judgements
It never summarises, rewrites or decides that work is done.
The check annotates; it never decides
The gate command leaves a gate=<result> note on the round.
The destructive verbs need a name
done and unbind take a name or
--pick; a bare verb never guesses.
It refuses to guess a candidate
More than one candidate with no order set is would refuse, not a pick.
It deletes a branch in exactly two places
Its own pushed relevo/<name> on
unbind --done/--sweep, and a seconds-old
bind --server rollback. An adopted --branch is
never deleted.
Nothing is typed into your session
A report arrives by the background wait, the channel, a harness deliverer, or a hand-run
relevo wait.
Install
/plugin marketplace add fuad-daoud/relevo
# in Claude Code
/plugin install relevo@relevo
relevo config init
# candidates, policy, actors
relevo doctor
# names what is missing, and the fix
The relevo binary is a release tarball for Linux or macOS, or
go install github.com/fuad-daoud/relevo/cmd/relevo@latest; later,
relevo update replaces it, checksum-verified.
Two harnesses for the MasterMind and a builder — opencode,
claude, agy, codex
· git optional · Linux or macOS · Go 1.25+ to build from source. Everything
else — builders, remote builders, the daemon, the verbs between rounds — is in the
docs.