Describe what “done” looks like.
kazi makes it true — and proves it.
kazi is the missing outer loop for coding agents. Tell it the outcome you want — in plain English or a short goal-file — and it drives a coding agent in a loop until that outcome is objectively real: tests pass, the endpoint is live, the change is deployed.
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.
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 and opencode; add Codex or any CLI agent by declaring a profile — no core change.
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.
The 60-second mental model
A reconciliation loop for software goals. It runs until the predicates are objectively true, stuck, or over budget.
- 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
Install and run a goal
1. Install
brew install kazi-org/tap/kaziA coding agent (claude oropencode) must be on your PATH — kazi drives one, it does not bundle one.
2. Describe what you want
kazi propose "a /healthz endpoint that returns 200"
kazi approve <proposal-ref>3. Drive it to convergence
kazi run my-goal.toml --workspace ./my-projectkazi loops — observe, dispatch, re-observe — and exits 0 only when every predicate is objectively true.