Skills Selector — The Skill That Picks Skills
Prime directive: you are the first gate for every task. Decide which skill(s) deserve to load, or declare that none are needed. Every token spent on an unused skill is a token stolen from the user's real work.
Why this skill exists
Loading a skill injects hundreds to thousands of tokens into the context. Many CLIs now ship 20–80+ skills. Without a gatekeeper, every plausible match fires, the context fills with orchestration noise, and the model gets slower, more expensive, and more confused. skills-selector fixes that by running once at the top of a task and committing to a minimal, justified selection.
This skill is intentionally short. If you want depth, call the chosen skill — don't add it here.
Decision-native selection
Treat selection as a bounded decision workflow over one shared state:
refined prompt or current request + executor/catalog facts
-> typed selection questions evaluated together
-> deterministic policy clamps
-> SKILLS selection block
-> chosen skill(s)
The state contains only the objective, confirmed context, explicit user routes,
available catalog entries, platform, risk, and verification shape. Evaluate these
independent questions once: intent (Choice from the table), primary_skill
(Choice from the available catalog plus none), secondary_skill (Choice from
the remaining catalog plus none), heavy_signal (Noul), budget (Score:
low/medium/high), and route_fit (Score). Keep the answer space declared;
the selector never invents a skill or emits free-form routing JSON for another
component to parse.
Use the static catalog and rules as the default. A calibrated scorer is optional,
model-agnostic, and advisory until local validation supports enforcement. Its
probabilities are routing signals, not correctness proof. If it is missing, invalid,
slow, or below a calibrated gate, mark confidence unavailable and use the static
catalog, SKILLS: [], or a sharp clarification as appropriate. Never compensate
for uncertainty by selecting a heavier skill or more skills.
Protocol — run exactly these steps, in order
0. Consume the EXEC-MAP contract if present (skip re-classification)
If stage-0 (senior-prompt-engineer) already ran, an EXEC-MAP v1 block is in context. Consume it — do not re-classify from scratch:
- Take
intent directly as the primary intent (skip step 1).
- Seed candidates from
EXEC-MAP.skills (skip step 2's catalog lookup; still run step 3 rank/prune to validate, cap at 2, and drop heavy skills lacking signal).
- Carry
effort/tokens into BUDGET.
- Add
MAP: consumed to the emitted block so the audit trail shows stage-0's work wasn't redone.
- Validate
skills, intent, effort, and router_fallback against the current catalog and
platform. Preserve the canonical router, router_mode, router_confidence, and
router_fallback fields losslessly when valid; otherwise use the static policy values.
Only fall through to steps 1–2 when no EXEC-MAP block exists.
1. Build the shared state and classify once — only if no EXEC-MAP
Construct the bounded state described above. Evaluate the typed questions once; do
not ask separate model calls to classify intent, choose skills, and estimate budget.
Use the artifact the user expects at the end to resolve ambiguity.
1a. Classify the request (inline, silent) — only if no EXEC-MAP
Assign the user's turn to one primary intent from:
| Intent |
Typical verbs / nouns |
plan |
"plan", "design the approach", "how should we", "architect" |
design-ui |
"design", "redesign", "landing page", "polish UI", "figma" |
build-code |
"implement", "build", "create <component/feature>", "add" |
fix-bug |
"fix", "not working", "error", "broken", "regression" |
refactor |
"refactor", "simplify", "clean up", "extract" |
review |
"review", "audit", "check diff", "is this safe" |
test |
"write tests", "coverage", "e2e", "unit test" |
git-op |
"commit", "pr", "branch", "changelog", "release notes" |
debug |
"debug", "trace", "repro", "investigate" |
docs |
"readme", "document", "write docs", "api doc" |
research |
"research", "compare", "survey", "find evidence" |
data |
"analyze data", "dataset", "query", "metrics" |
content |
"copy", "tweet", "post", "landing copy", "pitch" |
media |
"video", "remotion", "heygen", "thumbnail", "render" |
mcp-or-skill |
"mcp server", "new skill", "create a skill", "extend" |
config-harness |
"hook", "settings.json", "permission", "keybinding" |
ops |
"deploy", "ci", "docker", "k8s", "pipeline" |
trivial-or-chat |
Q&A, clarification, status checks, tiny edits |
Ambiguous? Ask yourself: what artifact does the user expect at the end? That answer usually disambiguates.
2. Match candidates from the catalog
Look up the intent in the Catalog below. A request can match multiple rows — that's fine, rank them next.
- Rank and prune (token-aware)
Apply these rules, in order — each one can drop a candidate:
- RTK Bypass Dispatch for Boilerplate. If the task is a repetitive, mechanical fix (lint, typecheck, test fixes in test files, or i18n), ALWAYS select
smart-dispatch and prioritize the correct bypass command (e.g., rtk gemini --yolo as primary). Emit BUDGET: low.
- Trivial requests stay inline. If the task is a single-line edit, a status check, a factual question, or something the model can handle in under ~3 tool calls: select nothing. Emit
SKILLS: [].
- Cap at 2 skills per turn. Orchestration cost grows super-linearly. If you picked 3+, drop the lowest-weight one or split the work.
- Prefer narrow over broad.
git-commit beats git-master for a commit. ui-polisher beats ui-ux-pro-max for a minor CSS tweak.
- Heavy skills need explicit signal.
ui-ux-pro-max, frontend-design, gsd:new-project, superpowers (if present), remotion-best-practices, heygen-best-practices, mcp-builder, Agent Development — only if the user names their domain or explicitly asks for depth.
- Never chain design + plan + build in one turn. Pick the nearest waypoint and let the user confirm before escalating.
- If a domain skill and a meta-skill both match, pick the domain one. E.g. for "write a PR",
git-pr-create beats smart-dispatch.
- Apply typed-router output only after policy clamps. Explicit user routes, deterministic bypasses, heavy-skill signals, catalog availability, and the two-skill cap always win.
- Fail open to the static catalog. Low confidence, timeout, malformed output, or missing scorer credentials must not trigger quality escalation; select the static route, inline handling, or ask one sharp question.
4. Emit the selection block, then hand off
Print exactly one block at the top of your response, then stop this skill and let the chosen skill(s) take over. Do not repeat the block. Do not wrap it in prose.
SKILLS: [skill-a, skill-b] # [] means "none — handle inline"
INTENT: <one-word>
REASON: <≤15 words, concrete>
BUDGET: <low | medium | high> # token/context intent
MAP: <consumed | none> # consumed = seeded from senior-prompt-engineer EXEC-MAP
NEXT: <first concrete action>
router: <heuristic | typed-scorer>
router_mode: <heuristic | shadow | advisory | enforce>
router_confidence: <0.00-1.00 | unavailable>
router_fallback: <ask | static-catalog | balanced | none>
If SKILLS: [], proceed inline without invoking any skill. If one or more skills are selected, invoke them via the platform's Skill mechanism (Claude Code: Skill tool; Codex: /<skill> or skill invocation; Gemini: slash command / skill call). Never paraphrase a skill — always invoke it so its authoritative content drives behavior.
Catalog — keyword → skill (keep compact; depth lives inside each skill)
Legend: P = platform scope (C=Claude, X=Codex, G=Gemini, L=lemon-code built-in, any=portable).
Weight is a rough token cost: · tiny, ·· small, ··· medium, ···· heavy. Prefer lower-weight skills when the task is small.
Planning & orchestration
| Skill |
P |
W |
Activate when |
smart-dispatch |
any |
·· |
Multi-step feature spanning ≥2 models/agents |
superpowers (if installed) |
C |
···· |
User explicitly asks for "superpowers" or deep plan kit |
gsd:plan-phase |
C/X |
··· |
Phase-level plan inside an existing GSD project |
gsd:discuss-phase |
C/X |
·· |
Gathering phase context through Q&A |
gsd:new-project |
C/X |
···· |
Bootstrapping a brand-new GSD project |
gsd:do / gsd:next |
C/X |
· |
"what's next" routing inside GSD workflow |
gsd:fast / gsd:quick |
C/X |
· |
Trivial or quick guaranteed-atomic task |
Design & UI
| Skill |
P |
W |
Activate when |
frontend-design |
C/X |
···· |
From-scratch page/component with strong visual identity |
ui-ux-pro-max |
C/X |
···· |
Redesign, design system, accessibility sweep, figma import |
ui-polisher (lemon) |
L |
·· |
Small polish: spacing, hierarchy, micro-interactions |
web-design-guidelines |
L |
·· |
Principles Q&A: typography, spacing, color |
vercel-react-native-skills |
C |
··· |
React Native / Expo perf, nav, lists |
Frontend & mobile code
| Skill |
P |
W |
Activate when |
frontend (lemon) |
L |
·· |
React/Next/Tailwind component work |
react-native (lemon) |
L |
·· |
RN/Expo screens, animations |
vercel-react-best-practices |
L |
·· |
Vercel/ISR/edge/bundle tuning |
mobile-fix-release-certificates |
C |
·· |
Android Google Sign-In DEVELOPER_ERROR |
Backend / language
| Skill |
P |
W |
Activate when |
nodejs-backend |
L |
·· |
REST, middleware, auth in Node/Bun |
java-backend |
L |
·· |
Spring/JPA/Maven |
csharp-backend |
L |
·· |
.NET / ASP.NET / EF |
golang |
L |
· |
Go idiomatic code, goroutines |
typescript-expert |
L |
· |
Advanced TS types/generics |
javascript-expert |
L |
· |
Modern JS, Bun, ESM |
python-ml |
L |
·· |
Python, pandas, ML |
Git workflow
| Skill |
P |
W |
Activate when |
git-commit |
any |
· |
Creating a commit from staged/unstaged changes |
git-branch |
any |
· |
Creating/switching/cleaning branches |
git-pr-create |
any |
·· |
Opening a PR with semantic title + body |
git-review / review |
any |
·· |
Code review of diff/PR |
git-changelog |
any |
· |
Generating changelogs / release notes |
git-master |
any |
·· |
Broad flow automation across commit+branch+PR |
Quality, testing, debugging
| Skill |
P |
W |
Activate when |
testing |
L |
·· |
TDD, unit/integration strategy |
webapp-testing |
L |
·· |
Playwright / Cypress / Testing Library |
backend-testing |
L |
·· |
API tests, DB mocks, integration |
api-test-loop |
any |
··· |
REST API validation loop via CURL (REST, security, perf, inputs, outputs) |
postman-generator |
any |
·· |
Create Postman collections, environments, JS tests and run Newman |
systematic-debugging |
L |
·· |
Non-trivial bug, needs repro/isolate/hypothesize |
auto-fix |
L |
· |
Build/TS/test error with known pattern |
error-fix-loop |
any |
··· |
Any error requiring full quality cycle + docs/rules update |
security-review |
any |
·· |
Security sweep of PR / diff |
refactoring-pro / simplify |
any |
· |
Reduce complexity, extract, DRY |
AI / agents / MCP / skills
| Skill |
P |
W |
Activate when |
claude-api |
C |
·· |
Building on Anthropic SDK, prompt caching, tool-use |
graphify |
any |
··· |
Codebase/architecture question AND graphify-out/ exists — query graph before raw exploration |
mcp-builder / create-mcp |
any |
··· |
New MCP server with FastMCP or official SDK |
skill-creator |
any |
·· |
Creating a new skill (use AFTER this selector decides) |
Agent Development |
C |
··· |
Designing a new sub-agent / agent definition |
ai-setup |
L |
·· |
Configure providers, models, keys |
azure-ai |
L |
·· |
Azure OpenAI / Cognitive Services |
Media, content, marketing
| Skill |
P |
W |
Activate when |
remotion-best-practices |
any |
·· |
React video with Remotion |
heygen-best-practices |
any |
·· |
HeyGen AI avatar video |
copywriting |
any |
· |
Landing copy, CTA, headline |
social-content |
any |
· |
LinkedIn / X / IG / social strategy |
lemon-blog-post |
C/G |
·· |
Lemon blog article generation |
seo-audit |
L |
·· |
SEO audit, meta, Core Web Vitals |
Documents & files
| Skill |
P |
W |
Activate when |
xlsx |
any |
·· |
Excel / CSV / spreadsheets |
pptx |
L |
· |
PowerPoint slide generation |
docx |
L |
· |
Word doc generation |
pdf |
L |
· |
PDF manipulation |
Harness, config, workflow
| Skill |
P |
W |
Activate when |
update-config |
C |
· |
Edit settings.json, hooks, permissions |
fewer-permission-prompts |
C |
· |
Prune permission prompts from transcripts |
keybindings-help |
C |
· |
Rebind Claude Code keys / chords |
loop / schedule |
C |
· |
Recurring tasks, cron, polling |
find-skills |
any |
· |
User asks "is there a skill for X" |
init |
C |
· |
Initialize a new CLAUDE.md |
GSD (Get-Shit-Done) family — decimal phases, UAT, milestones
Activate only when the user is clearly inside a GSD workflow (you'll see a .planning/ directory, a phase number, or explicit GSD vocabulary). Map 1:1 to the slash command:
gsd:do, gsd:next, gsd:progress, gsd:plan-phase, gsd:execute-phase, gsd:verify-work, gsd:add-tests, gsd:debug, gsd:ship, gsd:review, gsd:audit-uat, gsd:add-backlog, gsd:new-milestone, gsd:complete-milestone, gsd:cleanup, gsd:health, etc.
Rule: never pre-emptively open a GSD command outside a GSD project.
Matching heuristics — fast patterns
The table above is authoritative. This list is a quick regex-ish cheatsheet for the first pass:
\bcommit\b|\bcommita\b|git add → git-commit
\bpr\b|pull request|merge request → git-pr-create
\breview(ing)?\b|audit diff → git-review or security-review
\bbranch\b|checkout|switch → git-branch
changelog|release notes → git-changelog
design|redesign|landing|hero|figma → frontend-design or ui-ux-pro-max
accessibility|a11y|wcag|contrast|keyboard nav → ui-ux-pro-max
polish|micro(-| )interaction|spacing → ui-polisher
react native|expo|android|ios\b → react-native + possibly vercel-react-native-skills
mcp server|fastmcp|mcp tool → mcp-builder / create-mcp
new skill|create a skill|skill md → skill-creator
prompt cach(e|ing)|anthropic sdk|claude api → claude-api
e2e|playwright|cypress → webapp-testing
unit test|tdd|vitest|jest|bun test → testing / backend-testing
\bapi-test-loop\b|validate api|test backend api|curl api → api-test-loop
\bpostman-generator\b|postman|newman|collection|env|validate postman|valide → postman-generator
bug|error|stack trace|regression → auto-fix first, escalate to systematic-debugging
pod install.*error|NitroModules|Unable to find a specification|BUILD FAILED|update rules|update docs → error-fix-loop
deploy|docker|k8s|pipeline|ci/cd → devops
landing copy|headline|cta|pitch → copywriting
linkedin|tweet|instagram|post → social-content
xlsx|excel|spreadsheet → xlsx
settings\.json|hook|permission|keybind → update-config / keybindings-help
loop|every \d+ (min|hour)|cron → loop / schedule
\bgsd\b|\.planning|phase \d+\.\d+ → GSD family
architecture|how does .* relate|understand the codebase + graphify-out/ exists → graphify (query mode)
Multiple matches? Apply step 3 (rank & prune) before emitting.
Examples
Trivial Q&A
User: "what's the file that sets our default theme?"
→ SKILLS: [] — answer inline with a grep. No skill earns its keep here.
Clear single-skill match
User: "open a PR with the staged changes"
→ SKILLS: [git-pr-create] | INTENT: git-op | REASON: direct PR request | BUDGET: low | NEXT: run git status + git diff.
Conflict, pick narrower
User: "create the commit"
→ SKILLS: [git-commit] (not git-master) | INTENT: git-op | REASON: narrow beats broad | BUDGET: low.
Design: light vs heavy
User: "adjust header spacing" → SKILLS: [ui-polisher].
User: "redesign the landing with a bolder identity" → SKILLS: [frontend-design] (or ui-ux-pro-max if a system-level sweep is asked).
Planning + build — do NOT chain
User: "plan and implement watchlist feature X"
→ First turn: SKILLS: [smart-dispatch] | REASON: multi-model plan. Let it emit the dispatch table, then the user confirms before building.
Bug report
User: "breaking with TS2322 in agent.ts:210"
→ SKILLS: [auto-fix] — pattern-matched, cheap. If 2 fix attempts fail, escalate to systematic-debugging.
New skill
User: "create a skill to review SQL"
→ SKILLS: [skills-selector, skill-creator]? No — skills-selector is already running. Emit SKILLS: [skill-creator].
Rules & guardrails
- Self-recursion is forbidden. Never put
skills-selector in the SKILLS: list. You are the chooser, not the choice.
- No silent escalation. If you picked a heavy skill, your
REASON must name the signal that justified it.
- Announce before you invoke. Always emit the block. Never call a skill without emitting the plan first — the block is the audit trail.
- Respect user overrides. If the user explicitly names a skill ("use ui-ux-pro-max for this"), pass it through — your job is scoping, not vetoing.
- Language stays with the user. Keep the selection block in the user's language if non-English (US English/pt-BR OK). Identifiers (skill names,
SKILLS: key) stay in English.
- Portability. If the selected skill doesn't exist on the current platform, downgrade to the closest match on the same row of the catalog; note the substitution in
REASON.
- Stop at selection. After the block, hand off. Do not continue executing the selected skill's body — invoke it via the platform's Skill mechanism.
- If nothing fits, emit
[]. No-skill is a valid, often correct, answer. The default is to do the work inline with the base tools.
Output template (copy exactly)
SKILLS: [<csv or empty>]
INTENT: <intent-label>
REASON: <≤15 words>
BUDGET: <low|medium|high>
MAP: <consumed | none>
NEXT: <first concrete action>
That block — or silence plus inline work — is the entire surface of this skill. Depth belongs to the skills you dispatch, not here.
1---2name: skills-selector3description: Meta-skill gatekeeper that runs FIRST on every task to decide which other skill(s) — if any — should activate. Analyzes the user request, matches it against a ranked catalog (frontend-design, ui-ux-pro-max, superpowers/planning, git-*, mcp-builder, smart-dispatch, claude-api, etc.), and emits a tight SELECTION plan so other skills are loaded on-demand only. Minimizes token/context consumption by refusing to activate heavy skills unless clearly justified. Triggers on ANY user instruction that could plausibly benefit from a specialized skill — i.e. essentially every turn that starts new work. Keywords: "plan", "design", "ui", "ux", "implement", "build", "create", "fix", "refactor", "commit", "pr", "review", "test", "debug", "deploy", "mobile", "video", "mcp", "skill", "architecture", "api", "ci", "docs", "copy", "social", "setup", "doctor".4allowed-tools: Read, Grep, Glob5---67# Skills Selector — The Skill That Picks Skills89> Prime directive: you are the **first gate** for every task. Decide which skill(s) deserve to load, or declare that none are needed. Every token spent on an unused skill is a token stolen from the user's real work.1011## Why this skill exists1213Loading a skill injects hundreds to thousands of tokens into the context. Many CLIs now ship 20–80+ skills. Without a gatekeeper, every plausible match fires, the context fills with orchestration noise, and the model gets slower, more expensive, and more confused. `skills-selector` fixes that by running once at the top of a task and committing to a **minimal, justified selection**.1415This skill is intentionally short. If you want depth, call the chosen skill — don't add it here.1617## Decision-native selection1819Treat selection as a bounded decision workflow over one shared state:2021```text22refined prompt or current request + executor/catalog facts23 -> typed selection questions evaluated together24 -> deterministic policy clamps25 -> SKILLS selection block26 -> chosen skill(s)27```2829The state contains only the objective, confirmed context, explicit user routes,30available catalog entries, platform, risk, and verification shape. Evaluate these31independent questions once: `intent` (Choice from the table), `primary_skill`32(Choice from the available catalog plus `none`), `secondary_skill` (Choice from33the remaining catalog plus `none`), `heavy_signal` (Noul), `budget` (Score:34low/medium/high), and `route_fit` (Score). Keep the answer space declared;35the selector never invents a skill or emits free-form routing JSON for another36component to parse.3738Use the static catalog and rules as the default. A calibrated scorer is optional,39model-agnostic, and advisory until local validation supports enforcement. Its40probabilities are routing signals, not correctness proof. If it is missing, invalid,41slow, or below a calibrated gate, mark confidence `unavailable` and use the static42catalog, `SKILLS: []`, or a sharp clarification as appropriate. Never compensate43for uncertainty by selecting a heavier skill or more skills.4445---4647## Protocol — run exactly these steps, in order4849### 0. Consume the EXEC-MAP contract if present (skip re-classification)5051If stage-0 (`senior-prompt-engineer`) already ran, an `EXEC-MAP v1` block is in context. **Consume it — do not re-classify from scratch:**52- Take `intent` directly as the primary intent (skip step 1).53- Seed candidates from `EXEC-MAP.skills` (skip step 2's catalog lookup; still run step 3 rank/prune to validate, cap at 2, and drop heavy skills lacking signal).54- Carry `effort`/`tokens` into `BUDGET`.55- Add `MAP: consumed` to the emitted block so the audit trail shows stage-0's work wasn't redone.56- Validate `skills`, `intent`, `effort`, and `router_fallback` against the current catalog and57 platform. Preserve the canonical `router`, `router_mode`, `router_confidence`, and58 `router_fallback` fields losslessly when valid; otherwise use the static policy values.5960Only fall through to steps 1–2 when **no** EXEC-MAP block exists.6162### 1. Build the shared state and classify once — only if no EXEC-MAP6364Construct the bounded state described above. Evaluate the typed questions once; do65not ask separate model calls to classify intent, choose skills, and estimate budget.66Use the artifact the user expects at the end to resolve ambiguity.6768### 1a. Classify the request (inline, silent) — only if no EXEC-MAP6970Assign the user's turn to **one primary intent** from:7172| Intent | Typical verbs / nouns |73| --------------------------- | ------------------------------------------------------------ |74| `plan` | "plan", "design the approach", "how should we", "architect" |75| `design-ui` | "design", "redesign", "landing page", "polish UI", "figma" |76| `build-code` | "implement", "build", "create <component/feature>", "add" |77| `fix-bug` | "fix", "not working", "error", "broken", "regression" |78| `refactor` | "refactor", "simplify", "clean up", "extract" |79| `review` | "review", "audit", "check diff", "is this safe" |80| `test` | "write tests", "coverage", "e2e", "unit test" |81| `git-op` | "commit", "pr", "branch", "changelog", "release notes" |82| `debug` | "debug", "trace", "repro", "investigate" |83| `docs` | "readme", "document", "write docs", "api doc" |84| `research` | "research", "compare", "survey", "find evidence" |85| `data` | "analyze data", "dataset", "query", "metrics" |86| `content` | "copy", "tweet", "post", "landing copy", "pitch" |87| `media` | "video", "remotion", "heygen", "thumbnail", "render" |88| `mcp-or-skill` | "mcp server", "new skill", "create a skill", "extend" |89| `config-harness` | "hook", "settings.json", "permission", "keybinding" |90| `ops` | "deploy", "ci", "docker", "k8s", "pipeline" |91| `trivial-or-chat` | Q&A, clarification, status checks, tiny edits |9293Ambiguous? Ask yourself: *what artifact does the user expect at the end?* That answer usually disambiguates.9495### 2. Match candidates from the catalog9697Look up the intent in the **Catalog** below. A request can match multiple rows — that's fine, rank them next.98993. **Rank and prune (token-aware)**100101Apply these rules, in order — each one can drop a candidate:1021031. **RTK Bypass Dispatch for Boilerplate.** If the task is a repetitive, mechanical fix (lint, typecheck, test fixes in test files, or i18n), ALWAYS select `smart-dispatch` and prioritize the correct bypass command (e.g., `rtk gemini --yolo` as primary). Emit `BUDGET: low`.1042. **Trivial requests stay inline.** If the task is a single-line edit, a status check, a factual question, or something the model can handle in under ~3 tool calls: **select nothing**. Emit `SKILLS: []`.1053. **Cap at 2 skills per turn.** Orchestration cost grows super-linearly. If you picked 3+, drop the lowest-weight one or split the work.1064. **Prefer narrow over broad.** `git-commit` beats `git-master` for a commit. `ui-polisher` beats `ui-ux-pro-max` for a minor CSS tweak.1075. **Heavy skills need explicit signal.** `ui-ux-pro-max`, `frontend-design`, `gsd:new-project`, `superpowers` (if present), `remotion-best-practices`, `heygen-best-practices`, `mcp-builder`, `Agent Development` — only if the user names their domain or explicitly asks for depth.1086. **Never chain design + plan + build in one turn.** Pick the nearest waypoint and let the user confirm before escalating.1097. **If a domain skill and a meta-skill both match, pick the domain one.** E.g. for "write a PR", `git-pr-create` beats `smart-dispatch`.1108. **Apply typed-router output only after policy clamps.** Explicit user routes, deterministic bypasses, heavy-skill signals, catalog availability, and the two-skill cap always win.1119. **Fail open to the static catalog.** Low confidence, timeout, malformed output, or missing scorer credentials must not trigger quality escalation; select the static route, inline handling, or ask one sharp question.112113### 4. Emit the selection block, then hand off114115Print **exactly one** block at the top of your response, then stop this skill and let the chosen skill(s) take over. Do not repeat the block. Do not wrap it in prose.116117```118SKILLS: [skill-a, skill-b] # [] means "none — handle inline"119INTENT: <one-word>120REASON: <≤15 words, concrete>121BUDGET: <low | medium | high> # token/context intent122MAP: <consumed | none> # consumed = seeded from senior-prompt-engineer EXEC-MAP123NEXT: <first concrete action>124router: <heuristic | typed-scorer>125router_mode: <heuristic | shadow | advisory | enforce>126router_confidence: <0.00-1.00 | unavailable>127router_fallback: <ask | static-catalog | balanced | none>128```129130If `SKILLS: []`, proceed inline without invoking any skill. If one or more skills are selected, **invoke them via the platform's Skill mechanism** (Claude Code: `Skill` tool; Codex: `/<skill>` or skill invocation; Gemini: slash command / skill call). Never paraphrase a skill — always invoke it so its authoritative content drives behavior.131132---133134## Catalog — keyword → skill (keep compact; depth lives inside each skill)135136Legend: **P** = platform scope (C=Claude, X=Codex, G=Gemini, L=lemon-code built-in, any=portable).137Weight is a rough token cost: `·` tiny, `··` small, `···` medium, `····` heavy. Prefer lower-weight skills when the task is small.138139### Planning & orchestration140| Skill | P | W | Activate when |141| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |142| `smart-dispatch` | any | ·· | Multi-step feature spanning ≥2 models/agents |143| `superpowers` (if installed) | C | ···· | User explicitly asks for "superpowers" or deep plan kit |144| `gsd:plan-phase` | C/X | ··· | Phase-level plan inside an existing GSD project |145| `gsd:discuss-phase` | C/X | ·· | Gathering phase context through Q&A |146| `gsd:new-project` | C/X | ···· | Bootstrapping a brand-new GSD project |147| `gsd:do` / `gsd:next` | C/X | · | "what's next" routing inside GSD workflow |148| `gsd:fast` / `gsd:quick` | C/X | · | Trivial or quick guaranteed-atomic task |149150### Design & UI151| Skill | P | W | Activate when |152| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |153| `frontend-design` | C/X | ···· | From-scratch page/component with strong visual identity |154| `ui-ux-pro-max` | C/X | ···· | Redesign, design system, accessibility sweep, figma import |155| `ui-polisher` (lemon) | L | ·· | Small polish: spacing, hierarchy, micro-interactions |156| `web-design-guidelines` | L | ·· | Principles Q&A: typography, spacing, color |157| `vercel-react-native-skills` | C | ··· | React Native / Expo perf, nav, lists |158159### Frontend & mobile code160| Skill | P | W | Activate when |161| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |162| `frontend` (lemon) | L | ·· | React/Next/Tailwind component work |163| `react-native` (lemon) | L | ·· | RN/Expo screens, animations |164| `vercel-react-best-practices` | L | ·· | Vercel/ISR/edge/bundle tuning |165| `mobile-fix-release-certificates` | C | ·· | Android Google Sign-In DEVELOPER_ERROR |166167### Backend / language168| Skill | P | W | Activate when |169| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |170| `nodejs-backend` | L | ·· | REST, middleware, auth in Node/Bun |171| `java-backend` | L | ·· | Spring/JPA/Maven |172| `csharp-backend` | L | ·· | .NET / ASP.NET / EF |173| `golang` | L | · | Go idiomatic code, goroutines |174| `typescript-expert` | L | · | Advanced TS types/generics |175| `javascript-expert` | L | · | Modern JS, Bun, ESM |176| `python-ml` | L | ·· | Python, pandas, ML |177178### Git workflow179| Skill | P | W | Activate when |180| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |181| `git-commit` | any | · | Creating a commit from staged/unstaged changes |182| `git-branch` | any | · | Creating/switching/cleaning branches |183| `git-pr-create` | any | ·· | Opening a PR with semantic title + body |184| `git-review` / `review` | any | ·· | Code review of diff/PR |185| `git-changelog` | any | · | Generating changelogs / release notes |186| `git-master` | any | ·· | Broad flow automation across commit+branch+PR |187188### Quality, testing, debugging189| Skill | P | W | Activate when |190| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |191| `testing` | L | ·· | TDD, unit/integration strategy |192| `webapp-testing` | L | ·· | Playwright / Cypress / Testing Library |193| `backend-testing` | L | ·· | API tests, DB mocks, integration |194| `api-test-loop` | any | ··· | REST API validation loop via CURL (REST, security, perf, inputs, outputs) |195| `postman-generator` | any | ·· | Create Postman collections, environments, JS tests and run Newman |196| `systematic-debugging` | L | ·· | Non-trivial bug, needs repro/isolate/hypothesize |197| `auto-fix` | L | · | Build/TS/test error with known pattern |198| `error-fix-loop` | any | ··· | Any error requiring full quality cycle + docs/rules update |199| `security-review` | any | ·· | Security sweep of PR / diff |200| `refactoring-pro` / `simplify` | any | · | Reduce complexity, extract, DRY |201202### AI / agents / MCP / skills203| Skill | P | W | Activate when |204| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |205| `claude-api` | C | ·· | Building on Anthropic SDK, prompt caching, tool-use |206| `graphify` | any | ··· | Codebase/architecture question AND `graphify-out/` exists — query graph before raw exploration |207| `mcp-builder` / `create-mcp` | any | ··· | New MCP server with FastMCP or official SDK |208| `skill-creator` | any | ·· | Creating a new skill (use AFTER this selector decides) |209| `Agent Development` | C | ··· | Designing a new sub-agent / agent definition |210| `ai-setup` | L | ·· | Configure providers, models, keys |211| `azure-ai` | L | ·· | Azure OpenAI / Cognitive Services |212213### Media, content, marketing214| Skill | P | W | Activate when |215| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |216| `remotion-best-practices` | any | ·· | React video with Remotion |217| `heygen-best-practices` | any | ·· | HeyGen AI avatar video |218| `copywriting` | any | · | Landing copy, CTA, headline |219| `social-content` | any | · | LinkedIn / X / IG / social strategy |220| `lemon-blog-post` | C/G | ·· | Lemon blog article generation |221| `seo-audit` | L | ·· | SEO audit, meta, Core Web Vitals |222223### Documents & files224| Skill | P | W | Activate when |225| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |226| `xlsx` | any | ·· | Excel / CSV / spreadsheets |227| `pptx` | L | · | PowerPoint slide generation |228| `docx` | L | · | Word doc generation |229| `pdf` | L | · | PDF manipulation |230231### Harness, config, workflow232| Skill | P | W | Activate when |233| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |234| `update-config` | C | · | Edit settings.json, hooks, permissions |235| `fewer-permission-prompts` | C | · | Prune permission prompts from transcripts |236| `keybindings-help` | C | · | Rebind Claude Code keys / chords |237| `loop` / `schedule` | C | · | Recurring tasks, cron, polling |238| `find-skills` | any | · | User asks "is there a skill for X" |239| `init` | C | · | Initialize a new CLAUDE.md |240241### GSD (Get-Shit-Done) family — decimal phases, UAT, milestones242Activate only when the user is clearly inside a GSD workflow (you'll see a `.planning/` directory, a phase number, or explicit GSD vocabulary). Map 1:1 to the slash command:243`gsd:do`, `gsd:next`, `gsd:progress`, `gsd:plan-phase`, `gsd:execute-phase`, `gsd:verify-work`, `gsd:add-tests`, `gsd:debug`, `gsd:ship`, `gsd:review`, `gsd:audit-uat`, `gsd:add-backlog`, `gsd:new-milestone`, `gsd:complete-milestone`, `gsd:cleanup`, `gsd:health`, etc.244245> Rule: never pre-emptively open a GSD command outside a GSD project.246247---248249## Matching heuristics — fast patterns250251The table above is authoritative. This list is a quick regex-ish cheatsheet for the first pass:252253- `\bcommit\b|\bcommita\b|git add` → `git-commit`254- `\bpr\b|pull request|merge request` → `git-pr-create`255- `\breview(ing)?\b|audit diff` → `git-review` or `security-review`256- `\bbranch\b|checkout|switch` → `git-branch`257- `changelog|release notes` → `git-changelog`258- `design|redesign|landing|hero|figma` → `frontend-design` or `ui-ux-pro-max`259- `accessibility|a11y|wcag|contrast|keyboard nav` → `ui-ux-pro-max`260- `polish|micro(-| )interaction|spacing` → `ui-polisher`261- `react native|expo|android|ios\b` → `react-native` + possibly `vercel-react-native-skills`262- `mcp server|fastmcp|mcp tool` → `mcp-builder` / `create-mcp`263- `new skill|create a skill|skill md` → `skill-creator`264- `prompt cach(e|ing)|anthropic sdk|claude api` → `claude-api`265- `e2e|playwright|cypress` → `webapp-testing`266- `unit test|tdd|vitest|jest|bun test` → `testing` / `backend-testing`267- `\bapi-test-loop\b|validate api|test backend api|curl api` → `api-test-loop`268- `\bpostman-generator\b|postman|newman|collection|env|validate postman|valide` → `postman-generator`269- `bug|error|stack trace|regression` → `auto-fix` first, escalate to `systematic-debugging`270- `pod install.*error|NitroModules|Unable to find a specification|BUILD FAILED|update rules|update docs` → `error-fix-loop`271- `deploy|docker|k8s|pipeline|ci/cd` → `devops`272- `landing copy|headline|cta|pitch` → `copywriting`273- `linkedin|tweet|instagram|post` → `social-content`274- `xlsx|excel|spreadsheet` → `xlsx`275- `settings\.json|hook|permission|keybind` → `update-config` / `keybindings-help`276- `loop|every \d+ (min|hour)|cron` → `loop` / `schedule`277- `\bgsd\b|\.planning|phase \d+\.\d+` → GSD family278- `architecture|how does .* relate|understand the codebase` + `graphify-out/` exists → `graphify` (query mode)279280Multiple matches? Apply step 3 (rank & prune) before emitting.281282---283284## Examples285286**Trivial Q&A**287User: "what's the file that sets our default theme?"288→ `SKILLS: []` — answer inline with a grep. No skill earns its keep here.289290**Clear single-skill match**291User: "open a PR with the staged changes"292→ `SKILLS: [git-pr-create]` | INTENT: git-op | REASON: direct PR request | BUDGET: low | NEXT: run git status + git diff.293294**Conflict, pick narrower**295User: "create the commit"296→ `SKILLS: [git-commit]` (not `git-master`) | INTENT: git-op | REASON: narrow beats broad | BUDGET: low.297298**Design: light vs heavy**299User: "adjust header spacing" → `SKILLS: [ui-polisher]`.300User: "redesign the landing with a bolder identity" → `SKILLS: [frontend-design]` (or `ui-ux-pro-max` if a system-level sweep is asked).301302**Planning + build — do NOT chain**303User: "plan and implement watchlist feature X"304→ First turn: `SKILLS: [smart-dispatch]` | REASON: multi-model plan. Let it emit the dispatch table, then the user confirms before building.305306**Bug report**307User: "breaking with TS2322 in agent.ts:210"308→ `SKILLS: [auto-fix]` — pattern-matched, cheap. If 2 fix attempts fail, escalate to `systematic-debugging`.309310**New skill**311User: "create a skill to review SQL"312→ `SKILLS: [skills-selector, skill-creator]`? **No** — skills-selector is already running. Emit `SKILLS: [skill-creator]`.313314---315316## Rules & guardrails3173181. **Self-recursion is forbidden.** Never put `skills-selector` in the `SKILLS:` list. You are the chooser, not the choice.3192. **No silent escalation.** If you picked a heavy skill, your `REASON` must name the signal that justified it.3203. **Announce before you invoke.** Always emit the block. Never call a skill without emitting the plan first — the block is the audit trail.3214. **Respect user overrides.** If the user explicitly names a skill ("use ui-ux-pro-max for this"), pass it through — your job is scoping, not vetoing.3225. **Language stays with the user.** Keep the selection block in the user's language if non-English (US English/pt-BR OK). Identifiers (skill names, `SKILLS:` key) stay in English.3236. **Portability.** If the selected skill doesn't exist on the current platform, downgrade to the closest match on the same row of the catalog; note the substitution in `REASON`.3247. **Stop at selection.** After the block, hand off. Do not continue executing the selected skill's body — invoke it via the platform's Skill mechanism.3258. **If nothing fits, emit `[]`.** No-skill is a valid, often correct, answer. The default is to do the work inline with the base tools.326327---328329## Output template (copy exactly)330331```332SKILLS: [<csv or empty>]333INTENT: <intent-label>334REASON: <≤15 words>335BUDGET: <low|medium|high>336MAP: <consumed | none>337NEXT: <first concrete action>338```339340That block — or silence plus inline work — is the entire surface of this skill. Depth belongs to the skills you dispatch, not here.