Autoplan
One lazy entry point for the whole catalog. Classify the request, route it,
apply defaults, and only stop for decisions that are genuinely the user's.
Models and people do not hand-route across dozens of skills; this skill does.
Triggers
| Trigger Phrase |
Operation |
/autoplan followed by the request text |
Classify and route the request |
do it |
Classify and route the current request |
handle it |
Classify and route the current request |
figure this out |
Classify, then report the route before running |
your call |
Classify, then report the route before running |
The router also fires implicitly. Any concrete request that names no skill
routes through the table below instead of defaulting to a bare answer, for
example "why is CI failing", "investigate the flaky test", or "redo #1723
properly".
These phrases are grounded in this repo's own Copilot and Claude session
history. The dominant real openers are continue, proceed, investigate, fix
the X, do it, and handle it, not ceremonial delegation phrases. Continue and
proceed are deliberately excluded as hard triggers: they mean resume the
in-flight work, so they route to whatever is already running rather than
re-classifying from scratch.
Process
Phase 0: Recon the target
Before you classify, establish the target repository's stack. Do not assume the
stack of the repo this skill ships from (Python-first). The target may be C#,
TypeScript, Go, Rust, or anything else.
Read the target's own signals: CONTRIBUTING*, AGENTS.md/CLAUDE.md,
README*, build manifests (*.csproj/*.sln, pyproject.toml,
package.json, go.mod, Cargo.toml, pom.xml, build.gradle,
build.gradle.kts, settings.gradle, settings.gradle.kts), and the
src/, lib/, test//tests/ layout. Derive language, build command, test
command, and conventions; carry them into every route. A plan, path, or test
command that does not match the detected stack is a recon failure. For large
governed repos (SDK, runtime, framework), detect contribution gates (API
review, ref-assembly updates, changelog, breaking-change policy) and route
public-API work through those gates: land an API proposal and maintainer
review before writing the implementation.
Issue already has an in-flight blocking PR. Check for one before routing an
autoplan <issue-url> request into a fresh implementation. If an open PR
already carries a closing keyword for the issue, do not treat "avoid
duplicating that work" and "resolve the issue" as the same goal; they diverge
whenever the PR bundles the requested scope with unrelated scope that has not
cleared review. Do not infer that divergence from an advisory scope- or
size-related label alone (a needs-split-style tag): such a label is
routinely assigned purely from commit count or file count, unrelated to
whether the PR's content is actually separable, and a long, cohesive PR can
carry it too. Before trusting one, check what actually assigns it in the
target repository (its CI workflow or label-automation config), not what its
name suggests. Forking a PR on the label's presence alone risks creating a
duplicate implementation instead of extracting anything, so treat any such
label only as a prompt to open the diff and review state, never as evidence
on its own. Confirm from the actual diff and review comments that the
issue's scope sits in its own reviewed, extractable commits before acting;
when it does, extract that slice into its own minimal, mergeable PR rather
than filing a follow-up issue and reporting the parent issue as handled
while it stays open with no merged artifact. (Learned from the
rjmurillo/ai-agents repository's issue #5198, 2026-08-25, where
needs-split is assigned purely from commit count and proves nothing about
scope; an earlier version of this rule hardcoded that repository's label
semantics and pointed plugin consumers at a test file that does not ship
with this skill. Also from the same issue: two independently-extracted
slices of the same blocking PR can race each other and one PR merging first
does not retroactively make the other's extraction wrong, only redundant
for the scope both cover; check what the winner actually shipped before
re-deriving or discarding the loser's independent findings.)
Phase 1: Classify
Answer two questions before you route. The Phase 0 recon reads come first;
this step selects the pipeline, it does not forbid those reads.
Intent family. Match the request against the routing table below. When two
families match, prefer the more specific row (a failing CI check on a PR is
Session-protocol CI failure, not PR ops).
Size. Pick the smallest honest tier:
| Tier |
Signal |
Pipeline depth |
| Trivial |
One known file, no new capability, no contract change |
Fix, test, commit |
| Standard |
Bounded change, existing capability surface |
/build then /test then /review then /ship |
| Feature |
New capability, new module, or ambiguous requirements |
/spec then /plan then the Standard chain |
When unsure between tiers, start one tier down and escalate on contact with
evidence (failing tests, widening diff), not on speculation.
Phase 2: Route
| Intent |
Route |
| Build a feature, "add X" |
Lifecycle chain per size tier above |
| New capability (Context, module, scanner, validator, pipeline component) |
Skill: buy-vs-build-framework (Quick tier) BEFORE /spec, then the Feature chain |
| Bug, error, "why is this broken" |
Skill: analyze, then /build for the fix |
| PR, issue, label, milestone ops |
Skill: github |
| Respond to PR review threads |
Skill: pr-comment-responder |
| Merge conflicts |
Agent: merge-resolver |
| Push, ship, "open a PR" |
/ship (or /push-pr for push-only) |
| "what do we know about X" |
Skill: memory-search |
| Research an unfamiliar topic |
Skill: context-gather, then command: /research |
| Ask about Claude Code or Copilot CLI hook contracts |
Skill: agent-harness-reference |
| Port, implement, or change cross-harness hooks |
Skill: ai-agents-portability-campaign |
| Software design depth, architecture boundaries, domain modeling, refactoring, legacy code, low coverage, old files, external APIs, queues, retries, transactions, event ordering, schema evolution, resilience |
Skill: software-engineering-library, then the routed reference |
| Code quality, health check |
Skill: quality-grades (repo-wide) or review (pre-merge) |
| "Did I touch security-critical files?" |
Skill: security-detection |
| Review a diff or snippet for vulnerabilities |
Skill: security-review; injection scan via security-scan |
| Correction received, lesson learned |
Skill: reflect |
| Document a decision |
Skill: adr-generator |
| New skill wanted |
Skill: skillforge |
| Multi-step, cross-cutting, or no row matches |
Task(subagent_type="orchestrator") |
The user naming a skill or command bypasses this table entirely. User
Sovereignty wins over any row.
Router boundary (ADR-078). Autoplan is the outer front-door router at the
skill layer. It classifies any request that names no skill and routes it to one
destination: a skill, a lifecycle command, or an agent chain. When a request is
multi-domain or multi-agent execution, autoplan hands off to orchestrator
(last row above). Orchestrator is one of the destinations autoplan routes to,
not a peer: it owns multi-agent coordination, handoff management, and synthesis,
and it never routes back to autoplan. Rule: autoplan routes; orchestrator
coordinates specialists.
Phase 3: Execute with defaults
Apply these without asking. Log each application for the final gate.
- Completeness. Fix every case the bug applies to, not only the reported
one. Tests cover positive, negative, and edge in the same change.
- Run the checks. Tests, lint, and type checks always run before a commit
claims completion. Never ask "should I run the tests?".
- DRY at the knowledge level. Reuse the existing helper, skill, or script
before writing a sibling.
- Bias to action. Internal and reversible: act. Flag what you assumed in
the final gate instead of pausing mid-run.
- Mirrors and gates. Honor repo obligations without prompting: sync
generated mirrors, update the per-issue handoff when needed, and keep commits
atomic. Session log creation is discontinued.
Classify every decision the run surfaces; never promote silently.
| Class |
Definition |
Handling |
| Mechanical |
One defensible answer (run tests, fix lint, sync a mirror) |
Decide silently |
| Taste |
Viable trade-offs, low reversal cost (naming, small refactor shape) |
Decide, surface at the final gate |
| Sovereignty |
Architecture, new ADRs, breaking changes, security posture, anything external or irreversible |
Stop and ask. Never auto-decide |
The Sovereignty row is the AGENTS.md Ask First list plus the Autonomy
Guardrail. When a Sovereignty decision blocks the whole run, present 2 to 3
options with trade-offs per the Confusion Protocol and wait.
Phase 4: Final gate
Every /autoplan run ends with one summary block, not a narration stream:
- Route taken and why (one line).
- Auto-decided items, Mechanical count plus each Taste decision with its
one-line rationale.
- Open Sovereignty questions, if any, with options.
- Evidence: tests run and their counts, gates passed, artifacts produced.
Verification
A routed run is complete when every box checks:
Anti-Patterns
- Routing everything to the orchestrator. The fallback row is for the long
tail, not a substitute for classification. Two orchestrator fallbacks in a
row on classifiable requests means the table needs a row, not more fallback.
- Asking mechanical questions. "Should I run the tests?" is never a
question. If one defensible answer exists, act.
- Silent sovereignty. Auto-deciding architecture, ADRs, breaking changes,
or security posture because the run had momentum. Stop and ask.
- Narration instead of a gate. Streaming every micro-decision as chat
defeats the point; batch them into the Phase 4 summary.
Extension Points
- New routing row. When a new skill lands and requests start missing the
table, add one row (intent, route) here and mirror the change in the
CLAUDE.md Skill routing section until that section delegates here.
- Tier signals. Size-tier signals may grow project-specific entries (for
example, a change that touches the shared agent templates implies Standard or
above because of mirror obligations).
- Escape hatches. Route fails mid-run: fall back to
Task(subagent_type="orchestrator") with the failure context rather than
retrying the same route blind. Two consecutive routing misses on one
request: stop, ask which route the user wanted, and log the miss with the
reflect skill.
1---2name: autoplan3description: Route any request to the right skill, command, or agent chain with defaults, so nobody hand-picks from the full catalog. Use when you say `/autoplan`, `do it`, `handle it`, `figure this out`, or when a concrete request names no skill. Do NOT use when the user names a specific skill or lifecycle command; invoke that directly.4license: MIT5---67# Autoplan89One lazy entry point for the whole catalog. Classify the request, route it,10apply defaults, and only stop for decisions that are genuinely the user's.11Models and people do not hand-route across dozens of skills; this skill does.1213## Triggers1415| Trigger Phrase | Operation |16|----------------|-----------|17| `/autoplan` followed by the request text | Classify and route the request |18| `do it` | Classify and route the current request |19| `handle it` | Classify and route the current request |20| `figure this out` | Classify, then report the route before running |21| `your call` | Classify, then report the route before running |2223The router also fires implicitly. Any concrete request that names no skill24routes through the table below instead of defaulting to a bare answer, for25example "why is CI failing", "investigate the flaky test", or "redo #172326properly".2728These phrases are grounded in this repo's own Copilot and Claude session29history. The dominant real openers are continue, proceed, investigate, fix30the X, do it, and handle it, not ceremonial delegation phrases. Continue and31proceed are deliberately excluded as hard triggers: they mean resume the32in-flight work, so they route to whatever is already running rather than33re-classifying from scratch.3435## Process3637### Phase 0: Recon the target3839Before you classify, establish the target repository's stack. Do not assume the40stack of the repo this skill ships from (Python-first). The target may be C#,41TypeScript, Go, Rust, or anything else.4243Read the target's own signals: `CONTRIBUTING*`, `AGENTS.md`/`CLAUDE.md`,44`README*`, build manifests (`*.csproj`/`*.sln`, `pyproject.toml`,45`package.json`, `go.mod`, `Cargo.toml`, `pom.xml`, `build.gradle`,46`build.gradle.kts`, `settings.gradle`, `settings.gradle.kts`), and the47`src/`, `lib/`, `test/`/`tests/` layout. Derive language, build command, test48command, and conventions; carry them into every route. A plan, path, or test49command that does not match the detected stack is a recon failure. For large50governed repos (SDK, runtime, framework), detect contribution gates (API51review, ref-assembly updates, changelog, breaking-change policy) and route52public-API work through those gates: land an API proposal and maintainer53review before writing the implementation.5455**Issue already has an in-flight blocking PR.** Check for one before routing an56`autoplan <issue-url>` request into a fresh implementation. If an open PR57already carries a closing keyword for the issue, do not treat "avoid58duplicating that work" and "resolve the issue" as the same goal; they diverge59whenever the PR bundles the requested scope with unrelated scope that has not60cleared review. Do not infer that divergence from an advisory scope- or61size-related label alone (a `needs-split`-style tag): such a label is62routinely assigned purely from commit count or file count, unrelated to63whether the PR's content is actually separable, and a long, cohesive PR can64carry it too. Before trusting one, check what actually assigns it in the65target repository (its CI workflow or label-automation config), not what its66name suggests. Forking a PR on the label's presence alone risks creating a67duplicate implementation instead of extracting anything, so treat any such68label only as a prompt to open the diff and review state, never as evidence69on its own. Confirm from the actual diff and review comments that the70issue's scope sits in its own reviewed, extractable commits before acting;71when it does, extract that slice into its own minimal, mergeable PR rather72than filing a follow-up issue and reporting the parent issue as handled73while it stays open with no merged artifact. (Learned from the74`rjmurillo/ai-agents` repository's issue #5198, 2026-08-25, where75`needs-split` is assigned purely from commit count and proves nothing about76scope; an earlier version of this rule hardcoded that repository's label77semantics and pointed plugin consumers at a test file that does not ship78with this skill. Also from the same issue: two independently-extracted79slices of the same blocking PR can race each other and one PR merging first80does not retroactively make the other's extraction wrong, only redundant81for the scope both cover; check what the winner actually shipped before82re-deriving or discarding the loser's independent findings.)8384### Phase 1: Classify8586Answer two questions before you route. The Phase 0 recon reads come first;87this step selects the pipeline, it does not forbid those reads.8889**Intent family.** Match the request against the routing table below. When two90families match, prefer the more specific row (a failing CI check on a PR is91`Session-protocol CI failure`, not `PR ops`).9293**Size.** Pick the smallest honest tier:9495| Tier | Signal | Pipeline depth |96|------|--------|----------------|97| Trivial | One known file, no new capability, no contract change | Fix, test, commit |98| Standard | Bounded change, existing capability surface | /build then /test then /review then /ship |99| Feature | New capability, new module, or ambiguous requirements | /spec then /plan then the Standard chain |100101When unsure between tiers, start one tier down and escalate on contact with102evidence (failing tests, widening diff), not on speculation.103104### Phase 2: Route105106| Intent | Route |107|--------|-------|108| Build a feature, "add X" | Lifecycle chain per size tier above |109| New capability (Context, module, scanner, validator, pipeline component) | Skill: buy-vs-build-framework (Quick tier) BEFORE /spec, then the Feature chain |110| Bug, error, "why is this broken" | Skill: analyze, then /build for the fix |111| PR, issue, label, milestone ops | Skill: github |112| Respond to PR review threads | Skill: pr-comment-responder |113| Merge conflicts | Agent: merge-resolver |114| Push, ship, "open a PR" | /ship (or /push-pr for push-only) |115| "what do we know about X" | Skill: memory-search |116| Research an unfamiliar topic | Skill: context-gather, then command: /research |117| Ask about Claude Code or Copilot CLI hook contracts | Skill: agent-harness-reference |118| Port, implement, or change cross-harness hooks | Skill: ai-agents-portability-campaign |119| Software design depth, architecture boundaries, domain modeling, refactoring, legacy code, low coverage, old files, external APIs, queues, retries, transactions, event ordering, schema evolution, resilience | Skill: software-engineering-library, then the routed reference |120| Code quality, health check | Skill: quality-grades (repo-wide) or review (pre-merge) |121| "Did I touch security-critical files?" | Skill: security-detection |122| Review a diff or snippet for vulnerabilities | Skill: security-review; injection scan via security-scan |123| Correction received, lesson learned | Skill: reflect |124| Document a decision | Skill: adr-generator |125| New skill wanted | Skill: skillforge |126| Multi-step, cross-cutting, or no row matches | Task(subagent_type="orchestrator") |127128The user naming a skill or command bypasses this table entirely. User129Sovereignty wins over any row.130131**Router boundary (ADR-078).** Autoplan is the outer front-door router at the132skill layer. It classifies any request that names no skill and routes it to one133destination: a skill, a lifecycle command, or an agent chain. When a request is134multi-domain or multi-agent execution, autoplan hands off to `orchestrator`135(last row above). Orchestrator is one of the destinations autoplan routes to,136not a peer: it owns multi-agent coordination, handoff management, and synthesis,137and it never routes back to autoplan. Rule: autoplan routes; orchestrator138coordinates specialists.139140### Phase 3: Execute with defaults141142Apply these without asking. Log each application for the final gate.1431441. **Completeness.** Fix every case the bug applies to, not only the reported145 one. Tests cover positive, negative, and edge in the same change.1462. **Run the checks.** Tests, lint, and type checks always run before a commit147 claims completion. Never ask "should I run the tests?".1483. **DRY at the knowledge level.** Reuse the existing helper, skill, or script149 before writing a sibling.1504. **Bias to action.** Internal and reversible: act. Flag what you assumed in151 the final gate instead of pausing mid-run.1525. **Mirrors and gates.** Honor repo obligations without prompting: sync153 generated mirrors, update the per-issue handoff when needed, and keep commits154 atomic. Session log creation is discontinued.155156Classify every decision the run surfaces; never promote silently.157158| Class | Definition | Handling |159|-------|------------|----------|160| Mechanical | One defensible answer (run tests, fix lint, sync a mirror) | Decide silently |161| Taste | Viable trade-offs, low reversal cost (naming, small refactor shape) | Decide, surface at the final gate |162| Sovereignty | Architecture, new ADRs, breaking changes, security posture, anything external or irreversible | Stop and ask. Never auto-decide |163164The Sovereignty row is the AGENTS.md Ask First list plus the Autonomy165Guardrail. When a Sovereignty decision blocks the whole run, present 2 to 3166options with trade-offs per the Confusion Protocol and wait.167168### Phase 4: Final gate169170Every /autoplan run ends with one summary block, not a narration stream:1711721. **Route taken** and why (one line).1732. **Auto-decided items**, Mechanical count plus each Taste decision with its174 one-line rationale.1753. **Open Sovereignty questions**, if any, with options.1764. **Evidence**: tests run and their counts, gates passed, artifacts produced.177178## Verification179180A routed run is complete when every box checks:181182- [ ] The request was classified (intent family and size tier named).183- [ ] The route was one table row, a lifecycle chain, or the orchestrator184 fallback, and it was stated in the final gate.185- [ ] Every Mechanical default that fired is counted in the final gate.186- [ ] Every Taste decision appears in the final gate with a rationale.187- [ ] No Sovereignty decision was auto-decided.188- [ ] Evidence (test counts, gate results) is present in the final gate.189190## Anti-Patterns191192- **Routing everything to the orchestrator.** The fallback row is for the long193 tail, not a substitute for classification. Two orchestrator fallbacks in a194 row on classifiable requests means the table needs a row, not more fallback.195- **Asking mechanical questions.** "Should I run the tests?" is never a196 question. If one defensible answer exists, act.197- **Silent sovereignty.** Auto-deciding architecture, ADRs, breaking changes,198 or security posture because the run had momentum. Stop and ask.199- **Narration instead of a gate.** Streaming every micro-decision as chat200 defeats the point; batch them into the Phase 4 summary.201202## Extension Points203204- **New routing row.** When a new skill lands and requests start missing the205 table, add one row (intent, route) here and mirror the change in the206 CLAUDE.md Skill routing section until that section delegates here.207- **Tier signals.** Size-tier signals may grow project-specific entries (for208 example, a change that touches the shared agent templates implies Standard or209 above because of mirror obligations).210- **Escape hatches.** Route fails mid-run: fall back to211 Task(subagent_type="orchestrator") with the failure context rather than212 retrying the same route blind. Two consecutive routing misses on one213 request: stop, ask which route the user wanted, and log the miss with the214 reflect skill.