skills/milestone/SKILL.md
Create milestones with spec elicitation, complete milestones, manage ROADMAP.md, tag releases.
npx skillsauth add gregrossdev/gig gig:milestoneInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Read .gig/STATE.md and .gig/ROADMAP.md.
Display: Version: {version} | Iteration: {iteration} | Status: {status}
Check if .gig/ exists in the current project root.
If NOT present:
Say: "No gig context found. Run /gig:init first." STOP.
Read .gig/STATE.md to check current status.
If status is SPECING:
Elicitation was interrupted. Present options:
If status is SPECCED:
Spec is already locked. Present options:
Proceed to the selected action normally.
Otherwise: Proceed to Step 2.
Use AskUserQuestion to present options:
Read .gig/BACKLOG.md. If it has entries beyond the template:
Present backlog items as seed options: "Found backlog items that could seed a milestone:"
"Pick one to start from, or describe something new."
If the user picks a backlog entry, pre-populate the milestone name and description from it. Remove the consumed entry from BACKLOG.md.
If no backlog entries, skip to Step 3a.2.
Ask for (if not already seeded from backlog):
Propose a version (do not ask — derive it):
.gig/ROADMAP.md.v0.1.0.0.1.0 → 0.2.0).0.2.0 → 0.2.1).v1.0.0 or higher. Only the user may declare v1.0.Proposed version: {version} — Reasoning: {why}Update .gig/ROADMAP.md:
Update .gig/STATE.md:
SPECINGRead these files for background:
.gig/ARCHITECTURE.md — project structure, stack, patterns.gig/ROADMAP.md — current milestone, completed iterations.gig/BACKLOG.md — remaining backlog ideas.gig/ISSUES.md — open/deferred issues.gig/SPEC.md — if resuming a draft spec from a prior session.gig/MVP.md — if present, the MVP product discovery documentIf .gig/SPEC.md exists and has content beyond the template, present it:
"Found existing spec draft. Resuming from where you left off."
If .gig/MVP.md exists and has content beyond the template, note it:
"Found MVP discovery document. Will use it to pre-populate stories and requirements."
This is an interactive conversation. Claude guides the user to articulate what they want clearly enough that gather can make decisions without assumptions.
If user says "baseline" or "reverse-engineer" (or provided args containing these words):
Jump to the Baseline from Iterations flow below.
If user says "mvp" (or provided args containing "mvp"), OR this is a new project (no completed iterations and no source code):
Jump to the MVP Product Discovery flow below.
If no args and the project has completed iterations (existing project):
Launch 2 Explore agents in parallel (Agent tool, subagent_type "Explore"). Pick the 2 most relevant:
.gig/ARCHITECTURE.md, package/config files..gig/ISSUES.md..gig/ROADLOG.md, .gig/BACKLOG.md, .gig/ISSUES.md.Hard cap: 2 parallel agents maximum. If all 3 are needed, run 2 first, then the third.
Synthesize findings from all agents into a unified project assessment before presenting directions.
Present a project assessment and propose directions:
### Your Project Now
{2-3 sentence assessment of current state and capabilities}
### Suggested Directions
1. **{Direction}** ({type: refactor / feature / enhancement / testing / docs}) — {why this matters now}
2. **{Direction}** ({type}) — {why}
3. **{Direction}** ({type}) — {why}
Pick a direction to spec out, combine them, or tell me what you have in mind.
The user picks a direction (or states their own), then elicitation continues normally.
If the user already stated their goal (same message or prior context): Skip the assessment and start elicitation directly.
If .gig/MVP.md was loaded in Step 3a.3 and has content beyond the template (and this is NOT an MVP or baseline flow):
Before starting normal elicitation, pre-populate from the MVP document:
Extract story candidates from MVP Core Flows — each flow maps to a candidate user story. Present them as draft US-XXX entries for the user to confirm or adjust.
Extract requirement candidates from MVP Screens and Data Model — each screen maps to requirements about what it must display/do, each entity maps to data requirements. Present them as draft REQ-XXX entries.
Surface Open Questions from MVP.md: "These items were flagged as open questions during MVP discovery — let's resolve them now before building the spec:"
Present the pre-populated draft: "Found MVP discovery document. Pre-populated {N} story candidates and {M} requirement candidates from your flows and screens. Let's refine them."
Then continue with normal elicitation — the user adjusts, adds, removes, and the standard elicitation behaviors apply.
For existing projects that want to capture what's already been built as a spec. This reverse-engineers user stories and requirements from iteration history.
Read all archived iterations: Scan .gig/iterations/ for completed iteration archives. For each, read PLAN.md (batch details, acceptance criteria) and DECISIONS.md (what was decided and why).
Read current state: Read .gig/ARCHITECTURE.md, .gig/ROADMAP.md (completed milestones and iterations).
Launch 2 Explore agents in parallel (Agent tool, subagent_type "Explore"). Pick the 2 most relevant:
Present the baseline draft spec:
### Baseline Spec (reverse-engineered from {N} iterations)
## Stories
| ID | Story | Priority | Status |
|----|-------|----------|--------|
| US-001 | As a ..., I want ..., so that ... | core | DELIVERED |
| US-002 | ... | core | DELIVERED |
| ... | ... | ... | ... |
## Requirements
| ID | Story | Description | Acceptance Criteria | Status | Iteration |
|----|-------|-------------|---------------------|--------|-----------|
| REQ-001 | US-001 | ... | ... | COVERED | v0.X.Y |
| REQ-002 | US-001 | ... | ... | COVERED | v0.X.Y |
| ... | ... | ... | ... | ... | ... |
All {count} requirements are marked COVERED — these represent what's already built.
"This is what your project has built so far. Review the stories and requirements — adjust anything that's wrong."
"To add NEW work, describe what you want next. I'll add new stories and requirements with status NOT COVERED. Govern will track them going forward."
NOT COVERED. Then continue to the Lock Gate (Step 3a.5).A structured interview that produces .gig/MVP.md — a product discovery document with flows, screens, data model, and boundaries. Use this for new projects or existing projects that need to think through the product before coding.
If the project has existing context (.gig/ARCHITECTURE.md has content beyond the template, or .gig/ROADMAP.md has completed iterations): Read both files before starting. Reference existing architecture and capabilities when asking questions — the interview should build on what exists, not ignore it.
If .gig/MVP.md already exists and has content beyond the template: Present it and ask: "Found existing MVP discovery document. Resume editing or start fresh?" If resume, pre-populate the running draft from the existing file. If fresh, proceed with a blank slate.
The interview uses clustered questions — each section presents 2-4 related questions at once. After the user answers, show a running draft of that section for course-correction before moving to the next.
Handling unknowns: When the user says "I don't know" or is uncertain, ask ONE follow-up to help them think through it (e.g., "If you had to pick, would it be more like X or Y?"). If still uncertain after the follow-up, add it to the Open Questions section and move on.
Handling multiple user types: When the user identifies multiple user types in Section 1, interview all types together. Annotate flows and screens with which role performs/sees them. Shared elements are noted as shared; role-specific elements are tagged with the user type.
Ask as a cluster:
After answers, present running draft:
### MVP Draft (Section 1/7 complete)
## Vision
**Product:** {elevator pitch}
**Target Users:** {user types}
**Problem:** {problem statement}
**What exists today:** {current state}
Ask as a cluster:
Use the inspiration answers to ground follow-up questions in later sections. For example, if the user says "like Trello but for X," ask about differences from Trello when discussing flows and screens.
After answers, update running draft adding:
## Inspiration
| Product | Borrow | Avoid |
|---------|--------|-------|
| {product} | {what to borrow} | {what to avoid} |
Ask as a cluster:
If multiple user types were identified in Section 1, ask: "Which user type performs each flow?"
For each flow described, generate a Mermaid flowchart:
flowchart TD
A[{first step}] --> B[{second step}]
B --> C{Decision point}
C -->|Option 1| D[{outcome}]
C -->|Option 2| E[{outcome}]
If a flow is role-specific, add a comment: %% Role: {user type}
After answers, update running draft with all flows and their Mermaid diagrams.
Ask as a cluster:
Generate a screen inventory table:
| Screen | Purpose | User Types |
|--------|---------|------------|
| {name} | {what it does} | {all / specific role} |
For each key screen, generate an ASCII mockup showing rough layout:
### {Screen Name}
{Brief description of purpose and what the user does here.}
┌─────────────────────────────────┐
│ {Header / Nav} │
├─────────────────────────────────┤
│ ┌───────────┐ ┌─────────────┐ │
│ │ {Section} │ │ {Section} │ │
│ │ {content} │ │ {content} │ │
│ └───────────┘ └─────────────┘ │
├─────────────────────────────────┤
│ {Actions / Footer} │
└─────────────────────────────────┘
After answers, update running draft with screen inventory and mockups.
Ask as a cluster:
Generate an entity table:
| Entity | Key Attributes | Relationships |
|--------|---------------|---------------|
| {name} | {attr1, attr2, ...} | {belongs to X, has many Y} |
For stateful entities, generate Mermaid state diagrams:
stateDiagram-v2
[*] --> {initial state}
{state1} --> {state2}: {trigger}
{state2} --> {state3}: {trigger}
After answers, update running draft with entity table and state diagrams.
Ask as a cluster:
If the user is uncertain, push once: "Think about it from the user's perspective — what would make them come back a second time?" If still uncertain, flag as open question.
After answers, update running draft with metrics.
Ask as a cluster:
Surface all items flagged as open questions during earlier sections: "During our conversation, these items were flagged as open questions: {list}. Want to resolve any of them now, or keep them flagged for spec?"
After answers, update running draft with boundaries, constraints, and final open questions list.
After EACH section, present the full accumulated MVP.md draft so far:
### MVP Draft (Section {N}/7 complete)
{Full accumulated content from all completed sections}
Do NOT write to .gig/MVP.md during the interview — keep the draft in the conversation. Only write on lock.
After all 7 sections are complete, present the full MVP.md document. Do not abbreviate, inline, or collapse into prose.
Then ask:
Does this capture your MVP vision?
- "lock" / "approve" — write MVP.md and continue to spec elicitation.
- "change X" — adjust specific sections before locking.
- "not yet" — continue refining (go back to any section).
STOP. Do not write MVP.md. Wait for approval.
Once the user approves:
Write .gig/MVP.md with the locked content. Overwrite any existing draft.
Derive documentation needs from MVP.md:
Read the just-written MVP.md and .gig/ARCHITECTURE.md (if populated). For each section, determine if additional documentation beyond the minimum set (README, CHANGELOG, LICENSE) would help users of this project:
Do NOT use a fixed mapping. Read the actual content and reason about what docs would help. The above are examples, not rules.
Write .gig/DOCS.md with the derived documentation plan:
scaffoldednot-started, noting which MVP section or ARCHITECTURE.md field informed the needtemplates/docs/ (look in ${CLAUDE_PLUGIN_ROOT}/templates/docs/ then ~/.claude/templates/docs/) to the project rootPresent the documentation plan:
"Based on your MVP, this project needs these docs beyond the basics:"
- {doc} — {reason} (template scaffolded)
"Documentation plan written to
.gig/DOCS.md. Govern will track freshness."
Continue to spec elicitation — pre-populate stories and requirements from the MVP document using the MVP-Aware Elicitation flow above. Do NOT stop or ask the user to run a separate command.
During the elicitation conversation, use run_in_background to launch research agents when the user mentions topics that benefit from investigation. This keeps the conversation flowing while research completes.
When to launch:
When to collect:
Do NOT block the conversation waiting for background agents. Ask the next question while research runs.
Claude's job is to draw out what the user knows but hasn't articulated:
User Stories:
Requirements (derived from stories):
Constraints:
Clarifications:
After each substantive exchange, present the updated spec draft so the user can see it taking shape. Use the SPEC.md format:
### Current Draft
**Stories:** {count}
**Requirements:** {count}
**Constraints:** {count}
{Show the most recently added/changed items}
Do NOT write to .gig/SPEC.md during elicitation — keep the draft in the conversation. Only write on lock.
Keep asking questions until:
If the user seems done but gaps remain, surface them: "Before locking, I notice {gap}. Want to address it or mark it out of scope?"
Present the complete spec in full. Do not abbreviate, inline, or collapse into prose.
Present the entire draft spec in SPEC.md format:
# Spec
## Stories
| ID | Story | Priority | Scope Notes | Status |
|----|-------|----------|------------|--------|
| US-001 | As a ..., I want ..., so that ... | core | ... | NOT COVERED |
| ... | ... | ... | ... | ... |
## Requirements
| ID | Story | Description | Acceptance Criteria | Priority | Dependencies | Status | Iteration |
|----|-------|-------------|---------------------|----------|-------------|--------|-----------|
| REQ-001 | US-001 | ... | ... | must | — | NOT COVERED | — |
| ... | ... | ... | ... | ... | ... | ... | ... |
## Constraints
- ...
## Out of Scope
- ...
## Clarifications
- Q: ... → A: ...
Then ask:
If gather executes this spec perfectly, does the result match what you have in your head?
- "lock" / "approve" — write the spec and start building.
- "change X" — adjust specific items before locking.
- "not yet" — continue elicitation (go back to Step 3a.4).
STOP. Do not write SPEC.md. Do not proceed to gather. Wait for approval.
Once the user approves:
Write .gig/SPEC.md with the locked spec content. Overwrite any existing draft.
Update .gig/STATE.md:
SPECCEDSay:
"Milestone {name} v{version} created with {N} stories and {M} requirements."
"Run
/gig:designto brainstorm with mockups and diagrams first, or/gig:gatherto start making decisions directly."
Verify completion:
Note upcoming milestones (informational only):
Single confirmation:
After confirmation:
git tag -a v{version} -m "Milestone: {name}"
Reference: .gig/GIT-STRATEGY.md for full conventions. Never move or delete tags.### v{version} — {Name} (completed {TODAY'S DATE})
{Description}
**Iterations:**
{For each iteration in the Iterations table, format as:}
{N}. {Name} (v0.{N}.{first-batch}–v0.{N}.{last-batch})
Derive version ranges from the Iterations table's "Version Range" column..gig/SPEC.md exists: archive it to .gig/iterations/ as SPEC-{milestone-version}.md (frozen snapshot of the completed spec with all statuses). Then reset SPEC.md to template state.IDLE, clear iteration/batch.Push (if remote exists):
git remote — if output is non-empty, a remote is configured.git push origin main --tagsSay: "Milestone v{version} complete. Run /gig:milestone to create the next one."
.gig/ROADMAP.md..gig/iterations/ directory for archived iteration history.Current Milestone: {name} v{version} ({status})
Iterations:
{list from roadmap table}
Upcoming Milestones:
{list from Upcoming Milestones table, or "None"}
Archived:
{list from .gig/iterations/ directory}
Completed Milestones:
v{X.Y} — {name} ({date})
tools
Show current state and suggest the ONE next action to take.
testing
Deep-dive a topic using subagents. Feeds findings into decisions or working memory.
tools
Create structured lesson plans for learning new concepts or following courses.
tools
Initialize the gig system in any project. Discovers context, scaffolds .gig/, proposes first milestone. Universal entry point.