Generate or convert Claude Code prompt files — command orchestrators, skill files, agent role definitions, or style conversion of existing files. Follows GSD-style content separation with built-in quality gates. Triggers on "create command", "new command", "create skill", "new skill", "create agent", "new agent", "convert command", "convert skill", "convert agent", "prompt generator", "优化".
87
85%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Risky
Do not use without reviewing
.claude/commands/ or ~/.claude/commands/.claude/skills/*/SKILL.md (progressive loading, no @ refs).claude/agents/Content separation principle (from GSD): commands/skills own orchestration flow; agents own domain knowledge. Skills are a variant of commands but loaded progressively inline — they CANNOT use @ file references.
Invoked when user requests "create command", "new command", "create skill", "new skill", "create agent", "new agent", "convert command", "convert skill", "convert agent", "prompt generator", or "优化". </purpose>
<required_reading>
Parse $ARGUMENTS to determine what to generate.
| Signal | Type |
|---|---|
| "command", "workflow", "orchestrator" in args | command |
"skill", "SKILL.md" in args, or path contains .claude/skills/ | skill |
| "agent", "role", "worker" in args | agent |
| "convert", "restyle", "refactor", "optimize", "优化" + file path in args | convert |
| Ambiguous or missing | Ask user |
Convert mode detection: If args contain a file path (.md extension) + conversion keywords, enter convert mode. Extract $SOURCE_PATH from args. Auto-detect source type from path:
.claude/commands/ → command.claude/skills/*/SKILL.md → skill.claude/agents/ → agentSkill vs Command distinction: Skills (.claude/skills/*/SKILL.md) are loaded progressively inline into the conversation context. They CANNOT use @ file references — only Read() tool calls within process steps. See @specs/command-design-spec.md → "Skill Variant" section.
If ambiguous:
AskUserQuestion(
header: "Artifact Type",
question: "What type of prompt file do you want to generate?",
options: [
{ label: "Command", description: "New orchestration workflow — process steps, user interaction, agent spawning" },
{ label: "Skill", description: "New skill file — progressive loading, no @ refs, inline Read() for external files" },
{ label: "Agent", description: "New role definition — identity, domain expertise, behavioral rules" },
{ label: "Convert", description: "Restyle existing command/agent/skill to GSD conventions (zero content loss)" }
]
)Store as $ARTIFACT_TYPE (command | skill | agent | convert).
If $ARTIFACT_TYPE is convert: Skip to Step 2c.
Extract from $ARGUMENTS or ask interactively:
Common parameters (create mode):
| Parameter | Required | Validation | Example |
|---|---|---|---|
$NAME | Yes | /^[a-z][a-z0-9-]*$/ | deploy, gsd-planner |
$DESCRIPTION | Yes | min 10 chars | "Deploy to production with rollback" |
Command-specific parameters:
| Parameter | Required | Validation | Example |
|---|---|---|---|
$LOCATION | Yes | "project" or "user" | project |
$GROUP | No | /^[a-z][a-z0-9-]*$/ | issue, workflow |
$ARGUMENT_HINT | No | any string | "<phase> [--skip-verify]" |
Agent-specific parameters:
| Parameter | Required | Validation | Example |
|---|---|---|---|
$TOOLS | No | comma-separated tool names | Read, Write, Bash, Glob |
$SPAWNED_BY | No | which command spawns this agent | /plan-phase orchestrator |
Normalize: trim + lowercase for $NAME, $LOCATION, $GROUP.
Command:
| Location | Base |
|---|---|
project | .claude/commands |
user | ~/.claude/commands |
If $GROUP:
$TARGET_PATH = {base}/{$GROUP}/{$NAME}.md
Else:
$TARGET_PATH = {base}/{$NAME}.mdSkill:
$TARGET_PATH = .claude/skills/{$NAME}/SKILL.mdAgent:
$TARGET_PATH = .claude/agents/{$NAME}.mdCheck if $TARGET_PATH exists → $FILE_EXISTS.
4a. Pattern discovery — Find 3+ similar files in the project for style reference:
# For commands: scan existing commands
ls .claude/commands/**/*.md 2>/dev/null | head -5
# For agents: scan existing agents
ls .claude/agents/*.md 2>/dev/null | head -5Read 1-2 similar files to extract patterns: section structure, naming conventions, XML tag usage, prompt style.
4b. Domain inference from $NAME, $DESCRIPTION, and context:
| Signal | Extract |
|---|---|
$NAME | Action verb → step/section naming |
$DESCRIPTION | Domain keywords → content structure |
$ARGUMENT_HINT | Flags → parse_input logic (command only) |
$SPAWNED_BY | Upstream contract → role boundary (agent only) |
For commands — determine complexity:
| Complexity | Criteria | Steps |
|---|---|---|
| Simple | Single action, no flags | 3-5 numbered steps |
| Standard | 1-2 flags, clear workflow | 5-8 numbered steps |
| Complex | Multiple flags, agent spawning | 8-14 numbered steps |
For agents — determine expertise scope:
| Scope | Criteria | Sections |
|---|---|---|
| Focused | Single responsibility | <role> + 1-2 domain sections |
| Standard | Multi-aspect domain | <role> + 2-4 domain sections |
| Expert | Deep domain with rules | <role> + 4-6 domain sections |
If unclear, ask user with AskUserQuestion.
Route to the appropriate generation logic based on $ARTIFACT_TYPE.
Follow @specs/command-design-spec.md and @templates/command-md.md.
Generate a complete command file with:
<purpose> — 2-3 sentences: what + when + what it produces<required_reading> — @ references to context files<process> — numbered steps (GSD workflow style):
Agent(), error handling<offer_next> with next actions<success_criteria> — checkbox list of verifiable conditionsCommand writing rules:
## 1., ## 2.) — follow plan-phase.md and new-project.md style━━━ SKILL ► ACTION ━━━Agent({ subagent_type, prompt, description, run_in_background }) pattern<objective>, <files_to_read>, <output> blocks<offer_next> block with formatted completion status## TASK COMPLETE, ## TASK BLOCKED, ## CHECKPOINT REACHED<auto_mode> section if command supports --auto flagFollow @specs/command-design-spec.md → "Skill Variant" section.
Skills are command-like orchestrators but loaded progressively inline — they CANNOT use @ file references.
Generate a complete skill file with:
<purpose> — 2-3 sentences: what + when + what it produces<required_reading> — skills cannot use @ refs. External files loaded via Read() within process steps.<process> — numbered steps (GSD workflow style):
Read("phases/...") for phase filesAgent(), error handlingSkill()<success_criteria> — checkbox list of verifiable conditionsSkill-specific writing rules:
<required_reading> tag — @ syntax not supported in skills@path references anywhere in the file — use Read("path") within <process> stepsRead("phases/01-xxx.md") within the step that needs itallowed-tools: (not argument-hint:)<offer_next> is optional — skills often chain via Skill() calls<auto_mode> can be inline within <process> step 1 or as standalone sectionFollow @specs/agent-design-spec.md and @templates/agent-md.md.
Generate a complete agent definition with:
<role> — identity + spawned-by + core responsibilities + mandatory initial read<philosophy> — guiding principles, anti-patterns<context_fidelity> — how to honor upstream decisions<task_breakdown> / <output_format> — concrete output rules with examples<quality_gate> — self-check criteria before returningAgent writing rules:
<role> is ALWAYS first after frontmatter — defines identityCRITICAL: Zero content loss. Follow @specs/conversion-spec.md.
Step 5c.1: Read and inventory source file.
Read $SOURCE_PATH completely. Build content inventory:
$INVENTORY = {
frontmatter: { fields extracted },
sections: [ { name, tag, line_range, line_count, has_code_blocks, has_tables } ],
code_blocks: count,
tables: count,
total_lines: count
}Step 5c.2: Classify source type.
| Signal | Type |
|---|---|
Path in .claude/skills/*/SKILL.md | skill |
allowed-tools: in frontmatter + path in .claude/skills/ | skill |
Contains <process>, <step>, numbered ## N. steps | command |
Contains <role>, tools: in frontmatter, domain sections | agent |
Flat markdown with ## Implementation, ## Phase N + in skills dir | skill (unstructured) |
Flat markdown with ## Implementation, ## Phase N + in commands dir | command (unstructured) |
| Flat prose with role description, no process steps | agent (unstructured) |
Skill-specific conversion rules:
<required_reading> — skills cannot use @ file references (progressive loading)@path references anywhere — replace with Read("path") within <process> steps@specs/... or @phases/... refs, convert to Read("specs/...") / Read("phases/...")@specs/conversion-spec.md → "Skill Conversion Rules" sectionStep 5c.3: Build conversion map.
Map every source section to its target location. Follow @specs/conversion-spec.md transformation rules.
MANDATORY: Every line of source content must appear in the conversion map. If a source section has no clear target, keep it as a custom section.
Step 5c.4: Generate converted content.
Apply structural transformations while preserving ALL content verbatim:
<quality_gate>, <output_contract>) with TODO markersStep 5c.5: Content loss verification (MANDATORY).
Compare source and output:
| Metric | Source | Output | Pass? |
|---|---|---|---|
| Total lines | $SRC_LINES | $OUT_LINES | output >= source × 0.95 |
| Code blocks | $SRC_BLOCKS | $OUT_BLOCKS | output >= source |
| Tables | $SRC_TABLES | $OUT_TABLES | output >= source |
| Sections | $SRC_SECTIONS | $OUT_SECTIONS | output >= source |
If ANY metric fails → STOP, display diff, ask user before proceeding.
Set $TARGET_PATH = $SOURCE_PATH (in-place conversion) unless user specifies output path.
[Describe...]) — all content concrete$DESCRIPTIONMANDATORY before writing. Read back the generated content and validate against type-specific checks.
| Check | Pass Condition |
|---|---|
| YAML frontmatter | Has name + description |
| No placeholders | Zero [...] or {...} bracket placeholders in prose |
| Concrete content | Every section has actionable content, not descriptions of what to write |
| Section count | Command: 3+ sections; Agent: 4+ sections |
| Check | Pass Condition |
|---|---|
<purpose> | 2-3 sentences, no placeholders |
<process> with numbered steps | At least 3 ## N. headers |
| Step 1 is initialization | Parses args or loads context |
| Last step is status/report | Displays results or routes to <offer_next> |
| Agent spawning (if complex) | Agent({ call with subagent_type |
| Agent prompt structure | <files_to_read> + <objective> or <output> blocks |
| Return handling | Routes on ## TASK COMPLETE / ## TASK BLOCKED markers |
<offer_next> | Banner + summary + next command suggestion |
<success_criteria> | 4+ checkbox items, all verifiable |
| Content separation | No domain expertise embedded — only orchestration |
| Check | Pass Condition |
|---|---|
<purpose> | 2-3 sentences, no placeholders |
NO <required_reading> | Must NOT contain <required_reading> tag |
NO @ file references | Zero @specs/, @phases/, @./ patterns in prose |
<process> with numbered steps | At least 3 ## N. headers |
| Step 1 is initialization | Parses args, sets workflow preferences |
| Phase file loading | Uses Read("phases/...") within process steps (if has phases) |
<success_criteria> | 4+ checkbox items, all verifiable |
Frontmatter allowed-tools | Present and lists required tools |
| Content separation | No domain expertise embedded — only orchestration |
| Check | Pass Condition |
|---|---|
YAML tools field | Lists tools agent needs |
<role> is first section | Appears before any domain section |
<role> has spawned-by | States which command spawns it |
<role> has mandatory read | <files_to_read> instruction present |
<role> has responsibilities | 3+ bullet points with verb phrases |
| Domain sections named | After domain concepts, not generic (<rules>, <guidelines>) |
| Examples present | Each domain section has 1+ comparison table or decision table |
<output_contract> | Defines return markers (COMPLETE/BLOCKED/CHECKPOINT) |
<quality_gate> | 3+ checkbox self-check items |
| Content separation | No AskUserQuestion, no banner display, no argument parsing |
Count errors and warnings:
| Gate | Condition | Action |
|---|---|---|
| PASS | 0 errors, 0-2 warnings | Proceed to write |
| REVIEW | 1-2 errors or 3+ warnings | Fix errors, display warnings |
| FAIL | 3+ errors | Re-generate from step 5 |
If FAIL and second attempt also fails:
AskUserQuestion(
header: "Quality Gate Failed",
question: "Generated content failed quality checks twice. How to proceed?",
options: [
{ label: "Show issues and proceed", description: "Write as-is, fix manually" },
{ label: "Provide more context", description: "I'll give additional details" },
{ label: "Abort", description: "Cancel generation" }
]
)If $FILE_EXISTS: Warn user before overwriting.
mkdir -p "$(dirname "$TARGET_PATH")"Write content to $TARGET_PATH using Write tool.
Post-write verification — Read back and confirm file integrity:
If verification fails: Fix in-place with Edit tool.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PROMPT-GEN ► {COMMAND|AGENT} GENERATED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Type: {command | agent}
File: {$TARGET_PATH}
Name: {$NAME}
| Section | Status |
|---------|--------|
| {section 1} | concrete |
| {section 2} | concrete |
| ... | ... |
Quality Gate: {PASS | REVIEW (N warnings)}
───────────────────────────────────────────────────────
## Next Up
1. Review: cat {$TARGET_PATH}
2. Test: /{invocation}
**If command + needs an agent:**
/prompt-generator agent {agent-name} "{agent description}"
**If agent + needs a command:**
/prompt-generator command {command-name} "{command description}"
───────────────────────────────────────────────────────<success_criteria>
0f8e801
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.