Skip to content
AI & Agents
Skill

/write-milestone-brief

Synthesize the current conversation into a milestone brief (PRD). Saves it as the milestone CONTEXT (`gsd_summary_save`) by default, or files a GitHub issue only with explicit user confirmation. Use when asked to "turn this into a PRD", "draft a milestone brief", "capture this

BOOST
From plugin
gsd-pi
1.3k37 skills13 agents
Install
$ npx -y skills add open-gsd/gsd-pi --skill write-milestone-brief --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/write-milestone-brief

Context preview

The summary Claude sees to decide when to auto-load this skill.

Synthesize the current conversation into a milestone brief (PRD). Saves it as the milestone CONTEXT (`gsd_summary_save`) by default, or files a GitHub issue only with explicit user confirmation. Use when asked to "turn this into a PRD", "draft a milestone brief", "capture this

SKILL.md

write-milestone-brief.SKILL.md
name: write-milestone-brief
description: Synthesize the current conversation into a milestone brief (PRD). Saves it as the milestone CONTEXT (`gsd_summary_save`) by default, or files a GitHub issue only with explicit user confirmation. Use when asked to "turn this into a PRD", "draft a milestone brief", "capture this context", "write it up", or when enough has been discussed to commit the plan to paper. Does not interview — it synthesizes what is already known.

<objective> Take everything established in the current conversation (plus repo reality) and produce a milestone brief that a future agent can execute from with zero additional context. The output is a populated `M###-CONTEXT.md`, matching the template at `src/resources/extensions/gsd/templates/context.md`. Optionally, with explicit confirmation, also a GitHub issue. </objective>

<context> This skill runs at the end of a discussion phase, after enough grilling/design has happened that the plan has stabilized. It does NOT interview — use the `grill-me` skill for that. This skill collapses what is already on the page into a durable artifact.

Typical invocation points:

  • User says "capture this" or "write it up" after a planning discussion
  • End of a `discuss` phase before moving to `plan`
  • User wants to hand the work off to another agent or a human teammate

</context>

<core_principle> **SYNTHESIZE, DO NOT RE-INTERVIEW.** Use what is already in this conversation. If a decision is genuinely missing, note it in `Open Questions` — do not relitigate.

**REAL OUTCOMES, NOT TASKS.** `M###-CONTEXT.md` describes what the user can do when the milestone ships, what scenarios must pass for "done," and what architectural decisions were made. It does NOT list tasks or implementation steps — those belong in `M###-ROADMAP.md` and `S##-PLAN.md`.

**NO FILE PATHS OR LINE NUMBERS IN THE BRIEF.** Those go stale. Describe modules, interfaces, and behaviors. The roadmap and plans can cite code locations; the brief should outlive refactors. </core_principle>

<process>

Step 1: Locate the target

Find the active milestone:

1. Call `gsd_project_snapshot` — it names the active milestone. 2. If no milestone is active, ask the user whether this is a new milestone (create directory + files) or appending to an existing one. 3. For a new milestone, use `gsd_milestone_new` or the `/gsd new-milestone` flow — do not create directories by hand.

Step 2: Read the template

Read `src/resources/extensions/gsd/templates/context.md` (the full path is shown in the `templatesDir` system-prompt field). Match its structure exactly — parsers and downstream prompts depend on the headings.

Step 3: Sketch the modules

Before filling the template, sketch the major modules the milestone will build or modify. Actively look for opportunities to extract **deep modules** — ones that encapsulate a lot of functionality in a simple, testable interface that rarely changes. A deep module is more testable, more AI-navigable, and survives refactors.

If the modules are non-obvious, offer the user a brief check-in: "The milestone touches modules A, B, and C. A can be extracted as a deep module that hides X. Does that match your thinking?" One round. Then proceed.

Step 4: Fill the template

Populate `M###-CONTEXT.md` using the template. Key sections:

  • **Project Description** — one paragraph, plain English, what this milestone is.
  • **Why This Milestone** — the problem it solves and why now, from the user's perspective.
  • **User-Visible Outcome** — literal user actions in the real environment. "User can complete the import flow end-to-end" not "Adds import API."
  • **Completion Class** — contract / integration / operational. Be honest about what level of proof is required.
  • **Final Integrated Acceptance** — the real end-to-end scenarios that must pass. Name things that cannot be simulated.
  • **Architectural Decisions** — one `### Decision Title` block per decision, with rationale and alternatives considered. If there were no architectural decisions, write "None — straightforward execution" and skip the subsections.
  • **Error Handling Strategy** — approach for failures, edge cases, and error propagation. Include retry policies, fallback behaviors, and user-facing error messages where relevant.
  • **Risks and Unknowns** — only real ones. Do not invent risks.
  • **Existing Codebase / Prior Art** — module names, not line numbers. Brief description of how each relates.
  • **Relevant Requirements** — requirement IDs this milestone advances and how.
  • **Scope** — In Scope / Out of Scope / Non-Goals. Be specific about tempting adjacent work that is out.
  • **Technical Constraints** — binding constraints (runtime, platform, dependencies, performance budgets).
  • **Integration Points** — external systems/services this milestone touches and how.
  • **Testing Requirements** — test types (unit, integration, e2e), coverage expectations, and specific scenarios that must pass.
  • **Acceptance Criteria** — per-slice, testable criteria gathered during discussion.
  • **Open Questions** — anything material that is genuinely unresolved. Note current thinking so future agents have a starting point.

> The template headings above are mandatory — do not omit, rename, or reorder them. The exact required order matches `src/resources/extensions/gsd/templates/context.md`: Project Description → Why This Milestone → User-Visible Outcome → Completion Class → Final Integrated Acceptance → Architectural Decisions → Error Handling Strategy → Risks and Unknowns → Existing Codebase / Prior Art → Relevant Requirements → Scope → Technical Constraints → Integration Points → Testing Requirements → Acceptance Criteria → Open Questions.

Step 5: Write it

Call `gsd_summary_save` with the `milestone_id`, `artifact_type: "CONTEXT"` and the full brief as `content`. The tool stores the brief in the database and renders `.gsd/milestones/<MID>/<MID>-CONTEXT.md`; do not write the file. Do not ask for approval of the c

Read more
Ships withgsd-pi

GSD Pi is a local-first coding agent for planning, implementing, verifying, and tracking project work from the command line.

Get the whole plugin

Other skills on gsd-pi.