Skip to main content
Most Liza problems fall into a small number of categories: agents that crash or collide, lock contention on shared state, invalid state from manual edits or version mismatches, worktree inconsistencies, and integration branch conflicts. This page walks you through each category with concrete diagnostic commands and step-by-step fixes.

Diagnostic Checklist

Before diving into a specific issue, run these four commands in order. They surface 80% of problems immediately.
1

Check system status

Confirms the system mode (RUNNING, PAUSED, STOPPED, CIRCUIT_BREAKER_TRIPPED), sprint state (IN_PROGRESS, CHECKPOINT, COMPLETED), registered agents, and task summary. If mode is not RUNNING or sprint is not IN_PROGRESS, that is likely your root cause.
2

Validate state

Runs 43+ invariant checks against .liza/state.yaml. Validation errors include the field name, task ID, and a description of the violated rule. Fix errors before restarting agents.
3

Inspect agent output logs

Agent output logs are the primary diagnostic tool. They contain everything the provider CLI printed — prompts, tool calls, errors, and exit messages. Check .err files for provider startup failures.
4

Open the TUI

The TUI shows live agent status, recent alerts, and available actions. It also auto-triggers circuit breaker detection and auto-repairs missing agent roles when LIZA_AUTO_REPAIR_AGENT_POOL is enabled (the default).

Issue Categories

COLLISION: agent already registered

Error:
Cause: The agent was killed (Ctrl+C, SIGKILL, crash) before it could unregister. The stale entry persists in state.yaml until the lease expires.Fix — recover and respawn in one command:
Fix — recover without respawn:
Fix — use a different agent ID:
Fix — wait for lease expiry: The error message shows when the lease expires (registered until <timestamp>). After that time, registration succeeds automatically.Prevention: Use liza pause before stopping agents. Paused agents exit gracefully at their next heartbeat check rather than being killed mid-operation.

Agent timeout (execution exceeds time limit)

Symptoms:
  • Agent shows WORKING or REVIEWING status for an extended period
  • Logs contain: Agent execution timeout (CLI may be hung, will retry)
  • Agent status automatically resets to IDLE after timeout
Default timeouts by role:Expected behavior: The supervisor kills the CLI process, resets the agent to IDLE, and retries after a 5-second delay. A single timeout is self-recovering — you do not need to intervene.When to investigate: If the same task causes repeated timeouts, the underlying task or test is problematic. Check .liza/agent-prompts/ for the agent’s last bootstrap prompt and .liza/agent-outputs/ for what it was attempting. If timeouts recur on the same task, mark it blocked:

Agent stuck in loop, not claiming tasks

Diagnosis:
Common causes and fixes:

Agent stuck in WORKING state


Ghost agent (registered but process is dead)

Diagnosis:
Fix:
On Linux, Liza uses procfs identity checks to distinguish a live Liza supervisor from a dead or PID-reused process. In containers or across SSH boundaries, a live host agent can appear as process_status: stopped because its PID is not visible from the current namespace. Check process_status_source and process_status_detail before recovering. A recent heartbeat and growing .liza/agent-outputs/ are stronger liveness signals than PID status alone.

Task stuck in BLOCKED state

Symptoms: A task shows status BLOCKED. Agents skip it. No agent claims it.Diagnosis:
Fix — dependency not yet terminal:Check whether the blocking dependency has been merged:
When the dependency reaches a terminal state and every depends_on target is directly MERGED, unblock the task:
Fix — wrong dependency edge:If the blocking dependency edge is stale, retarget it without unblocking:
Fix — worktree diverged while blocked:If the integration branch advanced while the task was blocked, rebase the preserved worktree before unblocking:
Fix — underlying issue requires orchestrator triage:
Prevention: Keep tasks small and depend only on the minimum required set. A BLOCKED alert is raised when a task blocks; liza analyze will catch repeated BLOCKED patterns as a circuit breaker signal.
Liza uses file-based locking (flock) for safe concurrent state access. Lock errors include a classified type to help you target the right fix.

Lock error classification


Lock timeout — failed to acquire lock

Diagnosis:
Fixes by cause:
The .lock file and .lock.owner.json may remain on disk after a successful operation — their presence alone does not mean a lock is currently held. flock is the mutual exclusion mechanism; file presence is diagnostic metadata only. Do not delete lock files based on PID metadata alone without confirming no liza process is running.

Disk full

Free space:

Permission denied on lock file

Fix — correct ownership:
Common causes: Running liza as root and then as a regular user, or NFS mounts with restrictive permissions.

”State modified by another process, retry”

This message is normal and expected. Liza uses a three-phase claim pattern that detects write races and retries automatically. If you see this message persisting, too many agents may be competing for the same tasks — reduce parallel agents per role.
Run liza validate to get the exact rule that failed and the task or agent ID involved. Most validation failures have a targeted fix.

Missing required field

Error: INVALID: missing required field 'sprint'Cause: The state file was manually edited, created with an old liza init, or truncated.Fix: Add the missing section according to the blackboard schema. Use liza validate to confirm which fields are missing, then add them. Prefer using a Liza CLI command for the change when one exists rather than editing state.yaml directly.

Task status invariant violation

Error: INVALID: IMPLEMENTING_CODE task without assigned_to: task-1Tasks in executing states must have assigned_to, worktree, and a valid lease_expires. Tasks in reviewing states must have reviewing_by and review_commit.Fix — reset to initial pipeline state:Run liza validate to identify the violated invariant, then either:
  • Use liza recover-task <task-id> to reset the task cleanly, or
  • Run liza migrate to normalize role names and fix common invariant violations from version mismatches

Circular dependency detected

Identify the cycle:
Fix — retarget the offending dependency:

Spec file not found

Fix — create the spec file:
Or update the spec_ref field on the task using liza validate to find the task ID, then use line-level text edits (not a YAML serializer) to update the reference.

Worktree directory not found

Error: INVALID: IMPLEMENTING task <task-id> has worktree=.worktrees/<task-id> but directory does not existFix — recreate the worktree:
Fix — reset the task if work was lost:

Worktree already exists


Branch already checked out / cannot remove worktree


Worktree directory is dirty


Invalid reference: task/<task-id>

The task branch does not exist in git.

Integration branch missing

The integration branch is created by liza init. If it is missing, recreate it:
Then re-run liza init or manually set the branch reference in .liza/state.yaml if the integration branch name differs from the default.

Task marked INTEGRATION_FAILED

When an approved task’s merge to the integration branch fails due to a conflict or test failure, Liza transitions the task to INTEGRATION_FAILED, aborts the merge, and preserves the worktree for resolution.Diagnosis:
Fix — merge conflict:
  1. Edit files with conflict markers (<<<<<<< / ======= / >>>>>>>)
  2. Stage and commit the resolution
  3. Claim the task as a coder with integration_fix: true
  4. Resubmit for review
Fix — test failure:
  1. Run your test suite inside the worktree: go test ./... (or equivalent)
  2. Fix the failing tests and commit
  3. Claim the task and resubmit for review
The fix goes through normal review before the merge retries.Prevention: Keep task scope small. Merge the integration branch into task branches frequently to reduce divergence.

Error: .liza already exists

Option 1 — continue with existing state: Just start your agents. Liza is stateful; the existing .liza/ directory contains your sprint history.Option 2 — reset completely:
Option 3 — force reinitialize:

Error:
Liza uses symbolic links in several places. Windows requires Developer Mode or Administrator privileges to create them.Fix — enable Developer Mode (recommended): Settings → System → For developers → toggle Developer Mode on. Then re-run liza setup and liza init.Fix — run elevated: Open your terminal as Administrator and re-run the command.
WSL2 is the recommended environment for Liza on Windows. Native Windows support is limited by the symlink restriction. Using WSL2 eliminates this issue entirely.

Error: specs/vision.md required

Or initialize without a spec file:

30-second or longer response delays

Cause: fsnotify does not work reliably on network filesystems (NFS, SMB). Agents fall back to 30-second polling.Fix: Move your project to a local filesystem. If that is not possible, accept the polling delay and adjust your heartbeat_interval configuration accordingly.Also check:

Slow state file reads (>50ms)

Common causes and fixes:

Slow task claims (5–10 seconds)

Git worktree operations are slow on large repositories.Fix: Use an SSD. For very large repos, consider sparse checkout:

Validation takes more than 5 seconds

Large task lists or complex dependency graphs slow validation.

Provider quota exhausted

Symptoms: All agents using a provider stop. System mode is still RUNNING. Signal file .liza/provider-quota-exhausted-<provider> exists.Diagnosis:
Fix:
liza resume alone fails if the system is still RUNNING. You must pause first to transition to PAUSED, then resume to clear quota signals.

Provider unavailable

Symptoms: Agents stop before doing useful work. Signal file .liza/provider-unavailable-<provider> exists. .liza/agent-outputs/*.err shows startup errors.Fix:
  1. Repair the provider environment (for Codex: ensure ~/.codex/sessions is accessible)
  2. Run liza pause and liza resume to clear the signal

Circuit breaker tripped

Symptoms: System mode is CIRCUIT_BREAKER_TRIPPED. Sprint is at CHECKPOINT. liza analyze reports the triggering pattern.Fix:
  1. Read the circuit breaker report in .liza/
  2. Investigate the root cause (crash loop, validation failure, repeated integration conflicts)
  3. Fix the underlying issue
  4. Resume to clear the breaker:
After liza resume clears a tripped circuit breaker (status: OK, current_trigger: null), historical anomalies that triggered it are acknowledged. Future liza analyze runs count only anomalies after the latest cleared trigger.

Getting Help

If the above steps do not resolve your issue, generate a debug report to share with support or your team.
1

Generate a debug report

2

Capture liza status output

3

Capture liza validate output

4

Check activity and alert logs

Use the /liza-logs skill inside any pairing session with Claude or Codex to get LLM-assisted log analysis. It cross-correlates agent output files, identifies patterns, and proposes fixes. You can also use the browser-based analyzer at ~/.liza/skills/liza-logs/tools/liza-session-analyzer.html by dragging and dropping your .liza/agent-outputs/*.txt files.