Guides creation of Claude Code skills and slash commands: SKILL.md structure, frontmatter fields, invocation controls, commands vs skills, and best practices.
From aimi-engineeringnpx claudepluginhub aimi-so/aimi-engineering-plugin --plugin aimi-engineeringThis skill uses the workspace's default tool permissions.
references/api-security.mdreferences/be-clear-and-direct.mdreferences/best-practices.mdreferences/common-patterns.mdreferences/core-principles.mdreferences/executable-code.mdreferences/iteration-and-testing.mdreferences/official-spec.mdreferences/recommended-structure.mdreferences/skill-structure.mdreferences/using-scripts.mdreferences/using-templates.mdreferences/workflows-and-validation.mdtemplates/router-skill.mdtemplates/simple-skill.mdworkflows/add-reference.mdworkflows/add-script.mdworkflows/add-template.mdworkflows/add-workflow.mdworkflows/audit-skill.mdDesigns and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
This skill teaches how to create effective Claude Code skills following the official specification from code.claude.com/docs/en/skills.
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.
---
name: fix-issue
description: Fix a GitHub issue
disable-model-invocation: true
---
Fix GitHub issue $ARGUMENTS following our coding standards.
Access individual args: $ARGUMENTS[0] or shorthand $0, $1, $2.
The !`command` syntax runs shell commands before content is sent to Claude:
---
name: pr-summary
description: Summarize changes in a pull request
context: fork
agent: Explore
---
## Context
- PR diff: !`gh pr diff`
- Changed files: !`gh pr diff --name-only`
Summarize this pull request...
Add context: fork to run in isolation. The skill content becomes the subagent's prompt. It won't have conversation history.
---
name: deep-research
description: Research a topic thoroughly
context: fork
agent: Explore
---
Research $ARGUMENTS thoroughly:
1. Find relevant files
2. Analyze the code
3. Summarize findings
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)
Link from SKILL.md: For API details, see [reference.md](reference.md).
Keep references one level deep from SKILL.md. Avoid nested chains.
The description enables skill discovery. Include both what it does and when to use it.
Good:
description: 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:
description: Helps with documents
Ask: Is this a manual workflow (deploy, commit, triage) or background knowledge (conventions, patterns)?
disable-model-invocation: truedisable-model-invocationCommand:
---
name: my-command
description: What this command does
argument-hint: [expected arguments]
disable-model-invocation: true
allowed-tools: Bash(gh *), Read
---
# Command Title
## Workflow
### Step 1: Gather Context
...
### Step 2: Execute
...
## Success Criteria
- [ ] Expected outcome 1
- [ ] Expected outcome 2
Skill:
---
name: my-skill
description: What it does. Use when [trigger conditions].
---
# Skill Title
## Quick Start
[Immediate actionable example]
## Instructions
[Core guidance]
## Examples
[Concrete input/output pairs]
Link from SKILL.md to detailed content:
For API reference, see [reference.md](reference.md).
For form filling guide, see [forms.md](forms.md).
/skill-name to verifydisable-model-invocation: true if it has side effectsallowed-tools set if specific tools neededdisable-model-invocation: trueFor detailed guidance, see: