Install
$ agentstack add skill-hmcts-claude-context-scaffold ✓ 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.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
> ⚠️ Legacy WildFly context services only. The CQRS scaffolding here — -command-api, -query-api, -domain-event, viewstore + Liquibase, subscriptions-descriptor — is specific to the WildFly-era cpp-context-* stack. Do not copy these patterns into a Spring Boot service. Spring Boot services are layered (Controller → Service → Repository with MapStruct), not CQRS. > > For new Spring Boot services, use skills/springboot-service-from-template/. > For new HMCTS Marketplace API specs, use skills/springboot-api-from-template/. > If a domain genuinely needs CQRS in a new Spring Boot service, that is an ADR-worthy deviation — raise it explicitly rather than importing this skill's patterns.
Context Service Scaffold
Generates boilerplate for new CQRS components within an existing cpp-context-* repository — commands, queries, domain events, viewstore entities, and Liquibase migrations.
When to Use
- User asks to "add a new command", "create a query", "add a domain event"
- User wants to add a new aggregate or entity to the domain
- User needs a new viewstore table with Liquibase migration
- User wants to add event subscription from another context
Component Templates
New Command
When the user wants to add a new command:
- Command API (
{name}-command/{name}-command-api/)
- RAML definition under
src/raml/ - JSON schema under
src/raml/json/schema/ - Follow existing naming:
{context}.command.{verb}-{noun}.json
- Command Handler (
{name}-command/{name}-command-handler/)
- Handler class implementing the command processing
- Follow pattern:
{Verb}{Noun}CommandHandler.java - Must validate invariants via the aggregate
- Must produce domain events on success
Example command schema naming:
hearing.command.schedule-hearing.json
hearing.command.update-hearing-details.json
hearing.command.cancel-hearing.json
New Query
When the user wants to add a new query:
- Query API (
{name}-query/{name}-query-api/)
- RAML definition
- Response JSON schema
- Query Handler (
{name}-query/{name}-query-handler/)
- Handler class that reads from the viewstore
- Must use
readOnly=truetransactions - Never modify state
New Domain Event
- Event Schema (
{name}-domain/{name}-domain-event/src/main/resources/json/schema/)
- JSON schema file:
{context}.events.{noun}-{past-tense-verb}.json - Example:
hearing.events.hearing-scheduled.json,hearing.events.hearing-cancelled.json
- Event naming convention: Events are past-tense facts — something that happened.
material-added(notadd-material)hearing-scheduled(notschedule-hearing)defendant-validation-passed(notvalidate-defendant)
New Viewstore Entity
- JPA Entity (
{name}-viewstore/)
- Entity class with
@Entity,@Tableannotations - Repository interface extending
JpaRepository
- Liquibase Migration (
{name}-viewstore-liquibase/)
- New changeset in
db/changelog/ - Follow sequential numbering from existing changesets
- Include rollback section
Example Liquibase changeset:
New Event Subscription (from another context)
When this service needs to react to events from another bounded context:
- Add dependency in root
pom.xml:
```xml
uk.gov.moj.cpp.{other-context} {other-context}-event ${other-context.version}
```
- Event source handler in
{name}-event-sources/:
- Handler method annotated to process the external event
- Must be idempotent — check if event already processed
- Transform external event data into local viewstore updates
Process
- Ask the user what component they want to add
- Read the existing repo structure to understand naming patterns and conventions
- Read at least one existing example of the same component type in the repo
- Generate the new component following the exact same patterns
- If adding a viewstore entity, also generate the Liquibase migration
- If adding a command, also create the corresponding domain event(s)
- Remind the user to run
mvn clean installto verify the build
Validation
After scaffolding, verify:
mvn clean compile— all modules compilemvn test -pl {affected-module}— existing tests still pass- JSON schemas validate against the framework's meta-schema
- RAML files reference the correct schemas
- Liquibase changesets have unique IDs and include rollback
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.