From groundwork
Translates PRDs into system architecture via interactive workflow: loads product specs.md, iterates decisions with options/discussion, outputs documented architecture.md. Handles Groundwork monorepos.
npx claudepluginhub etr/groundworkThis skill uses the workspace's default tool permissions.
Interactive workflow for translating product requirements into architecture through iterative decision-making.
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
Interactive workflow for translating product requirements into architecture through iterative decision-making.
{{specs_dir}}/product_specs.md (PRD with EARS requirements){{specs_dir}}/architecture.md (architecture document with decisions)Your current effort level is {{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 effort level.
Otherwise → use AskUserQuestion:
{
"questions": [{
"question": "Do you want to switch? Cross-decision conflict detection and trade-off synthesis across NFRs benefit 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.Read the product specs (may be single file or directory) and extract:
Detection: Check for {{specs_dir}}/product_specs.md first (single file), then {{specs_dir}}/product_specs/ directory. When reading a directory, aggregate all .md files recursively with _index.md first, then numerically-prefixed files, then alphabetically.
If PRD doesn't exist, prompt user to run /product-design first.
Summarize key architectural drivers:
"Based on your PRD, the key architectural drivers are:
- [Driver 1 from NFRs]
- [Driver 2 from features] I'll need to make decisions about [list 3-5 major areas]. Let's start with [most foundational one]."
Common architectural decision categories:
| Category | Example Decisions |
|---|---|
| Compute | Serverless vs containers vs VMs, orchestration |
| Data | Database type, multi-tenancy strategy, caching |
| API | REST vs GraphQL, gateway pattern, versioning |
| Frontend | SPA vs SSR, framework choice, state management |
| Auth | Identity provider, token strategy, authorization model |
| Integration | Sync vs async, message queues, event sourcing |
| Infrastructure | Cloud provider, IaC approach, environments |
| Observability | Logging, metrics, tracing, alerting |
| Security | Encryption, network isolation, secrets management |
| Cost | Pricing model alignment, reserved vs on-demand |
Prioritize decisions by dependency (foundational first).
Before presenting decision options, gather research on relevant technologies.
For each decision area identified:
Identify the primary technologies/frameworks being considered
Invoke the researcher agent:
Agent(
subagent_type="groundwork:researcher:researcher",
prompt="Research Topic: [technology]
Research Questions:
- What is the stable vs latest version?
- What is the recommended ecosystem for [use case]?
- What are common architectural pitfalls?
- What has been deprecated recently?
Project Context: [from PRD]
Constraints: [from user/PRD]"
)
Use research findings to:
Research Integration: When presenting options in Step 4, incorporate research findings:
For each decision point, present 2-4 options using this format:
## Decision: [Decision Name]
**Context:** [Why this decision matters, link to PRD requirements]
### Option A: [Name]
**Description:** [1-2 sentences]
**Pros:**
- [Pro 1, ideally linked to PRD requirement]
- [Pro 2]
**Cons:**
- [Con 1, note if it conflicts with PRD requirement]
- [Con 2]
**Cost implications:** [Rough estimate if relevant]
### Option B: [Name]
[Same structure]
### Option C: [Name] (if applicable)
[Same structure]
**My recommendation:** [Option X] because [reasoning tied to PRD].
What are your thoughts? Any constraints I should know about?
Presentation style:
When presenting options, ask questions to surface hidden constraints:
Before recording a decision, check for conflicts with earlier decisions:
Check against existing decisions:
If conflict detected:
"This decision may conflict with DR-NNN:
- DR-NNN chose [X] for [reason]
- This decision would require [Y], which is incompatible because [explanation]
Options:
- Proceed with new decision and update DR-NNN
- Modify this decision to align with DR-NNN
- Accept both and document the exception
Which approach?"
After user input:
When all major decisions are made, create the architecture document using template in ${CLAUDE_PLUGIN_ROOT}/references/architecture/architecture-template.md.
Output location: {{specs_dir}}/architecture.md (single file by default)
Critical: Include ALL decision records with discarded options and reasoning. This is essential for future maintainers to understand why choices were made.
Present the complete document for review before writing.
Before writing the architecture document, validate it against the PRD:
Invoke the prd-architecture-checker agent with draft architecture content and PRD content:
Agent(
subagent_type="groundwork:prd-architecture-checker:prd-architecture-checker",
prompt="Validate architecture against PRD
Architecture Draft: [full draft content]
PRD Content: [product_specs.md content]
Feature List: [extracted features]
NFR List: [extracted NFRs]
Constraints: [budget, timeline, team from PRD]"
)
If verdict is request-changes:
If verdict is approve:
{{specs_dir}}/architecture.mdSkip this step if the architecture doc is already in directory mode.
After writing the architecture document, check whether it should be split:
wc -l {{specs_dir}}/architecture.md### DR-\d+ headings in the fileIf lines >= 500 OR decision records >= 10:
Skill(skill="groundwork:split-architecture-doc") — this runs automatically with no user input needed.{{specs_dir}}/architecture/ for easier navigation."If neither threshold is crossed, continue silently.
After successfully updating the architecture document, ask what should be the next workflow step:
{
"questions": [{
"question": "What would you like to do next?",
"header": "Next step",
"options": [
{
"label": "Design UX",
"description": "Plan user experience designs and flows"
},
{
"label": "Create tasks",
"description": "Break product/architecture/UX down into tasks"
}
],
"multiSelect": false
}]
}
Handle the response:
/groundwork:ux-design to create UX designs/groundwork:create-tasks to create a list of executable tasksEach decision in the architecture doc follows this format:
### DR-NNN: [Decision Title]
**Status:** Accepted | Superseded by DR-XXX | Deprecated
**Date:** YYYY-MM-DD
**Context:** [Why this decision was needed]
**Options Considered:**
1. **[Option A]** - [Brief description]
- Pros: [list]
- Cons: [list]
2. **[Option B]** - [Brief description]
- Pros: [list]
- Cons: [list]
**Decision:** [Chosen option]
**Rationale:** [Why this option was selected, referencing PRD requirements]
**Consequences:**
- [Implication 1]
- [Implication 2]
${CLAUDE_PLUGIN_ROOT}/references/architecture/architecture-template.md - Template for architecture document${CLAUDE_PLUGIN_ROOT}/references/architecture/decision-examples.md - Example decision records from real projects