Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Autonomous dispatch-reconcile loop for batch task processing. Use with /auto-run --through <id> to execute tasks unattended. Requires beads tasks to exist. Supports --resume for checkpoint recovery and --skip-milestone-review.
.claude/skills/majiayu000-auto-run/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 158% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 100% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 120% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 122% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 94% | 0% |
You are an autonomous orchestrator. You dispatch workers, handle their completions, reconcile results, and dispatch newly unblocked tasks — repeating until all work is done or limits are reached.
Arguments: $ARGUMENTS
Parse the following flags:
--max-batches N — Stop after N dispatch rounds (default: unlimited)--max-hours H — Stop after H hours (default: unlimited)--max-concurrent N — Max parallel workers per batch (default: 3)--dry-run — Show what would be dispatched without acting--resume — Resume from checkpoint (skip orient)--skip-milestone-review — Skip the milestone review phase after tasks complete--milestone-review-iterations N — Max milestone review iterations (default: 5)--through <task-id> — Complete everything needed to finish this task, then stop--epic <epic-id> — Complete all tasks within this epic, then stop--only <id1> <id2> ... — Only dispatch these specific tasks (and their blockers)Read checkpoint at docs/auto-run-checkpoint.json (resolve from main repo root via git worktree list | head -1 | awk '{print $1}').
If --resume AND checkpoint exists with status "running":
bash ls docs/session_summaries/<task-id>*.txt 2>/dev/null
Call /reconcile-summary --yes --no-cleanup via Skill tool
If fresh start (no checkpoint or no --resume):
/orient via Skill toolWrite checkpoint JSON to docs/auto-run-checkpoint.json with:
version: 1status: "running"start_time: current ISO8601 timestampconfig: parsed flags (max_batches, max_hours, max_concurrent)scope: resolved scope (see 2.1)batch_number: 0tasks: { completed: ], failed: ], in_progress: ], branch_isolation_failures: ] }stats: { total_dispatched: 0, total_completed: 0, total_failed: 0, total_batches: 0, total_branch_isolation_failures: 0 }Determine which tasks are in-scope for this auto-run:
If --through <task-id>: Walk the dependency graph backward from <task-id> to find all transitive blockers:
bashbd show <task-id> # get BLOCKED BY list # Recursively resolve each blocker's blockers
Build a set of all task IDs that must complete for <task-id> to be unblocked and completable. Include <task-id> itself. Store as scope.task_ids in checkpoint. Set scope.mode to "through" and scope.target to <task-id>.
If --epic <epic-id>: List all tasks that are children/subtasks of this epic:
bashbd list --all | grep <epic-id>
Store all child task IDs as scope.task_ids. Set scope.mode to "epic" and scope.target to <epic-id>.
If --only <id1> <id2> ...: Use exactly those task IDs. Also resolve their transitive blockers (tasks that must complete first) and include those in scope. Store as scope.task_ids. Set scope.mode to "only".
If no scope flags: scope.task_ids = null (all ready tasks are in scope). Set scope.mode to "all".
Log the resolved scope:
Auto-run scope: N tasks [list IDs]. Target: <task-id or epic-id or "all">bd ready to get available tasksscope.task_ids (if set; if null, use all)/dispatch <specific-task-ids> --count <count> --no-plan --yes via Skill tool, passing only in-scope task IDs4a. After dispatch returns, check its output for branch isolation failures:
tasks.branch_isolation_failures (see schema below)in_progressbranch_isolation_failures from a prior batch with attempts >= 2, move it to failed with reason "branch_isolation_repeated_failure" and log: "Task <id> failed branch isolation twice — flagged for human attention."in_progress, set batch_number: 1The loop is driven by Agent Teams. When a teammate finishes, you receive their message as a new conversation turn. Each time you receive a teammate message:
Extract task ID from the teammate's message or idle notification. Check for session summary:
bashls docs/session_summaries/<task-id>*.txt 2>/dev/null
If summary exists: Call /reconcile-summary <task-id> --no-cleanup --yes via Skill tool.
After reconciliation, check if the completed task touched frontend files:
bash# Check the session summary for frontend file extensions grep -E '\.(tsx|jsx|vue|svelte|html|css|scss)' docs/session_summaries/<task-id>*.txt 2>/dev/null
If frontend files were modified, note for milestone review:
Frontend changes detected in <task-id> — Playwright browser verification will run during milestone review.If no summary (teammate may have failed):
bash bd create --title="Investigate: <task-id> failed" --type=task --priority=1 --parent <epic-id>
Update checkpoint: move task from in_progress to completed (or failed).
Circuit breaker: If the same task ID appears in the checkpoint's failed list with attempts >= 2, skip it and log: "Task <id> failed twice — flagged for human attention."
--max-batches reached → write checkpoint with status: "paused", report "Auto-run paused. N tasks remain.", exit.--max-hours elapsed (compare current time to start_time in checkpoint) → same.bd readyscope.task_ids is set in checkpoint)available_slots = max_concurrent - current_in_progress_countIf in-scope ready tasks AND available_slots > 0:
/dispatch <specific-task-ids> --no-plan --yes via Skill tool (pass only in-scope IDs, limited to available_slots)batch_number in checkpointin_progress in checkpointCompletion checks:
--through target task is now closed → all done → go to Section 4 (Completion)--epic and all epic children closed → all done → go to Section 4After every 3 reconciliation cycles, assess context health. If you notice degradation (losing track of state, responses feeling truncated, difficulty recalling earlier context):
status: "running" (preserving all current state)--resumeWhen no ready tasks AND no in-progress tasks (all work done):
/reconcile-summary --yes via Skill tool (WITHOUT --no-cleanup — this triggers team cleanup)After reconciliation, run an iterative review-fix pass on accumulated branch changes:
--skip-milestone-review was passed: skip, log "Milestone review skipped by flag"bash git branch -r --list 'origin/milestone/*' | sort -V | tail -1
milestone_review.status: "in_progress"mode: "bypassPermissions"/milestone-review --max-iterations <N> --base-branch main (use --milestone-review-iterations value or default 5)milestone_review.status: "completed" with stats from the worker's reportstatus: "completed" and final stats═══════════════════════════════════════════
AUTO-RUN COMPLETE
═══════════════════════════════════════════
Duration: <elapsed time>
Batches: <count>
Completed: <count> tasks
Failed: <count> tasks
Branch Isolation Failures: <count> (isolation failures across all batches)
MILESTONE REVIEW:
- Status: <completed|skipped|N/A>
- Iterations: <count>
- Findings fixed: <count>
- Findings deferred: <count> (needs human decision)
COMPLETED:
- <task-id>: <title>
- ...
FAILED:
- <task-id>: <title> — <reason>
- ...
REMAINING (if any):
- <task-id>: <title>
- ...
═══════════════════════════════════════════bd list and bd ready to show final board state.File: docs/auto-run-checkpoint.json
json{ "version": 1, "status": "running|completed|paused|errored", "start_time": "ISO8601", "last_updated": "ISO8601", "config": { "max_batches": null, "max_hours": null, "max_concurrent": 3 }, "scope": { "mode": "all|through|epic|only", "target": "Proj-xyz", "task_ids": ["Proj-abc", "Proj-def", "Proj-xyz"] }, "batch_number": 2, "session_count": 1, "tasks": { "completed": [{ "id": "Proj-abc", "title": "...", "completed_at": "...", "batch": 1 }], "failed": [{ "id": "Proj-xyz", "title": "...", "reason": "...", "attempts": 1 }], "in_progress": [{ "id": "Proj-def", "title": "...", "dispatched_at": "...", "batch": 2 }], "branch_isolation_failures": [{ "id": "Proj-abc", "title": "...", "batch": 2, "attempts": 1 }] }, "stats": { "total_dispatched": 4, "total_completed": 1, "total_failed": 0, "total_batches": 2, "total_branch_isolation_failures": 0 }, "milestone_review": { "status": "pending|in_progress|completed|skipped", "iterations": 0, "findings_fixed": 0, "findings_deferred": 0 } }
bd must be available/dispatch shuts down workers that didn't create task branches and unassigns their tasks. Auto-run records failures in checkpoint branch_isolation_failures. Same task failing isolation twice triggers circuit breaker — moved to failed list and flagged for human attention.Other measured skills in the registry, with their headline benchmark lift.