This skill should be used when the user asks to add features, modify requirements, update the PRD, write EARS requirements, or iterate on product specifications
Interactive workflow for iteratively designing and documenting product requirements in EARS format.
If you are in plan mode, you MUST still complete the full workflow (Steps 0–4). Your plan output MUST describe ONLY the PRD file edits from Step 4.
{{effort_level}}.Skip this step silently if effort is high or higher AND you are Opus (1M context).
If effort is below high, you MUST show the recommendation prompt — regardless of model.
If you are not Opus (1M context), you MUST show the recommendation prompt - regardless of model.
Otherwise → use AskUserQuestion:
{
"questions": [{
"question": "Do you want to switch? Cross-spec contradiction detection across PRD, architecture, and design system benefits from deeper reasoning.\n\nTo switch: cancel, run `/model opus[1m]` and `/effort high`, then re-invoke this skill.",
"header": "Recommended: Opus (1M context) at high effort",
"options": [
{ "label": "Continue" },
{ "label": "Cancel — I'll switch first" }
],
"multiSelect": false
}]
}
If the user selects "Cancel — I'll switch first": output the switching commands above and stop. Do not proceed with the skill.
Before anything else, resolve the project context:
.groundwork.yml exist at the repo root?
{{project_name}} non-empty?
Skill(skill="groundwork:project-selector") to select a project, then restart this skill.{{project_name}}, specs at {{specs_dir}}/..groundwork.yml).AskUserQuestion:
"You're working from
<cwd>(inside [cwd-project]), but the selected Groundwork project is [selected-project] ([selected-project-path]/). What would you like to do?"
- "Switch to [cwd-project]"
- "Stay with [selected-project]" If the user switches, invoke
Skill(skill="groundwork:project-selector").
{{specs_dir}}/: Does a specs directory exist?
{{specs_dir}}/)Skill(skill="groundwork:repo-setup") to create .groundwork.yml, then continue.Skip this check if:
.groundwork.yml)If in monorepo mode with a previously selected project:
web-app is selected):
"This feature sounds like it might belong to [other-project] rather than [current-project]. Continue with [current-project] or switch?"
Skill(skill="groundwork:project-selector") and then continueIf the user called the skill without any context, ask them to provide context on what feature they want to add, modify or remove.
Before clarifying the request, load existing specs so you can detect contradictions and understand constraints:
Check for and read (if they exist):
{{specs_dir}}/architecture.md (or {{specs_dir}}/architecture/ directory) — technology choices, component boundaries, decision records. Use to catch architecturally infeasible requirements early.{{specs_dir}}/design_system.md — design principles, brand decisions, UX patterns. Use to ensure new features align with established design language.{{specs_dir}}/product_specs.md (or {{specs_dir}}/product_specs/ directory) — already loaded implicitly by the contradiction check, but read it explicitly here for full cross-feature context.For each, check single file first, then directory. If a directory, aggregate all .md files.
If none exist, that's fine — proceed without them.
Invoke the groundwork:understanding-feature-requests skill to clarify the feature and check for contradictions.
If architecture and design system were loaded in Step 0.5, provide them as context so the clarification can also check for:
This skill will:
Once understanding is complete and conflicts resolved, continue to Step 2.
Once the feature is understood, draft requirements using EARS syntax.
| Pattern | Template | Use When |
|---|---|---|
| Event-Driven | When <trigger> then the system shall <response> | Behavior triggered by events |
| State-Driven | While <state> the system shall <behavior> | Continuous behavior during state |
| Unwanted | If <condition> then the system shall <mitigation> | Handling errors/edge cases |
| Optional | Where <feature enabled> the system shall <behavior> | Configurable features |
| Complex | While <state>, when <trigger>, the system shall <response> | Compound conditions |
Each requirement must be:
Follow the existing PRD convention: PRD-<FEATURE>-REQ-<NNN>
Examples from the project:
PRD-FINE-REQ-001 (Finetuning feature)PRD-GEN-REQ-001 (Generation feature)PRD-IMP-REQ-001 (Impersonation detection)PRD-MON-REQ-001 (Monetization)PRD-DEL-REQ-001 (Data deletion)For new features, propose a short code (3-4 chars) and confirm with user.
Before presenting the draft, review for conflicts:
Compare new requirements against existing PRD:
Example: New "anonymous posting" requirement conflicts with existing "all user actions must be audited"
Requirements that may be technically difficult to satisfy together:
If conflicts found, surface them:
"I noticed a potential conflict:
- [Existing requirement or pattern] requires [X]
- This new requirement requires [Y] These may be incompatible because [reason].
Options:
- Modify the new requirement to [alternative]
- Update the existing requirement
- Accept the conflict as a known trade-off
How should we resolve this?"
After resolution:
Do not proceed to Step 3 until conflicts are resolved or explicitly accepted.
When presenting complex feature blocks:
Before editing the PRD, present the complete feature block:
### [Feature Number] Feature Name
**Problem / outcome**
[1-2 sentences describing the problem and desired outcome]
**In scope**
- [Capability 1]
- [Capability 2]
**Out of scope**
- [Explicit exclusion 1]
**EARS Requirements**
- `PRD-XXX-REQ-001` When [trigger] then the system shall [response].
- `PRD-XXX-REQ-002` When [trigger] then the system shall [response].
**Acceptance criteria**
- [Testable criterion 1]
- [Testable criterion 2]
**Telemetry** (optional)
- [Metric to track]
**Rollout** (optional)
- Phase 1: [description]
- Phase 2: [description]
Ask: "Does this capture your requirements? Any changes before I update the PRD?"
Scope discipline:
If in plan mode: The plan should describe only the file edits in this step — which file to edit, where to insert, and what content to write. Do not plan architecture, code, or technical implementation of the feature.
PRD Location: The PRD may be stored as:
{{specs_dir}}/product_specs.md{{specs_dir}}/product_specs/ (with content split across files)When the user approves:
Check if PRD exists - Look for single file first, then directory
{{specs_dir}}/product_specs.md using the template in references/prd-template.md{{specs_dir}}/ directory exists firstRoute the content - Determine where to write based on spec format:
{{specs_dir}}/product_specs.md directly{{specs_dir}}/product_specs/03-features/<feature-code>.md{{specs_dir}}/product_specs/05-open-questions.md{{specs_dir}}/product_specs/02-non-functional.md{{specs_dir}}/product_specs/01-product-context.md{{specs_dir}}/product_specs/04-traceability.mdFind insertion point - New features go in Section 3 (Feature list) after existing features
Edit the document - Use str_replace to insert the new feature block
Update open questions - If any remain, add to Section 5 (Open questions log)
Update traceability note - Mention new requirement IDs if relevant
After editing, confirm: "I've added [feature] to the PRD with requirements PRD-XXX-REQ-001 through PRD-XXX-REQ-NNN."
Skip this step if the PRD is already in directory mode.
After committing to the single-file PRD, check whether it should be split:
wc -l {{specs_dir}}/product_specs.md### \d+\.\d+ headings in the fileIf lines >= 500 OR features >= 15:
Skill(skill="groundwork:split-specifications") — this runs automatically with no user input needed.{{specs_dir}}/product_specs/ for easier navigation."If neither threshold is crossed, continue silently.
After successfully updating the PRD, use the AskUserQuestion tool to present the next step options:
{
"questions": [{
"question": "What would you like to do next?",
"header": "Next step",
"options": [
{
"label": "Design architecture",
"description": "Translate these requirements into technical architecture decisions"
},
{
"label": "Design UX",
"description": "Create user experience designs and flows for this feature"
},
{
"label": "Create tasks",
"description": "Generate implementation tasks for this feature"
},
{
"label": "Add another feature",
"description": "Continue adding more features to the PRD"
}
],
"multiSelect": false
}]
}
Handle the response:
groundwork:architecture skill to design the technical approachgroundwork:ux-design skill to create UX designsgroundwork:tasks skill to generate implementation tasks for the new featureUser: I want to add a feature for artists to share their portfolios publicly.
Claude: Great idea! Let me understand this better:
1. What should be shareable - just the generated outputs, or training images too?
2. Should other users be able to interact (like/comment) or just view?
3. Are there privacy controls the artist should have?
[User answers...]
Claude: Based on your answers, here's what I'm proposing:
### 3.X Portfolio Sharing
**Problem / outcome**
Artists want to showcase their AI-generated work publicly to attract commissions.
**In scope**
- Public gallery page per artist
- ...
**EARS Requirements**
- `PRD-PORT-REQ-001` When an artist enables public portfolio then the system shall...
Does this capture it? Any changes?
User: PRD-IMP-REQ-008 should lock the account after 5 attempts, not N.
Claude: I'll update PRD-IMP-REQ-008 to specify 5 attempts:
**Before:** When impersonation attempts exceed N per day...
**After:** When impersonation attempts exceed 5 per day...
Should I also add a configuration option for admins to adjust this threshold, or keep it fixed at 5?
User: Add a requirement for faster generation.
Claude: "Faster" needs to be specific for a testable requirement. Currently PRD specifies p95 < 2s.
- What latency target do you have in mind? (e.g., p95 < 1s, p99 < 2s)
- Does this apply to all generation types or specific ones?
- Are there trade-offs you'd accept (e.g., lower quality for speed)?
For detailed examples of well-written EARS requirements, see:
references/ears-examples.md - Curated examples from various domainsreferences/prd-template.md - Template for creating new PRD files