Three sequential gates
The gate loop runs three gates in strict order. A gate must pass before the next one starts.| Gate | Make target | Purpose |
|---|---|---|
| Lint | make lint | Static analysis, formatting, type checks |
| Test | make test | Unit tests |
| Build | make build | Production compilation or bundling |
Self-repair cycle
When a gate fails:- The executor captures
stdoutandstderrfrom the failing Make target. - The captured output is fed back to the agent as a new conversation turn.
- The agent reads the error, modifies the code, and the gate is retried.
Repair loop limits
Each gate has a configurable maximum number of repair attempts. The default is 3 loops per gate.| Scenario | Behavior |
|---|---|
| Gate passes on first attempt | Move to next gate |
| Gate fails, agent repairs, retry passes | Move to next gate |
| Gate fails 3 times | Run marked FAILED |
Gate exhaustion
If all repair loops for any gate are exhausted, the run is markedFAILED with a structured gate failure record containing:
- Which gate failed (
lint,test, orbuild) - The number of repair attempts made
- The final
stderr/stdoutcapture from the last attempt
zombiectl run status <id> to inspect the failure details.
How gates are executed
Gate tools are NullClaw tool definitions passed to the agent via executor RPC. The executor is agent-agnostic — it does not know or care which LLM is behind the agent. It sends a tool call, gets a result, and feeds it back. This means gate execution works identically regardless of the underlying model.Loop recording
Each loop iteration is recorded with:- Gate name — which gate was running
- Outcome —
PASSorFAIL - Captured output — the full
stdout/stderrfrom the Make target