skills/create-skill/SKILL.md
Creates new Claude Code skills with optimized structure, context-efficient descriptions, and best-practice patterns. Use when user asks to "create a skill", "build a skill", "make a new skill", or "set up a skill for X". Do NOT use for general questions about skills or explaining what skills are.
npx skillsauth add armandli/get-skilled create-skillInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are creating a Claude Code skill. A skill is a SKILL.md file (with optional references) that teaches Claude how to perform a specific repeatable task. Follow this guide precisely — small mistakes in naming, casing, or structure will cause the skill to fail silently.
Follow these steps in order. Do not skip steps.
Before writing anything, identify 2-3 concrete use cases. For each, define:
Ask the user if they haven't provided this. Do not proceed without at least one clear use case.
Select the pattern that best fits the use cases. See references/patterns.md for detailed descriptions of each:
skill-name/
SKILL.md # Required. Main instructions.
references/ # Optional. Detailed docs loaded on demand.
api-reference.md
examples.md
scripts/ # Optional. Validation/helper scripts.
validate.py
notion-project-setup, NOT Notion Project Setup, notion_project_setup, or NotionProjectSetupSKILL.md — not SKILL.MD, skill.md, or Skill.mdREADME.md inside the skill folder/slash-command if no name field is set---
name: skill-name
description: [What it does] + [When to use it] + [Key capabilities]. Use when user asks to "[trigger phrase 1]", "[trigger phrase 2]", or "[trigger phrase 3]". Do NOT use for [negative trigger].
argument-hint: "[arg1] [arg2]"
---
Description rules:
< >)Good descriptions:
description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?"
description: Creates weekly company newsletters following brand guidelines. Use when user asks to "write the newsletter", "draft this week's update", or "create a company update".
Bad descriptions:
"Helps with projects." — too vague, no triggers"Creates sophisticated multi-page documentation systems." — no triggers"Helps with newsletters" — too generic, no specificsStructure with ## headers. Put critical instructions at the top.
Find the right altitude — specific enough to be actionable, flexible enough to generalize:
Validate the data before proceeding / Make sure to validate things properlyBefore calling create_project, verify: project name non-empty, at least one team member assigned, start date not in past — concrete examples that Claude can generalize to similar situationsPrefer examples over edge-case lists. A few diverse, representative examples teach Claude more than an exhaustive list of edge cases. Examples are worth a thousand words of explanation — show the expected input/output for 2-3 canonical scenarios rather than enumerating every possible variation.
For critical validations, bundle a script rather than relying on language instructions — code is deterministic.
Always include explicit testing instructions. Agents skip end-to-end verification unless told to test. Don't assume Claude will test on its own — specify exactly how to verify (e.g., "run npm test", "open the page in a browser via Puppeteer", "curl the endpoint and check the response"). Vague "make sure it works" instructions get skipped.
Write actionable error handling. Error instructions should steer Claude toward recovery, not just report failure. Instead of "if the API call fails, handle the error", write "if the API returns 429, wait 5 seconds and retry once; if it returns 401, stop and ask the user to check their API key." Guide toward the fix, not just the diagnosis.
Two content types:
disable-model-invocation: true)Move detailed docs, API specs, and examples to references/. Link them from SKILL.md:
## Additional Resources
- For complete API details, see [references/api-reference.md](references/api-reference.md)
- For usage examples, see [references/examples.md](references/examples.md)
This preserves context budget. Claude loads references only when needed.
Check whether the skill-stat skill exists:
test -f "${PWD}/.claude/skills/skill-stat/SKILL.md" && echo "skill-stat present" || echo "skill-stat missing"
If present, append the following as the last step in the new skill's SKILL.md body, replacing <new-skill-name> with the actual skill name:
### Final Step — Record Usage
Run after the skill's primary task completes:
```bash
python3 ${PWD}/.claude/skills/skill-stat/scripts/record-stat.py "<new-skill-name>"
**If missing**, skip this addition entirely.
### Step 5: Consider Hooks
Evaluate whether the skill should recommend or include hook configurations. Hooks are shell commands that run automatically at specific lifecycle points — they provide deterministic guarantees that LLM instructions cannot.
**Add hooks when the skill needs:**
- **Automatic formatting** after file edits (e.g., Prettier via `PostToolUse`)
- **File protection** to block edits to sensitive files (e.g., `.env` via `PreToolUse`)
- **Notifications** when Claude needs user input (via `Notification`)
- **Context re-injection** after compaction (via `SessionStart` with `compact` matcher)
- **Completion verification** to ensure all tasks are done before stopping (via `Stop` with agent hooks)
- **Command validation** to block dangerous operations (via `PreToolUse` on `Bash`)
**Do NOT use hooks when** the decision requires LLM judgment, context varies per invocation, or the action is a one-time step within the skill's workflow.
If the skill includes hooks, provide the JSON configuration the user should add to their settings file, and include platform-specific commands where needed (macOS/Linux/Windows). See [references/hooks-best-practices.md](references/hooks-best-practices.md) for the full hooks guide, configuration format, and common patterns.
### Step 6: Configure Invocation (if needed)
| Setting | User invokes | Claude invokes | Description in context |
|---------|-------------|---------------|----------------------|
| (default) | Yes | Yes | Always loaded |
| `disable-model-invocation: true` | Yes | No | Not loaded |
| `user-invocable: false` | No | Yes | Always loaded |
- **`disable-model-invocation: true`**: For workflows with side effects — `/commit`, `/deploy`, `/send-slack-message`. Only the user can trigger it.
- **`user-invocable: false`**: For background knowledge that isn't a command — e.g., `legacy-system-context`. Hidden from `/` menu.
- **`context: fork`**: Runs in isolated subagent. No conversation history. Only for skills with explicit task instructions, not guidelines.
### Step 7: Validate
Run through the checklist at [references/checklist.md](references/checklist.md) before considering the skill complete.
## Size Limits
Keep within these bounds for optimal performance:
| Level | What | Budget |
|-------|------|--------|
| Frontmatter description | Always loaded | < 1024 chars |
| SKILL.md body | Loaded on invocation | < 500 lines / 5,000 words |
| Each reference file | Loaded on demand | < 10,000 words |
If a skill exceeds these limits, split into references or consider breaking into multiple skills.
**Context efficiency principle:** Every token in a skill depletes Claude's attention budget. Aim for the smallest set of high-signal content that produces the desired behavior. Move static reference material (API docs, schemas, style guides) into `references/` so it's loaded on demand, and keep SKILL.md focused on instructions and decision-making.
## Advanced Features
**String substitutions** available in SKILL.md:
- `$ARGUMENTS` — full argument string
- `$ARGUMENTS[0]`, `$ARGUMENTS[1]` — positional args
- `$1`, `$2` — shorthand for positional args
- `${CLAUDE_SESSION_ID}` — current session ID
**Dynamic context injection**: Use `` !`command` `` syntax to run shell commands. Output replaces the placeholder before content is sent to Claude.
**Extended thinking**: Include the word "ultrathink" anywhere in skill content to enable extended thinking mode.
## Testing Guidance
After creating the skill, guide the user through testing:
1. **Discovery test**: Ask "What skills are available?" — skill should appear
2. **Trigger test**: Use a natural phrase matching the description — skill should activate
3. **Negative trigger test**: Ask an informational question about the topic — skill should NOT activate
4. **Functional test**: Run through a real use case end-to-end
5. **Debug trick**: Ask Claude "When would you use the [skill-name] skill?" — Claude quotes the description back, revealing gaps
**Design realistic test scenarios.** Good functional tests require multi-step reasoning, not just a single tool call. A weak test: "search for user 9182." A strong test: "Customer 9182 was charged 3x for one purchase — find all related log entries and check if other customers are affected." If your test can be completed in one trivial step, it won't catch real-world failure modes.
## Additional Resources
- For the 5 proven skill patterns with details, see [references/patterns.md](references/patterns.md)
- For the full validation checklist, see [references/checklist.md](references/checklist.md)
- For hooks best practices (when and how to include hooks in skills), see [references/hooks-best-practices.md](references/hooks-best-practices.md)
---
## Final Step — Record Usage
After the skill's primary task completes, run:
```bash
python3 ${PWD}/.claude/skills/skill-stat/scripts/record-stat.py "create-skill"
tools
--- name: update-readme description: Updates a project README.md with build instructions, unit test instructions, and a mermaid architecture diagram. Use when a project README needs to be created or refreshed. Trigger phrases: "update readme", "generate readme", "create readme", "refresh readme docs". Emphasizes project interfaces, extension points, and customization hooks in the diagram — not concrete implementations. Do NOT use for documentation sites, wikis, or non-project READMEs. argument-h
business
--- name: skill-stat description: Records skill usage statistics and issue reports into .claude/skill-stats.md. Increments the Uses count for a skill name, and optionally logs an issue report that increments the Issues count and appends a row to the Issue Reports table. Use when tracking how often a skill is invoked, when a user reports a problem with a skill, or when another skill needs to log its own usage. Trigger phrases: "record skill stat", "log skill usage", "report skill issue". Do NOT u
testing
--- name: revert description: Reverts ALL git changes in the working directory: staged changes, unstaged modifications, and new untracked files. Use when user asks to "revert all changes", "undo all changes", "discard all changes", "reset all git changes", or "clean working directory". Do NOT use for reverting a specific file or a specific commit — those need targeted git commands. disable-model-invocation: true --- Revert all git changes in the working directory. This is destructive and cannot
tools
Scans a Python codebase for duplicate or near-duplicate logic patterns across functions, classes, and files, then extracts those patterns into typed utility classes in a shared module. Use when the user asks to "refactor this Python code", "find duplicate logic", "extract shared utilities", "apply DRY to Python", "deduplicate Python code", or "find repeated patterns in Python". Groups extracted helpers by the object type they operate on (strings, numbers, dates, collections, etc.). Do NOT use for performance optimization (use optimize-python), for debugging logic errors, or for explaining code. Do NOT extract code that appears only once. Run this skill before optimize-python.