Skip to content

Runbook: Incident Response

Purpose: Diagnose and resolve issues with BoB tooling, warp-drive, or project dev environments When to use: Something is broken — warp-drive stuck, dev environment down, provisioning failed, or unexpected behavior Prerequisites: Access to the affected project directory Estimated time: 5-15 minutes

Steps

1. Identify the problem domain

Determine which system is affected:

SymptomDomainGo to
Warp-drive stuck or erroringState machineStep 2
Dev environment won't startDev lifecycleStep 3
Provisioning/symlinks brokenProvisioningStep 4
Hooks blocking operationsHook systemStep 5
Unexpected Claude behaviorConfigurationStep 6

2. Diagnose warp-drive issues

Check current state:

bash
node ~/.claude/scripts/warp-drive/state-machine.js status "$(pwd)"

Expected output: JSON with phase, stale status, and budget info.

Decision tree:

  • If stale: true → Previous session died. Reset: node ~/.claude/scripts/warp-drive/state-machine.js reset "$(pwd)"
  • If budgetExceeded present → Phase timeout or retry limit hit. Either extend budgets in settings.local.json under _workflow, or abort: node ~/.claude/scripts/warp-drive/state-machine.js abort "$(pwd)"
  • If phase is aborted → Complete cleanup per the abort instructions in the state machine output
  • If gate blocking → Check _workflow.verification_gates in settings.local.json

After fix, restart: /warp-drive

3. Diagnose dev environment issues

Run health check:

bash
~/.claude/scripts/dev-lifecycle/health-check.sh "$(pwd)"

Expected output: Health status with endpoint check result.

Decision tree:

  • If server not running → Start it: ~/.claude/scripts/dev-lifecycle/dev-up.sh "$(pwd)" --verbose
  • If server running but unhealthy → Check logs for the server process
  • If migrations failed → Check the migration command in dev.json and run manually
  • If seed data failed → Check seed/ scripts for errors, run manually

Full recovery:

bash
~/.claude/scripts/dev-lifecycle/dev-up.sh "$(pwd)" --verbose

4. Diagnose provisioning issues

Check current state:

bash
cdprov --status

Expected output: List of provisioned items with symlink status (OK/BROKEN/MISSING).

Decision tree:

  • If symlinks broken → Re-provision: cdprov
  • If manifest missing → Create one: cdprov --init
  • If wrong items → Edit ~/.claude/provisions/<project>.json and re-provision

5. Diagnose hook issues

Hooks are configured in .claude/settings.json and .claude/settings.local.json.

Check which hooks are active:

bash
cat .claude/settings.json | jq '.hooks' 2>/dev/null
cat .claude/settings.local.json | jq '.hooks' 2>/dev/null

Common hook issues:

  • Hook script not executable → chmod +x <script>
  • Hook reading wrong JSON field → Hooks receive data via stdin as JSON, not magic variables
  • Hook blocking legitimate operation → Check the gate conditions in the hook script

6. Diagnose configuration issues

Check for conflicting settings:

bash
cat .claude/settings.json | jq '.' 2>/dev/null
cat .claude/settings.local.json | jq '._automation, ._rdb, ._workflow' 2>/dev/null

Common issues:

  • Automation level not set → /automation level 2
  • Permissions too restrictive → Check allowedTools in the active profile
  • RDB enabled but bridge down → /rdb off to switch back to terminal

Troubleshooting

SymptomLikely CauseFix
"No active state" on warp-drive commandsState file deleted or never createdStart fresh: /warp-drive
"Invalid transition" errorTrying to skip a phaseCheck current phase with status, follow the phase sequence
Permission denied on scriptsNot executablechmod +x ~/.claude/scripts/**/*.sh
jq: command not foundjq not installedbrew install jq (macOS)
Git commit blocked by hookWarp-drive not in committing phaseComplete current phase first, or reset warp-drive if stuck

Escalation

If this runbook doesn't resolve the issue:

  1. Collect diagnostics: cdb, git status, state file contents, recent git log
  2. File a GitHub issue with the diagnostics attached
  3. As a last resort, reset all state: node ~/.claude/scripts/warp-drive/state-machine.js reset "$(pwd)" and start fresh