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: Skills Selector — The Skill That Picks Skills4---56# Skills Selector — The Skill That Picks Skills78> 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.910## Why this skill exists1112Loading 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**.1314This skill is intentionally short. If you want depth, call the chosen skill — don't add it here.1516## Decision-native selection1718Treat selection as a bounded decision workflow over one shared state:1920```text21refined prompt or current request + executor/catalog facts22 -> typed selection questions evaluated together23 -> deterministic policy clamps24 -> SKILLS selection block25 -> chosen skill(s)26```2728The state contains only the objective, confirmed context, explicit user routes,29available catalog entries, platform, risk, and verification shape. Evaluate these30independent questions once: `intent` (Choice from the table), `primary_skill`31(Choice from the available catalog plus `none`), `secondary_skill` (Choice from32the remaining catalog plus `none`), `heavy_signal` (Noul), `budget` (Score:33low/medium/high), and `route_fit` (Score). Keep the answer space declared;34the selector never invents a skill or emits free-form routing JSON for another35component to parse.3637Use the static catalog and rules as the default. A calibrated scorer is optional,38model-agnostic, and advisory until local validation supports enforcement. Its39probabilities are routing signals, not correctness proof. If it is missing, invalid,40slow, or below a calibrated gate, mark confidence `unavailable` and use the static41catalog, `SKILLS: []`, or a sharp clarification as appropriate. Never compensate42for uncertainty by selecting a heavier skill or more skills.4344---4546## Protocol — run exactly these steps, in order4748### 0. Consume the EXEC-MAP contract if present (skip re-classification)4950If stage-0 (`senior-prompt-engineer`) already ran, an `EXEC-MAP v1` block is in context. **Consume it — do not re-classify from scratch:**51- Take `intent` directly as the primary intent (skip step 1).52- 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).53- Carry `effort`/`tokens` into `BUDGET`.54- Add `MAP: consumed` to the emitted block so the audit trail shows stage-0's work wasn't redone.55- Validate `skills`, `intent`, `effort`, and `router_fallback` against the current catalog and56 platform. Preserve the canonical `router`, `router_mode`, `router_confidence`, and57 `router_fallback` fields losslessly when valid; otherwise use the static policy values.5859Only fall through to steps 1–2 when **no** EXEC-MAP block exists.6061### 1. Build the shared state and classify once — only if no EXEC-MAP6263Construct the bounded state described above. Evaluate the typed questions once; do64not ask separate model calls to classify intent, choose skills, and estimate budget.65Use the artifact the user expects at the end to resolve ambiguity.6667### 1a. Classify the request (inline, silent) — only if no EXEC-MAP6869Assign the user's turn to **one primary intent** from:7071| Intent | Typical verbs / nouns |72| --------------------------- | ------------------------------------------------------------ |73| `plan` | "plan", "design the approach", "how should we", "architect" |74| `design-ui` | "design", "redesign", "landing page", "polish UI", "figma" |75| `build-code` | "implement", "build", "create <component/feature>", "add" |76| `fix-bug` | "fix", "not working", "error", "broken", "regression" |77| `refactor` | "refactor", "simplify", "clean up", "extract" |78| `review` | "review", "audit", "check diff", "is this safe" |79| `test` | "write tests", "coverage", "e2e", "unit test" |80| `git-op` | "commit", "pr", "branch", "changelog", "release notes" |81| `debug` | "debug", "trace", "repro", "investigate" |82| `docs` | "readme", "document", "write docs", "api doc" |83| `research` | "research", "compare", "survey", "find evidence" |84| `data` | "analyze data", "dataset", "query", "metrics" |85| `content` | "copy", "tweet", "post", "landing copy", "pitch" |86| `media` | "video", "remotion", "heygen", "thumbnail", "render" |87| `mcp-or-skill` | "mcp server", "new skill", "create a skill", "extend" |88| `config-harness` | "hook", "settings.json", "permission", "keybinding" |89| `ops` | "deploy", "ci", "docker", "k8s", "pipeline" |90| `trivial-or-chat` | Q&A, clarification, status checks, tiny edits |9192Ambiguous? Ask yourself: *what artifact does the user expect at the end?* That answer usually disambiguates.9394### 2. Match candidates from the catalog9596Look up the intent in the **Catalog** below. A request can match multiple rows — that's fine, rank them next.97983. **Rank and prune (token-aware)**99100Apply these rules, in order — each one can drop a candidate:1011021. **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`.1032. **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: []`.1043. **Cap at 2 skills per turn.** Orchestration cost grows super-linearly. If you picked 3+, drop the lowest-weight one or split the work.1054. **Prefer narrow over broad.** `git-commit` beats `git-master` for a commit. `ui-polisher` beats `ui-ux-pro-max` for a minor CSS tweak.1065. **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.1076. **Never chain design + plan + build in one turn.** Pick the nearest waypoint and let the user confirm before escalating.1087. **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`.1098. **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.1109. **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.111112### 4. Emit the selection block, then hand off113114Print **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.115116```117SKILLS: [skill-a, skill-b] # [] means "none — handle inline"118INTENT: <one-word>119REASON: <≤15 words, concrete>120BUDGET: <low | medium | high> # token/context intent121MAP: <consumed | none> # consumed = seeded from senior-prompt-engineer EXEC-MAP122NEXT: <first concrete action>123router: <heuristic | typed-scorer>124router_mode: <heuristic | shadow | advisory | enforce>125router_confidence: <0.00-1.00 | unavailable>126router_fallback: <ask | static-catalog | balanced | none>127```128129If `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.130131---132133## Catalog — keyword → skill (keep compact; depth lives inside each skill)134135Legend: **P** = platform scope (C=Claude, X=Codex, G=Gemini, L=lemon-code built-in, any=portable).136Weight is a rough token cost: `·` tiny, `··` small, `···` medium, `····` heavy. Prefer lower-weight skills when the task is small.137138### Planning & orchestration139| Skill | P | W | Activate when |140| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |141| `smart-dispatch` | any | ·· | Multi-step feature spanning ≥2 models/agents |142| `superpowers` (if installed) | C | ···· | User explicitly asks for "superpowers" or deep plan kit |143| `gsd:plan-phase` | C/X | ··· | Phase-level plan inside an existing GSD project |144| `gsd:discuss-phase` | C/X | ·· | Gathering phase context through Q&A |145| `gsd:new-project` | C/X | ···· | Bootstrapping a brand-new GSD project |146| `gsd:do` / `gsd:next` | C/X | · | "what's next" routing inside GSD workflow |147| `gsd:fast` / `gsd:quick` | C/X | · | Trivial or quick guaranteed-atomic task |148149### Design & UI150| Skill | P | W | Activate when |151| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |152| `frontend-design` | C/X | ···· | From-scratch page/component with strong visual identity |153| `ui-ux-pro-max` | C/X | ···· | Redesign, design system, accessibility sweep, figma import |154| `ui-polisher` (lemon) | L | ·· | Small polish: spacing, hierarchy, micro-interactions |155| `web-design-guidelines` | L | ·· | Principles Q&A: typography, spacing, color |156| `vercel-react-native-skills` | C | ··· | React Native / Expo perf, nav, lists |157158### Frontend & mobile code159| Skill | P | W | Activate when |160| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |161| `frontend` (lemon) | L | ·· | React/Next/Tailwind component work |162| `react-native` (lemon) | L | ·· | RN/Expo screens, animations |163| `vercel-react-best-practices` | L | ·· | Vercel/ISR/edge/bundle tuning |164| `mobile-fix-release-certificates` | C | ·· | Android Google Sign-In DEVELOPER_ERROR |165166### Backend / language167| Skill | P | W | Activate when |168| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |169| `nodejs-backend` | L | ·· | REST, middleware, auth in Node/Bun |170| `java-backend` | L | ·· | Spring/JPA/Maven |171| `csharp-backend` | L | ·· | .NET / ASP.NET / EF |172| `golang` | L | · | Go idiomatic code, goroutines |173| `typescript-expert` | L | · | Advanced TS types/generics |174| `javascript-expert` | L | · | Modern JS, Bun, ESM |175| `python-ml` | L | ·· | Python, pandas, ML |176177### Git workflow178| Skill | P | W | Activate when |179| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |180| `git-commit` | any | · | Creating a commit from staged/unstaged changes |181| `git-branch` | any | · | Creating/switching/cleaning branches |182| `git-pr-create` | any | ·· | Opening a PR with semantic title + body |183| `git-review` / `review` | any | ·· | Code review of diff/PR |184| `git-changelog` | any | · | Generating changelogs / release notes |185| `git-master` | any | ·· | Broad flow automation across commit+branch+PR |186187### Quality, testing, debugging188| Skill | P | W | Activate when |189| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |190| `testing` | L | ·· | TDD, unit/integration strategy |191| `webapp-testing` | L | ·· | Playwright / Cypress / Testing Library |192| `backend-testing` | L | ·· | API tests, DB mocks, integration |193| `api-test-loop` | any | ··· | REST API validation loop via CURL (REST, security, perf, inputs, outputs) |194| `postman-generator` | any | ·· | Create Postman collections, environments, JS tests and run Newman |195| `systematic-debugging` | L | ·· | Non-trivial bug, needs repro/isolate/hypothesize |196| `auto-fix` | L | · | Build/TS/test error with known pattern |197| `error-fix-loop` | any | ··· | Any error requiring full quality cycle + docs/rules update |198| `security-review` | any | ·· | Security sweep of PR / diff |199| `refactoring-pro` / `simplify` | any | · | Reduce complexity, extract, DRY |200201### AI / agents / MCP / skills202| Skill | P | W | Activate when |203| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |204| `claude-api` | C | ·· | Building on Anthropic SDK, prompt caching, tool-use |205| `graphify` | any | ··· | Codebase/architecture question AND `graphify-out/` exists — query graph before raw exploration |206| `mcp-builder` / `create-mcp` | any | ··· | New MCP server with FastMCP or official SDK |207| `skill-creator` | any | ·· | Creating a new skill (use AFTER this selector decides) |208| `Agent Development` | C | ··· | Designing a new sub-agent / agent definition |209| `ai-setup` | L | ·· | Configure providers, models, keys |210| `azure-ai` | L | ·· | Azure OpenAI / Cognitive Services |211212### Media, content, marketing213| Skill | P | W | Activate when |214| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |215| `remotion-best-practices` | any | ·· | React video with Remotion |216| `heygen-best-practices` | any | ·· | HeyGen AI avatar video |217| `copywriting` | any | · | Landing copy, CTA, headline |218| `social-content` | any | · | LinkedIn / X / IG / social strategy |219| `lemon-blog-post` | C/G | ·· | Lemon blog article generation |220| `seo-audit` | L | ·· | SEO audit, meta, Core Web Vitals |221222### Documents & files223| Skill | P | W | Activate when |224| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |225| `xlsx` | any | ·· | Excel / CSV / spreadsheets |226| `pptx` | L | · | PowerPoint slide generation |227| `docx` | L | · | Word doc generation |228| `pdf` | L | · | PDF manipulation |229230### Harness, config, workflow231| Skill | P | W | Activate when |232| ------------------------------ | ----- | ---- | ---------------------------------------------------------- |233| `update-config` | C | · | Edit settings.json, hooks, permissions |234| `fewer-permission-prompts` | C | · | Prune permission prompts from transcripts |235| `keybindings-help` | C | · | Rebind Claude Code keys / chords |236| `loop` / `schedule` | C | · | Recurring tasks, cron, polling |237| `find-skills` | any | · | User asks "is there a skill for X" |238| `init` | C | · | Initialize a new CLAUDE.md |239240### GSD (Get-Shit-Done) family — decimal phases, UAT, milestones241Activate 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:242`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.243244> Rule: never pre-emptively open a GSD command outside a GSD project.245246---247248## Matching heuristics — fast patterns249250The table above is authoritative. This list is a quick regex-ish cheatsheet for the first pass:251252- `\bcommit\b|\bcommita\b|git add` → `git-commit`253- `\bpr\b|pull request|merge request` → `git-pr-create`254- `\breview(ing)?\b|audit diff` → `git-review` or `security-review`255- `\bbranch\b|checkout|switch` → `git-branch`256- `changelog|release notes` → `git-changelog`257- `design|redesign|landing|hero|figma` → `frontend-design` or `ui-ux-pro-max`258- `accessibility|a11y|wcag|contrast|keyboard nav` → `ui-ux-pro-max`259- `polish|micro(-| )interaction|spacing` → `ui-polisher`260- `react native|expo|android|ios\b` → `react-native` + possibly `vercel-react-native-skills`261- `mcp server|fastmcp|mcp tool` → `mcp-builder` / `create-mcp`262- `new skill|create a skill|skill md` → `skill-creator`263- `prompt cach(e|ing)|anthropic sdk|claude api` → `claude-api`264- `e2e|playwright|cypress` → `webapp-testing`265- `unit test|tdd|vitest|jest|bun test` → `testing` / `backend-testing`266- `\bapi-test-loop\b|validate api|test backend api|curl api` → `api-test-loop`267- `\bpostman-generator\b|postman|newman|collection|env|validate postman|valide` → `postman-generator`268- `bug|error|stack trace|regression` → `auto-fix` first, escalate to `systematic-debugging`269- `pod install.*error|NitroModules|Unable to find a specification|BUILD FAILED|update rules|update docs` → `error-fix-loop`270- `deploy|docker|k8s|pipeline|ci/cd` → `devops`271- `landing copy|headline|cta|pitch` → `copywriting`272- `linkedin|tweet|instagram|post` → `social-content`273- `xlsx|excel|spreadsheet` → `xlsx`274- `settings\.json|hook|permission|keybind` → `update-config` / `keybindings-help`275- `loop|every \d+ (min|hour)|cron` → `loop` / `schedule`276- `\bgsd\b|\.planning|phase \d+\.\d+` → GSD family277- `architecture|how does .* relate|understand the codebase` + `graphify-out/` exists → `graphify` (query mode)278279Multiple matches? Apply step 3 (rank & prune) before emitting.280281---282283## Examples284285**Trivial Q&A**286User: "what's the file that sets our default theme?"287→ `SKILLS: []` — answer inline with a grep. No skill earns its keep here.288289**Clear single-skill match**290User: "open a PR with the staged changes"291→ `SKILLS: [git-pr-create]` | INTENT: git-op | REASON: direct PR request | BUDGET: low | NEXT: run git status + git diff.292293**Conflict, pick narrower**294User: "create the commit"295→ `SKILLS: [git-commit]` (not `git-master`) | INTENT: git-op | REASON: narrow beats broad | BUDGET: low.296297**Design: light vs heavy**298User: "adjust header spacing" → `SKILLS: [ui-polisher]`.299User: "redesign the landing with a bolder identity" → `SKILLS: [frontend-design]` (or `ui-ux-pro-max` if a system-level sweep is asked).300301**Planning + build — do NOT chain**302User: "plan and implement watchlist feature X"303→ First turn: `SKILLS: [smart-dispatch]` | REASON: multi-model plan. Let it emit the dispatch table, then the user confirms before building.304305**Bug report**306User: "breaking with TS2322 in agent.ts:210"307→ `SKILLS: [auto-fix]` — pattern-matched, cheap. If 2 fix attempts fail, escalate to `systematic-debugging`.308309**New skill**310User: "create a skill to review SQL"311→ `SKILLS: [skills-selector, skill-creator]`? **No** — skills-selector is already running. Emit `SKILLS: [skill-creator]`.312313---314315## Rules & guardrails3163171. **Self-recursion is forbidden.** Never put `skills-selector` in the `SKILLS:` list. You are the chooser, not the choice.3182. **No silent escalation.** If you picked a heavy skill, your `REASON` must name the signal that justified it.3193. **Announce before you invoke.** Always emit the block. Never call a skill without emitting the plan first — the block is the audit trail.3204. **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.3215. **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.3226. **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`.3237. **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.3248. **If nothing fits, emit `[]`.** No-skill is a valid, often correct, answer. The default is to do the work inline with the base tools.325326---327328## Output template (copy exactly)329330```331SKILLS: [<csv or empty>]332INTENT: <intent-label>333REASON: <≤15 words>334BUDGET: <low|medium|high>335MAP: <consumed | none>336NEXT: <first concrete action>337```338339That block — or silence plus inline work — is the entire surface of this skill. Depth belongs to the skills you dispatch, not here.