Skip to content
Automation
Skill

/skill-authoring

Principles for writing skills that behave the same way every run — use when adding, editing, or reviewing a skill in this plugin

From plugin
octo
4.4k71 skills49 agents55 commands18 hooks

Claude Code

$ npx -y skills add nyldn/claude-octopus --skill skill-authoring --agent claude-code

SKILL.md

skill-authoring.SKILL.md
name: skill-authoring
description: "Principles for writing skills that behave the same way every run — use when adding, editing, or reviewing a skill in this plugin"
disable-model-invocation: true

> **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, see `skills/blocks/codex-host-adapter.md`.

Skill Authoring

Load `skills/blocks/engineering-method-selection.md` from the installed plugin and apply only the methods relevant to this task. Preserve this entry point's execution contract and output format. Read referenced skills as instructions; do not invoke the current command recursively or add provider calls from a seat.

Domain language

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](https://github.com/mattpocock/skills) (MIT), with the invocation section rewritten for how this plugin actually loads skills.

When To Use

  • Writing a new skill, or reviewing one in a PR.
  • A skill fires when it should not, or fails to fire when it should.
  • A skill behaves differently run to run on the same input.
  • Deciding whether something should be a skill at all, or a command, or prose in

`CLAUDE.md`.

When Not To Use

  • For the mechanical checklist — file layout, registration, required sections.

That is `docs/PLUGIN-ASSEMBLY-STANDARD.md` and the CI suites.

  • For writing prompts that are not skills. That is `skill-meta-prompt`.

Inputs

The skill under construction or review, and an honest answer to: what should the agent do differently because this exists?

Workflow

Invocation: explicit by default

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 `${CLAUDE_PLUGIN_ROOT:-${CODEX_PLUGIN_ROOT:-${HOME}/.claude-octopus/plugin}}/.claude/skills/<name>/SKILL.md`; they do not call the Skill tool. `${CLAUDE_PLUGIN_ROOT:-${CODEX_PLUGIN_ROOT:-${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.

Writing the description

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.

  • Lead with the word that does the invoking.
  • **One trigger per branch.** Synonyms that rename the same branch are

duplication: "use for test-first development … when the user wants TDD" is one branch written twice.

  • Cut identity that the body already carries. Triggers, plus any "when another

skill needs this" clause, and nothing else.

  • Beware collision. With this many skills the scarce resource is trigger space,

not skill count. Before adding a trigger phrase, check whether an existing skill or `hooks/user-prompt-submit.sh` already claims it. The hook is opt-in, but overlapping phrases still degrade routing for users who enable it.

Information hierarchy

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:

1. **In-skill step** — what the agent does, in order. 2. **In-skill reference** — consulted while working. A flat set of peer rules is a legitimate shape, not a smell. 3. **External reference** — pushed into a sibling file and reached by a pointer, 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.

Completion criteria

Every step ends on a condition that says the work is done. Make it:

  • **Checkable** — can the agent tell done from not-done without guessing?
  • **Exhaustive where it matters** — "every changed file accounted for" rather

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.

Enforcement, and its cost

A body that names the orchestrator script directly is requir

Read more
@nyldn
Ships withocto

Every AI model has blind spots. Claude Octopus supports twelve external provider integrations — Codex, Antigravity CLI, Copilot, Qwen, Ollama, Perplexity, OpenRouter, OrcaRouter, OpenCode, Cursor CLI, Grok, and Kimi Code — alongside the built-in Claude Code

4.4k71 skills49 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
4.4k
Star history of nyldn/claude-octopus on GitHub, a chart by star-history.com

Other skills on octo.

extract-skill

extract-skill

Reverse-engineer design systems, tokens, and components from live products or screenshots

@nyldn@nyldnInstall Skill
flow-define

flow-define

Multi-AI requirements scoping using available external providers (Double Diamond Define phase). Priority triggers: octo define,…

@nyldn@nyldnInstall Skill
flow-deliver

flow-deliver

Multi-AI validation, scoring, and review using available external providers (Double Diamond Deliver phase)

@nyldn@nyldnInstall Skill
flow-develop

flow-develop

Multi-AI implementation using available external providers (Double Diamond Develop phase). DO NOT use for simple code edits,…

@nyldn@nyldnInstall Skill
flow-discover

flow-discover

Multi-AI research using available external providers (Double Diamond Discover phase)

@nyldn@nyldnInstall Skill
flow-parallel

flow-parallel

Decompose and execute large changes, migrations, or multi-issue fixes in parallel with quality gates

@nyldn@nyldnInstall Skill

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n12d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about skill-authoring.

Which coding agents can use skill-authoring?
skill-authoring installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.