Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Principles for writing skills that behave the same way every run — use when adding, editing, or reviewing a skill in this plugin
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 174% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 21% | 0% |
A skill exists to get determinism out of a stochastic system. Predictability is the goal, and it means the agent takes the same process every run — not that it produces the same output. Every rule below serves that.
docs/PLUGIN-ASSEMBLY-STANDARD.md already fixes the structure a skill body should take. This is about what makes the content inside that structure work.
Adapted from writing-great-skills in mattpocock/skills (MIT), with the invocation section rewritten for how this plugin actually loads skills.
CLAUDE.md.
That is docs/PLUGIN-ASSEMBLY-STANDARD.md and the CI suites.
skill-meta-prompt.The skill under construction or review, and an honest answer to: what should the agent do differently because this exists?
Upstream draws a clean line between a model-invoked skill (carries a description, the agent can fire it autonomously, costs context every turn) and a user-invoked one (disable-model-invocation: true, zero context cost, but the user must remember it exists).
That line does not transfer cleanly here, and getting it wrong breaks routing. Six skills in this repo declare invocation: human_only. That key is custom — scripts/build-codex-skills.sh strips it from the generated tree, and nothing reads it. The real effect comes from an advisory reminder in hooks/context-reinforcement.sh, kept in step by tests/unit/test-human-only-skill-list.sh.
Do not reach for disable-model-invocation: true to express "human-only" here. Four of those six are named in command bodies (commands/parallel.md, factory.md, research.md, security.md) and the model reaches them on the user's behalf when running those commands. Disabling model invocation would break /octo:parallel, /octo:factory, /octo:research, /octo:security.
So in this plugin: "human-only" means do not fire from prompt-keyword auto-routing. Declare it with invocation: human_only, add the skill to the hook's list, and accept that it is advisory.
The description does two jobs: say what the skill is, and list the branches that should trigger it. It sits in the context window every turn, so it earns harder pruning than the body.
duplication: "use for test-first development … when the user wants TDD" is one branch written twice.
skill needs this" clause, and nothing else.
not skill count. Before adding a trigger phrase, check whether an existing skill or hooks/user-prompt-submit.sh already claims it — that hook auto-invokes on strong matches, and a new overlapping phrase degrades a working route rather than adding one.
Content is either a step (an ordered action) or reference (a rule or fact consulted on demand). A skill can be all of one, or both. Place each piece on the rung it belongs:
a legitimate shape, not a smell.
loaded only when the pointer fires. skills/blocks/ is where shared ones live.
Push too little down and the top bloats; push too much and the agent never finds what it needs. Branching is the cleanest test: inline what every run needs, push behind a pointer what only some runs reach.
Every step ends on a condition that says the work is done. Make it:
than "review the changes". A vague criterion invites stopping early on something that looks finished.
"Produce a summary" is not a completion criterion. "Every boundary in the table maps to a real handoff in the setup" is.
A body that names the orchestrator script directly is required by tests/unit/test-mandatory-compliance.sh to carry a MANDATORY COMPLIANCE block and a PROHIBITED list. That is deliberate for skills that dispatch providers and spend money. It is dead weight on an advisory skill — so if a skill only advises, refer to workflows by their /octo: command names and skip the ceremony rather than adding a compliance block nobody needs.
docs/PLUGIN-ASSEMBLY-STANDARD.md for required structure.existing skill instead; a near-duplicate makes both harder to reach.
would not have done anyway".
skill that already covers the area, not in a new file.
When reviewing, report:
hooks/user-prompt-submit.sh or an existingskill's description.
.claude-plugin/plugin.json and make sync isclean.
invocation: human_only, it is in the hook list andtests/unit/test-human-only-skill-list.sh passes.
Other measured skills in the registry, with their headline benchmark lift.