Core rule: Prefer NONE or one primary skill. Route by mechanism fit, not habit. Combine only when roles are distinct and necessary.
When to Use
The right thinking skill is unclear and you would otherwise guess or stack tools.
Several catalog skills seem plausible and you need a single primary (or explicit NONE).
High-stakes work where a wrong frame is costly and a quick domain×type match helps.
When NOT to Use
The match is already known or obvious ("where's the bottleneck?" → theory-of-constraints) — invoke that skill directly; do not route for show.
The task is routine implementation with no analytical unknown — reason directly (NONE).
You are mid-execution of an agreed plan and only need the next concrete step.
The ask is outside this catalog (pure coding syntax, tool ops with no judgment call) — NONE.
Invoking a Model (Skill IDs)
The router outputs bare slugs (e.g. id: five-whys-plus). Invoke a routed skill with the Skill tool using the exact ID thinking-skills:thinking-<slug> — never invent a slug not cited in Procedure. NONE means no invocation.
Procedure
Short-circuit. If one skill clearly fits by mechanism, return that skill alone. If no skill clearly improves the work, return NONE and reason directly. Stop.
Characterize. Record domain (coding, architecture, product, strategy, personal, abstract, risk, innovation) and problem type (diagnose, decide, understand, create, evaluate, predict, optimize). Note constraints: time, information, stakes, reversibility, complexity.
Candidate by type defaults (override when constraints demand). Keep only active catalog skills:
Diagnose → five-whys-plus or scientific-method (kepner-tregoe if IS/IS-NOT matrix needed)
Decide → reversibility first; then opportunity-cost or probabilistic
Understand → systems (map-territory if model-vs-reality gap; cynefin if approach domain unclear)
Create → first-principles (triz for contradictions; effectuation for means-driven; via-negativa for remove-first)
Evaluate → steel-manning (socratic if assumptions/definitions are the unknown)
Predict → probabilistic
Optimize → theory-of-constraints (ooda under time pressure; bounded-rationality for search stop)
Risk / "what fails?" → pre-mortem or red-team; margin-of-safety for buffers
Multi-lens only after one primary fails a blind-spot check → model-combination
Select with criteria (satisficing). Score only if 2+ candidates remain or stakes make a forced default unsafe. Rate each criterion 1–5 (1 = absent/wrong fit; 3 = usable with gaps; 5 = direct fit): problem fit (30%), available inputs (20%), time to apply (15%), stakeholder usability (15%), competence to apply correctly (20%). A route must score problem fit ≥4 and weighted total ≥3.5; otherwise return NONE. For totals within 0.25, prefer fewer inputs and shorter execution; if still tied, choose NONE unless the skills answer distinct complementary questions.
Multi-skill only as exception. Add a second or third skill only when each has a distinct complementary role the primary leaves open. Cap at three. Prefer sequential over parallel. Near-neighbors and synonyms do not stack. For composition patterns, hand off to model-combination after naming the primary.
Exit. State abandon signals (forced fit, ignored factors, no insight ~15 minutes). On mismatch, re-route once or fall back to NONE — never force a frame.
Domain cheat-map (primary first; still default to one or NONE):
| Domain signal | Prefer |
|---------------|--------|
| Bug / root cause / flaky | five-whys-plus, scientific-method, systems |
outcome: NONE | one | multi
routes:
- id: <primary skill id or NONE>
role: <job this skill performs>
unique_question: <question only this route answers>
- id: <secondary skill id, only for multi>
role: <distinct complementary job>
unique_question: <distinct open question>
- id: <tertiary skill id, only for multi>
role: <distinct complementary job>
unique_question: <distinct open question>
domain: <domain>
problem_type: <type>
constraints: <time/info/stakes/reversibility>
rationale: <mechanism fit in one sentence>
blind_spots: <what primary still ignores, if any>
exit: <when to abandon or re-route>
Default fill: outcome: NONE with one id: NONE route, or outcome: one with one route. Use multi only when every listed skill has a distinct role and unique question.
Verification
Falsify / stop: If the route is habit or familiarity rather than mechanism fit, discard and re-score or return NONE. If multi-skill entries lack distinct roles, collapse to the single best primary. If no candidate clearly helps, NONE is correct — do not invent a route.
Over-application guard: Do not route when the skill is already obvious. Do not return more than three skills. Do not cite deleted or non-catalog names. Do not treat the router as a prerequisite for leaf skills invoked directly.
How to use it
Copy the folder
Take tjboudreaux/thinking-model-router from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
Check the name does not clash
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.