Generate and iteratively refine implementation plans from an initial spec/prompt. Takes a specification as input, generates an initial plan, then refines it through multiple review passes (minimum 3) with fresh agent context. User can continue beyond 3 passes until satisfied. Use when turning requirements into polished implementation plans.
Scanned 5/31/2026
Install via CLI
openskills install diegosouzapw/awesome-omni-skill---
name: plan-refiner
description: Generate and iteratively refine implementation plans from an initial spec/prompt. Takes a specification as input, generates an initial plan, then refines it through multiple review passes (minimum 3) with fresh agent context. User can continue beyond 3 passes until satisfied. Use when turning requirements into polished implementation plans.
license: MIT
metadata:
author: dreambound
version: "1.0.0"
---
# Plan Refiner Skill
This skill implements an iterative plan refinement process that transforms an initial specification into a polished implementation plan through multiple review passes with fresh agent perspective.
## Workflow Overview
```
Input: initial_spec.md (starting prompt/requirements)
↓
Step 1: Generate Initial Plan (plan.md v0)
↓
Step 2: Review Loop (minimum 3 passes)
- Spawn fresh review agent with spec + clarifications + plan
- Agent provides feedback + identifies critical assumptions
- Agent verifies versions/APIs against live docs via Context7
- Surface identified issues and assumptions to user
- Prompt user for optional additional feedback
- Apply all feedback to plan
- After pass 3+, ask user to continue or finalize
↓
Output: Final plan.md + clarifications.md + audit trail
```
**Note:** Review agents use Context7 (`mcp__context7__resolve-library-id` → `mcp__context7__query-docs`) to verify that any package versions, GitHub Actions, APIs, or framework versions mentioned in the plan are current. This prevents recommending outdated versions based on training data.
**Fallback:** If Context7 MCP tools are unavailable, install the [context7 skill](https://skills.sh/intellectronica/agent-skills/context7) which provides equivalent functionality via HTTP API.
## Input Requirements
The user must provide an initial specification or prompt. This can be:
- A file path to an existing spec document
- Text content to save as `initial_spec.md`
- A description of what they want to plan
## Working Directory Structure
Create a namespaced directory under Claude's plan directory:
```
~/.claude/plans/plan-refiner/{spec-slug}/
├── initial_spec.md # The starting requirements (immutable)
├── plan.md # Current plan (updated each pass)
├── clarifications.md # Accumulated Q&A and user feedback
├── config.json # Run configuration (includes custom_reviewer settings)
├── audit/
│ ├── plan_v0.md # Initial plan from spec
│ ├── plan_v1.md # After pass 1
│ ├── plan_v2.md # After pass 2
│ └── plan_v3.md # After pass 3, etc.
├── pass_N_feedback.md # Default review feedback for each pass
└── pass_N_custom_feedback.md # Custom review feedback (if custom reviewer enabled)
```
### Global Preferences
```
~/.claude/plans/plan-refiner/
└── preferences.json # Global preferences across all runs
```
**Spec Slug Generation:**
- From file path: Use filename without extension (e.g., `my-feature.md` → `my-feature`)
- From content: Slugify first heading or first line (e.g., "Auth Feature Spec" → `auth-feature-spec`)
- Add timestamp suffix if directory exists: `my-feature-20260128`
## Context Preservation Strategy
To preserve orchestrator context across multiple passes, this skill uses **file-based delegation**:
1. **Subagents read from files** - Don't embed full content in prompts; tell subagents which files to read
2. **Subagents write to files** - Feedback and plan updates go directly to disk
3. **Summaries only returned** - Subagents return brief summaries, not full content
4. **Orchestrator stays thin** - Main agent manages paths and workflow, not content
### Drift Mitigation: Spec-Always-Included
To prevent drift from the original specification:
- **All subagents always re-read `initial_spec.md`** before performing their task
- **Review agents explicitly check spec alignment** and flag drift in their feedback
- **Update agents verify changes align with spec** before writing
- **Summaries include alignment status** (e.g., "Aligned" or "Warning: divergence detected")
## Startup Configuration
Before beginning refinement, ask about optional custom review.
### Startup Questions
**Question 1: Custom Reviewer**
Check for `~/.claude/plans/plan-refiner/preferences.json`:
If `preferences.json` exists and has a previous `custom_reviewer`:
- Ask: "Last time you used '{skill-name}' as additional reviewer. Use it again?"
- Options: Yes / No / Different skill
Otherwise:
- Ask: "Add a custom review agent for specialized feedback? (e.g., security, performance)"
- Options: No (default only) / Yes, specify skill
**Question 2: Skill Specification** (if yes to custom reviewer)
Ask: "Specify the custom review skill:"
- Skill name (e.g., 'security-reviewer')
- Skill path (absolute path)
- Skip (use default only)
Also ask for the focus description (e.g., "security considerations", "performance optimization", "accessibility compliance").
### Preferences Persistence
Store in `~/.claude/plans/plan-refiner/preferences.json`:
```json
{
"custom_reviewer": {
"enabled": true,
"type": "skill_name",
"value": "security-reviewer",
"focus": "security considerations"
},
"custom_reviewer_history": ["security-reviewer", "performance-reviewer"],
"updated_at": "2026-01-28T..."
}
```
- `custom_reviewer`: Current configuration (or null if disabled)
- `custom_reviewer_history`: Previously used skills (for suggestions)
- `updated_at`: Last modification timestamp
---
## Execution Steps
### Step 1: Setup and Initial Plan Generation
1. **Generate spec slug** from input (filename or content title)
2. **Create namespaced directory** at `~/.claude/plans/plan-refiner/{spec-slug}/`
- If directory exists, append timestamp suffix (e.g., `-20260128`)
3. **Save or verify initial_spec.md** from user input
4. **Create clarifications.md** (empty initially)
5. **Create audit/ directory**
6. **Create config.json** with run configuration:
```json
{
"created_at": "2026-01-28T...",
"custom_reviewer": {
"enabled": true,
"type": "skill_name",
"value": "security-reviewer",
"focus": "security considerations"
},
"current_pass": 0,
"status": "in_progress"
}
```
- Set `custom_reviewer` to null if not configured
7. **Spawn Plan Generation Agent** to create initial plan:
- Use Task tool with `subagent_type: general-purpose`
- Provide file paths (not contents): `initial_spec.md`, `plan.md`, `audit/plan_v0.md`
- Agent reads spec, writes plan to both locations
- Agent returns: brief summary of plan structure (not full content)
- See `references/generation-prompt.md` for the prompt template
### Step 2: Review Loop (Minimum 3 Passes)
For each pass (1, 2, 3, ...):
#### 2a. Spawn Default Review Agent
Use the Task tool with `subagent_type: general-purpose` to create a fresh agent context.
**Important:** Do NOT use `subagent_type: Plan` as it triggers plan mode behavior and will prompt to execute instead of returning feedback.
**Prompt the agent with file paths, not contents:**
- Path to `initial_spec.md` (agent reads it - source of truth)
- Path to `clarifications.md` (agent reads it)
- Path to `plan.md` (agent reads it)
- Current pass number
- Path to write feedback: `pass_N_feedback.md`
- Review instructions from `references/review-prompt.md`
**Agent responsibilities:**
1. Read all input files (always starting with spec)
2. Verify plan alignment with original spec
3. Perform review
4. Write detailed feedback to `pass_N_feedback.md`
5. Return ONLY: alignment status + summary of issues + critical assumption questions
#### 2a-bis. Spawn Custom Review Agent (if configured)
If `config.json` has `custom_reviewer.enabled: true`:
1. **Spawn Custom Review Sub-Agent** via Task tool:
- `subagent_type: general-purpose`
- Provide file paths:
- Spec path: `initial_spec.md`
- Plan path: `plan.md`
- Default feedback path: `pass_N_feedback.md`
- Output path: `pass_N_custom_feedback.md`
- Use prompt template from `references/custom-review-prompt.md`
- Inject the custom focus from config (e.g., "security considerations")
2. **Process Custom Review Summary**:
- Custom agent returns: focus area + additional issue count + additional questions + assessment
- Additional issues are written to `pass_N_custom_feedback.md`
3. **Merge Feedback for Processing**:
- Default feedback: `pass_N_feedback.md`
- Custom feedback: `pass_N_custom_feedback.md`
- Both files remain separate for audit purposes
- Combined questions from both reviews are surfaced to user in step 2c
- Update total issue count in summaries
**If custom reviewer skill not found:** Log warning and continue with default review only.
#### 2b. Process Agent Summary
The review agent returns a brief summary (not full feedback):
1. **Alignment Status**: "Aligned" or "Warning: [drift description]"
2. **Issue Count**: Number of issues found
3. **Critical Assumptions**: Questions requiring user input
Full feedback is already saved to `pass_N_feedback.md` by the agent.
**If alignment warning received:** Surface to user via AskUserQuestion before proceeding.
#### 2b-bis. Surface Issues to User
After processing the agent summary, read feedback file(s) and display identified issues:
1. **Read feedback files**:
- Read `pass_N_feedback.md` for default review issues
- If custom reviewer enabled, also read `pass_N_custom_feedback.md`
2. **Extract issues** from the "Plan Feedback" section:
- Parse each `### Issue N:` block (or `#### Issue N:` for custom feedback)
- Extract: title, location, problem, suggestion
3. **Display issues to the user** before asking questions:
```
## Pass {N} Review Findings
### Issues Identified ({count} total)
**Issue 1: {title}**
- Location: {location}
- Problem: {description}
- Suggestion: {recommendation}
**Issue 2: {title}**
...
[If custom reviewer enabled:]
### Additional Issues from {custom_focus} Review ({count})
**Issue 1: {title}**
...
```
If no issues found, display: "No issues identified in this pass."
#### 2c. Surface Questions to User
If the agent identified critical assumptions:
- Use AskUserQuestion to present each question
- Append user answers to `clarifications.md` with format:
```markdown
## Pass N Clarifications
**Q: [Question from agent]**
A: [User's answer]
```
#### 2d. Prompt for Additional User Feedback
After answering questions, ask the user:
"Do you have any additional feedback on the current plan? (You can skip this)"
If user provides feedback:
- Append to `clarifications.md`:
```markdown
### User Feedback (Pass N)
[User's feedback]
```
#### 2e. Apply Feedback via Subagent
Spawn a **Plan Update Agent** (`subagent_type: general-purpose`):
**Provide file paths:**
- Path to `initial_spec.md` (source of truth)
- Path to `plan.md` (current version)
- Path to `pass_N_feedback.md` (agent feedback)
- Path to `clarifications.md` (includes user answers)
- Path to write: `audit/plan_v{pass}.md` (backup) and updated `plan.md`
- Update instructions from `references/update-prompt.md`
**Agent responsibilities:**
1. Read spec, current plan, feedback, and clarifications
2. Verify changes align with original spec
3. Incorporate all feedback and user clarifications
4. Write updated plan to `plan.md`
5. Copy to `audit/plan_v{pass}.md`
6. Return ONLY: alignment status + 2-3 sentence summary of changes
**If alignment warning received:** Surface to user via AskUserQuestion:
"The update agent detected potential drift: [warning]. Continue with changes or revert?"
#### 2f. Continuation Check (After Pass 3+)
After pass 3 and each subsequent pass, ask the user:
"Would you like to continue refining the plan, or is it ready?"
Options:
- **Continue**: Proceed to next pass
- **Finalize**: Exit loop with current plan
### Step 3: Finalization
Present the user with:
- Final `plan.md` location
- Summary of changes across all passes
- Location of audit trail
## Subagent Prompt Templates
See the following templates in `references/`:
- `generation-prompt.md` - Initial plan generation agent
- `review-prompt.md` - Default review agents for each pass
- `custom-review-prompt.md` - Custom review agents (supplementary, specialized feedback)
- `update-prompt.md` - Plan update agent after feedback
## Pass Focus Areas
Each pass has a primary focus while still reviewing the full plan:
| Pass | Primary Focus |
|------|---------------|
| 1 | Alignment with spec, surface major assumptions |
| 2 | Completeness and feasibility, clarify remaining gaps, **version verification via Context7** |
| 3+ | Final polish, coherence, edge cases |
## Example Invocation
User: "Run /plan-refiner on my feature spec"
1. Agent asks for spec location or content
2. Agent generates spec slug (e.g., `my-feature` from `my-feature.md`)
3. Agent creates directory at `~/.claude/plans/plan-refiner/my-feature/` and saves spec
4. Agent generates initial plan (v0)
5. Agent runs 3 review passes with fresh context
6. After pass 3, agent asks to continue or finalize
7. Agent presents final plan location and audit trail
## Key Principles
1. **Fresh Perspective**: Each review pass uses a new agent with no accumulated context bias
2. **User in the Loop**: Critical assumptions require user clarification before proceeding
3. **Audit Trail**: Every plan version is preserved for reference
4. **Accumulated Context**: Clarifications (Q&A + feedback) persist across all passes
5. **Flexible Iteration**: Minimum 3 passes, but user controls when to stop
No comments yet. Be the first to comment!