diff --git a/.claude/commands/workflow/analyze-with-file.md b/.claude/commands/workflow/analyze-with-file.md
index c02958ce..9d6b32b0 100644
--- a/.claude/commands/workflow/analyze-with-file.md
+++ b/.claude/commands/workflow/analyze-with-file.md
@@ -9,26 +9,23 @@ allowed-tools: TodoWrite(*), Agent(*), AskUserQuestion(*), Read(*), Grep(*), Glo
When `--yes` or `-y`: Auto-confirm exploration decisions, use recommended analysis angles.
-# Workflow Analyze Command
+
+Interactive collaborative analysis workflow combining codebase exploration (cli-explore-agent) with CLI-assisted analysis (Gemini/Codex). Produces a documented discussion timeline with evolving understanding, decision trails, and actionable conclusions.
-**Context Source**: cli-explore-agent + Gemini/Codex analysis
-**Output Directory**: `.workflow/.analysis/{session-id}/`
-**Core Innovation**: Documented discussion timeline with evolving understanding
+Invoked when user needs deep, multi-perspective analysis of a topic or codebase question — e.g., architecture review, implementation analysis, concept exploration, or decision evaluation.
-## Output Artifacts
+Produces: `discussion.md` (evolving analysis document with TOC, rounds, narrative synthesis), `explorations.json`/`perspectives.json` (structured findings), `conclusions.json` (final synthesis with recommendations). All artifacts stored in `.workflow/.analysis/{session-id}/`.
+
-| Phase | Artifact | Description |
-|-------|----------|-------------|
-| 1 | `discussion.md` | Initialized with TOC, Current Understanding block, timeline, metadata |
-| 1 | Session variables | Dimensions, focus areas, analysis depth |
-| 2 | `exploration-codebase.json` | Single codebase context from cli-explore-agent |
-| 2 | `explorations/*.json` | Multi-perspective codebase explorations (parallel, up to 4) |
-| 2 | `explorations.json` | Single perspective aggregated findings |
-| 2 | `perspectives.json` | Multi-perspective findings (up to 4) with synthesis |
-| 2 | Updated `discussion.md` | Round 1 + Initial Intent Coverage Check + Current Understanding replaced |
-| 3 | Updated `discussion.md` | Round 2-N: feedback, insights, narrative synthesis; TOC + Current Understanding updated each round |
-| 4 | `conclusions.json` | Final synthesis with recommendations (incl. steps[] + review_status) |
-| 4 | Final `discussion.md` | Complete analysis with conclusions, recommendation review summary, intent coverage matrix |
+
+
+### AskUserQuestion Constraints
+
+All `AskUserQuestion` calls MUST comply:
+- **questions**: 1-4 questions per call
+- **options**: 2-4 per question (system auto-adds "Other" for free-text input)
+- **header**: max 12 characters
+- **label**: 1-5 words per option
### Decision Recording Protocol
@@ -38,7 +35,7 @@ When `--yes` or `-y`: Auto-confirm exploration decisions, use recommended analys
|---------|---------------|----------------|
| **Direction choice** | What chosen, why, alternatives discarded | `#### Decision Log` |
| **Key finding** | Content, impact scope, confidence level, hypothesis impact | `#### Key Findings` |
-| **Assumption change** | Old → new understanding, reason, impact | `#### Corrected Assumptions` |
+| **Assumption change** | Old -> new understanding, reason, impact | `#### Corrected Assumptions` |
| **User feedback** | Input, rationale for adoption/adjustment | `#### User Input` |
| **Disagreement & trade-off** | Conflicting views, trade-off basis, final choice | `#### Decision Log` |
| **Scope adjustment** | Before/after scope, trigger reason | `#### Decision Log` |
@@ -63,23 +60,33 @@ When `--yes` or `-y`: Auto-confirm exploration decisions, use recommended analys
**Principles**: Immediacy (record as-it-happens), Completeness (context+options+chosen+reason+rejected), Traceability (later phases trace back), Depth (capture reasoning, not just outcomes)
-## Implementation
+### Output Artifacts
-### AskUserQuestion Constraints
+| Phase | Artifact | Description |
+|-------|----------|-------------|
+| 1 | `discussion.md` | Initialized with TOC, Current Understanding block, timeline, metadata |
+| 1 | Session variables | Dimensions, focus areas, analysis depth |
+| 2 | `exploration-codebase.json` | Single codebase context from cli-explore-agent |
+| 2 | `explorations/*.json` | Multi-perspective codebase explorations (parallel, up to 4) |
+| 2 | `explorations.json` | Single perspective aggregated findings |
+| 2 | `perspectives.json` | Multi-perspective findings (up to 4) with synthesis |
+| 2 | Updated `discussion.md` | Round 1 + Initial Intent Coverage Check + Current Understanding replaced |
+| 3 | Updated `discussion.md` | Round 2-N: feedback, insights, narrative synthesis; TOC + Current Understanding updated each round |
+| 4 | `conclusions.json` | Final synthesis with recommendations (incl. steps[] + review_status) |
+| 4 | Final `discussion.md` | Complete analysis with conclusions, recommendation review summary, intent coverage matrix |
-All `AskUserQuestion` calls MUST comply:
-- **questions**: 1-4 questions per call
-- **options**: 2-4 per question (system auto-adds "Other" for free-text input)
-- **header**: max 12 characters
-- **label**: 1-5 words per option
+
-### Session Initialization
+
+
+
+**Initialize session and create progress tracking.**
1. Extract topic/question from `$ARGUMENTS`
2. Generate session ID: `ANL-{slug}-{date}` (slug: lowercase alphanumeric+Chinese, max 40 chars; date: YYYY-MM-DD UTC+8)
3. Define session folder: `.workflow/.analysis/{session-id}`
4. Parse options: `-c`/`--continue` for continuation, `-y`/`--yes` for auto-approval
-5. Auto-detect: If session folder + discussion.md exist → continue mode
+5. Auto-detect: If session folder + discussion.md exist -> continue mode
6. Create directory structure
7. **Create Progress Tracking** (TodoWrite — MANDATORY):
```
@@ -95,10 +102,12 @@ All `AskUserQuestion` calls MUST comply:
- **`next-step` is a terminal gate** — workflow is NOT complete until this todo is `"completed"`
**Session Variables**: `sessionId`, `sessionFolder`, `autoMode` (boolean), `mode` (new|continue)
+
-### Phase 1: Topic Understanding
+
+**Phase 1: Parse topic, identify dimensions, and capture user preferences.**
-1. **Parse Topic & Identify Dimensions** — Match keywords against Analysis Dimensions table
+1. **Parse Topic & Identify Dimensions** — Match keywords against Analysis Dimensions table (see Configuration)
2. **Initial Scoping** (if new session + not auto mode) — use **single AskUserQuestion call with up to 3 questions**:
- Q1 **Focus** (multiSelect: true, header: "分析方向"): Top 3-4 directions from Dimension-Direction Mapping (options max 4)
- Q2 **Perspectives** (multiSelect: true, header: "分析视角"): Up to 4 from Analysis Perspectives table (options max 4), default: single comprehensive
@@ -109,17 +118,21 @@ All `AskUserQuestion` calls MUST comply:
- Session metadata, user context, initial questions, empty discussion timeline, initial dimension selection rationale
4. **Record Phase 1 Decisions** — Dimension selection reasoning, depth rationale, any user adjustments
-**Success**: Session folder + discussion.md created, dimensions identified, preferences captured, decisions recorded
-**TodoWrite**: Update `phase-1` → `"completed"`, `phase-2` → `"in_progress"`
+| Condition | Action |
+|-----------|--------|
+| Session folder + discussion.md created | Continue to Phase 2 |
+| User provides no input (timeout) | Save state, show resume command `# (see code: E003)` |
-### Phase 2: CLI Exploration
+**TodoWrite**: Update `phase-1` -> `"completed"`, `phase-2` -> `"in_progress"`
+
-Codebase exploration FIRST, then CLI analysis.
+
+**Phase 2: Codebase exploration FIRST, then CLI analysis.**
**Step 1: Codebase Exploration** (cli-explore-agent, parallel up to 6)
-- **Single**: General codebase analysis → `{sessionFolder}/exploration-codebase.json`
-- **Multi-perspective**: Parallel per-perspective → `{sessionFolder}/explorations/{perspective}.json`
+- **Single**: General codebase analysis -> `{sessionFolder}/exploration-codebase.json`
+- **Multi-perspective**: Parallel per-perspective -> `{sessionFolder}/explorations/{perspective}.json`
- **Common tasks**: `ccw tool exec get_modules_by_depth '{}'`, keyword searches, read `.workflow/project-tech.json`
```javascript
@@ -143,15 +156,15 @@ Session: ${sessionFolder}
### Layer 1 — Module Discovery (Breadth)
- Search by topic keywords, identify ALL relevant files
-- Map module boundaries and entry points → relevant_files[] with annotations
+- Map module boundaries and entry points -> relevant_files[] with annotations
### Layer 2 — Structure Tracing (Depth)
- Top 3-5 key files: trace call chains 2-3 levels deep
-- Identify data flow paths and dependencies → call_chains[], data_flows[]
+- Identify data flow paths and dependencies -> call_chains[], data_flows[]
### Layer 3 — Code Anchor Extraction (Detail)
- Each key finding: extract code snippet (20-50 lines) with file:line
-- Annotate WHY this matters → code_anchors[]
+- Annotate WHY this matters -> code_anchors[]
## Output
Write to: ${sessionFolder}/exploration-codebase.json
@@ -177,7 +190,7 @@ PRIOR EXPLORATION CONTEXT:
- Findings: ${explorationResults.key_findings.slice(0,3).join(', ')}
- Code anchors:
${(explorationResults.code_anchors || []).slice(0,5).map(a => ` [${a.file}:${a.lines}] ${a.significance}\n \`\`\`\n ${a.snippet}\n \`\`\``).join('\n')}
-- Call chains: ${(explorationResults.call_chains || []).slice(0,3).map(c => `${c.entry} → ${c.chain.join(' → ')}`).join('; ')}`
+- Call chains: ${(explorationResults.call_chains || []).slice(0,3).map(c => `${c.entry} -> ${c.chain.join(' -> ')}`).join('; ')}`
// Single perspective (for multi: loop selectedPerspectives with perspective.purpose/tasks/constraints)
Bash({
@@ -188,10 +201,10 @@ Success: Actionable insights with clear reasoning
${explorationContext}
TASK:
-• Build on exploration findings — reference specific code anchors
-• Analyze common patterns and anti-patterns with code evidence
-• Highlight potential issues/opportunities with file:line references
-• Generate discussion points for user clarification
+- Build on exploration findings — reference specific code anchors
+- Analyze common patterns and anti-patterns with code evidence
+- Highlight potential issues/opportunities with file:line references
+- Generate discussion points for user clarification
MODE: analysis
CONTEXT: @**/* | Topic: ${topic_or_question}
@@ -230,10 +243,17 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
- `synthesis`: {convergent_themes, conflicting_views, unique_contributions}
- code_anchors/call_chains include `perspective` field
-**Success**: Exploration + CLI artifacts created, discussion.md Round 1, key findings and exploration decisions recorded
-**TodoWrite**: Update `phase-2` → `"completed"`, `phase-3` → `"in_progress"`
+| Condition | Action |
+|-----------|--------|
+| Exploration + CLI artifacts created | Continue to Phase 3 |
+| cli-explore-agent fails | Continue with available context, note limitation `# (see code: E001)` |
+| CLI timeout | Retry with shorter prompt, or skip perspective `# (see code: E002)` |
-### Phase 3: Interactive Discussion
+**TodoWrite**: Update `phase-2` -> `"completed"`, `phase-3` -> `"in_progress"`
+
+
+
+**Phase 3: Interactive discussion loop with evolving understanding.**
**Guideline**: Delegate complex tasks to agents (cli-explore-agent) or CLI calls. Avoid direct analysis in main process.
@@ -249,26 +269,26 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
- **继续深入**: Direction correct — deepen automatically or user specifies direction (combines agree+deepen and agree+suggest)
- **调整方向**: Different focus or specific questions to address
- **补充信息**: User has additional context, constraints, or corrections to provide
- - **分析完成**: Sufficient → exit to Phase 4
+ - **分析完成**: Sufficient -> exit to Phase 4
4. **Process Response** (always record user choice + impact to discussion.md):
- **继续深入** → Sub-question to choose direction (AskUserQuestion, single-select, header: "深入方向"):
+ **继续深入** -> Sub-question to choose direction (AskUserQuestion, single-select, header: "深入方向"):
- Dynamically generate **max 3** context-driven options from: unresolved questions, low-confidence findings, unexplored dimensions, user-highlighted areas
- Add **1** heuristic option that breaks current frame (e.g., "compare with best practices", "review from security perspective", "explore simpler alternatives")
- Total: **max 4 options**. Each specifies: label, description, tool (cli-explore-agent for code-level / Gemini CLI for pattern-level), scope
- **"Other" is auto-provided** by AskUserQuestion — covers user-specified custom direction (no need for separate "suggest next step" option)
- - Execute selected direction → merge new code_anchors/call_chains → record confirmed assumptions + deepen angle
+ - Execute selected direction -> merge new code_anchors/call_chains -> record confirmed assumptions + deepen angle
- **调整方向** → AskUserQuestion (header: "新方向", user selects or provides custom via "Other") → new CLI exploration → Record Decision (old vs new direction, reason, impact)
+ **调整方向** -> AskUserQuestion (header: "新方向", user selects or provides custom via "Other") -> new CLI exploration -> Record Decision (old vs new direction, reason, impact)
- **补充信息** → Capture user input, integrate into context, answer questions via CLI/analysis if needed → Record corrections/additions + updated understanding
+ **补充信息** -> Capture user input, integrate into context, answer questions via CLI/analysis if needed -> Record corrections/additions + updated understanding
- **分析完成** → Exit loop → Record why concluding
+ **分析完成** -> Exit loop -> Record why concluding
5. **Update discussion.md**:
- **Append** Round N: user input, direction adjustment, Q&A, corrections, new insights
- - **Replace** `## Current Understanding` block with latest consolidated understanding (follow Consolidation Rules: promote confirmed, track corrections, focus on NOW)
+ - **Replace** `## Current Understanding` block with latest consolidated understanding (follow Consolidation Rules)
- **Update** `## Table of Contents` with links to new Round N sections
6. **Round Narrative Synthesis** (append to discussion.md after each round update):
@@ -291,12 +311,19 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
- ⚠️ Intent 3: [implicitly absorbed by X — needs confirmation]
- ❌ Intent 4: [not yet discussed]
```
- - If ❌ or ⚠️ items exist → **proactively surface** to user at start of next round: "以下原始意图尚未充分覆盖:[list]。是否需要调整优先级?"
+ - If ❌ or ⚠️ items exist -> **proactively surface** to user at start of next round: "以下原始意图尚未充分覆盖:[list]。是否需要调整优先级?"
-**Success**: All rounds documented with narrative synthesis, assumptions corrected, all decisions recorded with rejection reasoning, direction changes with before/after
-**TodoWrite**: Update `phase-3` → `"completed"`, `phase-4` → `"in_progress"`
+| Condition | Action |
+|-----------|--------|
+| User selects "分析完成" | Exit loop, proceed to Phase 4 |
+| Max rounds (5) reached | Force synthesis, offer continuation `# (see code: E004)` |
+| User timeout | Save state, show resume command `# (see code: E003)` |
-### Phase 4: Synthesis & Conclusion
+**TodoWrite**: Update `phase-3` -> `"completed"`, `phase-4` -> `"in_progress"`
+
+
+
+**Phase 4: Synthesize findings, verify intent coverage, and determine next steps.**
1. **Intent Coverage Verification** (MANDATORY before synthesis):
- Check each original intent: ✅ Addressed / 🔀 Transformed / ⚠️ Absorbed / ❌ Missed
@@ -305,7 +332,7 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
| # | Original Intent | Status | Where Addressed | Notes |
|---|----------------|--------|-----------------|-------|
| 1 | [intent] | ✅ Addressed | Round N, Conclusion #M | |
- | 2 | [intent] | 🔀 Transformed | Round N → M | Original: X → Final: Y |
+ | 2 | [intent] | 🔀 Transformed | Round N -> M | Original: X -> Final: Y |
| 3 | [intent] | ❌ Missed | — | Reason |
```
- **Gate**: ❌ Missed items must be either (a) addressed in additional round or (b) confirmed deferred by user
@@ -336,11 +363,11 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
```
1. Display all recommendations with numbering (action, rationale, priority, steps[])
- 2. Single AskUserQuestion call — one question per recommendation (max 4, ordered by priority high→medium→low):
+ 2. Single AskUserQuestion call — one question per recommendation (max 4, ordered by priority high->medium->low):
Each question (single-select, header: "建议#N"):
- - **确认** (label: "确认", desc: "Accept as-is") → review_status = "accepted"
- - **修改** (label: "修改", desc: "Adjust scope/steps") → review_status = "modified"
- - **删除** (label: "删除", desc: "Not needed") → review_status = "rejected"
+ - **确认** (label: "确认", desc: "Accept as-is") -> review_status = "accepted"
+ - **修改** (label: "修改", desc: "Adjust scope/steps") -> review_status = "modified"
+ - **删除** (label: "删除", desc: "Not needed") -> review_status = "rejected"
3. If >4 recommendations: batch in groups of 4 with additional AskUserQuestion calls
4. For "修改" selections: follow up to capture modification details
5. Record all review decisions to discussion.md Decision Log
@@ -353,7 +380,7 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
6. **MANDATORY GATE: Next Step Selection** — workflow MUST NOT end without executing this step.
- **TodoWrite**: Update `phase-4` → `"completed"`, `next-step` → `"in_progress"`
+ **TodoWrite**: Update `phase-4` -> `"completed"`, `next-step` -> `"in_progress"`
> **CRITICAL**: This AskUserQuestion is a **terminal gate**. The workflow is INCOMPLETE if this question is not asked. After displaying conclusions (step 4) and recommendation review (step 5), you MUST immediately proceed here.
@@ -364,7 +391,7 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
**Handle user selection**:
- **"执行任务"** → MUST invoke Skill tool (do NOT just display a summary and stop):
+ **"执行任务"** -> MUST invoke Skill tool (do NOT just display a summary and stop):
1. Build `taskDescription` from high/medium priority recommendations (fallback: summary)
2. Assemble context: `## Prior Analysis ({sessionId})` + summary + key files (up to 8) + key findings (up to 5) from exploration-codebase.json
3. **Invoke Skill tool immediately**:
@@ -374,15 +401,15 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
If Skill invocation is omitted, the workflow is BROKEN.
4. After Skill invocation, analyze-with-file is complete — do not output any additional content
- **"产出Issue"** → Convert recommendations to issues:
+ **"产出Issue"** -> Convert recommendations to issues:
1. For each recommendation in conclusions.recommendations (priority high/medium):
- Build issue JSON: `{title, context: rec.action + rec.rationale, priority: rec.priority == 'high' ? 2 : 3, source: 'discovery', labels: dimensions}`
- Create via pipe: `echo '' | ccw issue create`
2. Display created issue IDs with next step hint: `/issue:plan `
- **"完成"** → No further action needed.
+ **"完成"** -> No further action needed.
- **TodoWrite**: Update `next-step` → `"completed"` after user selection is handled
+ **TodoWrite**: Update `next-step` -> `"completed"` after user selection is handled
**conclusions.json Schema**:
- `session_id`, `topic`, `completed`, `total_rounds`, `summary`
@@ -393,10 +420,43 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
- `decision_trail[]`: {round, decision, context, options_considered, chosen, rejected_reasons, reason, impact}
- `narrative_trail[]`: {round, starting_point, key_progress, hypothesis_impact, updated_understanding, remaining_questions}
- `intent_coverage[]`: {intent, status, where_addressed, notes}
+
-**Success**: conclusions.json created, discussion.md finalized, Intent Coverage Matrix verified, complete decision trail documented, `next-step` gate completed
+
-## Configuration
+
+
+| Code | Severity | Description | Stage |
+|------|----------|-------------|-------|
+| E001 | error | cli-explore-agent fails — continue with available context, note limitation | cli_exploration |
+| E002 | error | CLI timeout — retry with shorter prompt, or skip perspective | cli_exploration |
+| E003 | error | User timeout — save state, show resume command | topic_understanding, interactive_discussion |
+| E004 | warning | Max discussion rounds (5) reached — force synthesis, offer continuation | interactive_discussion |
+| E005 | error | No relevant findings from exploration — broaden search, ask user for clarification | cli_exploration |
+| E006 | warning | Session folder conflict — append timestamp suffix | session_init |
+| E007 | error | Gemini unavailable — fallback to Codex or manual analysis | cli_exploration |
+
+
+
+
+- [ ] Session folder created with valid session ID
+- [ ] Progress tracking (TodoWrite) initialized with all 5 items
+- [ ] Dimensions identified and user preferences captured (Phase 1)
+- [ ] discussion.md initialized with TOC, Current Understanding, metadata
+- [ ] Codebase exploration completed with code_anchors and call_chains (Phase 2)
+- [ ] CLI analysis executed and findings aggregated
+- [ ] Initial Intent Coverage Check appended to discussion.md
+- [ ] Interactive discussion rounds documented with narrative synthesis (Phase 3)
+- [ ] Intent Drift Check performed each round >= 2
+- [ ] All decisions recorded per Decision Recording Protocol
+- [ ] Intent Coverage Matrix verified in Phase 4
+- [ ] conclusions.json created with key_conclusions, recommendations, decision_trail
+- [ ] discussion.md finalized with conclusions, Decision Trail, session statistics
+- [ ] Recommendation review completed (non-auto mode)
+- [ ] Next Step terminal gate executed — `next-step` todo is `"completed"`
+
+
+
### Analysis Perspectives
@@ -440,22 +500,12 @@ Present 2-3 top directions per dimension, allow multi-select + custom.
| Rule | Description |
|------|-------------|
| Promote confirmed insights | Move validated findings to "What We Established" |
-| Track corrections | Keep important wrong→right transformations |
+| Track corrections | Keep important wrong->right transformations |
| Focus on current state | What do we know NOW |
| Avoid timeline repetition | Don't copy discussion details |
| Preserve key learnings | Keep insights valuable for future reference |
-## Error Handling
-
-| Error | Resolution |
-|-------|------------|
-| cli-explore-agent fails | Continue with available context, note limitation |
-| CLI timeout | Retry with shorter prompt, or skip perspective |
-| User timeout | Save state, show resume command |
-| Max rounds reached | Force synthesis, offer continuation |
-| No relevant findings | Broaden search, ask user for clarification |
-| Session folder conflict | Append timestamp suffix |
-| Gemini unavailable | Fallback to Codex or manual analysis |
+
> **Lite-plan handoff**: Phase 4「执行任务」assembles analysis context as inline `## Prior Analysis` block, allowing lite-plan to skip redundant exploration.
diff --git a/.claude/skills/command-generator/SKILL.md b/.claude/skills/command-generator/SKILL.md
deleted file mode 100644
index 28e084f7..00000000
--- a/.claude/skills/command-generator/SKILL.md
+++ /dev/null
@@ -1,307 +0,0 @@
----
-name: command-generator
-description: Command file generator - 5 phase workflow for creating Claude Code command files with YAML frontmatter. Generates .md command files for project or user scope. Triggers on "create command", "new command", "command generator".
-allowed-tools: Read, Write, Edit, Bash, Glob, AskUserQuestion
----
-
-
-Generate Claude Code command .md files with concrete, domain-specific content in GSD style. Produces command files at project-level (`.claude/commands/`) or user-level (`~/.claude/commands/`) with YAML frontmatter, XML semantic tags (``, ``, ``, ``, ``), and actionable execution logic — NOT empty placeholders.
-
-Invoked when user requests "create command", "new command", or "command generator".
-
-
-
-- @.claude/skills/command-generator/specs/command-design-spec.md
-- @.claude/skills/command-generator/templates/command-md.md
-
-
-
-
-
-**Parse and validate all input parameters.**
-
-Extract from `$ARGUMENTS` or skill args:
-
-| Parameter | Required | Validation | Example |
-|-----------|----------|------------|---------|
-| `$SKILL_NAME` | Yes | `/^[a-z][a-z0-9-]*$/`, min 1 char | `deploy`, `create` |
-| `$DESCRIPTION` | Yes | min 10 chars | `"Deploy application to production"` |
-| `$LOCATION` | Yes | `"project"` or `"user"` | `project` |
-| `$GROUP` | No | `/^[a-z][a-z0-9-]*$/` or null | `issue`, `workflow` |
-| `$ARGUMENT_HINT` | No | any string or empty | `" [--priority 1-5]"` |
-
-**Validation rules:**
-- Missing required param → Error with specific message (e.g., `"skillName is required"`)
-- Invalid `$SKILL_NAME` pattern → Error: `"skillName must be lowercase alphanumeric with hyphens, starting with a letter"`
-- Invalid `$LOCATION` → Error: `"location must be 'project' or 'user'"`
-- Invalid `$GROUP` pattern → Warning, continue
-
-**Normalize:** trim + lowercase for `$SKILL_NAME`, `$LOCATION`, `$GROUP`.
-
-
-
-**Resolve target file path based on location and group.**
-
-Path mapping:
-
-| Location | Base Directory |
-|----------|---------------|
-| `project` | `.claude/commands` |
-| `user` | `~/.claude/commands` (expand `~` to `$HOME`) |
-
-Path construction:
-
-```
-If $GROUP:
- $TARGET_DIR = {base}/{$GROUP}
- $TARGET_PATH = {base}/{$GROUP}/{$SKILL_NAME}.md
-Else:
- $TARGET_DIR = {base}
- $TARGET_PATH = {base}/{$SKILL_NAME}.md
-```
-
-Check if `$TARGET_PATH` already exists → store as `$FILE_EXISTS` (true/false).
-
-
-
-**Gather domain-specific requirements to generate concrete content.**
-
-Infer the command's domain from `$SKILL_NAME`, `$DESCRIPTION`, and `$ARGUMENT_HINT`:
-
-| Signal | Extract |
-|--------|---------|
-| `$SKILL_NAME` | Action verb (deploy, create, analyze, sync) → step naming |
-| `$DESCRIPTION` | Domain keywords → execution logic, error scenarios |
-| `$ARGUMENT_HINT` | Flags/args → parse_input step details, validation rules |
-| `$GROUP` | Command family → related commands, shared patterns |
-
-**Determine command complexity:**
-
-| Complexity | Criteria | Steps to Generate |
-|------------|----------|-------------------|
-| Simple | Single action, no flags | 2-3 steps |
-| Standard | 1-2 flags, clear workflow | 3-4 steps |
-| Complex | Multiple flags, multi-phase | 4-6 steps |
-
-**If complexity is unclear**, ask user:
-
-```
-AskUserQuestion(
- header: "Command Scope",
- question: "What are the main execution steps for this command?",
- options: [
- { label: "Simple", description: "Single action: validate → execute → report" },
- { label: "Standard", description: "Multi-step: parse → process → verify → report" },
- { label: "Complex", description: "Full workflow: parse → explore → execute → verify → report" },
- { label: "I'll describe", description: "Let me specify the steps" }
- ]
-)
-```
-
-Store as `$COMMAND_STEPS`, `$ERROR_SCENARIOS`, `$SUCCESS_CONDITIONS`.
-
-
-
-**Generate concrete, domain-specific command content in GSD style.**
-
-This is the core generation step. Draft the COMPLETE command file — not a template with placeholders — using the gathered requirements.
-
-**YAML Frontmatter:**
-```yaml
----
-name: $SKILL_NAME
-description: $DESCRIPTION
-argument-hint: $ARGUMENT_HINT # only if provided
----
-```
-
-**`` section:** Write 2-3 sentences describing:
-- What the command does (action + target)
-- When it's invoked (trigger conditions)
-- What it produces (output artifacts or effects)
-
-**`` section:** Infer from domain:
-- If command reads config → `@.claude/CLAUDE.md` or relevant config files
-- If command modifies code → relevant source directories
-- If command is part of a group → other commands in the same group
-
-**`` section with `` blocks:**
-
-For each step in `$COMMAND_STEPS`, generate a `` block containing:
-
-1. **`parse_input`** (always first, `priority="first"`):
- - Parse `$ARGUMENTS` for flags and positional args derived from `$ARGUMENT_HINT`
- - Include specific flag detection logic (e.g., `if arguments contain "--env"`)
- - Include validation with specific error messages
- - Include decision routing table if multiple modes exist
-
-2. **Domain-specific execution steps** (2-4 steps):
- - Each step has a **bold action description**
- - Include concrete shell commands, file operations, or tool calls
- - Use `$UPPER_CASE` variables for user input, `${computed}` for derived values
- - Include conditional logic with specific conditions (not generic)
- - Reference actual file paths and tool names
-
-3. **`report`** (always last):
- - Format output with banner and status
- - Include file paths, timestamps, next step suggestions
-
-**Shell Correctness Checklist (MANDATORY for every shell block):**
-
-| Rule | Wrong | Correct |
-|------|-------|---------|
-| Multi-line output | `echo "{ ... }"` (unquoted multi-line) | `cat <<'EOF' > file`...`EOF` (heredoc) |
-| Variable init | Use `$VAR` after conditional | `VAR="default"` BEFORE any conditional that sets it |
-| Error exit | `echo "Error: ..."` (no exit) | `echo "Error: ..." # (see code: E00X)` + `exit 1` |
-| Quoting | `$VAR` in commands | `"$VAR"` (double-quoted in all expansions) |
-| Exit on fail | Command chain without checks | `set -e` or explicit `|| { echo "Failed"; exit 1; }` |
-| Command from var | `$CMD --flag` (word-split fragile) | `eval "$CMD" --flag` or use array: `cmd=(...); "${cmd[@]}"` |
-| Prerequisites | Implicit `git`/`curl` usage | Declare in `` section |
-
-**Golden Example — a correctly-written execution step:**
-
-```markdown
-
-**Execute deployment to target environment.**
-
-$DEPLOY_STATUS="pending" # Initialize before conditional
-
-```bash
-# Save current state for rollback
-cp .deploy/latest.json .deploy/previous.json 2>/dev/null || true
-
-# Write deployment manifest via heredoc
-cat < .deploy/latest.json
-{
- "env": "$ENV",
- "tag": "$DEPLOY_TAG",
- "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
- "commit": "$(git rev-parse --short HEAD)",
- "status": "deploying"
-}
-EOF
-
-# Execute deployment
-if ! deploy_cmd --env "$ENV" --tag "$DEPLOY_TAG" 2>&1 | tee .deploy/latest.log; then
- echo "Error: Deployment to $ENV failed" # (see code: E004)
- exit 1
-fi
-
-$DEPLOY_STATUS="success"
-```
-
-| Condition | Action |
-|-----------|--------|
-| Deploy succeeds | Update status → `"deployed"`, continue to verify |
-| Deploy fails | Log error `# (see code: E004)`, exit 1 |
-| `$ROLLBACK_MODE` | Load `.deploy/previous.json`, redeploy prior version |
-
-```
-
-**Optional `` section** (include when command uses external tools):
-
-```markdown
-
-- git (2.20+) — version control operations
-- curl — health check endpoints
-- jq — JSON processing (optional)
-
-```
-
-**`` table:** Generate 3-6 specific error codes:
-- Derive from `$ARGUMENT_HINT` validation failures (E001-E003)
-- Derive from domain-specific failure modes (E004+)
-- Include 1-2 warnings (W001+)
-- Each code has: Code, Severity, Description, **Stage** (which step triggers it)
-- **Cross-reference rule**: Every `# (see code: E00X)` comment in `` MUST have a matching row in ``, and every error code row MUST be referenced by at least one inline comment
-
-**`` checkboxes:** Generate 4-8 verifiable conditions:
-- Input validation passed
-- Each execution step completed its action
-- Output artifacts exist / effects applied
-- Report displayed
-
-**Quality rules for generated content:**
-- NO bracket placeholders (`[Describe...]`, `[List...]`) — all content must be concrete
-- Steps must contain actionable logic, not descriptions of what to do
-- Error codes must reference specific failure conditions from this command's domain
-- Success criteria must be verifiable (not "command works correctly")
-- Every shell block must pass the Shell Correctness Checklist above
-- Follow patterns from @.claude/skills/command-generator/templates/command-md.md for structural reference only
-
-
-
-**Write generated content to target path.**
-
-**If `$FILE_EXISTS`:** Warn: `"Command file already exists at {path}. Will overwrite."`
-
-```bash
-mkdir -p "$TARGET_DIR"
-```
-
-Write the drafted content to `$TARGET_PATH` using Write tool.
-
-**Verify:** Read back the file and confirm:
-- File exists and is non-empty
-- Contains `` tag with concrete content (no placeholders)
-- Contains at least 2 `` with at least 3 rows including Stage column
-- Contains `` with at least 4 checkboxes
-- No unresolved `{{...}}` or `[...]` placeholders remain
-- Every `# (see code: E0XX)` has a matching `` row (cross-ref check)
-- Every shell block uses heredoc for multi-line output (no bare multi-line echo)
-- All state variables initialized before conditional use
-- All error paths include `exit 1` after error message
-
-**If verification fails:** Fix the content in-place using Edit tool.
-
-**Report completion:**
-
-```
-Command generated successfully!
-
-File: {$TARGET_PATH}
-Name: {$SKILL_NAME}
-Description: {$DESCRIPTION}
-Location: {$LOCATION}
-Group: {$GROUP or "(none)"}
-Steps: {number of blocks generated}
-Error codes: {number of error codes}
-
-Next Steps:
-1. Review and customize {$TARGET_PATH}
-2. Test: /{$GROUP}:{$SKILL_NAME} or /{$SKILL_NAME}
-```
-
-
-
-
-
-
-| Code | Severity | Description | Stage |
-|------|----------|-------------|-------|
-| E001 | error | skillName is required | validate_params |
-| E002 | error | description is required (min 10 chars) | validate_params |
-| E003 | error | location is required ("project" or "user") | validate_params |
-| E004 | error | skillName must be lowercase alphanumeric with hyphens | validate_params |
-| E005 | error | Failed to infer command domain from description | gather_requirements |
-| E006 | error | Failed to write command file | write_file |
-| E007 | error | Generated content contains unresolved placeholders | write_file |
-| W001 | warning | group must be lowercase alphanumeric with hyphens | validate_params |
-| W002 | warning | Command file already exists, will overwrite | write_file |
-| W003 | warning | Could not infer required_reading, using defaults | draft_content |
-
-
-
-
-- [ ] All required parameters validated ($SKILL_NAME, $DESCRIPTION, $LOCATION)
-- [ ] Target path resolved with correct scope (project vs user) and group
-- [ ] Command domain inferred from description and argument hint
-- [ ] Concrete `` drafted (no placeholders)
-- [ ] 2-6 `` blocks generated with domain-specific logic
-- [ ] `` table generated with 3+ specific codes
-- [ ] `` generated with 4+ verifiable checkboxes
-- [ ] File written to $TARGET_PATH and verified
-- [ ] Zero bracket placeholders in final output
-- [ ] Completion report displayed
-
diff --git a/.claude/skills/command-generator/specs/command-design-spec.md b/.claude/skills/command-generator/specs/command-design-spec.md
deleted file mode 100644
index c7966599..00000000
--- a/.claude/skills/command-generator/specs/command-design-spec.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# Command Design Specification
-
-Guidelines for Claude Code command files generated by command-generator.
-
-## YAML Frontmatter
-
-```yaml
----
-name: command-name # Required: lowercase with hyphens
-description: Description # Required: brief purpose
-argument-hint: "[args]" # Optional: argument format hint
-allowed-tools: Tool1, Tool2 # Optional: restricted tool set
----
-```
-
-## Naming Conventions
-
-| Element | Convention | Examples |
-|---------|-----------|----------|
-| Command name | lowercase, hyphens, 2-3 words max | `deploy`, `create-issue` |
-| Group name | singular noun | `issue`, `session`, `workflow` |
-| Verbs for actions | imperative | `deploy`, `create`, `analyze` |
-
-## Path Structure
-
-```
-.claude/commands/deploy.md # Top-level command
-.claude/commands/issue/create.md # Grouped command
-~/.claude/commands/global-status.md # User-level command
-```
-
-## Content Structure (GSD Style)
-
-Generated commands should use XML semantic tags:
-
-| Tag | Required | Purpose |
-|-----|----------|---------|
-| `` | Yes | What the command does, when invoked, what it produces |
-| `` | Yes | Files to read before execution (@ notation) |
-| `` | Yes | Container for execution steps |
-| `` | Yes | Individual execution steps with snake_case names |
-| `` | No | Error code table with severity and description |
-| `` | Yes | Checkbox list of verifiable completion conditions |
-
-## Step Naming
-
-- Use snake_case: `parse_input`, `validate_config`, `write_output`
-- Use action verbs: `discover`, `validate`, `spawn`, `collect`, `report`
-- First step gets `priority="first"` attribute
-
-## Error Messages
-
-```
-Good: Error: GitHub issue URL required
- Usage: /issue:create
-
-Bad: Error: Invalid input
-```
-
-## Scope Guidelines
-
-| Scope | Location | Use For |
-|-------|----------|---------|
-| Project | `.claude/commands/` | Team workflows, project integrations |
-| User | `~/.claude/commands/` | Personal tools, cross-project utilities |
diff --git a/.claude/skills/command-generator/templates/command-md.md b/.claude/skills/command-generator/templates/command-md.md
deleted file mode 100644
index 1b543237..00000000
--- a/.claude/skills/command-generator/templates/command-md.md
+++ /dev/null
@@ -1,112 +0,0 @@
-# Command Template — Structural Reference
-
-This template defines the **structural pattern** for generated commands. The `draft_content` step uses this as a guide to generate concrete, domain-specific content — NOT as a literal copy target.
-
-## Required Structure
-
-```markdown
----
-name: {$SKILL_NAME}
-description: {$DESCRIPTION}
-argument-hint: {$ARGUMENT_HINT} # omit line if empty
----
-
-
-{2-3 concrete sentences: what it does + when invoked + what it produces}
-
-
-
-{@ references to files this command needs before execution}
-
-
-
-- {tool} ({version}+) — {what it's used for}
-
-
-
-
-
-**Parse arguments and validate input.**
-
-Parse `$ARGUMENTS` for:
-- {specific flags from $ARGUMENT_HINT}
-- {positional args}
-
-{Decision routing table if multiple modes:}
-| Condition | Action |
-|-----------|--------|
-| flag present | set variable |
-| missing required | Error: "message" `# (see code: E001)` + `exit 1` |
-
-
-
-
-**{Concrete action description.}**
-
-$STATE_VAR="default"
-
-```bash
-# Use heredoc for multi-line output
-cat < output-file
-{structured content with $VARIABLES}
-EOF
-
-# Every error path: message + code ref + exit
-if [ ! -f "$REQUIRED_FILE" ]; then
- echo "Error: Required file missing" # (see code: E003)
- exit 1
-fi
-```
-
-| Condition | Action |
-|-----------|--------|
-| success | Continue to next step |
-| failure | Error `# (see code: E0XX)`, exit 1 |
-
-
-
-**Format and display results.**
-
-{Banner with status, file paths, next steps}
-
-
-
-
-
-
-| Code | Severity | Description | Stage |
-|------|----------|-------------|-------|
-| E001 | error | {specific to parse_input validation} | parse_input |
-| E002 | error | {specific to domain action failure} | {step_name} |
-| W001 | warning | {specific recoverable condition} | {step_name} |
-
-
-
-
-
-- [ ] {Input validated}
-- [ ] {Domain action 1 completed}
-- [ ] {Domain action 2 completed}
-- [ ] {Output produced / effect applied}
-
-```
-
-## Content Quality Rules
-
-| Rule | Bad Example | Good Example |
-|------|-------------|--------------|
-| No bracket placeholders | `[Describe purpose]` | `Deploy to target environment with rollback on failure.` |
-| Concrete step names | `execute` | `run_deployment`, `validate_config` |
-| Specific error codes | `E001: Invalid input` | `E001: --env must be "prod" or "staging"` |
-| Verifiable criteria | `Command works` | `Deployment log written to .deploy/latest.log` |
-| Real shell commands | `# TODO: implement` | `kubectl apply -f $MANIFEST_PATH` |
-
-## Step Naming Conventions
-
-| Domain | Typical Steps |
-|--------|--------------|
-| Deploy/Release | `validate_config`, `run_deployment`, `verify_health`, `report` |
-| CRUD operations | `parse_input`, `validate_entity`, `persist_changes`, `report` |
-| Analysis/Review | `parse_input`, `gather_context`, `run_analysis`, `present_findings` |
-| Sync/Migration | `parse_input`, `detect_changes`, `apply_sync`, `verify_state` |
-| Build/Generate | `parse_input`, `resolve_dependencies`, `run_build`, `write_output` |
diff --git a/.claude/skills/prompt-generator/SKILL.md b/.claude/skills/prompt-generator/SKILL.md
new file mode 100644
index 00000000..2818bcd0
--- /dev/null
+++ b/.claude/skills/prompt-generator/SKILL.md
@@ -0,0 +1,401 @@
+---
+name: prompt-generator
+description: Generate or convert Claude Code prompt files — command orchestrators, 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 agent", "new agent", "convert command", "convert agent", "prompt generator".
+allowed-tools: Read, Write, Edit, Bash, Glob, AskUserQuestion
+---
+
+
+Generate or convert Claude Code prompt files with concrete, domain-specific content. Three modes:
+
+- **Create command** — new orchestration workflow at `.claude/commands/` or `~/.claude/commands/`
+- **Create agent** — new role + expertise file at `.claude/agents/`
+- **Convert** — restyle existing command/agent to GSD conventions with zero content loss
+
+Content separation principle (from GSD): commands own orchestration flow; agents own domain knowledge.
+
+Invoked when user requests "create command", "new command", "create agent", "new agent", "convert command", "convert agent", or "prompt generator".
+
+
+
+- @.claude/skills/prompt-generator/specs/command-design-spec.md
+- @.claude/skills/prompt-generator/specs/agent-design-spec.md
+- @.claude/skills/prompt-generator/specs/conversion-spec.md
+- @.claude/skills/prompt-generator/templates/command-md.md
+- @.claude/skills/prompt-generator/templates/agent-md.md
+
+
+
+
+## 1. Determine Artifact Type
+
+Parse `$ARGUMENTS` to determine what to generate.
+
+| Signal | Type |
+|--------|------|
+| "command", "workflow", "orchestrator" in args | `command` |
+| "agent", "role", "worker" in args | `agent` |
+| "convert", "restyle", "refactor" + 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.
+
+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: "Agent", description: "New role definition — identity, domain expertise, behavioral rules" },
+ { label: "Convert", description: "Restyle existing command/agent to GSD conventions (zero content loss)" }
+ ]
+)
+```
+
+Store as `$ARTIFACT_TYPE` (`command` | `agent` | `convert`).
+
+## 2. Validate Parameters
+
+**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 | `" [--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`.
+
+## 3. Resolve Target Path
+
+**Command:**
+
+| Location | Base |
+|----------|------|
+| `project` | `.claude/commands` |
+| `user` | `~/.claude/commands` |
+
+```
+If $GROUP:
+ $TARGET_PATH = {base}/{$GROUP}/{$NAME}.md
+Else:
+ $TARGET_PATH = {base}/{$NAME}.md
+```
+
+**Agent:**
+
+```
+$TARGET_PATH = .claude/agents/{$NAME}.md
+```
+
+Check if `$TARGET_PATH` exists → `$FILE_EXISTS`.
+
+## 4. Gather Requirements
+
+**4a. Pattern discovery** — Find 3+ similar files in the project for style reference:
+
+```bash
+# 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 -5
+```
+
+Read 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 | `` + 1-2 domain sections |
+| Standard | Multi-aspect domain | `` + 2-4 domain sections |
+| Expert | Deep domain with rules | `` + 4-6 domain sections |
+
+If unclear, ask user with AskUserQuestion.
+
+## 5. Generate Content
+
+Route to the appropriate generation logic based on `$ARTIFACT_TYPE`.
+
+### 5a. Command Generation
+
+Follow `@specs/command-design-spec.md` and `@templates/command-md.md`.
+
+Generate a complete command file with:
+
+1. **``** — 2-3 sentences: what + when + what it produces
+2. **``** — @ references to context files
+3. **``** — numbered steps (GSD workflow style):
+ - Step 1: Initialize / parse arguments
+ - Steps 2-N: Domain-specific orchestration logic
+ - Each step: banner display, validation, agent spawning via `Task()`, error handling
+ - Final step: status display + `` with next actions
+4. **``** — checkbox list of verifiable conditions
+
+**Command writing rules:**
+- Steps are **numbered** (`## 1.`, `## 2.`) — follow `plan-phase.md` and `new-project.md` style
+- Use banners for phase transitions: `━━━ SKILL ► ACTION ━━━`
+- Agent spawning uses `Task(prompt, subagent_type, description)` pattern
+- Prompt to agents uses ``, ``, `