skills/skill-authoring/SKILL.md
Principles for writing skills that behave the same way every run — use when adding, editing, or reviewing a skill in this plugin
npx skillsauth add nyldn/claude-octopus skill-authoringInstall 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.
Host: Codex CLI — This skill was designed for Claude Code and adapted for Codex. Cross-reference commands use installed skill names in Codex rather than
/octo:*slash commands. Use the active Codex shell and subagent tools. Do not claim a provider, model, or host subagent is available until the current session exposes it. For host tool equivalents, seeskills/blocks/codex-host-adapter.md.
Load skills/blocks/domain-modeling.md when a skill discusses providers, models,
access, billing, reviewers, or votes. Reuse the shared definitions instead of
inventing local synonyms. State the source and time of observations. Never infer
authentication, entitlement, billing mode, quota, or model-family independence
from a binary or transport name alone.
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.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?
Every shipped command and skill carries disable-model-invocation: true.
Claude Code therefore keeps Octopus out of model context until the user chooses
an /octo:* command. This is a hard platform gate, not a prose reminder.
Command bodies that need reusable instructions load the entire source file
directly from
${HOME}/.claude-octopus/plugin/.claude/skills/<name>/SKILL.md; they do not call
the Skill tool. ${HOME}/.claude-octopus/plugin is the stable, self-healed path
available to model tool calls; CLAUDE_PLUGIN_ROOT is a hook/runtime variable
and may be absent from that context. The command must treat the loaded body as
the active instructions in the current conversation, follow its steps in order,
and pass the user's text as workflow arguments rather than executable path
content. This keeps explicit commands composable without reopening automatic
model invocation.
Plain-language routing is a separate, legacy-compatible opt-in controlled by
OCTOPUS_AUTO_ROUTER_MODE=suggest|invoke. Its default is off. New skills must
never depend on prompt-keyword auto-routing for reachability.
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.
hooks/user-prompt-submit.sh already claims it. The hook is opt-in,
but overlapping phrases still degrade routing for users who enable it.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:
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:
"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.When reviewing, report:
hooks/user-prompt-submit.sh or an existing
skill's description..claude-plugin/plugin.json and make sync is
clean.disable-model-invocation: true, and any command that composes it
loads its source file directly.tests/unit/test-explicit-activation.sh passes.tools
Prototype one risky assumption within a fixed budget, then keep or discard the result
testing
Break a plan or spec into vertical slices that each declare what blocks them — use when work is agreed but not yet cut into fileable pieces
testing
Interrogate a plan, decision, or design one question at a time until it holds — use to stress-test your own thinking before committing to it
business
Move incoming issues and pull requests through triage states until each is actionable or closed — use when the queue has piled up or a report arrives unsorted