Install any skill in seconds. Free to start, no credit card required.
Get Started Free →This skill should be used when the user has a vague or cross-domain request and asks "which skill should I use", "is there a skill for this", "find the right skill", or "route this to the best skill" — it matches an intent against the whole skills library and recommends the best-fit skill(s).
.claude/skills/borghei-skill-router/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-22 | ✗→✓ | ▲ Improved | 57% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 190% | 0% |
This library has hundreds of skills across sixteen domains. A user rarely knows the exact skill name — they know their intent ("I need to figure out what to build next quarter," "I have to respond to a data breach"). The router closes that gap: it matches a free-text request against every skill's description and tags, ranks the candidates, and recommends the best fit — so the right skill activates on the first try instead of the user grepping folders or guessing.
It is the user-invoked orchestrator in the two-tier model: it never does the work itself, it routes to the skill (the discipline) that does. Treat its output as a recommendation, then activate the chosen skill.
Before routing, confirm these inputs. If any is unknown or vague, ASK — do not assume:
Stop rule: if the request is already specific, skip the questions and route directly.
bash# Recommend the best-fit skills for an intent python scripts/route_skill.py "plan a go-to-market for a new B2B feature" # Narrow to a domain, or widen the result set python scripts/route_skill.py "respond to a data breach" --top 5 python scripts/route_skill.py "forecast revenue" --domain finance --format json
route_skill.py "<the user's goal>" against the generated catalog (cli/skills.json).The script scores each skill by term overlap between the query and the skill's name, tags, domain, and description, weighting exact name/tag hits highest. It reads the catalog from cli/skills.json (regenerated by scripts/build_manifest.py), so it always reflects the current library without hardcoding any skill list.
In Scope: Matching a free-text intent against the skills catalog and recommending the best-fit skill(s); disambiguating similar skills; confirming whether a skill exists for a goal.
Out of Scope: Executing the matched skill's workflow (that's the target skill's job); multi-skill workflow orchestration across a sequence (see standards/ orchestration protocol and agents/personas/); installing or extracting skills.
Dependency note: the router reads the repo-level catalog cli/skills.json. It is a navigation aid for use within the library, not a standalone single-skill download — if the catalog is absent, point the script at it with --catalog <path> or regenerate it with python scripts/build_manifest.py.
scripts/route_skill.py — intent-to-skill scorer over cli/skills.json.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | fail→pass | 7,691 | 5,505 | -28% | 1 | 1 | 0% | 1,123 | 1,763 | +57% | 0 | 0 | — |
case-01 | fail→pass | 10,179 | 9,705 | -5% | 1 | 1 | 0% | 1,470 | 2,482 | +69% | 0 | 0 | — |
case-02 | fail→pass | 16,909 | 7,991 | -53% | 1 | 1 | 0% | 2,330 | 2,328 | -0% | 0 | 0 | — |
case-03 | fail→fail | 2,551 | 6,939 | +172% | 1 | 1 | 0% | 359 | 2,071 | +477% | 0 | 0 | — |
case-04 | fail→pass | 6,350 | 3,881 | -39% | 1 | 1 | 0% | 1,079 | 1,538 | +43% | 0 | 0 | — |
case-05 | pass→pass | 10,040 | 5,508 | -45% | 1 | 1 | 0% | 1,527 | 1,760 | +15% | 0 | 0 | — |
case-06 | fail→pass | 10,197 | 2,537 | -75% | 1 | 1 | 0% | 474 | 1,375 | +190% | 0 | 0 | — |
case-07 | fail→pass | 8,919 | 3,123 | -65% | 1 | 1 | 0% | 1,475 | 1,407 | -5% | 0 | 0 | — |
case-08 | pass→pass | 24,134 | 2,475 | -90% | 1 | 1 | 0% | 2,099 | 1,378 | -34% | 0 | 0 | — |
case-09 | fail→pass | 8,523 | 2,275 | -73% | 1 | 1 | 0% | 1,466 | 1,410 | -4% | 0 | 0 | — |
case-10 | fail→pass | 11,007 | 1,962 | -82% | 1 | 1 | 0% | 1,797 | 1,314 | -27% | 0 | 0 | — |
case-11 | pass→pass | 11,388 | 7,037 | -38% | 1 | 1 | 0% | 1,716 | 2,093 | +22% | 0 | 0 | — |
case-12 | fail→pass | 11,996 | 5,122 | -57% | 1 | 1 | 0% | 1,863 | 1,808 | -3% | 0 | 0 | — |
case-13 | fail→pass | 10,108 | 2,428 | -76% | 1 | 1 | 0% | 1,642 | 1,328 | -19% | 0 | 0 | — |
case-14 | fail→pass | 10,797 | 2,310 | -79% | 1 | 1 | 0% | 1,686 | 1,340 | -21% | 0 | 0 | — |
case-15 | fail→pass | 12,514 | 7,436 | -41% | 1 | 1 | 0% | 1,979 | 2,183 | +10% | 0 | 0 | — |
case-16 | pass→pass | 8,180 | 3,120 | -62% | 1 | 1 | 0% | 1,195 | 1,425 | +19% | 0 | 0 | — |
case-17 | pass→pass | 13,616 | 5,184 | -62% | 1 | 1 | 0% | 2,187 | 1,778 | -19% | 0 | 0 | — |
case-18 | fail→pass | 11,640 | 6,163 | -47% | 1 | 1 | 0% | 1,819 | 1,977 | +9% | 0 | 0 | — |
case-19 | pass→pass | 13,948 | 3,068 | -78% | 1 | 1 | 0% | 1,194 | 1,470 | +23% | 0 | 0 | — |
case-20 | fail→pass | 13,739 | 9,885 | -28% | 1 | 1 | 0% | 2,590 | 2,673 | +3% | 0 | 0 | — |
case-21 | fail→fail | 13,055 | 6,648 | -49% | 1 | 1 | 0% | 2,010 | 2,017 | +0% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +64 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.