From groundwork
Translates product requirements into system architecture through iterative decision-making. Guides architectural decisions, trade-off analysis, and ADR-style documentation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/groundwork:design-architecture [feature-name][feature-name]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Interactive workflow for translating product requirements into architecture through iterative decision-making.
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)Anchor decisions on the named principles in ${CLAUDE_PLUGIN_ROOT}/references/engineering-principles.md — favor deep modules (simple interface, substantial functionality), minimize the surface Hyrum's Law will freeze into a contract, and design it twice before committing to a module boundary. When a decision passes the decision-record gate (in the principles file), record it using the Decision Record Format (ADR-lite) below. Sharpen the shared vocabulary with [[domain-modeling]].
Your current effort level is {{effort_level}}.
Skip this step silently if effort is high, xhigh, or max (the scale is low < medium < high < xhigh < max, so xhigh and max are already above high) AND you are Opus (1M context).
If effort is low or medium (i.e. 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:select-project") 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:select-project").
{{specs_dir}}/: Does a specs directory exist?
{{specs_dir}}/)Skill(skill="groundwork:setup-repo") 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 /groundwork:design-product 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:
Steps 3–4 chose what to build with. For any non-trivial new module, service boundary, or public API in this design, also decide how the interface is shaped — and your first shape is rarely the best.
Invoke Skill(skill="groundwork:design-it-twice"): frame the problem, generate 2–3 divergent designs (parallel Agent fan-out when available, sequential otherwise — no agent teams needed), compare them on depth / locality / seam, and carry an opinionated recommendation into the decision records. Skip for designs with no non-trivial new interface.
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") — 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 tasksRecord a decision only when it passes the decision-record gate (${CLAUDE_PLUGIN_ROOT}/references/engineering-principles.md): hard to reverse, surprising without context, and a real trade-off — otherwise just implement it. Each qualifying decision is captured inline in the architecture doc (no separate ADR files — housekeeper keeps these current) using 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 projectsnpx claudepluginhub etr/groundworkDesigns high-level system architecture, writes Architecture Decision Records (ADRs), and evaluates technology trade-offs. Invoke for system design, microservices structuring, scalability planning, and infrastructure pattern selection.
Architectural decision-making framework with requirements analysis, trade-off evaluation, and ADR documentation. Use when making architecture decisions or analyzing system design.
Designs system architecture, creates ADRs, evaluates trade-offs, and plans scalability. Use for architecture review, microservices structuring, and infrastructure pattern selection.