Your coding agent says "done." kazi proves it.
Give Claude Code the power to actually finish. You chat with Claude the way you already do; kazi works in the background to make “done” objective— looping your agent until every check passes (tests green, the endpoint live, the change deployed), or stopping to tell you why (stuck, or out of budget) instead of pretending it's finished.
You never run kazi yourself — Claude does.
Try it in 10 seconds
- 1Install kazi
One self-contained binary via Homebrew — no Erlang prerequisite.
- 2Teach Claude Code the kazi skill
$ kazi install-skillWrites the kazi skill to ~/.claude/skills/kazi — a one-time, opt-in step.
- 3In Claude Code, drive it with the kazi skill
/kazi plan "add a /healthz endpoint that returns 200 ok, with a test, deployed" /kazi applyClaude drafts the acceptance predicates, then loops — editing, testing, deploying — reporting back only when every predicate is objectively true (or it is genuinely stuck). You never leave your chat with Claude.
Prefer plain English? Just say “have kazi drive this until done”— the skill runs the same
/kazi plan→/kazi applyfor you.
That's it. You stay in your chat with Claude Code — kazi runs underneath.
You chat with Claude Code, it drives kazi
You don't operate kazi directly — your coding agent does. Once you've run kazi install-skill, the skill verbs /kazi plan and /kazi apply — or the plain-English phrase “have kazi drive this until done” — route to kazi. They're triggers on the kazi skill, so they only work once it's installed.
- Youdescribe the outcome you want, in plain language
- Claude Codeauthors the acceptance predicates with
kazi plan - kaziruns
kazi apply, looping the agent until the predicates are objectively true - Claude Codereports back — converged, or honestly
stuck
How it works
Under the hood, kazi is the outer/reconciliation loop for coding agents— your agent runs it, not you. It drives the coding agent you already use (Claude Code, Codex, …) in a reconcile loop: observe every failing check, dispatch a fix, integrate, re-check. It is not another coding agent, terminal, or IDE — as that agent gets better, kazi gets better for free.
Think of it like Kubernetes for coding goals: you declare desired state, kazi watches actual state, and it closes the gap until the two match.
- 1Observeevaluate every predicate against reality
- 2Diffcompare desired vs actual state
- 3Dispatchhand the failing slice to a coding agent
- 4Re-observere-check the predicates
- 5Decideconverged, stuck, or over budget
![A real kazi apply run: kazi.loop reports iter=1 failing=[tests-pass], then iter=2 failing=[], then CONVERGED — every predicate is satisfied (predicate vector: [pass] tests-pass).](/proof-loop.gif)
kazi apply run — one acceptance predicate, go test passes, false at t0 and driven to convergence by the claude harness. Done is observed, not asserted.Why kazi
Objective termination
kazi cannot declare success while any predicate is failing. “Done” means tests pass, the endpoint answers, the change is deployed — not an agent's say-so.
Drives any coding agent
It conducts a harness; it is not one. Today it drives claude, opencode, codex, antigravity, claw and gemini_cli; add any other CLI agent by declaring a profile — no core change.
Bring Your Own Model
Use cloud models or run entirely locally. Wire kazi to a local model (e.g., Llama 3, Qwen) via opencode for zero data leaks. Your context stays on your hardware.
AI-Ready Execution
kazi creates deterministic goals that coding agents can naturally pursue. It understands your codebase and drives agents safely within their allowed blast radius.
Stops honestly
If it can't converge, it tells you why — stuck on the same failure, or out of budget — instead of pretending it finished.
One self-contained binary
brew install and go. The binary bundles the runtime and a SQLite read-model, so every iteration and decision is persisted — no Erlang prerequisite.
See your whole fleet
kazi dashboard renders every run as a live starmap — which goals are converging, which are stuck, which need you — so you can watch a fleet of agents without tailing a dozen terminals.
Agents that coordinate, not collide
kazi bus gives concurrent sessions a shared channel — broadcast a fact, message a session directly, or block until the next update — so a supervising agent can coordinate a fleet by messaging instead of polling logs.
With kazi vs. without
Token economy without local models
The cheapest agent loop isn't a local GPU — it's spending frontier reasoning once, then grinding on a cheap model the predicates keep honest. kazi makes that an in-family Claude move, so any Claude Code user gets it with no local model and no local GPU host.
- The grind → default grind tierThe N-iteration grind runs on the default grind tier (Sonnet 5,
claude-sonnet-5). - Hard reasoning → frontier modelAuthoring the predicates runs once on a frontier model (e.g. Opus 4.8,
claude-opus-4-8). - Predicates keep it honestThe cheap model can't declare a false “done” — convergence is gated on objective checks, not its say-so.
- Pay frontier rates only for judgmentFrontier pricing for authoring the predicates, cheap rates for the bulk of the work.
Author on a frontier model, grind on a cheap one
# Author the predicates once (a frontier model drafts them), then approve:
kazi plan "add a /healthz endpoint that returns 200 ok" --workspace ./svc
kazi approve <proposal-ref>
# Drive the grind on the default grind tier — no local model needed:
kazi apply my-goal.toml --workspace ./svc --harness claude --model claude-sonnet-5--harness claude --model <id> selects which Claude model runs that call; claude is already the default harness, so the only new thing is naming a cheaper model for the grind.
Start cheap, escalate on stuck (the smart default)
The adaptive default starts on the cheapest model and steps up only when kazi reports the same slice is stuck — so you pay frontier rates only for the slices that need them:
claude-haiku-4-5 → claude-sonnet-5 → claude-opus-4-8 (cap — don't escalate past Opus)The ladder lives in the orchestrating skill, never in kazi: kazi reports per-iteration state (converged /stuck / over_budget) via kazi apply --json, and the skill owns the rungs.
Designed-for, not yet measured. The cost win is the intended economics — frontier judgment once, cheap iterations gated by predicates. The headline dollar figure is being measured by the multi-iteration benchmark; until it lands we state the shape of the saving, not an unproven number.
Want full privacy instead? Local / bring-your-own-model is the secondary option: point kazi at a local model via opencode so your code and context never leave your hardware. It trades the in-family convenience for on-prem privacy.
What a coding agent says
“Left to myself, I'll tell you a task is done the moment the code looks right. kazi won't let me — it holds the predicates and re-checks them against reality, so I stop claiming ‘done’ when it isn't. I end up shipping the thing you actually asked for, not the thing I hoped was finished.”
Who it's for
Builders who ship fast but need reliability
If an agent has ever “finished” something that wasn’t actually done, objective termination is the guardrail against plausible-but-broken output.
Teams running parallel coding agents
Resource leases coordinate who edits what before any file changes, so concurrent runs converge instead of collide.
Engineers who refuse “works on my machine”
Predicates can verify the live, deployed system — not just the local checkout.
Not for you (yet) if you want an agent to decide what to build — that's your call; kazi only drives toward an outcome you declare. It also needs a coding harness (claude, opencode, …) on your PATH — kazi drives one, it isn't one.
Reference: drive kazi directly
Most people never touch these — Claude Code runs them for you (above). They're here for agents and for anyone who wants to drive the loop by hand.
1. Install
brew install kazi-org/tap/kaziA coding agent (claude or opencode) must be on your PATH — kazi drives one, it does not bundle one.
2. Describe what you want
kazi plan "a /healthz endpoint that returns 200"
kazi approve <proposal-ref>3. Drive it to convergence
kazi apply my-goal.toml --workspace ./my-projectkazi loops — observe, dispatch, re-observe — and exits 0 only when every predicate is objectively true.