using-skills
The map, not the territory — and the map projects the ADOPTED surface, not the
installed one. Install granularity is per-repo (
pulls whole
packs); usage granularity is per-skill. The gap between them is bloat, and it
stays OUT of this file:
~/.agents/.skill-lock.json
records what is installed
(L0), the generated skill manifest shows the full roster with the gap made
visible (L1), and this file routes only what is actually in use (L2). Route by
INTENT, not by remembering ~100 names. When the owner is already obvious, skip
this map and enter the domain router or member directly.
Legend —
type:
(meta-router skill) ·
(direct member) ·
(a
recipe, entered THROUGH
) ·
(a
file, not a skill).
mode:
model-invocable ·
(
— read its SKILL.md
inline or use its slash command) ·
·
(just do it).
Two-hop max:
→ domain router → member. Never deeper, and never
route back here from inside a domain router. Visual work always enters
;
does not provide a route around its owner selection.
Intent table — "I need to…" → target
| I need to… | Target | Type · mode |
|---|
| run loop-shaped work (audit / plan→build / consensus / triage) | | ROUTER · Skill() |
| build/critique anything visual (page, screen, HTML deliverable, chart, artifact, motion, module/API design) | | ROUTER · Skill() |
| run/supervise a CLI as a tmux worker, or decide inline-vs-worker | | ROUTER · Skill() |
| shape a fuzzy idea before building (parallel divergence: ) | | SKILL · Skill() |
| stress-test a plan/decision/idea (frontier rounds; when ADRs/glossary should be written as you go) | | SKILL · Skill() |
| plan an effort too big for one session — chart it as decision tickets on the issue tracker, resolved one at a time | | SKILL · manual |
| not sure which flow fits (kickoff, cross-domain, fuzzy situation) | | SKILL · manual |
| check "is it actually done?" | verification-before-completion
| SKILL · Skill() |
| dig a weird bug to root cause (loop version) | root-cause-deep-dive-audit
| RECIPE · via |
| reconcile docs/design vs code drift | / | RECIPE · via |
| sort a pile of audit findings | | RECIPE · via |
| get a second-model verdict on ONE artifact | (preferred; for a one-off deep review) | RECIPE · via |
| diagnose a bug inline | | SKILL · Skill() |
| tidy or restructure code | (just-written, behavior-preserving) · (structural) | SKILL · Skill() |
| design a module/interface/domain (code, not pixels) | · · | SKILL · Skill() (or via Pipeline D) |
| investigate a question / gather evidence | | SKILL · Skill() |
| write tests / plan test coverage | · | SKILL · Skill() |
| drive a browser, test a web app, fill forms, screenshot / drive a device or TV app | · | SKILL · Skill() |
| read a pasted URL (article, docs page) | (WebFetch replacement; not for URLs) | SKILL · Skill() |
| read or produce a PDF | | SKILL · Skill() |
| hand off to a fresh session | | SKILL · Skill() |
| write anything meant to be read (in-repo docs, problem writeup, long-form piece → md / html / Artifact / image) | (unified writing entry: Stage 0 genre branch → for in-repo software docs, / for prose; throughout, renders via ) | SKILL · Skill() |
| commit / release | · (that repo only) | SKILL · Skill() |
| just implement something straightforward | — | inline (no skill; the domain is obvious) |
Vocabulary loaded as criteria, not stations:
(SKILL —
every delegated worker prompt),
(SKILL — surface
assumptions first),
+
(SKILL —
coding discipline),
~/.agents/rules/judgment-rubrics.md
(RULE — decision
scoring / wrong-direction signals / done-criteria).
Adopted families beyond the table — one line each
- Meta-routers (backbone) → this map + , , ; enter a domain router directly when the goal names it.
- Design-visual → /, , , , , , , , — ALWAYS through , the sole arbiter among overlapping anti-slop members (default ; new landing pages → ; Apple-grade polish → ; house-style diagrams → , one-off/interactive diagrams → ).
- Ideation → (mandatory gate before creative work), (parallel divergence), (throwaway prototype answers a design question).
- Grilling → (the implementation — asks each frontier of questions in one round, numbered, each with a recommended answer; dispatches sub-agents for facts). / are manual slash entries into it; the latter runs alongside for ADRs/glossary.
- Workflow orchestration → , via (approved designs only).
- Delegation → + via ; in-session parallel dispatch:
dispatching-parallel-agents
, subagent-driven-development
(direct).
- Git ops → ,
resolving-merge-conflicts
; (supply-chain review, direct).
- Ingest → , , (NOT in the skill lock — unmanaged), (library docs only; skill discovery belongs to ).
- Continuity / memory → , (curate shared Codex memory / submit external findings).
- Fleet meta → owns the create/optimize/eval PROCESS, with loaded as drafting criteria at every write/edit step (the stop-slop pattern); (discovery/install).
- Project-specific (Plannotator) → , — only inside that repo.
Dormant — installed, not routed
Whole packs or chains that are installed (in the lock, listed in the skill
manifest) but currently unused. They cost nothing while dormant; wake one by
reading its SKILL.md and, if it sticks, promote it into the table above:
- matt planning/tracker: ·
- niche code-craft:
improve-codebase-architecture
, , ,
- misc singles:
Secondary view — the idea→ship lifecycle
A journey, not the primary index (most tasks enter mid-stream via the table):
→
→ plan (via
:
plan-pipeline / feature-plan-consensus, tracked in a
run dir) →
build (via
lifecycle, or
for visual) →
verification-before-completion
. Keep brainstorm→plan in ONE context window;
use
at a session seam, not a
.
Curated map vs live availability
This file is CURATED first-hop navigation over the ADOPTED surface. It is NOT
the inventory of what is installed. For "does skill X exist on this machine /
which runtime sees it / is it manual-only / how bloated is a source repo",
consult the generated skill manifest (per-repo roster with the
installed-vs-adopted gap visible) and the live directories — never assume from
this map.
Red flags — rationalizations that have burned us
Naming one and proceeding anyway requires a stated reason:
- 「這只是小問題,不用 skill」— if the domain is obvious, go direct; if ownership
is unclear, let this map decide. Don't skip routing on substantial work — but
don't force the map when the owner is already plain.
- 「我記得那支 skill / recipe 的內容」— members evolve; read the live SKILL.md or
recipe header before acting. Never route from memory of an old inventory.
- 「先做完再回頭套流程」— for loop-shaped or visual work the router picks the RIGHT
process first; retrofitting it is how half-done work ships.
- 「裝了就該路由」— installed ≠ adopted. A dormant pack stays dormant until a
real task wakes it; never widen the table to mirror the lock.
Subagent exemption
A delegated worker executing one assigned task does NOT enter this router — the
dispatcher already routed; the worker follows its brief.
Freshness self-check (this map WILL drift)
It lists intents and paths, not a registry. When routing feels off, confirm the
map still matches the machine — check the SKILL fleet (not workflow-manifest,
which inventories recipes), across BOTH runtime dirs:
bash
installed=$(ls ~/.claude/skills ~/.agents/skills 2>/dev/null | grep -v '^$' | grep -v ':$' | sort -u | wc -l | tr -d ' ')
locked=$(node -e 'const j=require(process.env.HOME+"/.agents/.skill-lock.json");console.log(Object.keys(j.skills||{}).length)' 2>/dev/null)
echo "installed(union)=$installed locked=$locked"
A large mismatch, a station skill that no longer resolves, or a member the
active available-skills listing does not show → the map is stale: regenerate the
skill manifest before trusting a name here.
NOT-FOUND
No intent fits and it is not loop-shaped or visual → check the Dormant list
above (installed but unrouted — wake it), then the active available-skills
listing, then plain inline work. A genuinely new recurring intent → propose a
new skill/recipe to the user; never improvise a half-router inline.