Skill maker
Create new Claude Code skills (or slash-commands) in a clean, consistent house style — XML phases, rolling-window state files, saved rules, checkpoint resumption, attribution conventions, and 14 compaction-with-preservation patterns. Use when the user asks to "make a skill", "create a skill", "build a skill", "scaffold a skill", "new skill", "skill for X", "make this a skill", "turn this into a skill", "make a slash command", "create a command", "wrap this workflow", "automate this", "add to my library", "another skill like X", or any phrasing implying turning a workflow into a reusable, well-structured skill. Single point of entry — loads the full style guide + all 14 compaction patterns + canonical scaffold.From its SKILL.md
npx -y skills add adamjali/claude-skills --skill skill-makerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- skips confirmationTells the agent to proceed without asking first, 1 time: "Auto-execute scaffolding (mkdir + boilerplate writes) — these are reversible".
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 5 commands, including `bash scripts/generate-skill.sh <name> <template>` and 4 more.
SKILL.md
13.4 KB, ~3.2k tokens by cl100k_base, as published. Nobody here has run it
<execution_context>
- Auto-load the style guide + compaction patterns at start (via
<context>injection above) - Auto-execute scaffolding (mkdir + boilerplate writes) — these are reversible
- ASK before writing the actual SKILL.md body — preview must be approved
- ASK before deferring to Anthropic
skill-creatorfor eval iteration — only if user opts in - Saved Rules: accumulate per-user-style preferences (e.g., "always wants Phase 5.5 deep-clean for stateful skills") in
state.md - Rolling window: keep last 10 generated-skill entries full, compact older to one-line in archive section </execution_context>
TaskCreateone task per phase (8 phases).- Read
state.mdif exists; check forIN_PROGRESSmarker. - If IN_PROGRESS found →
AskUserQuestion:- Resume from last checkpoint
- Start fresh (archive previous as ABORTED)
- Show full history (abort, let the user review)
- Otherwise → record current generation as IN_PROGRESS with
checkpoint: INITIALIZED. - Read
references/skill-style.md+references/compaction-patterns.mdinto context (loaded via@in<context>block above, but verify accessible).
TaskUpdate Phase 0 → completed.
</phase>
If the user provided a skill name + description in their initial message → skip to Phase 2.
Otherwise, free-form prompt:
"What should this skill do? In 1-2 sentences, describe the workflow you want to capture."
Record their answer → intent field.
Update checkpoint: INTENT_CAPTURED.
TaskUpdate Phase 1 → completed.
</phase>
ONE AskUserQuestion call with up to 4 questions covering the highest-leverage decisions. Use the question set in references/intake-questions.md as the canonical source.
The 4 batched questions (4 is the max per AskUserQuestion call):
- Skill name + form — what's the name (kebab-case)? Skill in
~/.claude/skills/<name>/or slash-command in~/.claude/commands/<name>.mdor both? - Stateful? No (stateless) / Yes-simple (one history file) / Yes-checkpointed (sync-style with IN_PROGRESS recovery) / Yes-multi-actor (with attribution suffixes)
- State location (if stateful) — skill dir / current repo / external repo (multi-device sync) /
.planning/ - Compaction pattern (if stateful) — pick one of 14 from
references/compaction-patterns.md(default: "rolling-window-saved-rules" for most cases)
Then a SECOND AskUserQuestion for follow-ups depending on Q1-4 answers:
- Autonomy matrix — auto-fix-safe / ask-on-medium / never-touch — with examples
- Hard invariants — what should NEVER be done regardless of context (free-form)
- References needed? (templates, schemas, long docs to offload from SKILL.md)
- Scripts needed? (shell helpers, generators, validators)
For each answer, record to intake/ block in current state entry.
Update checkpoint: INTAKE_COMPLETE.
TaskUpdate Phase 2 → completed.
</phase>
Based on intake, pick from references/examples/:
| Template | When |
|---|---|
01-stateless.md | No state, single-purpose (e.g. a one-shot search/fetch tool) |
02-stateful-simple.md | One history file, rolling-N + archive (e.g. a send-and-log workflow) |
03-stateful-checkpointed.md | IN_PROGRESS recovery + saved rules (e.g. a long resumable sync) |
04-stateful-multi-actor.md | Multiple state files + attribution suffixes (e.g. a shared bot/human workflow) |
05-slash-command-router.md | One-line delegate to a subagent |
06-information-display.md | Read-only output, zero context bloat (e.g. a help/status command) |
07-multi-phase-feature.md | Multi-artifact per-feature dirs (e.g. a feature-development workflow) |
Show user the picked template + ask "looks right?" before generating.
Update checkpoint: TEMPLATE_SELECTED.
TaskUpdate Phase 3 → completed.
</phase>
- Run
bash scripts/generate-skill.sh <name> <template>— creates the directory, writes initial SKILL.md from chosen template + intake answers, scaffoldsreferences/andscripts/subdirs if specified. - Substitute placeholders:
{{SKILL_NAME}},{{DESCRIPTION}},{{TRIGGER_PHRASES}},{{COMPACTION_PATTERN}}, etc. - Compose SKILL.md sections per the canonical scaffold:
- Frontmatter (pushy
>description,paths:glob if path-scoped,when_to_use:if it adds clarity,argument-hint:only if$ARGUMENTSused,allowed-tools:only if restricting) <objective><context>with@injections for state file + relevant references<execution_context>with autonomy matrix<process>with numbered<phase name="N_named">blocks<saved_rules_format>(if stateful)<recovery_protocol>(if stateful with checkpoints)<error_handling>(always)<success_criteria>(always)
- Frontmatter (pushy
- Generate compaction section per chosen pattern using
bash scripts/compaction-template.sh <pattern>.
Update checkpoint: GENERATED.
TaskUpdate Phase 4 → completed.
</phase>
Show the FULL generated SKILL.md content in the chat — no surprises before write.
Ask via AskUserQuestion:
- Approve → write files (Phase 6)
- Modify → which section/field/wording? (free-form, then re-generate that section)
- Abort → archive current entry as ABORTED, exit cleanly
Update checkpoint: PREVIEWED.
TaskUpdate Phase 5 → completed.
</phase>
Only after Phase 5 approval:
WriteSKILL.md to~/.claude/skills/<name>/SKILL.md(or~/.claude/commands/<name>.mdfor slash-command form).- Write any reference files specified in intake to
references/. - Write any script files specified to
scripts/(withchmod +x). - Write initial state file scaffolding if stateful (with header + format docs + empty section).
- If user wants slash-command shortcut → create
~/.claude/commands/<name>.mdwith one-lineSkill(<name>)delegate.
Update checkpoint: WRITTEN.
TaskUpdate Phase 6 → completed.
</phase>
- Run
bash scripts/validate-skill.sh <name>— checks:- Frontmatter
description≤ 1,536 chars (combined withwhen_to_use) - Required tags present per
<execution_context>'s skill-class - SKILL.md size — warn if > 500 lines or > ~5K tokens (auto-compaction truncation risk)
- References referenced in
<context>actually exist - Scripts referenced are executable
- Frontmatter
- Optionally run a deeper structure audit if you have a skill-auditor command available.
- Surface findings:
- 🔴 must-fix (description too long, missing required tags, broken
@references) - 🟡 should-fix (style inconsistencies, missing optional tags)
- 🟢 nice-to-have (suggestions for improvement)
- 🔴 must-fix (description too long, missing required tags, broken
- Optionally defer to Anthropic
skill-creator@claude-plugins-officialfor eval iteration (offer to user — only if they want quantitative test prompts).
Update state.md: append COMPLETED entry with skill name + template chosen + audit results + summary. Apply rolling-window pruning if > 10 entries (compact older to one-liners in archive section).
Update checkpoint: COMPLETED.
TaskUpdate Phase 7 → completed.
</phase>
<saved_rules_format>
Saved Rules
Stored in state.md "Saved Rules" section. Surfaced on every /skill-maker run as:
"Previous rule found: '{rule_text}'. Apply this? (Yes / No / Delete rule)"
Format per rule:
- {topic}: {rule} — set {YYYY-MM-DD}
Examples (auto-discovered by observing the user's choices over time):
- naming: prefer kebab-case, prefix with category if part of a family (e.g.,
myproject-*) - compaction-default: rolling-window-saved-rules (5 full + saved rules)
- attribution: only add
— [actor <time>]suffix when ≥2 actors - token-budget: keep SKILL.md under 500 lines (a common convention; not a hard cap) </saved_rules_format>
<recovery_protocol>
If state.md shows IN_PROGRESS when this skill starts:
- Identify last completed checkpoint from state entry (
INITIALIZED/INTENT_CAPTURED/INTAKE_COMPLETE/TEMPLATE_SELECTED/GENERATED/PREVIEWED/WRITTEN). - Map checkpoint → next phase:
- INITIALIZED → resume Phase 1
- INTENT_CAPTURED → resume Phase 2
- INTAKE_COMPLETE → resume Phase 3
- TEMPLATE_SELECTED → resume Phase 4
- GENERATED → resume Phase 5
- PREVIEWED → resume Phase 6
- WRITTEN → resume Phase 7
- Offer the user: Resume / Start fresh (archive previous as ABORTED) / Show full history.
- On resume, append to existing entry; do NOT create new entry.
- Update
updated_attimestamp andcheckpoint:field. </recovery_protocol>
<error_handling>
- Skill name conflicts with existing in
~/.claude/skills/<name>/→ ask: rename / overwrite / abort. Default: rename with-v2suffix. AskUserQuestiontimes out → treat as Skip; mark current entry as ABORTED in state.md.- Validation script fails → log warning, complete generation anyway, recommend running the audit manually.
- Template not found in references/examples/ → fall back to
02-stateful-simple.md(most common case). - State.md corrupted → back up to
state.md.bak.<ts>, create freshstate.md, warn user. - Description exceeds 1,536 char cap → re-prompt for shorter version OR auto-truncate (preferring trigger phrases over prose).
- Body exceeds 500 lines at write time → suggest moving content to
references/files (progressive disclosure). </error_handling>
<success_criteria>
- New skill exists at
~/.claude/skills/<name>/SKILL.mdwith all required frontmatter fields - All chosen XML tags present per skill-class (stateless / stateful-simple / stateful-checkpointed / stateful-multi-actor)
- References specified in intake actually written to
references/ - Scripts specified are written + executable
- State file scaffolded if stateful (with format docs + empty section)
- Validation returns 0 🔴 findings
-
state.mdhas new COMPLETED entry with chosen template + audit results - Saved Rules accumulated if new patterns detected from this run
- The user can
/{new-skill-name}and the skill loads + responds quickly </success_criteria>
Direct actions the user can ask for
If the user explicitly requests something (not full skill creation), handle accordingly:
- "Audit my skill X" → run
bash scripts/validate-skill.sh X(and a deeper auditor if available); show findings with fix suggestions - "Standardize skill X" → read existing skill, diff against canonical scaffold, propose changes via
AskUserQuestion - "Convert command to skill" → migrate
~/.claude/commands/X.md→~/.claude/skills/X/SKILL.mdpreserving content + restructuring - "Show me the style guide" → display
references/skill-style.md - "Show compaction patterns" → display
references/compaction-patterns.md - "Show frontmatter fields" → display
references/frontmatter-fields.md - "List my skills" →
ls ~/.claude/skills/+ structured table with status - "Add Phase X to skill Y" → augment existing skill with new phase, validate
What this skill deliberately does NOT do
- Never modifies a skill without showing diff + getting Phase 5 preview approval
- Never auto-publishes (no auto-commit beyond the local skill dir; you commit when ready)
- Never modifies global
~/.claude/CLAUDE.mdwithout explicit ask - Never deletes a skill (only archives by adding
.disabledsuffix at the user's explicit request)
What ships with it: 17 files
55.8 KB alongside SKILL.md, 3 of them executable
.claude-plugin/
- plugin.json523 B
references/
- compaction-patterns.md10.5 KB
- examples/01-stateless.md827 B
- examples/02-stateful-simple.md1.0 KB
- examples/03-stateful-checkpointed.md2.2 KB
- examples/04-stateful-multi-actor.md2.3 KB
- examples/05-slash-command-router.md1.1 KB
- examples/06-information-display.md1.1 KB
- examples/07-multi-phase-feature.md2.7 KB
- frontmatter-fields.md6.8 KB
- intake-questions.md4.9 KB
- skill-style.md10.1 KB
scripts/
- compaction-template.shruns4.6 KB
- generate-skill.shruns2.4 KB
- validate-skill.shruns3.2 KB
templates/
- skill-skeleton.md1.1 KB
- state.md520 B