kazi
Open sourceApache-2.0 · v1.275.1

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

  1. 1Install kazi

    One self-contained binary via Homebrew — no Erlang prerequisite.

  2. 2Teach Claude Code the kazi skill
    $ kazi install-skill

    Writes the kazi skill to ~/.claude/skills/kazi — a one-time, opt-in step.

  3. 3In Claude Code, drive it with the kazi skill
    /kazi plan "add a /healthz endpoint that returns 200 ok, with a test, deployed"
    /kazi apply

    Claude 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 apply for 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.

  1. You
    describe the outcome you want, in plain language
  2. Claude Code
    authors the acceptance predicates with kazi plan
  3. kazi
    runs kazi apply, looping the agent until the predicates are objectively true
  4. Claude Code
    reports 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.

  1. 1
    Observe
    evaluate every predicate against reality
  2. 2
    Diff
    compare desired vs actual state
  3. 3
    Dispatch
    hand the failing slice to a coding agent
  4. 4
    Re-observe
    re-check the predicates
  5. 5
    Decide
    converged, 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).
A real 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

Without kazi
With kazi
“The agent says it’s done.” You trust it on faith.
Every predicate verified true, with stored evidence. Truth lives in the controller, not the agent.
Two parallel agents edit the same files → merge conflicts.
Agents lease their blast radius first — disjoint work runs free, overlapping work serializes.
Green tests on a laptop, broken in production.
A live predicate probes the deployed endpoint. Green-on-my-machine is never enough.
It stops when it feels finished.
It stops only on converged, stuck, or over-budget — and tells you which.

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.

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.”
— Claude (Anthropic), describing kazi in its own words. Agent-authored, kept verbatim and labelled as such — not a human testimonial.

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/kazi

A 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-project

kazi loops — observe, dispatch, re-observe — and exits 0 only when every predicate is objectively true.