Babysitter Plugin Troubleshooting Guide
Comprehensive troubleshooting guide for the Babysitter plugin, organized by symptom.
Version: 1.0.0 Last Updated: 2026-02-03
Table of Contents
- Quick Diagnostic Commands
- Run Stuck in "Waiting" State
- Tasks Failing Silently
- Hooks Not Executing
- Journal Corruption
- Session Loops Not Working
- Installation/Verification Failures
- Permission Errors
- FAQ
- Getting Help
Quick Diagnostic Commands
Run these commands first to get an overview of your setup:
# Check installation status
# Check runtime health
# Check SDK CLI version
npx -y @a5c-ai/babysitter-sdk@latest --version
# Check a specific run status
CLI="npx -y @a5c-ai/babysitter-sdk@latest"
$CLI run:status <runId> --json
# View recent events for a run
$CLI run:events <runId> --limit 20 --reverse
# List pending tasks
$CLI task:list <runId> --pending --json
2. Tasks Failing Silently
Symptoms
- Run completes but expected work was not done
- Tasks show
status: "completed"but no output - No error messages visible
- Process appears to skip steps
Diagnosis
Step 1: Check task status and result
CLI="npx -y @a5c-ai/babysitter-sdk@latest"
# List all tasks
$CLI task:list <runId> --json
# Show specific task details
$CLI task:show <runId> <effectId> --json
Step 2: Inspect task logs
# View task stdout
cat .a5c/runs/<runId>/tasks/<effectId>/stdout.log
# View task stderr
cat .a5c/runs/<runId>/tasks/<effectId>/stderr.log
# View task result
cat .a5c/runs/<runId>/tasks/<effectId>/result.json | jq '.'
Step 3: Check journal events for the task
$CLI run:events <runId> --json | jq '.events[] | select(.effectId == "<effectId>")'
Step 4: Verify task definition
cat .a5c/runs/<runId>/tasks/<effectId>/task.json | jq '.'
cat .a5c/runs/<runId>/tasks/<effectId>/inputs.json | jq '.'
Solution
Missing logs:
If stdout.log or stderr.log are empty or missing:
- Check that the task script exists and is executable
- Verify the entry path in the task definition is correct
- Ensure the working directory is correct
Task script errors:
- Run the task script manually to see errors:
node .a5c/runs/<runId>/code/main.js
- Check for syntax errors or missing dependencies
Incorrect task definition:
- Review the process file (
main.js) for task definitions - Verify task input/output paths are correct
- Check that
io.outputJsonPathpoints to an existing directory
Re-run a failed task:
# Mark the task as error to retry
$CLI task:post <runId> <effectId> --status error --json
# Then run the next iteration
$CLI run:iterate <runId> --json --iteration <n>
Prevention
- Always check exit codes in task scripts
- Log to both stdout and stderr appropriately
- Use structured JSON output for task results
- Add validation in process files before task execution
- Test task scripts independently before integrating
3. Hooks Not Executing
Symptoms
- Expected hook behavior does not occur
- No log output from hooks
on-run-start,on-task-complete, etc. not triggering- Custom hooks are ignored
Diagnosis
Step 1: Verify hook is executable
ls -la .a5c/hooks/<hook-name>/
ls -la plugins/babysitter-unified/hooks/<hook-name>.sh
Hooks must have the executable bit set (-rwxr-xr-x).
Step 2: Check hook discovery order
Hooks are discovered in this priority order:
.a5c/hooks/<hook-name>/(per-repo, highest priority)~/.config/babysitter/hooks/<hook-name>/(per-user)plugins/babysitter-unified/hooks/<hook-name>.sh(maintained plugin source)
Step 3: Test hook manually
# Test with sample payload
echo '{"runId":"test-123","status":"completed"}' | .a5c/hooks/on-run-complete/my-hook.sh
Step 4: Check hook dispatcher
# Test the maintained plugin hook entrypoint
echo '{"session_id":"test-123"}' | plugins/babysitter-unified/hooks/session-start.sh
Step 5: Check hook registration (for Claude Code hooks)
cat plugins/babysitter-unified/plugin.json | jq '.hooks'
Solution
Make hooks executable:
chmod +x .a5c/hooks/<hook-name>/*.sh
chmod +x plugins/babysitter-unified/hooks/*.sh
Fix hook script errors:
- Check for syntax errors:
bash -n .a5c/hooks/<hook-name>/my-hook.sh
- Ensure the shebang is correct (
#!/bin/bashor#!/usr/bin/env bash) - Verify jq is installed (required for JSON parsing)
Correct hook output format:
Hooks must:
- Output JSON to stdout (for result data)
- Output logs to stderr (not stdout, to avoid JSON parsing errors)
- Exit with code 0 for success
Example correct hook:
#!/bin/bash
set -euo pipefail
PAYLOAD=$(cat)
RUN_ID=$(echo "$PAYLOAD" | jq -r '.runId')
# Log to stderr (visible but not captured as result)
echo "[my-hook] Processing run: $RUN_ID" >&2
# Output JSON to stdout
echo '{"ok": true}'
exit 0
Debug hook execution:
Add debug logging to your hook:
#!/bin/bash
set -euo pipefail
# Debug: log payload to a file
cat > /tmp/hook-debug-$$.json
# Log execution
echo "[DEBUG] Hook executed at $(date)" >&2
echo "[DEBUG] Payload saved to /tmp/hook-debug-$$.json" >&2
Prevention
- Always test hooks manually before relying on them
- Use
set -euo pipefailat the start of hooks - Keep stdout for JSON output only
- Log to stderr for debugging
- Document hook purpose and expected payload
4. Journal Corruption
Symptoms
run:statusreturns errors or unexpected data- Run cannot be resumed
- State cache is out of sync with journal
- Events appear missing or duplicated
Diagnosis
Step 1: Verify journal integrity
CLI="npx -y @a5c-ai/babysitter-sdk@latest"
# List all events (will error if corrupted)
$CLI run:events <runId> --json
Step 2: Check journal files directly
# List journal files
ls -la .a5c/runs/<runId>/journal/
# Validate each event file is valid JSON
for f in .a5c/runs/<runId>/journal/*.json; do
if ! jq '.' "$f" > /dev/null 2>&1; then
echo "Corrupted: $f"
fi
done
Step 3: Check state cache
# State cache should be rebuildable from journal
cat .a5c/runs/<runId>/state/state.json | jq '.'
Step 4: Check for incomplete writes
# Look for partial/truncated files
find .a5c/runs/<runId>/journal/ -name "*.json" -size 0
Solution
Rebuild state cache:
The state cache (state/state.json) is derived from the journal and can be safely deleted:
rm .a5c/runs/<runId>/state/state.json
# Next CLI command will rebuild it
$CLI run:status <runId>
Remove corrupted event files:
If specific journal files are corrupted:
- Identify the corrupted file(s)
- Check if the event is critical (breakpoint release, task result, etc.)
- If non-critical, remove the file:
rm .a5c/runs/<runId>/journal/<corrupted-file>.json
- Rebuild state:
rm .a5c/runs/<runId>/state/state.json$CLI run:status <runId>
Restore from backup:
If the journal is heavily corrupted:
- If using git, restore from a previous commit:
git checkout HEAD~1 -- .a5c/runs/<runId>/journal/
- If you have backups, restore the journal directory
Start fresh:
If recovery is not possible, create a new run:
$CLI run:create \
--process-id <same-process-id> \
--entry <same-entry> \
--inputs <same-inputs>
Prevention
- Do not manually edit journal files
- Use atomic file operations (the SDK does this automatically)
- Back up critical runs before major operations
- Use git to track run directories (journal is append-only and merge-friendly)
- Monitor disk space to prevent incomplete writes
5. Session Loops Not Working
Symptoms
/babysitter:babysitcommand does not start a loop- Claude exits immediately instead of continuing
- Iteration counter does not increment
- Completion promise is not detected
- "No active loop" message appears
Diagnosis
Step 1: Check session state file
# State files are stored per session
ls -la ~/.a5c/state/
# View state file contents
cat ~/.a5c/state/<session-id>.md
Step 2: Check stop hook logs
cat /tmp/babysitter-stop-hook.log
Step 3: Verify session ID is available
The session ID is set by the SessionStart hook. Check if it was persisted:
# Check if AGENT_SESSION_ID is set
echo "$AGENT_SESSION_ID"
Step 4: Check hook registration
cat plugins/babysitter-unified/plugin.json | jq '.hooks'
Should include both SessionStart and Stop hooks.
Step 5: Test stop hook manually
echo '{"session_id":"test-123","transcript_path":"/tmp/test.jsonl"}' | \
plugins/babysitter-unified/hooks/stop.sh
Solution
State file not created:
If the state file is missing, the setup script may have failed:
- Check that
AGENT_SESSION_IDis available:echo "$AGENT_SESSION_ID" - If not set, the SessionStart hook may have failed
- Check hook registration in
hooks.json
Session ID not persisted:
Babysitter first looks for AGENT_SESSION_ID. If that is absent, the
SessionStart hook can persist it through CLAUDE_ENV_FILE as a fallback.
Check:
- whether
AGENT_SESSION_IDis already present in the current Claude session - if not, whether
CLAUDE_ENV_FILEis set - whether that file is writable
- whether the hook is executable:
chmod +x plugins/babysitter-unified/hooks/session-start.sh
Iteration limit reached too quickly:
If the loop stops due to "iteration too fast":
# Check the stop reason in logs
grep "iteration_too_fast" /tmp/babysitter-stop-hook.log
This protection triggers if iterations average under 15 seconds. Ensure your work takes meaningful time.
Completion promise not detected:
The completion promise must match exactly:
- Check run status for
completionProof:$CLI run:status <runId> --json | jq '.completionProof' - Verify output contains
<promise>SECRET</promise>with exact match - Whitespace is normalized but content must match
State file corruption:
If the state file has invalid YAML:
# Delete the state file to stop the loop
rm ~/.a5c/state/<session-id>.md
Then start fresh with /babysitter:babysit.
Prevention
- Always specify
--max-iterationsto prevent infinite loops - Do not manually edit state files
- Ensure hooks are properly registered and executable
- Test the stop hook independently before relying on it
6. Installation/Verification Failures
Symptoms
- "Command not found" errors for babysitter CLI
- Missing dependencies (Node.js, npm, jq)
- Plugin structure errors
Diagnosis
Step 1: Run verification script
Step 2: Check individual dependencies
# Node.js (requires v18+)
node --version
# npm
npm --version
# git
git --version
# jq (required for hooks)
jq --version
Step 3: Check SDK CLI
npx -y @a5c-ai/babysitter-sdk@latest --version
Step 4: Check plugin structure
ls -la plugins/babysitter-unified/
# Should contain: hooks/, skills/, per-harness/, plugin.json, versions.json
Solution
Install Node.js:
Node.js v18 or later is required.
# Download from https://nodejs.org/
# Or use a version manager:
# nvm (Linux/macOS)
nvm install 18
nvm use 18
# fnm (cross-platform)
fnm install 18
fnm use 18
Install jq:
# macOS
brew install jq
# Ubuntu/Debian
sudo apt-get install jq
# Windows (Chocolatey)
choco install jq
# Windows (Scoop)
scoop install jq
Install/update SDK CLI:
# Install globally
npm install -g @a5c-ai/babysitter-sdk@latest
# Or use npx (no install required)
npx -y @a5c-ai/babysitter-sdk@latest --version
Fix plugin structure:
If directories are missing, re-clone the plugin:
git clone https://github.com/a5c-ai/babysitter.git /tmp/babysitter-fresh
npm --prefix /tmp/babysitter-fresh install
npm --prefix /tmp/babysitter-fresh run generate:plugins
Clear npx cache:
If npx returns stale versions:
npx --cache clear
# Or specify latest explicitly
npx -y @a5c-ai/babysitter-sdk@latest --version
Prevention
- Use a Node.js version manager (nvm, fnm)
- Pin SDK version in your project (optional)
- Keep the plugin updated with git pull
7. Permission Errors
Symptoms
- "Permission denied" when running hooks
- Cannot create state files or directories
- Cannot write to runs directory
- Hook scripts fail with permission errors
Diagnosis
Step 1: Check hook permissions
ls -la plugins/babysitter-unified/hooks/*.sh
ls -la .a5c/hooks/**/*.sh
Hooks should have execute permission (-rwxr-xr-x or at least -rwx------).
Step 2: Check directory permissions
# Runs directory
ls -la .a5c/runs/
# State directory
ls -la ~/.a5c/state/
# Plugin directory
ls -la plugins/babysitter-unified/
Step 3: Check file ownership
ls -la .a5c/
Ensure the current user owns the directories.
Step 4: Test write access
# Test runs directory
touch .a5c/runs/.write-test && rm .a5c/runs/.write-test
# Test state directory
touch ~/.a5c/state/.write-test && rm ~/.a5c/state/.write-test
Solution
Fix hook permissions:
# Make all hooks executable
chmod +x plugins/babysitter-unified/hooks/*.sh
chmod +x .a5c/hooks/**/*.sh
Fix directory permissions:
# Fix runs directory
chmod 755 .a5c
chmod 755 .a5c/runs
# Fix state directory
chmod 755 ~/.a5c/state
# Create state directory if missing
mkdir -p ~/.a5c/state
chmod 755 ~/.a5c/state
Fix ownership:
# Change ownership to current user
sudo chown -R $(whoami) .a5c/
sudo chown -R $(whoami) plugins/babysitter-unified/
SELinux/AppArmor issues (Linux):
If using SELinux or AppArmor:
# Check if SELinux is blocking
ausearch -m avc -ts recent
# Temporarily set permissive mode (for testing)
sudo setenforce 0
Windows-specific:
On Windows (Git Bash/WSL):
# Git Bash may not preserve execute bits
# Mark hooks as executable in git
git update-index --chmod=+x plugins/babysitter-unified/hooks/*.sh
Prevention
- Set correct permissions when creating new hooks
- Use version control to preserve permissions
- Create directories with appropriate permissions from the start
- On Windows, consider using WSL for full Unix permissions support
FAQ
General Questions
Q: How do I check if babysitter is properly installed?
A: Run the verification script:
Q: What Node.js version is required?
A: Node.js v18 or later is required. Check with node --version.
Q: How do I update the SDK CLI?
A:
npm install -g @a5c-ai/babysitter-sdk@latest
# Or use npx which always gets latest:
npx -y @a5c-ai/babysitter-sdk@latest
Run Management
Q: How do I cancel a running orchestration?
A: You can:
- Stop the iteration loop (Ctrl+C if running in terminal)
- Delete the session state file for in-session loops:
rm ~/.a5c/state/<session-id>.md
Q: How do I resume a failed run?
A: Use the run:iterate command to continue:
$CLI run:iterate <runId> --json --iteration <next-iteration>
Q: How do I view the full history of a run?
A:
$CLI run:events <runId> --limit 100 --json | jq '.events'
Q: Can I run multiple orchestrations in parallel?
A: Yes. Each run has its own directory and state. For in-session loops, each Claude Code session has isolated state via AGENT_SESSION_ID.
Hooks
Q: Why is my custom hook not being called?
A: Check these in order:
- Hook is in the correct directory (
.a5c/hooks/<hook-name>/) - Hook file ends with
.sh - Hook is executable (
chmod +x) - Hook outputs valid JSON to stdout
Q: How do I debug a hook?
A: Test it manually:
echo '{"runId":"test"}' | ./my-hook.sh
Add debug logging to stderr:
echo "[DEBUG] My message" >&2
Q: What hooks are available?
A:
- SDK Lifecycle:
on-run-start,on-run-complete,on-run-fail,on-task-start,on-task-complete,on-iteration-start,on-iteration-end,on-step-dispatch - Process-Level:
pre-commit,pre-branch,post-planning,on-score,on-breakpoint
Session Loops
Q: How do I stop an in-session loop?
A:
- Use
--max-iterationsto set a limit - Output the completion proof:
<promise>SECRET</promise> - Delete the state file:
rm ~/.a5c/state/<session-id>.md
Q: Where is the session state stored?
A: ~/.a5c/state/${AGENT_SESSION_ID}.md
Q: What happens if I close Claude Code during a loop?
A: The state file remains. When you restart, the loop will not resume automatically. You can:
- Delete the state file to clear it
- Start a new loop with
/babysitter:babysit
Troubleshooting Commands
Q: What is the most useful diagnostic command?
A: The health check provides a comprehensive overview:
Q: How do I get verbose output from the CLI?
A:
$CLI run:status <runId> --verbose --json
Q: How do I check what tasks are blocking a run?
A:
$CLI task:list <runId> --pending --json | jq '.tasks'
Getting Help
Documentation
- Plugin Specification:
plugins/babysitter-unified/plugin.json - Hooks Guide:
plugins/babysitter-unified/skills/babysit/SKILL.md - SDK Reference:
packages/sdk/sdk.md - In-Session Loops:
packages/sdk/src/cli/commands/instructions.ts
CLI Help
npx -y @a5c-ai/babysitter-sdk@latest --help
npx -y @a5c-ai/babysitter-sdk@latest run:create --help
npx -y @a5c-ai/babysitter-sdk@latest task:post --help
Useful Diagnostic Data to Collect
When reporting issues, collect:
-
System info:
-
Health check:
-
Run status (if applicable):
$CLI run:status <runId> --json -
Recent events:
$CLI run:events <runId> --limit 20 --reverse --json -
Stop hook logs (for session loops):
cat /tmp/babysitter-stop-hook.log
Report Issues
- GitHub Issues: https://github.com/a5c-ai/babysitter/issues
- Include: CLI version, error output, diagnostic data from above
Document Metadata:
- Created: 2026-02-03
- Version: 1.0.0
- Component: Babysitter Plugin Troubleshooting Guide
- Status: Production