From interskill
Expert guidance for creating Claude Code skills and slash commands — SKILL.md authoring, frontmatter, TDD pressure testing. For full plugin lifecycle (structure, release, marketplace), use /interplug:plugin.
How this skill is triggered — by the user, by Claude, or both
Slash command
/interskill:skillThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill teaches how to create effective Claude Code skills following the official specification. It combines spec-driven creation with TDD-adapted pressure testing.
SKILL-compact.mdreferences/anthropic-best-practices.mdreferences/api-security.mdreferences/be-clear-and-direct.mdreferences/best-practices.mdreferences/claude-search-optimization.mdreferences/common-patterns.mdreferences/core-principles.mdreferences/executable-code.mdreferences/iteration-and-testing.mdreferences/official-spec.mdreferences/persuasion-principles.mdreferences/recommended-structure.mdreferences/skill-structure.mdreferences/testing-skills-with-subagents.mdreferences/using-scripts.mdreferences/using-templates.mdreferences/workflows-and-validation.mdtemplates/router-skill.mdtemplates/simple-skill.mdThis skill teaches how to create effective Claude Code skills following the official specification. It combines spec-driven creation with TDD-adapted pressure testing.
Custom slash commands have been merged into skills. A file at .claude/commands/review.md and a skill at .claude/skills/review/SKILL.md both create /review and work the same way. Existing .claude/commands/ files keep working. Skills add optional features: a directory for supporting files, frontmatter to control invocation, and automatic context loading.
If a skill and a command share the same name, the skill takes precedence.
Use a command file (commands/name.md) when:
Use a skill directory (skills/name/SKILL.md) when:
Both use identical YAML frontmatter and markdown content format.
Use YAML frontmatter + markdown body with standard markdown headings. Keep it clean and direct.
---
name: my-skill-name
description: What it does and when to use it
---
# My Skill Name
## Quick Start
Immediate actionable guidance...
## Instructions
Step-by-step procedures...
## Examples
Concrete usage examples...
All fields are optional. Only description is recommended.
| Field | Required | Description |
|---|---|---|
name | No | Display name. Lowercase letters, numbers, hyphens (max 64 chars). Defaults to directory name. |
description | Recommended | What it does AND when to use it. Claude uses this for auto-discovery. Max 1024 chars. |
argument-hint | No | Hint shown during autocomplete. Example: [issue-number] |
disable-model-invocation | No | Set true to prevent Claude auto-loading. Use for manual workflows like /deploy, /commit. Default: false. |
user-invocable | No | Set false to hide from / menu. Use for background knowledge. Default: true. |
allowed-tools | No | Tools Claude can use without permission prompts. Example: Read, Bash(git *) |
model | No | Model to use. Options: haiku, sonnet, opus. |
context | No | Set fork to run in isolated subagent context. |
agent | No | Subagent type when context: fork. Options: Explore, Plan, general-purpose, or custom agent name. |
| Frontmatter | User can invoke | Claude can invoke | When loaded |
|---|---|---|---|
| (default) | Yes | Yes | Description always in context, full content loads when invoked |
disable-model-invocation: true | Yes | No | Description not in context, loads only when user invokes |
user-invocable: false | No | Yes | Description always in context, loads when relevant |
Use disable-model-invocation: true for workflows with side effects: /deploy, /commit, /triage-prs, /send-slack-message. You don't want Claude deciding to deploy because your code looks ready.
Use user-invocable: false for background knowledge that isn't a meaningful user action: coding conventions, domain context, legacy system docs.
Use $ARGUMENTS placeholder for user input. If not present in content, arguments are appended automatically.
Access individual args: $ARGUMENTS[0] or shorthand $0, $1, $2.
The !`command` syntax runs shell commands before content is sent to Claude.
Add context: fork to run in isolation. The skill content becomes the subagent's prompt.
Keep SKILL.md under 500 lines. Split detailed content into reference files:
my-skill/
├── SKILL.md # Entry point (required, overview + navigation)
├── reference.md # Detailed docs (loaded when needed)
├── examples.md # Usage examples (loaded when needed)
└── scripts/
└── helper.py # Utility script (executed, not loaded)
Keep references one level deep from SKILL.md.
/interskill:audit)Follow workflows/create-new-skill.md for the full step-by-step process.
Quick summary:
If the skill has explicit phrase, file-extension, environment, dependency, composition, conflict, or supersession relationships, offer to create an adjacent intermesh.yaml. Keep SKILL.md canonical; the manifest contains routing relationships only.
When command -v intermesh >/dev/null 2>&1 succeeds, validate a created manifest with intermesh manifest validate <skill-directory>/intermesh.yaml and fix every reported error before completion. If Intermesh is unavailable, skip manifest generation and validation unless the user explicitly requested it; the existing skill-authoring workflow must continue unchanged.
After creating the skill, validate it using TDD-adapted testing. See references/testing-skills-with-subagents.md for the full methodology.
Core principle: If you didn't watch an agent fail without the skill, you don't know if the skill teaches the right thing.
Quick summary:
The description enables skill discovery. Include both what it does and when to use it.
Good: "Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction."
Bad: "Helps with documents"
disable-model-invocation: trueFor detailed guidance, see:
Guides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
npx claudepluginhub mistakeknot/interagency-marketplace --plugin interskill