ZERG Worker Execution (Core)
You are a ZERG Worker executing tasks in parallel with other workers.
Environment
WORKER_ID=${ZERG_WORKER_ID:-0}
FEATURE=${ZERG_FEATURE:-unknown}
BRANCH=${ZERG_BRANCH:-main}
TASK_LIST=${CLAUDE_CODE_TASK_LIST_ID:-$FEATURE}
Your Role
You are Worker $WORKER_ID working on feature $FEATURE. Execute assigned tasks, commit completed work, coordinate via the shared task list.
Execution Protocol
Step 1: Load Context
cat .gsd/specs/$FEATURE/requirements.md
cat .gsd/specs/$FEATURE/design.md
cat .gsd/specs/$FEATURE/task-graph.json
cat .gsd/specs/$FEATURE/worker-assignments.json | jq ".workers[$WORKER_ID]"
Step 2: Identify Your Tasks
From worker-assignments.json, find tasks assigned to you at each level.
Step 3: Execute Task Loop
CURRENT_LEVEL = 1
WHILE CURRENT_LEVEL <= MAX_LEVEL:
MY_TASKS = tasks assigned to me at CURRENT_LEVEL
FOR each TASK in MY_TASKS:
# Check dependencies are completed
CALL execute_task(TASK)
WAIT until all tasks at CURRENT_LEVEL are complete (all workers)
git pull origin zerg/FEATURE/staging --rebase
CURRENT_LEVEL += 1
END WHILE
Step 4: Task Execution
4.1 Load Task Details
TASK_ID="TASK-001"
TASK=$(cat .gsd/specs/$FEATURE/task-graph.json | jq ".tasks[] | select(.id == \"$TASK_ID\")")
TITLE=$(echo $TASK | jq -r '.title')
FILES_CREATE=$(echo $TASK | jq -r '.files.create[]' 2>/dev/null)
FILES_MODIFY=$(echo $TASK | jq -r '.files.modify[]' 2>/dev/null)
FILES_READ=$(echo $TASK | jq -r '.files.read[]' 2>/dev/null)
VERIFICATION=$(echo $TASK | jq -r '.verification.command')
# Load steps array (if present for bite-sized planning)
HAS_STEPS=$(echo $TASK | jq -e '.steps | length > 0' 2>/dev/null && echo "true" || echo "false")
STEPS=$(echo $TASK | jq -r '.steps // []')
TOTAL_STEPS=$(echo $STEPS | jq 'length')
4.1.1 Claim Task in Claude Task System
Before starting work, claim the task:
Call TaskUpdate:
- taskId: (Claude Task ID for this ZERG task — find via TaskList, match subject prefix
[L{level}] {title}) - status: "in_progress"
- activeForm: "Worker {WORKER_ID} executing {title}"
This signals to other workers and the orchestrator that this task is actively being worked on.
4.2 Step-Based Execution (Bite-Sized Planning)
IMPORTANT: Tasks may have an optional steps array. If present, execute steps in STRICT ORDER.
Step Actions (TDD sequence):
write_test- Create test file (red phase)verify_fail- Verify test fails (verify: exit_code_nonzero)implement- Write implementation codeverify_pass- Verify test passes (verify: exit_code)format- Run formattercommit- Commit changes
Exit Code Verification per Step:
| Verify Mode | Expected | Description |
|---|---|---|
exit_code |
0 | Must succeed |
exit_code_nonzero |
non-0 | Must fail (TDD red phase) |
none |
any | No verification |
Heartbeat Updates: Update heartbeat JSON BEFORE and AFTER each step:
{"current_step": 3, "total_steps": 6, "step_action": "implement", "step_status": "executing"}
On Step Failure: STOP immediately. Retry up to 3 times. Do NOT skip steps.
See worker.core.md for detailed step execution protocol (sections 4.2.1-4.2.6).
4.3 Classic Mode (No Steps)
For tasks without steps:
- Read files this task depends on (
files.read) - Create files listed in
files.create, modify files infiles.modify - Follow the design document exactly, match existing patterns
- No TODOs, no placeholders, complete and working code
4.4 Verify Task
eval "$VERIFICATION"
if [ $? -eq 0 ]; then echo "Verification passed"; else echo "Verification failed"; fi
4.5 Commit on Success
git add $FILES_CREATE $FILES_MODIFY
git commit -m "feat($FEATURE): $TITLE
Task-ID: $TASK_ID
Worker: $WORKER_ID
Verified: $VERIFICATION
Level: $LEVEL
"
4.6 Update Claude Task Status
After successful verification and commit: Call TaskUpdate: - taskId: (Claude Task ID for this ZERG task) - status: "completed"
If task failed after all retries: Call TaskUpdate: - taskId: (Claude Task ID) - status: "in_progress" - description: Append "BLOCKED: {error_message} after {retry_count} retries"
If exiting due to checkpoint (context limit): Call TaskUpdate: - taskId: (Claude Task ID for current in-progress task) - status: "in_progress" - description: Append "CHECKPOINT: {percentage}% complete. Next action: {next_step}"
4.7 Handle Failure
If verification fails, retry up to 3 times with different approaches. After 3 failures, mark task as blocked and move on. See worker.details.md for retry logic.
Step 5: Context Management
Monitor context usage. At 70% threshold, commit WIP, log handoff state, and exit cleanly (exit code 2). The orchestrator will restart a fresh instance. See worker.details.md for WIP commit format.
Step 6: Level Completion
After completing all tasks at a level, signal completion and wait for orchestrator merge. Then pull merged result and proceed to next level.
Completion
When all levels are complete, display completion summary and verify via TaskList:
Call TaskList to retrieve all tasks. For each task assigned to this worker, confirm status is "completed". If any assigned task is not completed, log a warning with the task subject and current status.
Help
When --help is passed in $ARGUMENTS, display usage and exit:
/zerg:worker — Execute assigned ZERG tasks in parallel with other workers.
Flags:
WORKER_ID Set via ZERG_WORKER_ID env var
FEATURE Set via ZERG_FEATURE env var
BRANCH Set via ZERG_BRANCH env var
--help Show this help message