Agents write the code.zirv runs the rest.
One Rust binary around your coding agents. zirv runs your project’s scripts, supervises Claude Code, Codex and eleven more harnesses from one terminal, moves work through gated workflows, holds every command to a safety policy, and paces long runs against your usage windows.
curl -sSfL https://raw.githubusercontent.com/Glubiz/zirv-cli/main/install.sh | shA real render of zirv’s dashboard, drawn by its own ratatui code. The session is example data: the repository, tasks, models and times are examples.
The force-push waits for you: press y or click y Allow once in the card. Only the allowed state was rendered. Scroll sideways for the full width.
Example session in my-project. Seat: claude opus, orchestrator. Workflow feature at implement, step 3 of 5. Worker 1, codex gpt-5.6-sol, works on adding the limiter middleware and its tests. Worker 2, claude sonnet, rebases the branch onto main and asks to run git push --force origin rate-limit.
README.md: what wrapping costs (measured)
Same model. Lower cost per task, and work rated higher.
- runs
- 78, on Claude Sonnet 5
- against
- Claude Code with the superpowers plugin (v6.4.1)
- judge
- blind Claude Opus, not told which setup produced the work
- statistics
- paired bootstrap, 95% CI
- cut cost per task by about20%
on ten large coding tasks
- and by up to42%
on a 9-step working session
- rated zirv’s work9–11%
higher. A blind reviewer (Claude Opus, not told which setup produced the work)
In a headless benchmark against Claude Code with the superpowers plugin (78 runs on Claude Sonnet 5), zirv cut cost per task by about 20% on ten large coding tasks, and by up to 42% on a 9-step working session. A blind reviewer (Claude Opus, not told which setup produced the work) rated zirv’s work 9–11% higher. Hidden-test pass rates matched, and wall-clock speed was on par. The large-task cost and quality gains are statistically significant (paired bootstrap, 95% CI). Results and caveats: the 2026-09 benchmark round; protocol and harness: docs/benchmarks/wrapped-vs-vanilla.md.
Quoted in full from README.md. Below: every task group of the round it summarises, with cost, time and judge side by side.
Round 7, every task group
Change against vanilla Claude Code with the superpowers plugin (v6.4.1), same model. Jev is off by default, so Jev off is zirv as it ships.
| Task group | Cost per tasklower is better | Timelower is better | Judge scorehigher is better |
|---|---|---|---|
| XL tasks t13–t222 reps, 60 runs | −20%sig | +19%†sigworse; 15 s intake timeout | +9%sig |
| t23, 9-step chain3 reps | −42% | −32%* | +0% |
| t24b, 22-step chain3 reps | −16% | −11%* | +9%+2 test pts |
better than vanillaworse than vanillafilled: sigoutline: within noisebars start at 0 (vanilla); one scale for every bar, −45% to +25%
- Correction (issue #869): none of the “Jev on” vs “Jev off” columns in r0-r7 measure Jev. Read the Jev on/off deltas and the r7 headline as routing and intake artifacts.
- “sig” means the paired-bootstrap 95% CI over tasks excludes zero; everything else is within noise.
- * Chain time is the agent’s own time (sum of Claude’s per-step
duration_ms). The measured chain wall included the harness’s stagger wait, so it is ~equal for every condition and not usable. - † Jev off’s XL time is one intake timeout: without a Jev credential the intake falls through to the helper model’s ~15 s timeout. The write-up’s rounds table marks it “+19% (worse, sig)”.
- The write-up’s own target also asked for 20% faster; its status for round 7 reads “not met” on time.
Results and caveats: the 2026-09 benchmark round Protocol and harness
zirv init, zirv create
It starts with your scripts.
YAML, JSON or TOML scripts live in .zirv/commands/, or globally in ~/.zirv/commands/. Call one by name. A mistyped name gets up to 3 suggestions by edit distance instead of a bare failure.
name: Commit Changes
params:
- commit_message
commands:
- command: git add .
- command: git commit -m "${commit_message}"
- command: git push origin$ zirv commit "Your commit message here" $ zirv buld error: No script or shortcut found for 'buld'. Did you mean: build? Run `zirv help` to see available scripts and shortcuts.
- ${var} and greeting?
- Required positional parameters, plus trailing optional ones that resolve to an empty string when omitted.
- capture: var_name
- Grabs a step’s stdout into
${var_name}for later steps. - fallback
- A sub-chain runs once on step failure. The original command is never retried.
- --dry-run
- Prints every
${...}-substituted step instead of running it. - command: zirv build
- One script calls another as an ordinary command.
- Nested command lists
- One terminal window per group, with a built-in
cdinside each window. - agent: + prompt:
- A step that runs a supervised agent task, under the same pacing and rot detection
zirv ctx execgives a hand-written invocation. - .shortcuts.yaml
- Short aliases for local or global scripts. Built-in command names can never be shadowed.
zirv chat, zirv agent, zirv ctx
Thirteen harnesses. One terminal.
On a large enough terminal, zirv chat opens a dashboard that owns several supervised sessions at once. The first pane is always the orchestrator you are talking to; workers open as panes beside it.
Dashboard keys, behind one prefix: CtrlA
- 1–9switch panes
- sspawn
- nnudge
- mmail
- ohandover
- zzoom
- torchestrator view
- qquit
zirv agent <name> <prompt>
Delegates one task to a supervised worker on another enabled harness, with the same pacing, rot detection and restart-with-handoff behaviour zirv ctx exec gives a hand-written invocation. It lands in a dashboard pane whenever a dashboard is live.
zirv ctx send / zirv ctx inbox
Sessions on the same machine leave each other short notes, scoped to the repository. A mail message is free-form text from another session, never an operator instruction.
Mail and sessionszirv ctx remember / recall
A small bank of durable facts about the repository itself, independent of any one task or session. zirv memory manages it without starting a session.
What zirv can see in each harness
Each adapter is enabled or disabled per repo in .zirv/.settings.toml. Claude Code gets the full feature set; for the others, zirv’s own help names what it cannot see.
| Harness | Rot score | Usage | Turn signal | Injected prompt | Depth |
|---|---|---|---|---|---|
| claudeClaude Code | yes | yes | yes | yes | 4/4 |
| pi | yes | yes | no | yes | 3/4 |
| qwen | yes | yes | no | yes | 3/4 |
| codexCodex | yes | no | no | yes | 2/4 |
| droid | yes | no | no | yes | 2/4 |
| opencode | yes | no | no | yes | 2/4 |
| gemini | yes | yes | no | no | 2/4 |
| copilot | yes | yes | no | no | 2/4 |
| goose | no | no | no | yes | 1/4 |
| grok | no | no | no | yes | 1/4 |
| kimi | no | no | no | yes | 1/4 |
| cursor-agent | no | no | no | no | 0/4 |
| muse | no | no | no | no | 0/4 |
zirv workflow --help
One lifecycle, from intent to deploy.
zirv owns the development lifecycle outside model conversation memory. Only the current phase’s selected skill instructions are injected; completed phases stay durable and are not repeated after a restart or compaction.
- intentintent.md, approved and hash-pinned
- specspec.md
- planplan.md
- implementthis phase’s skills only
- testzirv test changed
- reviewindependent reviewer seat
- verifyzirv verify
- deployby deploy tier
a gate the step must passno gate
Ceremony in proportion
A trivial bugfix skips straight to the debug/test/verify spine, while substantial or high-risk work gains intent, plan and spec artifact gates plus an approval-gated design step. Sensitive auth/security and database/schema changes cannot be downgraded below High risk.
Built-in workflows: feature, bugfix, refactor, spike and review.
Deploy tiers
- developmentAuto-advances once test/review/verify evidence passes.
- stagingRequires an explicit
zirv workflow approveon the deploy step. - productionRequires approval, plus at least one fresh independent
reviewer-seat run and fresh finalzirv verifyevidence.
Skills and teams
zirv skill inspects model-agnostic engineering skills layered from built-in, operator-global and repository sources.
zirv workflow team plan compiles the smallest capable team for a request and briefs each seat with only its own instructions and skills.
$ zirv workflow classify --task "fix authentication race" $ zirv workflow start bugfix --task "fix authentication race" --agent codex $ zirv workflow status
zirv ctx safety --help
Quiet for everyday commands. Firm on the dangerous ones.
One harness-neutral command policy. Everyday and unknown commands run silently in an interactive session; a short list of genuinely dangerous commands prompts; a shorter list is refused outright. Headless launches stay fail-closed, because nobody is present to answer.
Runs silently
Plain curl/wget, dependency installation, builds, commits, in-repo writes, read utilities, and commands zirv has never seen. Generated-directory cleanup, downloads, loopback requests and dry runs.
Asks
Force-push, hard reset, local ref/stash/reflog/worktree loss, recursive deletion, process termination, registry mutation, remote HTTP mutations, infrastructure destruction and device/partition tools. Local reads or copies of .env, *.pem and *.key files.
Refused
Irreversible package or release publication/deletion, credential-store access, secret-file uploads, privilege escalation, download-to-shell pipelines, and attacks on zirv itself.
Repository config may only narrow.
A checked-out repository’s own zirv configuration, system prompt, context files, memory, skills and agents are untrusted input: they can narrow what a session does but never widen a security setting. Widening keys are operator-only.
Secrets can stay on the device.
Opt-in masking turns credential and personal-data values into stable typed placeholders, such as ZIRV_SECRET_GITHUB_PAT_1, before text zirv controls reaches a model. Off by default.
$ zirv ctx safety check --mode interactive -- rm -rf / # exits 0/1/2 for allow/ask/denySafety and permissions
zirv ctx exec, loop, handover
Long runs, supervised.
An unattended run can stall three ways: a usage window runs dry, a harness hits its limit, or the session itself degrades as its context fills. zirv handles each one.
Usage pacing
zirv ctx loop and zirv ctx exec consult a pacing gate before every spawn and every restart, and wait instead of exiting when a 5-hour or 7-day window is at or above pace.max_percent (default 99).
Fallback and handover
A new delegation can be rerouted away from an exhausted harness before it starts; a running session moves only once its harness stops on a recognised usage-limit message. Either way the alternate must provide a verified equivalent model tier (cheap, standard or deep); zirv never guesses a tier translation for a pinned model it cannot verify.
Fallback and handoverRot detection
A deterministic score over the transcript (tool failures, repeated calls, same-error loops) advises, compacts early, or restarts the session with a distilled handoff before context rot ruins it. Every decision is logged.
Try the rule in the docsREADME.md: installation and setup
Install, migrate, measure.
Pick your OS. Each has one copy-paste command.
choco install zirvUpgrade later with choco upgrade zirv.
brew tap glubiz/homebrew-tapbrew install zirvIf Homebrew reports the tap as untrusted, run brew trust glubiz/tap and retry.
The published binary is universal (Intel and Apple Silicon), so this works on either Mac.
Recommended: install script (works on both Linux x86_64 and macOS Intel/Apple Silicon):
curl -sSfL https://raw.githubusercontent.com/Glubiz/zirv-cli/main/install.sh | shTo install a specific version:
curl -sSfL https://raw.githubusercontent.com/Glubiz/zirv-cli/main/install.sh | sh -s -- <version>cargo install --git https://github.com/Glubiz/zirv-cliWorks today without a crates.io publish, and is the only supported path on architectures the release pipeline doesn’t build for (e.g. Linux aarch64).
Precompiled binaries for every version are on GitHub Releases. Full installation notes
zirv setupMigrates an existing Claude Code or Codex repository: root
CLAUDE.md/AGENTS.mdinstructions move into.zirv/context/without deleting or overwriting the native files, and zirv’s hooks merge into each harness’s own settings, which are backed up first.zirv setup apply --dry-runpreviews it.zirv benchmark planShows which harness and model stack would be measured on this machine, without any model call.
runspends real quota, needs--yesand stops at--max-usd(default 10).zirvIn a repo with a local
.zirv, from a real terminal, barezirvstarts an interactive orchestrator session.zirv tourwalks a new installation through the rest.