v1.0.1 · MIT · Python 3.9+

Skills you
installed but
never trigger.

skill-router groups skills under a well-described router — fixing trigger reliability and recovering context headroom at the same time.

40+
Supported agents
3
Parts every good
description needs
0
Original skills
modified

Installed.
Never used.

01.

Vague Descriptions

Most third-party skills ship with descriptions like "A tool for animating UI components." No trigger conditions. No guidance on when to prefer it over alternatives. The agent sees it and doesn't know when it applies.

02.

Missing Trigger Conditions

Without explicit WHEN conditions, the agent guesses — and guesses wrong. Skills that should fire on "make this feel alive" never trigger. Skills that shouldn't fire on unrelated requests do. The skill isn't broken; the description is.

03.

No NOT-WHEN Boundaries

Without negative trigger conditions, the agent can't distinguish between adjacent skills. A UI review skill and a UI polish skill look identical from the description alone. One crowds out the other.

04.

Context Window Bloat

It's common to have 100+ skills installed — and that number only grows. Without grouping, skills compound: each new install quietly burns more context at startup, leaving less room for your actual work. The problem gets worse with every install.

Wrap. Describe.
Trigger reliably.

Before — vague, never triggers
animate/SKILL.md

description: >
  A tool for animating
  UI components.

↑ no trigger conditions
  agent ignores it
After — router with proper description
.claude/skills/
  animate/         ← untouched
  polish/          ← untouched
  ui-design/       ← router
    SKILL.md
    _manifest.json

description: Use when the user wants
to add motion, improve visual feel,
or polish UI before shipping. Do NOT
use for writing new components.

The router synthesizes a WHAT + WHEN + NOT-WHEN description from the sub-skills' actual content. When triggered, it dispatches to the right original skill. Originals are never modified.

N skills.
One entry.

Skills compound. Every new install quietly adds more tokens to your startup overhead — and without grouping, it only gets worse. skill-router suppresses sub-skill descriptions automatically, so only the router's single entry loads into context. Same capabilities. A fraction of the overhead.

Before — every skill in context
animate
polish
critique
arrange
audit
colorize
bolder
clarify
delight
distill
extract
frontend
harden
normalize
onboard
optimize
overdrive
quieter
typeset
adapt
teach-…
Context used at startup
100+ descriptions · tens of thousands of tokens
After — only the router in context
ui-design
animate disable-model-invocation: true
polish disable-model-invocation: true
critique disable-model-invocation: true
arrange disable-model-invocation: true
· · · 17 more suppressed · · ·
Context used at startup
1 description · ~400 tokens

Sub-skills remain fully accessible — the router dispatches to them on demand. They just don't occupy context until they're needed.

Six steps.
Done.

Detect

Scans the project for known agent directories — with smart markers to avoid false positives.

Determine

Identifies which skills to group — user-specified or auto-suggested by collection.

Synthesize

Reads sub-skill descriptions and writes a unified router description (WHAT + WHEN + NOT-WHEN).

Preview

Dry-run generates the full SKILL.md for review before any files are written.

Create

Writes the router skill directory with SKILL.md and _manifest.json. Originals untouched.

Explain

Tells you how to invoke the router (/router-name) and sub-skills directly (/skill-name).

Works with
40+ agents.

Universal agents (share .agents/skills/)
amp
antigravity
cline
codex
cursor
deep agents
gemini cli
github copilot
kimi cli
opencode
replit
warp
Non-universal agents (dedicated directories)
adal
augment
claude code
codebuddy
command code
continue
cortex
crush
droid
goose
iflow cli
junie
kilo code
kiro cli
kode
mcpjam
mistral vibe
mux
neovate
openclaw ¹
openhands
pi
pochi
qoder
qwen code
roo code
trae
trae cn
windsurf
zencoder

¹ OpenClaw uses a generic skills/ directory name. Detection requires a .openclaw/ marker in the project root to avoid false positives.

Install in
one command.

npx skills install chrishan17/skill-router

# Then tell your agent:
/skill-router
View Full Docs on GitHub →