From yellow-core
Expert guidance for creating Claude Code skills and agents. Use when working with SKILL.md files, authoring new skills, creating slash commands, or designing agent workflows.
How this skill is triggered — by the user, by Claude, or both
Slash command
/yellow-core:create-agent-skillsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Expert guidance for creating Claude Code skills and agents with proper
Expert guidance for creating Claude Code skills and agents with proper structure, frontmatter, and best practices.
Commands (.claude/commands/name.md):
/commit, /search, /explainSkills (.claude/skills/name/SKILL.md):
/workflows:review, /git-worktreeBoth use identical YAML frontmatter format.
Every skill/command file has two parts:
---
name: skill-name
description: What it does and when to use it. Use when [trigger conditions].
argument-hint: '[optional-args]'
---
# Skill Title
## What It Does
Clear explanation of functionality.
## When to Use
Specific trigger conditions.
## Usage
Command syntax and examples.
## Reference
Additional details, links.
| Field | Required | Description |
|---|---|---|
name | Yes | Kebab-case identifier matching filename |
description | Yes | WHAT it does + WHEN to use it (see below) |
argument-hint | No | UI hint for arguments, e.g. "[branch-name]" |
disable-model-invocation | No | If true, prints markdown only (no LLM call) |
user-invokable | No | If false, skill is internal-only (callable by other skills) |
allowed-tools | No | Array of tool names to restrict access |
model | No | Override default model (e.g. claude-opus-4-6) |
context | No | fork creates isolated subagent context |
agent | No | Agent name to use instead of default |
| Config | User can call? | LLM invoked? | Use case |
|---|---|---|---|
| Default | Yes | Yes | Standard skill |
disable-model-invocation: true | Yes | No | Static reference docs |
user-invokable: false | No | Yes | Internal helper skill |
| Both set | No | No | Private reference docs |
Use $ARGUMENTS in the skill body to inject user-provided arguments:
---
name: explain
argument-hint: '[file-or-concept]'
---
Explain $ARGUMENTS in detail, including purpose and key patterns.
Invocation: /explain authentication.ts replaces $ARGUMENTS with
"authentication.ts"
Use backticks with ! prefix to inject shell output:
Current branch: `!git branch --show-current` Repository root:
`!git rev-parse --show-toplevel`
Commands execute during skill load, output injected directly into prompt.
Use context: fork to create isolated subagent:
context: fork
Keep SKILL.md under 500 lines. Split detailed content into reference files.
skills/
complex-workflow/
SKILL.md # Main skill (< 500 lines)
api-reference.md # Detailed API docs
examples.md # Extended examples
troubleshooting.md # Debug guide
Reference from main skill:
See [API Reference](./api-reference.md) for full method documentation.
Maximum one level deep. No further subdirectories.
Description MUST include:
Good Examples:
description: Create isolated git worktrees for parallel development. Use when reviewing PRs, working on multiple features, or when workflows offer worktree option.
description: Generate conventional commits with semantic analysis. Use when creating commits, after staging changes, or when commit message needs improvement.
Bad Examples:
description: Manages worktrees # Missing WHEN
description: Use for git stuff # Vague WHAT
description: Advanced git worktree management system with comprehensive support # Too verbose
Agents live in agents/<category>/agent-name.md:
---
name: agent-name
description: What the agent does and when it's useful.
model: claude-opus-4-6
---
## Examples
Provide 2-3 concrete examples of when to use this agent.
## System Prompt
You are an expert in [domain]. Your role is to [specific task].
**Key Behaviors:**
- Behavior 1
- Behavior 2
- Behavior 3
**Constraints:**
- Constraint 1
- Constraint 2
Categories: workflow, analysis, generation, review, automation
Command:
touch .claude/commands/my-command.md
Skill:
mkdir -p .claude/skills/my-skill
touch .claude/skills/my-skill/SKILL.md
Start with minimal viable frontmatter:
---
name: my-skill
description: [WHAT] Use when [WHEN].
---
Add optional fields only if needed.
Use standard headings:
If SKILL.md approaches 500 lines, extract:
examples.mdapi-reference.mdtroubleshooting.mdTest with real usage:
/my-skill [args]
Verify:
Before submitting a skill:
$ARGUMENTS used correctly (if applicable)!command syntax (if applicable)Avoid:
user-invokable: false for internal
skillsCreate command:
cat > .claude/commands/my-cmd.md << 'EOF'
---
name: my-cmd
description: Does X. Use when Y.
---
# My Command
Instructions here.
EOF
Create skill:
mkdir -p .claude/skills/my-skill
cat > .claude/skills/my-skill/SKILL.md << 'EOF'
---
name: my-skill
description: Does X. Use when Y.
---
# My Skill
Instructions here.
EOF
Test invocation:
/my-skill arg1 arg2
Plugins can read user-specific configuration from
.claude/<plugin-name>.local.md:
File Location: .claude/<plugin-name>.local.md
Format: YAML frontmatter + optional markdown notes
Security: Never store credentials — reference env var names only (e.g.,
$MY_TOKEN)
Example:
---
schema: 1
devServer:
command: 'npm run dev'
port: 3000
auth:
credentials:
email: '$BROWSER_TEST_EMAIL'
password: '$BROWSER_TEST_PASSWORD'
---
# Notes
Optional markdown content for user reference.
Best Practices:
schema: 1 for future versioning support.local.md conventionReference: See yellow-browser-test plugin for working example.
npx claudepluginhub kinginyellows/yellow-plugins --plugin yellow-coreGuides creation of Claude Code skills and slash commands: SKILL.md structure, frontmatter fields, invocation controls, commands vs skills, and best practices.
Quick-reference for editing Claude Code skills, agents, slash commands, hooks, plugins, and configs. Triggers on YAML frontmatter, .claude/ files, Task tools, hook debugging.
Guides creation of Claude Code SKILL.md files with YAML frontmatter, progressive disclosure, and naming conventions. Use when authoring or auditing agent skills.