Install
$ agentstack add skill-hmcts-claude-architecture-design ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Architecture Design (CPP)
Produces a design proposal for a new CPP capability that fits the platform's CQRS/Event Sourcing context-service pattern or the Modern by Default (MbD) Spring Boot pattern, whichever suits best. Delegates deep analysis to the architecture-designer agent and hands off to scaffolding skills when the user approves.
When to Use
Triggers: "design a service for…", "how should we architect…", "what's the right pattern for…", "plan a new context/MbD service", "model this bounded context", "design the event flow for…", "cross-context design for…".
Do not use for:
- Implementing an already-agreed design → use
springboot-service-from-templateorcontext-scaffold. - Reviewing an existing design/PR → use
review-prorcode-reviewer. - Writing a formal OpenSpec change → use
openspec-propose(this skill can feed into it).
Required Input
Ask the user (once, all at once):
- Problem statement — what capability or change is needed, and why.
- Users / triggers — who or what initiates the flow (UI action, external event, scheduled job, another context).
- Expected outcome — what state changes, what events/notifications, what reads the UI needs.
- Known constraints — deadlines, compliance, existing services to integrate with, anything off-limits.
- Existing context — is there already a context service or MbD service this should live in, or is this greenfield?
If the user's message already contains enough of this, skip the questions and proceed. Do not stall on missing details you can reasonably assume — make the assumption explicit in the output.
Workflow
Step 1 — Frame the problem
Restate the problem in one paragraph and list your assumptions. This anchors the design and exposes misunderstandings early.
Step 2 — Survey the platform
Before designing, read the relevant neighbours so the design fits reality:
grepfor existing contexts / services mentioned in the problem acrosscpp-context-*andcpp-mbd-*.- Read the closest 1–2 analogous services' top-level structure (
pom.xml/build.gradle, one command handler, one event schema). - Check
cpp-platform-core-domainfor existing shared schemas you should reuse. - Check
cp-c4-architectureif the context is already modelled.
Do this yourself with Read/Grep/Glob for small scopes. For anything non-trivial, delegate to the architecture-designer agent with a self-contained brief.
Step 3 — Apply the pattern selection rubric
| Situation | Pattern | |---|---| | New greenfield capability, thin domain, REST/event integration | MbD service (cpp-mbd-*) — default | | Extension of an existing context (new command/event/projection) | Extend context via context-scaffold | | New bounded context with rich aggregate behaviour, audit/replay critical | New CQRS context service — justify explicitly | | UI-only change | cpp-ui-* change only | | Cross-cutting concern | Extend cpp-platform-libraries / cp-framework-libraries | | Shared schema/types | Extend cpp-platform-core-domain |
MbD is the default. A new CQRS context service is a high-bar decision — require a written justification.
Step 4 — Produce the design
Delegate to the architecture-designer agent with a prompt that includes:
- The restated problem and assumptions
- The surveyed neighbours (file paths)
- Any hard constraints from the user
Ask for the full design output format defined in the agent (Summary, Pattern & Rationale, Bounded Context, Components, Contracts, Diagrams, Cross-cutting, Deployment, Risks, Alternatives, Implementation Outline, Follow-ups).
Step 5 — Present and iterate
Show the design to the user. Call out:
- The chosen pattern in one sentence.
- One-way-door decisions.
- Any assumptions that, if wrong, would change the recommendation.
Invite the user to push back before implementation begins.
Step 6 — Hand off
Once the user approves, recommend the next skill:
- MbD service →
springboot-service-from-template - Extending a context →
context-scaffold - Formal change proposal →
openspec-propose(wrap this design as the design artifact) - C4 model update → edit
cp-c4-architectureLikeC4 sources - Terraform/infra →
terraform-validateon the relevant module
Do not auto-invoke scaffolding skills — the user confirms first.
Output Conventions
- Mermaid for inline container and sequence diagrams.
- Repo names and module suffixes spelled exactly (
-command,-event,-viewstore-liquibase, etc.). - Package names correct per CLAUDE.md:
uk.gov.hmcts.cp.*for MbD,uk.gov.moj.cpp.*for existing CQRS services,uk.gov.justice.*for legacy only. - Events named as past-tense facts; commands as imperative present tense.
- Cite file paths with
file:linewhen referencing existing code.
Anti-Patterns to Flag
When reviewing the user's premise, push back on:
- Proposing a new context service for what is really a read-model or integration (should be MbD).
- Cross-context synchronous REST chains instead of events for state propagation.
- Shared databases across contexts.
- Breaking event schema changes (must be additive).
- New code in legacy WildFly/Java EE stacks.
- Missing idempotency on event consumers.
- Command handlers that read from projections (stale-data bugs).
Example Invocation
User: "We need to let defence solicitors subscribe to hearing updates for their cases and get notifications when anything changes."
- Frame: subscription + notification capability; cross-context (hearing → subscriptions → defence UI).
- Survey: check
cpp-context-subscriptions,cpp-context-hearing,cpp-ui-subscriptions,cpp-mbd-*for existing notification plumbing. - Pattern: likely extend
cpp-context-subscriptionsfor subscription state + newcpp-mbd-hearing-notificationsfor the notification dispatch pipeline. - Delegate to
architecture-designerfor the full design with events (HearingUpdatedconsumed,HearingNotificationDispatchedemitted), APIs, diagrams, risks. - Hand off:
context-scaffoldfor the subscription changes;springboot-service-from-templatefor the notification service.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: hmcts
- Source: hmcts/claude
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.