One binary · Rust · macOS Linux Windows

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.

$brew tap glubiz/homebrew-tap && brew install zirv
Read the docs →
Homebrew · ChocolateyCargo · Install scriptMIT
zsh — zirv-dynamic-clisupervising
$ 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.

Layer01 · Script runner
zirv <script>

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.

${var}params?concurrent shellsfailure hookscapture--dry-run
Layer02 · Supervision
zirv ctx

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.

rot scoringhandoffsession mailmemory bankusage pacingsafety policy
Layer03 · AI-native SDLC
zirv workflow

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.

classifyphase gatesartifactsagent seatsdeploy tierszirv frontend

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.

.zirv/commit.yaml
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
terminal
$ 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.

"rot.rs is pure: no filesystem, no clock,
no env, no network. Identical events give
identical verdicts."
— the repo's own rule for the scorer
healthy
Carry on. Nothing is written, nothing interrupts.
0–39
advise
A one-line note in the status bar. You decide.
40–64
compact
Summarise the transcript and keep the session.
65–84
restart
Write a handoff, restart, resume from the handoff.
85+

Install

$brew tap glubiz/homebrew-tap && brew install zirv
macOS · arm64 · x86_64Linux · x86_64Windows · x86_64Upgrade: brew upgrade zirv