Skills build
Feature development pipeline - research, plan, track, and implement major features.
git clone https://github.com/Shpigford/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/Shpigford/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/build" ~/.claude/skills/shpigford-skills-build && rm -rf "$T"
build/SKILL.mdFeature development pipeline - research, plan, track, and implement major features.
Instructions
This command manages a 4-phase feature development workflow for building major features. Parse
$ARGUMENTS to determine which subcommand to run.
Arguments provided: $ARGUMENTS
Argument Parsing
Parse the first word of $ARGUMENTS to determine the subcommand:
→ Run the Research phaseresearch [name]
→ Run the Implementation phaseimplementation [name]
→ Run the Progress phaseprogress [name]
→ Run Phase n of the implementationphase [n] [name]
→ Show current status and suggest next stepstatus [name]- (empty or unrecognized) → Show usage help
If the feature name is not provided in arguments, you MUST use AskUserQuestion to prompt for it.
Subcommand: Help (empty args)
If no arguments provided, display this help:
/build - Feature Development Pipeline Subcommands: /build research [name] Deep research on a feature idea /build implementation [name] Create phased implementation plan /build progress [name] Set up progress tracking /build phase [n] [name] Execute implementation phase n /build status [name] Show status and next steps Example workflow: /build research chat-interface /build implementation chat-interface /build progress chat-interface /build phase 1 chat-interface
Then use AskUserQuestion to ask what they'd like to do:
- question: "What would you like to do?"
- header: "Action"
- multiSelect: false
- options:
- label: "Start new feature research" description: "Begin deep research on a new feature idea"
- label: "Continue existing feature" description: "Work on a feature already in progress"
- label: "Check status" description: "See what step to do next for a feature"
Subcommand: research
Step 1: Get Feature Name
If feature name not in arguments, use AskUserQuestion:
- question: "What's a short identifier for this feature? (lowercase, hyphens ok - e.g., 'chat-interface', 'user-auth', 'data-export'). Use 'Other' to type it."
- header: "Feature name"
- multiSelect: false
- options:
- label: "I'll type the name" description: "Enter a short, kebab-case identifier for the feature"
Step 2: Check for Existing Research
Check if
docs/{name}/RESEARCH.md already exists.
If it exists, use AskUserQuestion:
- question: "A RESEARCH.md already exists for this feature. What would you like to do?"
- header: "Existing doc"
- multiSelect: false
- options:
- label: "Overwrite" description: "Replace existing research with fresh exploration"
- label: "Append" description: "Add new research below existing content"
- label: "Skip" description: "Keep existing research, suggest next step"
If "Skip" selected, suggest running
/build implementation {name} and exit.
Step 3: Gather Feature Context
Use AskUserQuestion to understand the feature:
- question: "Describe the feature you want to build. What problem does it solve? What should it do? (Use 'Other' to describe)"
- header: "Description"
- multiSelect: false
- options:
- label: "I'll describe it" description: "Provide a detailed description of the feature"
Step 4: Research Scope
Use AskUserQuestion:
- question: "What aspects should the research focus on?"
- header: "Focus areas"
- multiSelect: true
- options:
- label: "Technical implementation" description: "APIs, libraries, architecture patterns"
- label: "UI/UX design" description: "Interface design, user flows, interactions"
- label: "Data requirements" description: "What data to store, schemas, privacy"
- label: "Platform capabilities" description: "OS APIs, system integrations, permissions"
Step 5: Conduct Deep Research
Now conduct DEEP research on the feature:
- Codebase exploration: Understand existing patterns, similar features, relevant code
- Web search: Research best practices, similar implementations, relevant APIs
- Technical deep-dive: Explore specific technologies, libraries, frameworks
- Use AskUserQuestion FREQUENTLY: Validate assumptions, clarify requirements, get input on decisions
Research should cover:
- Problem definition and user needs
- Technical approaches and trade-offs
- Required data models and storage
- UI/UX considerations
- Integration points with existing code
- Potential challenges and risks
- Recommended approach with rationale
Step 6: Write Research Document
Create the directory if needed:
docs/{name}/
Write findings to
docs/{name}/RESEARCH.md with this structure:
# {Feature Name} Research ## Overview [Brief description of the feature and its purpose] ## Problem Statement [What problem this solves, why it matters] ## User Stories / Use Cases [Concrete examples of how users will use this] ## Technical Research ### Approach Options [Different ways to implement this, with pros/cons] ### Recommended Approach [The approach you recommend and why] ### Required Technologies [APIs, libraries, frameworks needed] ### Data Requirements [What data needs to be stored/tracked] ## UI/UX Considerations [Interface design thoughts, user flows] ## Integration Points [How this connects to existing code/features] ## Risks and Challenges [Potential issues and mitigation strategies] ## Open Questions [Things that still need to be decided] ## References [Links to relevant documentation, examples, articles]
Step 7: Next Step
After writing the research doc, inform the user:
"Research complete! Document saved to
docs/{name}/RESEARCH.md
Next step: Run
/build implementation {name} to create a phased implementation plan."
Subcommand: implementation
Step 1: Get Feature Name
If feature name not in arguments, use AskUserQuestion to prompt for it (same as research phase).
Step 2: Verify Research Exists
Check if
docs/{name}/RESEARCH.md exists.
If it does NOT exist:
- Inform user: "No research document found at
"docs/{name}/RESEARCH.md - Suggest: "Run
first to create the research document."/build research {name} - Exit
Step 3: Check for Existing Implementation Doc
Check if
docs/{name}/IMPLEMENTATION.md already exists.
If it exists, use AskUserQuestion:
- question: "An IMPLEMENTATION.md already exists. What would you like to do?"
- header: "Existing doc"
- multiSelect: false
- options:
- label: "Overwrite" description: "Create a fresh implementation plan"
- label: "Append" description: "Add new phases below existing content"
- label: "Skip" description: "Keep existing plan, suggest next step"
If "Skip" selected, suggest running
/build progress {name} and exit.
Step 4: Read Research Document
Read
docs/{name}/RESEARCH.md to understand:
- The recommended approach
- Technical requirements
- Data models needed
- UI/UX design
- Integration points
Step 5: Design Implementation Phases
Break the research into practical implementation phases. Each phase should:
- Deliver something functional and testable — the user should be able to go use/test what was built after each phase. Combine infrastructure work with the UI or functionality that uses it so every phase produces a shippable result. Never stack multiple infrastructure-only phases in a row.
- Be independently valuable (deliver something usable)
- Be small enough to complete in a focused session
- Build on previous phases
- Have clear success criteria
Use AskUserQuestion to validate phase breakdown:
- question: "How granular should the implementation phases be?"
- header: "Phase size"
- multiSelect: false
- options:
- label: "Small phases (1-2 hours)" description: "Many focused phases, easier to track progress"
- label: "Medium phases (half day)" description: "Balanced approach, moderate number of phases"
- label: "Large phases (full day)" description: "Fewer phases, each delivering significant functionality"
Step 6: Conduct Phase Research
For each phase you're planning, do targeted research:
- Web search for implementation specifics
- Review relevant code in the codebase
- Identify dependencies between phases
Use AskUserQuestion for any uncertainties about phase ordering or scope.
Step 7: Write Implementation Document
Write to
docs/{name}/IMPLEMENTATION.md with this structure:
# {Feature Name} Implementation Plan ## Overview [Brief recap of what we're building and the approach from research] ## Prerequisites [What needs to be in place before starting] ## Phase Summary [Quick overview of all phases] --- ## Phase 1: [Phase Title] ### Objective [What this phase accomplishes] ### Rationale [Why this phase comes first, what it enables] ### Tasks - [ ] Task 1 - [ ] Task 2 - [ ] Task 3 ### Success Criteria [How to verify this phase is complete] ### Files Likely Affected [List of files that will probably need changes] --- ## Phase 2: [Phase Title] [Same structure as Phase 1] --- [Continue for all phases] --- ## Post-Implementation - [ ] Documentation updates - [ ] Testing strategy - [ ] Performance validation ## Notes [Any additional context or decisions made during planning]
Step 8: Next Step
After writing the implementation doc, inform the user:
"Implementation plan complete! Document saved to
docs/{name}/IMPLEMENTATION.md
Next step: Run
/build progress {name} to set up progress tracking."
Subcommand: progress
Step 1: Get Feature Name
If feature name not in arguments, use AskUserQuestion to prompt for it.
Step 2: Verify Implementation Doc Exists
Check if
docs/{name}/IMPLEMENTATION.md exists.
If it does NOT exist:
- Inform user: "No implementation document found at
"docs/{name}/IMPLEMENTATION.md - Suggest: "Run
first."/build implementation {name} - Exit
Step 3: Check for Existing Progress Doc
Check if
docs/{name}/PROGRESS.md already exists.
If it exists, use AskUserQuestion:
- question: "A PROGRESS.md already exists. What would you like to do?"
- header: "Existing doc"
- multiSelect: false
- options:
- label: "Overwrite" description: "Start fresh progress tracking"
- label: "Keep existing" description: "Keep current progress, suggest next step"
If "Keep existing" selected, read the progress doc and suggest the next incomplete phase.
Step 4: Read Implementation Document
Read
docs/{name}/IMPLEMENTATION.md to extract:
- All phase titles
- Tasks within each phase
- Success criteria
Step 5: Create Progress Document
Write to
docs/{name}/PROGRESS.md with this structure:
# {Feature Name} Progress ## Status: Phase 1 - Not Started ## Quick Reference - Research: `docs/{name}/RESEARCH.md` - Implementation: `docs/{name}/IMPLEMENTATION.md` --- ## Phase Progress ### Phase 1: [Title from Implementation] **Status:** Not Started #### Tasks Completed - (none yet) #### Decisions Made - (none yet) #### Blockers - (none) --- ### Phase 2: [Title] **Status:** Not Started [Same structure] --- [Continue for all phases] --- ## Session Log ### [Date will be added as work happens] - Work completed - Decisions made - Notes for next session --- ## Files Changed (Will be updated as implementation progresses) ## Architectural Decisions (Major technical decisions and rationale) ## Lessons Learned (What worked, what didn't, what to do differently)
Step 6: Next Step
After creating progress doc:
"Progress tracking set up! Document saved to
docs/{name}/PROGRESS.md
Next step: Run
/build phase 1 {name} to begin implementation."
Subcommand: phase
Step 1: Parse Arguments
Parse arguments to extract:
- Phase number (if provided)
- Feature name (if provided)
If neither provided, prompt for both using AskUserQuestion.
Step 2: Get Feature Name
If feature name not determined, use AskUserQuestion to prompt for it.
Step 3: Verify All Docs Exist
Check that all three docs exist:
docs/{name}/RESEARCH.mddocs/{name}/IMPLEMENTATION.mddocs/{name}/PROGRESS.md
If any missing, inform user which doc is missing and suggest the appropriate
/build command to create it.
Step 4: Get Phase Number
If phase number not in arguments:
Read
docs/{name}/IMPLEMENTATION.md to extract available phases.
Use AskUserQuestion to let user select:
- question: "Which phase would you like to work on?"
- header: "Phase"
- multiSelect: false
- options: [dynamically generated from phases found in IMPLEMENTATION.md, marking completed ones]
Step 5: Read All Context
Read all three documents to fully understand:
- The research and rationale (RESEARCH.md)
- The specific phase tasks and success criteria (IMPLEMENTATION.md)
- Current progress and decisions made (PROGRESS.md)
Step 6: Deep Research on Phase
Before writing any code, conduct thorough research using parallel sub-agents:
-
Web search (required — use Agent tool): Launch sub-agents with
to research specific implementation details for this phase. Search for:WebSearch- Best practices and common patterns for the specific tech/approach
- Known pitfalls, gotchas, and edge cases
- Recent changes to APIs or libraries you'll be using
- Run multiple searches in parallel covering different aspects of the phase
-
Documentation lookup (required — use Context7 MCP): Use
andmcp__context7__resolve-library-id
to fetch current documentation for any libraries, frameworks, or APIs involved in this phase. Do NOT rely on training data for library specifics — docs change. Look up:mcp__context7__query-docs- API signatures and configuration options you'll be using
- Migration guides if upgrading or integrating new versions
- Setup/integration instructions for any new dependencies
-
Codebase exploration: Use the Agent tool (Explore type) to understand relevant existing code — patterns, conventions, and integration points for this phase
-
UI agent (when the phase affects visual design): Launch a sub-agent to research visual design implications — layout, visual hierarchy, typography, color, spacing, responsive behavior, animation, and consistency with existing design language. Use the /ui skill when available. The agent should explore the codebase for existing design system components (tokens, shared styles, component libraries) and flag whether the proposed change introduces visual inconsistencies. WebSearch for current design patterns relevant to the UI being built.
-
UX agent (when the phase affects user-facing behavior): Launch a sub-agent to research interaction patterns, user flows, cognitive load, affordances, error states, edge cases, and accessibility (WCAG compliance, keyboard navigation, screen reader behavior). The agent should search the codebase for how similar interactions are handled today and WebSearch for established UX patterns relevant to the problem. Output should include concrete recommendations, not abstract principles.
-
Delight agent (when the phase touches anything a user sees or interacts with): Launch a sub-agent to research opportunities to make this change feel genuinely good — micro-interactions, smart defaults, helpful empty states, smooth transitions. The agent should search the codebase for existing delight patterns (animations, transitions, contextual feedback). The bar: would a user notice and think "nice"? Delight is the absence of friction plus a moment of care. Skip anything that adds complexity without genuine user payoff.
-
Use AskUserQuestion to clarify any ambiguities about the phase requirements
Step 7: Execute Phase Work
Begin implementing the phase:
- Work through each task in the phase
- Use AskUserQuestion frequently for implementation decisions
- Follow the "Always Works" philosophy - test as you go
- Document decisions in PROGRESS.md as you make them
Step 8: Update Progress Document
As you work, update
docs/{name}/PROGRESS.md:
- Mark tasks as completed
- Record decisions made and why
- Note any blockers encountered
- List files changed
- Add architectural decisions
- Update the session log with today's work
Update the phase status:
- "In Progress" when starting
- "Completed" when all tasks done and success criteria met
Step 9: Next Step
After completing the phase:
- Read PROGRESS.md to determine next incomplete phase
- Inform user of completion and suggest next action:
"Phase {n} complete! Progress updated in
docs/{name}/PROGRESS.md
Next step: Run
/build phase {n+1} {name} to continue with [next phase title]."
Or if all phases complete:
"All phases complete! The {feature name} feature implementation is done.
Consider:
- Running tests to verify everything works
- Updating documentation
- Creating a PR for review"
Subcommand: status
Step 1: Get Feature Name
If feature name not in arguments, use AskUserQuestion to prompt for it.
Step 2: Check Which Docs Exist
Check for existence of:
docs/{name}/RESEARCH.mddocs/{name}/IMPLEMENTATION.mddocs/{name}/PROGRESS.md
Step 3: Determine Status and Next Step
Based on which docs exist:
No docs exist: "No documents found for feature '{name}'. Next step: Run
/build research {name} to start."
Only RESEARCH.md exists: "Research complete for '{name}'. Next step: Run
/build implementation {name} to create implementation plan."
RESEARCH.md and IMPLEMENTATION.md exist: "Research and implementation plan complete for '{name}'. Next step: Run
/build progress {name} to set up progress tracking."
All three exist: Read PROGRESS.md to find current phase status. "Feature '{name}' is in progress. Current status: [Phase X - status] Next step: Run
/build phase {next incomplete phase} {name} to continue."
If all phases complete: "Feature '{name}' implementation is complete!"
Important Guidelines
Use AskUserQuestion Liberally
Throughout all phases, use AskUserQuestion whenever:
- There's ambiguity in requirements
- Multiple approaches are possible
- You need to validate an assumption
- A decision will significantly impact the implementation
- You're unsure about scope or priority
Deep Research Expectations
"Deep research" means:
- Multiple web searches on different aspects
- Thorough codebase exploration
- Reading relevant documentation
- Considering multiple approaches
- Understanding trade-offs
Don't rush through research - it's the foundation for good implementation.
Progress Tracking
Keep PROGRESS.md updated in real-time during phase work:
- Don't wait until the end to update
- Record decisions as they're made
- Note blockers immediately
- This creates valuable context for future sessions
Functional Phases First
Every phase should produce something the user can see, test, or use. If a phase requires infrastructure (data models, APIs, services), bundle the minimum viable UI or integration that exercises it. The litmus test: "Can the user do something new after this phase?" If the answer is no, merge it with the next phase or restructure. Back-to-back phases that are all plumbing with no user-facing result are a planning smell — fix the plan, don't ship scaffolding.
Scope Management
A key purpose of this workflow is preventing scope creep:
- Each phase should have clear boundaries
- If new requirements emerge, note them for future phases
- Don't expand the current phase's scope mid-implementation
- Use AskUserQuestion to validate if something is in/out of scope
Always Works Philosophy
When implementing phases:
- Test changes as you make them
- Don't assume code works - verify it
- If something doesn't work, fix it before moving on
- The goal is working software, not just written code