Skill Creator
Caution
Skills auto-activate only 20–50% of the time. Trigger keywords, description format, and invocation type (user vs. LLM) determine whether Claude ever picks up the skill. A wrong description silently kills auto-activation — and the bug is invisible until you test it.
Tip
Skill Creator encodes every best practice from Anthropic’s official skill docs. It picks the right context mode, writes an activation-optimized description, validates structure, and generates test prompts — so you don’t have to read 1200 lines of agent instructions yourself.
Quick reference
| Field | Value |
|---|---|
| Trigger | ”create skill”, “new skill”, “skill doesn’t invoke”, “improve skill”, “fix skill trigger” |
| Model | opus |
| Tools | Read, Write, Edit, Glob, Grep, Bash, Task, Skill, AskUserQuestion |
When to use
- You want a new Claude Code skill and need correct SKILL.md structure from the start
- An existing skill isn’t auto-invoking and you need description optimization
- You want to capture a workflow from the current conversation into a reusable skill
- You need to choose the right context mode (
forkvs inline) or invocation type for a new skill - A skill’s bash blocks aren’t executing — missing
EXECUTEkeyword or$ARGUMENTSin bash context
Examples
"Create a skill for database migrations"
"Claude isn't picking up my skill automatically"
"Turn what we just did into a skill"
"My /deploy skill isn't reliable — fix the description"
"new skill: scan for leaked secrets in git history"
Flow
- Understand the request
If the current conversation contains a workflow the user wants to capture, the agent extracts it from history first — tools used, steps taken, input/output formats, edge cases encountered. Then asks 2–3 clarifying questions: purpose, invocation type, trigger phrases. Pre-filled values from an orchestrator prompt skip the question.
- Pick context mode and invocation type
Critical operations (deploy, commit) get
disable-model-invocation: true+ slash-only. Background knowledge getsuser-invocable: false. Standalone tasks with fewer than 4 phases getcontext: fork. Multi-phase orchestration stays inline. Model choice follows complexity: opus for orchestration, sonnet for analysis, haiku for simple helpers. - Write SKILL.md with activation-optimized description
Description follows the template: action verb sentence + explicit
Triggers: “phrase1”, “phrase2”on a single line under 250 chars. Third-person, no colons (YAML breaks silently). For user-only skills, a plain one-liner is enough — trigger keywords are wasted tokens when LLM never auto-invokes. - Validate structure and run tests
Runs
validate-skill.shfrom the brewcode plugin. Checks: valid YAML frontmatter,name≤ 64 chars,description≤ 250 chars single-line, body under 500 lines, bash blocks haveEXECUTEkeyword, no hardcoded secrets. Then spawns 3–5 realistic test prompts to verify activation and output quality. - Generate README and iterate
Fills the standard README template with actual examples, then runs
brewtools:text-optimizeon the SKILL.md. If test runs reveal a repeated helper pattern, bundles it intoscripts/so every future invocation skips the boilerplate.
Full workflow internals — phase breakdown, frontmatter reference, patterns
Activation rates by configuration
| Configuration | Activation rate |
|---|---|
| Basic description, no triggers | 20% |
Optimized description + Triggers: line | 50–72% |
/skill-name explicit slash command | 100% |
disable-model-invocation: true (user-only) | n/a — LLM never invoked |
Critical bug: Skills context lost after compaction ~55K tokens (#13919). Re-invoke /skill-name or use external state for long sessions.
Invocation type decision
| Who invokes | Configuration | Description style |
|---|---|---|
| User only (slash command) | disable-model-invocation: true | Simple one-liner, no triggers needed |
| LLM only (background) | user-invocable: false | Full triggers for auto-activation |
| Both (default) | (no flags) | Full triggers for auto-activation |
Rule: If failure is unacceptable (deploy, send-email, delete data) → disable-model-invocation: true + slash command only.
Skill anatomy
skill-name/
├── SKILL.md # frontmatter + instructions (required)
├── references/ # detailed docs, loaded on demand
├── examples/ # working code examples
├── scripts/ # executable utilities
├── assets/ # templates, images
└── agents/ # subagent prompts (convention, NOT auto-discovered)Key design patterns
| Pattern | When to use |
|---|---|
| Progressive Disclosure | Always — L1 name+desc in context, L2 SKILL.md on trigger, L3 references on demand |
| Reference Splitting | 2+ modes, >50 lines/mode, >300 lines total — detect mode → load only matching references/{mode}.md |
| Agents-as-References | Coordinator with multi-step workflow — pass file path to subagent, subagent reads itself. 0 tokens in coordinator context |
| Context Fork | Standalone task, no history needed, <4 phases — context: fork + isolated subagent |
| Executable Bash | **EXECUTE** using Bash tool: keyword + && echo "✅" || echo "❌" + > STOP if ❌ |
| Mode Switcher | ”toggle”, “persistent behavior”, “from now on” → state in $BC_PLUGIN_DATA/modes.json, hooks inject on every event |
| Pushy Description | LLM-invocable skills — action verb + Triggers: "exact user phrases". Raises rate 20% → 50-72% |
Description format
# LLM-invocable — action verb + Triggers on single line ≤250 chars
description: "Creates conventional git commits with proper format. Triggers: commit, git commit, save changes."
# User-only — simple one-liner, no triggers needed
description: "Deploy application to production environment."Common mistakes: multiline | (truncated at 250 chars since v2.1.84), missing Triggers: (stays at 20%), starts with “Use this skill when” (should start with action verb), colon in description (YAML parse failure), setting permissionMode: bypassPermissions on production skills — this is equivalent to --dangerously-skip-permissions and skips all safety prompts. Only appropriate in sandboxed CI; never the right default for local skills.
Frontmatter quick reference
| Field | Limits | Notes |
|---|---|---|
name | ≤64 chars, lowercase-hyphens | Use directory name if omitted |
description | ≤250 chars, single line, always quoted | ALWAYS in double quotes — em dashes, colons break YAML silently |
disable-model-invocation | true/false | true = 100% reliable, slash-only |
user-invocable | true/false | false = hide from menu, Claude-only |
context | fork | Isolated subagent, fresh context |
agent | Explore, Plan, general-purpose, developer | With context: fork |
model | opus, sonnet, haiku | Based on complexity |
effort | low, medium, high, max, auto | v2.1.80+ |
allowed-tools | tool list | Minimal set |
argument-hint | string | Autocomplete hint |
once | true/false | Fire once per session |
$ARGUMENTS in bash blocks
$ARGUMENTS inside ```bash ``` blocks is a shell variable (empty/undefined), NOT Claude Code substitution. Claude Code replaces $ARGUMENTS only in markdown text.
# WRONG
` ```bash
bash script.sh "$ARGUMENTS"
` ```
# CORRECT — $ARGUMENTS in text, placeholder in bash
**Skill arguments received:** `$ARGUMENTS`
**EXECUTE** using Bash tool:
` ```bash
bash script.sh "ARGS_HERE"
` ```
Replace ARGS_HERE with the actual value from above.Context fork memory behavior
| Mode | Phases | Behavior |
|---|---|---|
| Inline (default) | Any | Full conversation access |
context: fork | 1–4 | Works well, context isolated |
context: fork | 5+ | Memory loss — forgets task structure, skips phases |
Known bugs
| Issue | Impact | Workaround |
|---|---|---|
| #13919 | Skill context lost after ~55K tokens | Re-invoke /name, use external state |
| #22345 | Plugin skills ignore disable-model-invocation | Copy skill to .claude/skills/ |
| #17688 | Skill-scoped hooks don’t fire in plugins | Use plugin hooks.json |
| #17417 | skill.md (lowercase) silently ignored | Use SKILL.md (uppercase) |
| #10768 | Auto-activation 20–50% (NOT PLANNED) | Optimize description or use /name |
Agent Creator
Same workflow for creating agents instead of skills.
GitHub source
Full agent instructions — frontmatter reference, patterns, known bugs.
Brewcode overview
All brewcode agents, skills, and hooks in one place.
Updating plugins
/brewtools:plugin-update to check and update the brewcode plugin suite in one command.
See the FAQ for details.