Extend Soft ยท model-mediated GA ⓘ legend

Skills

Reusable instructions, procedures, and optional scripts — packaged in a folder, loaded on demand. The most flexible way to extend a session. If you’ve called a saved procedure “a routine,” this is what you meant — not the cloud Routines feature.

Analogy โ€” a recipe card in a binder. Its title is always visible on the spine (cheap), but you only pull the full card when you’re cooking that dish. The model does the cooking with tools it already has — the card just tells it how.

“A routine” usually means a skill — but mind the name collision A saved, repeatable procedure you call “a routine” = a skill (custom slash commands were merged into skills). Orchestration across many agents = a dynamic workflow; a default voice/format = an output style. Note: Anthropic now also ships a feature literally named Routines — a different thing (unattended cloud automation), not a saved procedure.

Mechanism โ€” progressive disclosure

A skill is a directory with a SKILL.md (YAML frontmatter + markdown body). The folder name becomes the /command. The design principle is progressive disclosure:

always
name + description
~tiny cost, sits in context so Claude knows the skill exists
on invoke
the body
full instructions load only when used or matched
if referenced
scripts / reference files
loaded/executed only when the body points to them
Key frontmatter & who can invoke

description (drives auto-invocation), allowed-tools (pre-approve tools while active), disable-model-invocation, user-invocable, context: fork + agent (run in a subagent), model, effort, paths (glob-gated).

  • Both (default): you type /name OR Claude auto-loads by description.
  • User-only (disable-model-invocation: true): for side-effecting actions like /deploy.
  • Model-only (user-invocable: false): passive background knowledge.

Dynamic context: !`cmd` runs a shell command before Claude sees the body and inlines the output. Substitutions: $ARGUMENTS, ${CLAUDE_SKILL_DIR}, ${CLAUDE_SESSION_ID}.

Lives at .claude/skills/<name>/SKILL.md (project, committed) or ~/.claude/skills/ (personal). Precedence: Enterprise > Personal > Project; plugins namespaced.

When to reach for it

โœ“
You paste the same checklist/procedure a third time.
โœ“
A CLAUDE.md section has become a procedure rather than a fact — move it out so it costs nothing until used.
โœ“
You want a reusable /command shared with the team via the repo.

When not to

โœ•
A must-run guardrail โ†’ hook (skills are discretionary).
โœ•
An always-needed fact โ†’ CLAUDE.md.
โœ•
Reaching an external system โ†’ MCP (a skill only knows how to use tools that already exist).

Best practices

โ˜…
Front-load the description with the use case + trigger keywords — a weak description means the skill never fires.
โ˜…
Keep SKILL.md under ~500 lines; push API specs/examples into referenced files (progressive disclosure).
โ˜…
Set disable-model-invocation: true for anything with side effects (deploy, commit, send).
โ˜…
Reference bundled scripts via ${CLAUDE_SKILL_DIR} so paths resolve at any scope.
Security allowed-tools grants permission silently while the skill is active, and the !`...` shell injection runs arbitrary commands. Review project skills before trusting a repo. Org-wide kill switch: "disableSkillShellExecution": true.

Sources