Pocock Skills · Lesson 03 · Authoring craft
User- vs model-invoked, the two loads you spend, and why routers exist.
We cross from methodology into authoring craft here. Lesson 02 ended on a
teaser: every orchestrating skill in the flow carries disable-model-invocation: true.
That single frontmatter line is the most consequential decision you make when authoring a skill, and
it turns on one question — who is allowed to invoke this?[wgs]
disable-model-invocation; write a model-facing description rich in trigger phrasing
("Use when the user wants…, mentions…").
disable-model-invocation: true; the
description becomes human-facing — a one-line summary, trigger lists stripped.
In the flow from Lesson 02: the orchestrators (grill-with-docs, to-spec,
to-tickets, implement) are user-invoked — you walk
them. The reusable disciplines beneath (tdd, code-review,
domain-modeling) are model-invoked so the orchestrators can reach them.
The README states the constraint crisply: a user-invoked skill may invoke model-invoked ones, but
never another user-invoked one.[readme]
This is the heart of the lesson. Invocation isn't free either way — each kind spends a different, scarce resource:
So the rule for choosing: pick model-invocation only when the agent must reach the skill on its own, or another skill must. If it only ever fires by hand, make it user-invoked and pay no context load.[wgs]
Push everything to user-invoked to save context load, and eventually you can't remember what you have. That piled-up cognitive load has a specific cure: a router skill — one user-invoked skill that names the others and says when to reach for each.[wgs]
You've already met one. ask-matt from Lesson 02 — "you don't remember every skill, so
ask" — is the router over this repo's user-invoked skills. It converts "which of my 15 skills
fits this?" (your memory) back into "ask the agent" (the window, but only when you invoke it). The
router is how the repo scales past what a human can hold without making every skill pay perpetual
context load.[askmatt]
A model-invoked description does two jobs: state what the skill is, and list the branches that should trigger it. Every word adds context load, so it earns even harder pruning than the body:[wgs]
Recall from memory.
A skill only ever fires when you type its name by hand. How should it be invoked?
If it only fires by hand, user-invoked pays no context load. The description becomes human-facing (triggers stripped) — the agent can't reach it, which is the point.
What does a model-invoked skill's description cost, and when?
A model-invoked description sits in the context window every turn, firing or not — that perpetual rent is context load. Cognitive load is the user-invoked cost.
Too many user-invoked skills to remember. What's the prescribed cure?
Piled-up cognitive load is cured by a router (like ask-matt) — it
keeps them user-invoked (no context load) but hands the "which one?" job back to the agent.
Read the Invocation and Writing the description sections of
writing-great-skills/SKILL.md.
This file is the textbook for the rest of the authoring arc — Lessons 04–06 all come from it.
The README's Reference
section states the "never invoke another user-invoked skill" rule.[wgs][readme]
SKILL.md
and what gets pushed behind a pointer.
References
skills/productivity/writing-great-skills/SKILL.md (Invocation; Writing the description).skills/engineering/ask-matt/SKILL.md (the router).