dot_config/ai_templates/skills/distill/knowledge/meta-skill-creator/SKILL.md
Explicitly triggered when the user mentions `meta-skill-creator`. It creates router or meta-skills.
npx skillsauth add pascalandy/dotfiles meta-skill-creatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Create a hierarchical meta-skill where a minimal router delegates to specialized sub-skills.
Create a hierarchical meta-skill where a minimal router delegates to specialized sub-skills.
A meta-skill is a collection of related skills that share a single entry point. The user never picks a sub-skill -- they describe what they need, and the right specialist activates automatically.
Three layers make this work:
Collection (root SKILL.md) -- The user-facing documentation. Explains what the collection does, lists every sub-skill and workflow, shows invocation examples. This is also the entry point the skill system loads. It bridges to the router.
Router (ROUTER.md) -- A minimal dispatch table that maps intent keywords to sub-skill paths. It exists so the collection can stay readable and the routing logic stays isolated. One new row per new sub-skill.
Sub-skills (one directory each) -- Complete, standalone skills following Anthropic's skill anatomy. Each owns a distinct domain with no overlap. Each works independently if loaded directly, but the normal path is through the router.
This is progressive disclosure applied to sub-skills: the skill system reads the collection, the collection loads the router, the router loads one sub-skill. The user sees a single skill. The AI loads only what's needed.
[MetaSkill]/
├── SKILL.md # Layer 1: Collection (the ONLY file the scanner indexes as a skill)
└── references/
├── ROUTER.md # Layer 2: Router (pure routing table, ~20 lines)
├── [ModeA]/ # Layer 3: Simple sub-skill — MetaSkill.md is enough
│ └── MetaSkill.md
├── [ModeB]/ # Layer 3: Complex sub-skill — supporting material in references/
│ ├── MetaSkill.md
│ └── references/ # ALL supporting material lives here
│ ├── some-doc.md
│ ├── prompt-template.md
│ ├── scripts/
│ ├── templates/
│ ├── examples/
│ └── assets/
└── [ModeC]/
└── MetaSkill.md
Sub-skill size rule: A sub-skill root contains only MetaSkill.md plus an optional references/ directory. If a sub-skill is too large or complex to fit cleanly in a single MetaSkill.md — it has supporting docs, prompts, scripts, templates, examples, or assets — put ALL of that supporting material under the sub-skill's references/ directory. Do not scatter workflows/, scripts/, templates/, assets/ as siblings of MetaSkill.md; nest them inside references/.
Link hygiene: when supporting files live under references/, internal links inside MetaSkill.md must use the references/ prefix (e.g. references/some-doc.md, not some-doc.md).
Critical naming rule: the root file is SKILL.md (so the scanner discovers exactly one skill per meta-skill). Every sub-skill file is MetaSkill.md (so recursive SKILL.md scanners do not register sub-skills as independent top-level skills). See Why Sub-Skills Use MetaSkill.md below.
IMPORTANT: At the root, we should only see a SKILL.md file and a /references directory.
The entry point the skill system loads. Contains:
Must include this bridge to the router:
## Routing
Load `references/ROUTER.md` to determine which sub-skill handles this request.
Without this line, the router never gets read.
Minimal file. Contains ONLY frontmatter + a routing table.
---
name: [MetaSkill]
description: [What it does]. USE WHEN [all trigger keywords from all sub-skills merged into one flat list].
---
# [MetaSkill]
## Routing
| Request Pattern | Route To |
|---|---|
| keyword1, keyword2, keyword3 | `[ModeA]/MetaSkill.md` |
| keyword4, keyword5 | `[ModeB]/MetaSkill.md` |
| keyword6, keyword7, keyword8 | `[ModeC]/MetaSkill.md` |
The router's USE WHEN aggregates ALL keywords from ALL sub-skills. The routing table narrows to the specific one.
Each sub-skill follows Anthropic's skill anatomy but lives in a file named MetaSkill.md (not SKILL.md) so the scanner ignores it. It is only loaded explicitly through the router:
USE WHEN scoped to its domain)workflows/)Sub-skills are NOT directly invocable by name. The user always enters through the parent meta-skill (e.g. gstack, plan-ceo) and the router dispatches to the correct MetaSkill.md.
MetaSkill.mdSkill scanners (including Claude Code's native scanner) discover skills by walking the filesystem and indexing every SKILL.md they find. If sub-skills were named SKILL.md, the scanner would treat each one as an independent top-level skill. That breaks the meta-skill design in three ways:
gstack) and the router dispatches internally. Indexing sub-skills as standalone skills creates multiple competing entry points.review, qa, ship, plan) collide with other skills in the registry, and the wrong one can win.Renaming sub-skills to MetaSkill.md makes them invisible to the scanner. They keep the same content, frontmatter, and standalone format — they are simply loaded explicitly via the router instead of being discovered. The parent SKILL.md is the only file the scanner registers.
SKILL.md is named SKILL.md; every sub-skill file is MetaSkill.mdMetaSkill.md (+ optional references/). All supporting files (docs, prompts, scripts, templates, examples, assets) live under that sub-skill's references/ directory, never as siblings of MetaSkill.mdA skill is a folder of markdown files and optional scripts. It runs on any coding assistant -- Claude Code, Codex, Gemini, No harness-specific dependencies. Concretely:
~/.claude/, or any assistant's internal directories. Skills reference their own files via relative paths (references/, workflows/, scripts/).hooks, present_files, etc. Describe the action needed ("run this script", "read this file", "search the codebase") and let the harness map it to its own tooling./Users/andy16/.local/share/chezmoi/dot_config/ai_templates/skills/think/thinkingA meta-skill named [NAME] that [PURPOSE].
Sub-skills:
development
Explicitly triggered when the user mentions `wiki-map`. It ingests, queries, lints, or compiles a markdown wiki.
testing
Explicitly triggered when the user mentions `single-skill-creator`. It scaffolds a new `SKILL.md`.
testing
Explicitly triggered when the user mentions `qmd`. It searches local markdown or QMD collections.
development
Explicitly triggered when the user mentions `ontology-map`. It builds, refreshes, or checks an ontology.