autopilot-triage
Vet open issues for autonomous resolution and queue the qualifying ones with the autopilot-queued label — the start-of-day "fill…
Fan out a batch of autopilot-queued issues to parallel background worktree subagents — each runs /autopilot at the build model from its 'model:' label — with a gating review at Opus 5 or above and never below the build (Opus reviews Sonnet and Opus builds, Fable reviews Fable
$ npx -y skills add joshukraine/dotfiles --skill autopilot-batch --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/autopilot-batchContext preview
The summary Claude sees to decide when to auto-load this skill.
Fan out a batch of autopilot-queued issues to parallel background worktree subagents — each runs /autopilot at the build model from its 'model:' label — with a gating review at Opus 5 or above and never below the build (Opus reviews Sonnet and Opus builds, Fable reviews Fable
name: autopilot-batch description: Fan out a batch of autopilot-queued issues to parallel background worktree subagents — each runs /autopilot at the build model from its 'model:' label — with a gating review at Opus 5 or above and never below the build (Opus reviews Sonnet and Opus builds, Fable reviews Fable builds). disable-model-invocation: true argument-hint: "[--merge <issue#,…>]"
Run the vetted `autopilot-queued` queue as a parallel batch: one background `isolation: worktree` subagent per issue, each running `/autopilot <n>` end-to-end at the build model its `model:` label calls for, with a gating `review` at **Opus 5 or above and never below the build** (Opus for Sonnet- and Opus-built PRs, Fable for Fable-built PRs). This is the **run** half of the triage → run split; `/autopilot-triage` is the **vet** half that fills the queue.
Use this when you have a queue of independent, well-scoped issues and want them all carried to review-ready PRs in one unattended pass. For a single issue, use `/autopilot` directly.
Run this **from the target application repository** — the repo whose issues and app these are (e.g. the Rails app) — on a clean default branch, pulled up to date. **Not from dotfiles.** `isolation: worktree` creates each worktree from the _orchestrator's current repo_, so the cwd decides where the fan-out worktrees land; running from the wrong repo produces worktrees of the wrong tree. If the cwd is the dotfiles repo (or any repo that doesn't own these issues), stop and say so.
Default tier is `--to pr` by design — merge is opt-in, per issue, never batch-wide.
Each issue's _build_ subagent runs at a model chosen per issue; the _gating review_ always runs at **Opus 5 or above, and never below the build**. Ladder, cheapest to most capable: **Sonnet 5 → Opus 5 → Fable 5**.
**Read the issue's `model:` label first.** Repos that have adopted the per-issue model convention (`~/.claude/docs/model-selection-strategy.md`) carry one on every open issue, recording the build tier assigned at triage. Step 1's issue list already returns labels, so no extra call is needed:
The fallback rubric, unchanged:
State each issue's model at the confirm gate **and where it came from** — `label` or `rubric (no label)` — with a one-line why for every rubric call. An override you make at the gate is worth writing back to the issue's label afterward, so the record stays honest for the next run.
The gating review (Step 4) is computed from the build tier and is never read from the label. One invariant: **review runs at Opus 5 or above, and never below the build.**
| Build | Gating review | | --- | --- | | Sonnet 5 | Opus 5 | | Opus 5 | Opus 5 (fresh context, adversarial prompt, independent sample) | | Fable 5 | Fable 5 (ceiling) |
This is the structural safety net: an under-build is caught and fixed at review, never shipped. That is exactly what makes leaning on the cheaper tier for the bulk close to free on quality while saving real latency and limit headroom at fan-out scale — so **a `model: sonnet` label must never downgrade the review.** It sets the build only.
The floor replaced a "one tier above the build" rule on 2026-07-27. That rule was written to insure _cheap_ builds; Opus was never the cheap build, and at fan-out scale it sent nearly every review in the batch to Fable. A Fable review is now reached by **escalation rather than by rule** — via a `model: fable` label, via a mid-flight escalation (the table reads the model the build _actually ran at_), or by simply re-spawning the reviewer at Fable on the PR. See `~/.claude/docs/model-selection-strategy.md` § "The review floor, and the trade it accepts" for the reasoning and the trade it knowingly accepts.
A build subagent runs the whole `/autopilot` loop at **one** model (a subagent can't switch mid-run), so whichever model builds a `--to merge` issue also makes its merge go/no-go inside `/autopilot` Step 8. The floor is non-negotiable: the merge decision is always Fable — the autonomous merge is the highest-stakes call in the pipeline, so it gets the most capable model. Therefore: **any issue opted into `--to merge` is built by Fable**, regardless of what its `model:` label or the class rubric would otherwise pick — a `model: sonnet` label on a merge-tier issue does not buy a cheaper merge decision. Sonnet and Opus only ever build `--to pr` issues, which stop at a review-r
:round_pushpin: My dotfiles for macOS using Neovim, Zsh, and Ghostty + Tmux
Vet open issues for autonomous resolution and queue the qualifying ones with the autopilot-queued label — the start-of-day "fill…
Carry a well-scoped GitHub issue through the full dev loop autonomously, stopping at a per-run tier boundary (PR-ready, or…
Set up PRD-driven development infrastructure for a new project, including directory structure, templates, and roadmap.
Quick 2-minute status update on current phase, completed work, blockers, and health check.
Create a pull request with auto-generated description, issue linking, ROADMAP updates, and PR-metadata validation.
Detailed technical walkthrough covering architecture, test coverage, product tour, and key design decisions.