Your repo's commands,
and a supervisor for
the agents running them.
zirv runs the shared .zirv/ scripts your team already checked in — then keeps running to watch the Claude Code and Codex sessions working in that repo, scoring each transcript for context rot and handing off before a session goes bad.
$ zirv ctx status repo: zirv-dynamic-cli agent: claude (adapter ready) mail: ✉ 2 unread heavy operations: 1 of 3 slots in use pid 24188 -- cargo nextest run sessions ● a7f3e2 claude wrap pid 24188 1h12m live rot 62 advise mail queue 0 unread 2 in:3 out:1 ● 91bc04 codex dash pid 18220 22m live rot 18 healthy mail queue 1 unread 1 in:0 out:0 ○ 4d10bb codex exec pid 9902 3h04m dead memory: 14 entries, oldest 26d, 1 stale >30d usage windows five_hour 41%, seven_day 63% (see `zirv ctx usage`) latest handoff for zirv-dynamic-cli: task: wire cross-harness fallback routing next: run the Linux PTY suite before pushing $
Three layers. One install.
Each layer works alone, and each one wraps the last — which is what the mark has been drawing all along.
YAML, JSON or TOML files in .zirv/, checked into the repo. ${var} substitution for params and secrets, optional params, shortcuts, concurrent shells, capture, dry run and failure hooks. Every teammate and every CI runner gets the same commands.
Wraps and supervises Claude Code and Codex. Transcripts are rot-scored deterministically — same events, same verdict — and zirv advises, compacts, or restarts with a written handoff before the session degrades. Plus mail between sessions, a memory bank, usage pacing across rate windows, command-safety gating and cross-harness fallback.
Classify a task, then run it through gated phases — intent, design, plan, implement, test, review, verify, deploy — each producing artifacts, with agent seats, review gates and deploy tiers. zirv frontend adds a zero-touch design-quality pipeline: a repo design profile, 44 offline rules, multi-viewport render capture and an isolated reviewer scoring 13 dimensions.
A file, not a wiki page.
.zirv/commit.yaml from this repo, complete and unedited — six declared steps, and the run beside it executes exactly those six.
name: "Commit Changes" description: "Commits changes with a provided commit message" params: - "commit_message" commands: - command: cargo fmt - command: zirv t description: "Run tests, check code formatting, and run clippy lint" options: proceed_on_failure: false - command: "git add ." description: "Stage all changes" options: proceed_on_failure: false interactive: false - command: "git commit -m \"${commit_message}\"" description: "Commit changes with a message" options: proceed_on_failure: false interactive: false - command: "branch=\"$(git branch --show-current)\"; test -n \"$branch\" && test \"$branch\" != main && test \"$branch\" != master" description: "Refuse to push a protected or detached branch" options: proceed_on_failure: false interactive: false - command: "git push --set-upstream origin HEAD" description: "Push the commit to the remote repository" options: proceed_on_failure: false interactive: false
$ zirv commit "fix: restore raw mode on panic" ▸ Commit Changes (.zirv/commit.yaml) commit_message = "fix: restore raw mode on panic" 6 steps ✔ 1/6 cargo fmt 0.4s ✔ 2/6 zirv t 51.8s Run tests, check code formatting, and run clippy lint ↳ cargo test --verbose ok ↳ cargo fmt -- --check ok ↳ cargo clippy -D warnings ok ✔ 3/6 git add . 0.1s Stage all changes ✔ 4/6 git commit -m "fix: restore …" 0.2s Commit changes with a message ✔ 5/6 branch=$(git branch --show-…) 0.0s Refuse to push a protected or detached branch ✔ 6/6 git push --set-upstream origin 1.9s Push the commit to the remote repository done 6/6 steps · 54.4s · exit 0
It notices the rot
before you do.
Every supervised transcript gets a deterministic score — no model call, no randomness, identical events give an identical verdict. Four verdicts, four actions.
no env, no network. Identical events give
identical verdicts."
— the repo's own rule for the scorer