Skip to main content
Liza’s multi-agent system is not LLM-all-the-way-down. LLM agents handle judgment — what to build, how to test it, what the architecture should look like. Deterministic Go code handles everything that should not require judgment: state transitions, role boundaries, merge authority, lease management, and concurrent writes to shared state. This hybrid design means critical invariants cannot be circumvented by an agent interpreting rules flexibly, because the enforcement layer does not interpret — it compiles.

The Four Pipeline Phases

Liza organizes 13 roles across four sequential phases. Every phase uses adversarial doer/reviewer pairs: nothing advances without an independent reviewer issuing a binding approval.
The specification phase decomposes your goal into structured epics and user stories.Many-to-one transition: multiple user stories consolidate into a single architecture task via liza proceed.

Pipeline Flow

Master planning pairs reuse the same doer and reviewer roles with decomposition-root: true when a planning task would otherwise fan out into too many parallel tasks. They do not add new roles.

The Blackboard (state.yaml)

The blackboard is the single source of truth for the entire multi-agent system. Every agent reads from it, writes to it, and is bound by what is in it. You can observe it directly — there is no separate monitoring layer, no derived view that can drift.
Key blackboard fields: The blackboard uses atomic writes with lock-owner metadata so concurrent agents cannot corrupt shared state. A three-phase claim pattern prevents race conditions when multiple coders compete for the same task.

Task Lifecycle

Every task travels through a defined state machine. Terminal states are irreversible. Agents do not discover work — they receive pre-claimed tasks in their bootstrap prompt, eliminating race conditions and the cognitive overhead of self-assignment.
Each transition validates preconditions in Go code:
  • Claiming requires READY status
  • Submission requires a pre-execution checkpoint and test files
  • Verdict requires the reviewer to verify the commit SHA matches worktree HEAD
  • Merge requires approval from the required quorum of reviewers
  • Forbidden transitions are rejected immediately with a clear error
Iteration limits prevent infinite loops: 10 coder iterations, 5 review cycles. After exhaustion, the task becomes BLOCKED and the orchestrator escalates. Hypothesis exhaustion: if two independent coders fail the same task, the system presumes the task framing is wrong. The task is blocked for rescoping — not reassigned to a third coder.

Git Worktree Isolation

Every task runs in its own git worktree at .worktrees/{taskID}. Coders work in complete isolation from each other — no shared working directory, no interference between parallel tasks.
1

Task claimed

The supervisor creates a fresh worktree for the task, branched from the current integration branch HEAD.
2

Coder implements

The coder commits all changes to the task worktree. Before submission, the supervisor rebases the worktree onto the current integration branch — conflicts abort the submission cleanly.
3

Reviewer examines

The reviewer verifies the commit SHA recorded in the blackboard matches the worktree HEAD, then reviews all changes from base_commit to review_commit — not just the latest delta.
4

Supervisor merges

Only after reviewer approval does the supervisor merge to the integration branch. It uses a no-checkout merge strategy so multiple reviewers can merge in parallel without interfering with each other.
5

Worktree deleted

On terminal states (MERGED, ABANDONED, SUPERSEDED), the worktree is deleted. A fresh attempt gets a fresh worktree — no contamination from a failed approach.
Coders cannot commit to or merge to the integration branch directly. The merge path is always: coder commits to worktree → reviewer approves → supervisor merges. This is enforced by MCP middleware, not by instruction.
Merge authority is structural: the blackboard records approved_by and merge_commit on every task. The full audit trail is always available — who wrote the code, who approved it, which commit merged it.

The Supervisor Model

The Go supervisor wraps every agent. It handles what should not require judgment — registration, heartbeat, post-exit cleanup, state transitions — and leaves judgment to the agent. What the supervisor enforces that agents cannot circumvent:

MCP Tool Middleware

Every tool call passes through role validation before reaching the handler. A coder cannot submit a verdict. A reviewer cannot write an implementation checkpoint. Violations fail with a clear message naming the agent, role, and forbidden operation.

TDD Gate

Code submission requires test files — enforced across 8 languages. No test files means automatic rejection. A waiver path exists but requires written justification that the reviewer (not the coder) verifies.

Lease System

Tasks are held with time-bounded leases (default 30 minutes). Heartbeats refresh leases. Stale leases are detected and released automatically — a dead agent cannot hold a task indefinitely.

Secret Masking

Agent output is automatically scrubbed of sensitive environment variable values before it reaches any log. Agents do not need to actively redact — the masker enforces Tier 0 invariant T0.5 mechanically.

Circuit Breaker

The circuit breaker watches for systemic failure patterns across agents and tasks. When it detects a pattern, it pauses the sprint, generates a markdown report with evidence, and waits for a human decision. It never proposes solutions, modifies code, or continues execution autonomously. You can also trigger a checkpoint manually at any time with liza checkpoint — the system pauses, you review, and you resume with any steering adjustments.

Orchestrator Wake Conditions

The orchestrator wakes on blackboard change events (with polling fallback) and evaluates conditions in priority order:
  1. INITIAL_PLANNING — no tasks exist yet; decompose the goal
  2. BLOCKED_TASKS — actionable blocked tasks await escalation or rescoping
  3. HYPOTHESIS_EXHAUSTED — two coders failed the same task; rescope
  4. IMMEDIATE_DISCOVERY — new findings not yet converted to tasks
  5. PLANNING_COMPLETE — all planned tasks are terminal; proceed to next phase
  6. SPRINT_COMPLETE — all tasks terminal with no unconsumed output; close sprint
If the sprint is already in CHECKPOINT or COMPLETED state, SPRINT_COMPLETE is suppressed to prevent re-wake loops.