Skip to content
Development
Skill

/skill-router

Use when a [skill-router] route card appears in the turn, when no card appeared on a non-trivial task, or when a route looks wrong. Routes every prompt to the right installed skill, pairs it with a process skill, tiers enforcement, and briefs sub-agents. 79 local skills + plugin

From plugin
skill-router
231 skill
Install
$ npx -y skills add hussi9/skill-router --skill skill-router --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/skill-router

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use when a [skill-router] route card appears in the turn, when no card appeared on a non-trivial task, or when a route looks wrong. Routes every prompt to the right installed skill, pairs it with a process skill, tiers enforcement, and briefs sub-agents. 79 local skills + plugin

SKILL.md

skill-router.SKILL.md
name: skill-router
description: Use when a [skill-router] route card appears in the turn, when no card appeared on a non-trivial task, or when a route looks wrong. Routes every prompt to the right installed skill, pairs it with a process skill, tiers enforcement, and briefs sub-agents. 79 local skills + plugin skills indexed.

Skill Router (v4)

Routing runs from hooks. A `UserPromptSubmit` hook classifies every prompt and injects a **route card** before your first action. Your job is to *follow the card*, not to compute one.

The route card

[skill-router] This is a BROKEN task — 2-step chain.
[skill-router] Chain: mac-doctor → superpowers:systematic-debugging
▶ mac-doctor  (inherit, in-session)
▶ superpowers:systematic-debugging  (inherit, in-session)
[skill-router] Gates before done: simulator screenshot
[skill-router] Memory: airbook_crash_root_cause  (read from ~/.claude/projects/-Users-airbook/memory/)
[skill-router] IRON RULE: call Skill(skill="mac-doctor") before any Edit/Write/Task.
  • **First `▶` is the domain skill** — one of yours, or a plugin's. Load it first.
  • **Second `▶` is the process skill** (debugging, planning, TDD). Load it next.
  • **Gates** are completion conditions from the project. Check every one before "done".
  • **Memory** names the memory file for this project. Read it before deciding.

Two tiers

| Line on the card | Meaning | |---|---| | `IRON RULE: …` | **hard** — Edit/Write/Task are denied until the skill is loaded. BROKEN path, and project routes with gates. | | `Soft route: …` | **soft** — nothing is blocked. If you finish without loading it, the Stop hook asks once; answer by loading it or by one line `[skill-router] skipped <skill>: <reason>`. |

Wrong route either way: `python3 ~/.claude/skills/skill-router/scripts/router_override.py "<reason>"`. The user can also write `[no-router]` in their message.

How the card is decided

1. **Project route** in `SKILL.personal.md` (`@economicalai`, `capgo`, …) — deterministic. 2. **Jev** (TypeSafe System One, `jev_choose.py`, ~0.4 s, cached) reads the whole enriched index (`~/.claude/skill_index.json`) in one call — no lexical pre-filter, so typos do not matter — and answers two Choice questions: domain skill, process skill. Confidence ≥ 0.8 routes; anything lower is silence (a 0.5–0.8 `Possible fit:` line exists behind `SKILL_ROUTER_JEV_SUGGEST=1`, off by default — it was right one time in three). When Jev answers, only Jev puts a skill on the card; a skill already loaded this session is never carded again. 3. **Fallback** when Jev fails or passes 1.2 s: lexical rank of the index (~50 ms), then a small model (Gemini Flash-Lite, ~1 s, cached) over the top candidates. 4. **Process table** (`references/routing-tables.md`) supplies the process leg on the fallback path only.

Questions, discussion and harness noise get no card. Silence is an answer.

Sub-agents

Every `Agent(...)` dispatch gets the parent's route appended to its prompt (skill, gates, memory), and `SubagentStart` briefs the agent with the skills paired to its type. Enforcement never reaches inside a sub-agent.

When there is no card

Non-trivial task, no `[skill-router]` line? Run the fallback yourself: `python3 ~/.claude/skills/skill-router/scripts/router.py <<< "the prompt"`. If that is silent too, routing may be dead: `python3 ~/.claude/skills/skill-router/scripts/doctor.py`.

Maintenance

| Command | When | |---|---| | `scripts/doctor.py` | routing feels dead, or after a Claude Code upgrade | | `scripts/build_index.py --enrich` | you installed or edited a skill | | `scripts/index_match.py --all "<prompt>"` | a route looked wrong — see the ranking | | `scripts/learn.py --show` | what has been learned | | `scripts/check.sh` | after editing any routing logic |

Project routes, projects, gates: `SKILL.personal.md`. Full tables and protocols: `references/routing-tables.md`.

Read more
Ships withskill-router

Your skill first, the process skill second, gates and memory on the card — before any tool fires. A hook-driven router for Claude Code.

Get the whole plugin
Stats
23
Stars
0
Forks
Active
Maintenance
Python
Language
MIT
License
4h ago
Last commit
5mo ago
Created

Repo: hussi9/skill-router