Farm Skill
YOU MUST EXECUTE THIS WORKFLOW. Do not just describe it.
Spawn an Agent Farm to execute multiple issues in parallel with witness monitoring.
Architecture
Mayor (this session)
|
+-> ao farm start --agents N
| |
| +-> Pre-flight validation
| +-> Spawn agents in tmux (serial, 30s stagger)
| +-> Spawn witness in separate tmux session
|
+-> ao inbox (poll for updates)
|
+-> Witness sends "FARM COMPLETE" message
|
+-> /post-mortem (extract learnings)
Execution Steps
Given /farm [--agents N] [epic-id]:
Step 1: Pre-Flight Validation
Run pre-flight checks before spawning any agents:
ao farm validate 2>/dev/null
If not available, perform manual checks:
- •Verify beads exist:
ls .beads/issues.jsonl 2>/dev/null || echo "ERROR: No beads found. Run /plan first."
- •Check ready issues:
bd ready 2>/dev/null | wc -l
If 0 ready issues, STOP: "No ready issues. Check dependencies or run /plan."
- •Detect circular dependencies:
bd validate --check-cycles 2>/dev/null
If cycle detected, STOP with error listing the cycle.
- •Verify disk space:
df -h . | awk 'NR==2 {print $4}'
If < 5GB, warn user.
Step 2: Determine Agent Count
Default: N = min(5, ready_issues)
If --agents specified: Use that value, but cap at ready_issues count.
READY_COUNT=$(bd ready 2>/dev/null | wc -l | tr -d ' ')
AGENTS=${N:-5}
AGENTS=$((AGENTS < READY_COUNT ? AGENTS : READY_COUNT))
If AGENTS = 0, STOP: "No work available for agents."
Step 3: Spawn Agent Farm
Start the farm with serial agent spawn (30s stagger):
ao farm start --agents $AGENTS --epic <epic-id> 2>&1
This command:
- •Creates tmux session
ao-farm-<project> - •Spawns agents one at a time with 30s delay
- •Spawns witness in separate session
ao-farm-witness-<project> - •Writes
.farm.metawith PIDs and state - •Returns immediately with status message
Expected output:
Farm started: 5 agents, 1 witness Session: ao-farm-nami Witness: ao-farm-witness-nami Check progress: ao inbox Stop: ao farm stop
Step 4: Monitor Progress (Loop)
Tell the user farm is running, then monitor:
Farm running. Check /inbox periodically for progress updates. - Witness summarizes every 5 minutes - Agents send completion messages per issue - "FARM COMPLETE" signals all work done Commands: ao inbox - Check messages ao farm status - Show agent states ao farm stop - Graceful shutdown
Optional: Periodically check inbox:
ao inbox --since 5m 2>/dev/null
Step 5: Handle Completion
When witness sends "FARM COMPLETE" message:
- •Verify all issues closed:
bd list --status open 2>/dev/null | wc -l
- •Clean up farm resources:
ao farm stop 2>/dev/null
- •Suggest next step:
Farm complete. X issues closed in Y minutes. Run /post-mortem to extract learnings.
Error Handling
Circuit Breaker
If >50% agents fail within 60 seconds:
ao farm stop --reason "circuit-breaker"
Tell user: "Circuit breaker triggered. >50% agents failed. Check logs."
Witness Death
If witness process dies (detected via PID check):
if ! kill -0 $(cat .witness.pid 2>/dev/null) 2>/dev/null; then
echo "ERROR: Witness died. Stopping farm."
ao farm stop --reason "witness-died"
fi
Orphaned Issues
If issues stuck in_progress after farm stop:
ao farm resume
Key Rules
- •Pre-flight first - Never spawn without validation
- •Serial spawn - 30s stagger prevents rate limits
- •Cap agents - Never more agents than ready issues
- •Monitor witness - Check PID health every 30s
- •Graceful stop - Clean up all child processes
- •Resume capability - Recover from disconnects
Without ao CLI
If ao farm commands not available:
- •Manual tmux spawn:
# Create session tmux new-session -d -s ao-farm # For each agent tmux send-keys -t ao-farm "claude --prompt 'Run /implement on next ready issue'" Enter sleep 30 # Wait before next agent
- •Manual witness:
tmux new-session -d -s ao-farm-witness tmux send-keys -t ao-farm-witness "claude --prompt 'Monitor tmux session ao-farm, summarize every 5m'" Enter
- •Manual inbox (beads messages):
bd list --type message --to mayor 2>/dev/null
Agent Farm Behavior
Each spawned agent:
- •Runs
/implementloop until no ready issues - •Claims issues atomically via
bd claim - •Sends completion message via Agent Mail
- •Exits when no more work
Witness:
- •Polls agent tmux panes every 60s
- •Summarizes to mayor every 5m
- •Escalates blockers immediately
- •Sends "FARM COMPLETE" when all agents idle and no ready issues
Exit Conditions
Farm exits when:
- •All issues closed (success)
- •Circuit breaker triggers (>50% fail)
- •Witness dies unexpectedly (error)
- •User runs
ao farm stop(manual) - •Mayor disconnects (orphaned - use resume)