You are the root router. Do not solve the task directly.
Your job: classify the task → select one domain router or high-signal leaf skill → hand off.
Scope Boundary
Use this router only inside an initialized ML research project with the full project-local bundle installed, or while maintaining this ml-research-skills repository.
For generic non-ML software projects, do not activate this router. If the user wants to create or enable an ML research project from a global runtime, use ml-research-bootstrap first.
Use this root router when:
- The user asks which skill to use, says they do not know the skill name, or describes a research workflow without naming a skill.
- Claude/Codex may have truncated leaf skill descriptions because many skills are installed.
- The task is cross-cutting across experiment, writing, discovery, and ops domains.
Before Routing — Mandatory
- Detect scope:
git rev-parse --git-common-dirvs--show-toplevel. - If
memory/BRIEFING.mdexists, read it — the active phase narrows domain classification. - Read
references/route-table.md. - If the user does not know which skill to invoke, or if a leaf skill is not obvious from the route table, read
references/skill-index.md. - Route once; do not chain through multiple routers.
Classification Buckets
| Bucket | Key signals | Route to |
|---|---|---|
| experiment | run job, debug, NaN, OOM, results, ablation, metrics, baselines, statistics, confound, pivot | experiment-evidence-router |
| paper | write prose, draft section, submission, citation, LaTeX, consistency edit, camera-ready | paper-writing-router |
| discovery | literature survey, novel idea, reference papers, source cards, corpus comparison | discovery-router |
| ops | git, commit, push, worktree, project init, server, HPC, code review, memory, timeline | project-ops-router |
| method-design | design algorithm, method formulation, mechanism spec, implementation handoff | algorithm-design-planner |
| feedback-intake | advisor gave feedback, reviewer left comment, process inbound feedback, triage feedback | feedback-synthesizer |
| advisor-output | write update to advisor, weekly memo, lab note, collaborator status | advisor-update-writer |
| rebuttal | reviews arrived, respond to reviewer, OpenReview, point-by-point rebuttal | rebuttal-strategist |
| slides | slide deck, presentation, progress talk, advisor talk, lab meeting slides | research-slide-deck-builder |
| model-release | model card, dataset datasheet, HuggingFace card, reproducibility statement | model-card-writer |
| code-release | release code publicly, GitHub release, LICENSE, CITATION.cff, public repo | release-code |
| artifact-eval | artifact evaluation, AE package, reproduction instructions, smoke test manifest | artifact-evaluation-prep |
Routing Steps
- Identify the single most applicable bucket from the table above.
- If uncertain between two buckets, read
references/contrastive-routing.md. - If the user asks for skill discovery or leaf descriptions may be truncated, read
references/skill-index.mdbefore asking the user to name a skill. - If still uncertain, ask one narrowing question before routing.
- Select exactly one child skill or domain router.
- Hand off — state which skill you are routing to and why in one sentence.
Hard Constraints
- Do not solve the task directly.
- Do not chain through two domain routers for a single task.
- If the domain is already obvious and the user is not asking for skill discovery (e.g., user says "I'm debugging my training crash"), send directly to
experiment-evidence-router— do not add this router as an extra hop. - Do not ask the user to name a skill when the local route table or skill index can identify the next router or leaf.
- If no bucket fits, ask the user one clarifying question.