ddd-aggregate — Claude Code skill: what it does, how to install
Scaffolds a DDD aggregate root with an entity, value objects, a repository interface, domain events, and test stubs. Useful when modeling business logic in an existing bounded context.
npx skills add ruvnet/ruflo --skill ddd-aggregate -a claude-codeWhat ddd-aggregate does
The skill accepts <context-name> and <aggregate-name> in kebab-case. It first checks whether src/<context>/domain/ exists. Scaffolding halts if that directory is missing, prompting you to run /ddd-context <context> first. A pre-task hook then triggers via @claude-flow/cli.
Inside the context, it creates TypeScript files: the aggregate root class in domain/entities/, an immutable ID value object, an interface-only repository, and past-tense domain events. It also writes unit test stubs targeting construction invariants and equality in domain/entities/<aggregate-name>.entity.test.ts.
Finally, it updates barrel exports in index.ts and registers the aggregate structure in the domain model graph via Ruflo MCP memory tools. A post-task hook marks the task finished.
What it helps with
- scaffold an aggregate root class with invariant validation
- define a domain repository interface with findById, save, and delete methods
- create past-tense domain event templates for created and updated states
- generate unit test stubs for identity equality and construction rules
Example prompts for the agent
- /ddd-aggregate billing invoice
- /ddd-aggregate ordering customer-order
- Scaffold an aggregate root: /ddd-aggregate checkout cart
How to install ddd-aggregate
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill ddd-aggregate -a claude-code2Manually: put the files in place
~/.claude/skills/ddd-aggregate/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/ddd-aggregate/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill ddd-aggregate -a codex2Manually: put the files in place
.agents/skills/ddd-aggregate/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill ddd-aggregate -a cursor2Manually: put the files in place
.cursor/skills/ddd-aggregate/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install ruvnet/ruflo ddd-aggregate2Manually: put the files in place
.github/skills/ddd-aggregate/SKILL.md1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill ddd-aggregate -a gemini-cli2Platform CLI
gemini skills install https://github.com/ruvnet/ruflo --path plugins/ruflo-ddd/skills/ddd-aggregateManually: put the files in place
.devin/skills/ddd-aggregate/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill ddd-aggregate -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set104
The whole set →Similar
Questions about ddd-aggregate
How to install ddd-aggregate in Claude Code?
Run npx skills add ruvnet/ruflo --skill ddd-aggregate -a claude-code.
What does ddd-aggregate do?
It scaffolds a TypeScript aggregate root entity, an ID value object, a repository interface, domain events, test stubs, and updates the Ruflo domain graph.
What is required before running ddd-aggregate?
The src/<context>/domain/ path must already exist. If it does not, the skill stops and asks to run /ddd-context <context> first.
Source text
SKILL.md · MIT
---
name: ddd-aggregate
description: Scaffold an aggregate root with entity, value objects, repository interface, domain events, and test stubs. Use when adding a new aggregate to an existing bounded context, modeling a new business concept that owns invariants, or generating the boilerplate for an entity + repo + events triplet.
argument-hint: "<context> <aggregate-name>"
allowed-tools: Bash Read Write Edit Grep Glob mcp__plugin_ruflo-core_ruflo__memory_store mcp__plugin_ruflo-core_ruflo__memory_search mcp__plugin_ruflo-core_ruflo__agentdb_hierarchical-store mcp__plugin_ruflo-core_ruflo__agentdb_causal-edge mcp__plugin_ruflo-core_ruflo__hooks_pre-task mcp__plugin_ruflo-core_ruflo__hooks_post-task
---
Scaffold a complete aggregate root inside a bounded context.
Parse `$ARGUMENTS` as `<context-name> <aggregate-name>` (both kebab-case). The context must already exist under `src/`.
## Steps
1. **Validate**: Confirm `src/<context>/domain/` exists. If not, suggest running `/ddd-context <context>` first.
2. **Pre-task hook**: `npx @claude-flow/cli@latest hooks pre-task --description "DDD aggregate: <aggregate-name> in <context>"`
3. **Create aggregate root entity**:
- File: `src/<context>/domain/entities/<aggregate-name>.entity.ts`
- Include: unique ID field, constructor with invariant validation, domain methods that enforce business rules, `equals()` based on identity
- Export a TypeScript class extending or implementing a base `AggregateRoot` interface
4. **Create value objects**:
- File: `src/<context>/domain/value-objects/<aggregate-name>-id.value-object.ts`
- Include: immutable ID value object with factory method and validation
- Add additional value objects as properties of the aggregate suggest them
5. **Create repository interface**:
- File: `src/<context>/domain/repositories/<aggregate-name>.repository.ts`
- Include: `findById`, `save`, `delete` methods
- Use the aggregate root and its ID value object as types
- This is an interface only -- no implementation (infrastructure concern)
6. **Create domain events**:
- File: `src/<context>/domain/events/<aggregate-name>-created.event.ts`
- File: `src/<context>/domain/events/<aggregate-name>-updated.event.ts`
- Include: event name (past tense), timestamp, aggregate ID, payload
7. **Create unit test stubs**:
- File: `src/<context>/domain/entities/<aggregate-name>.entity.test.ts`
- Include: test cases for construction invariants, domain methods, equality
- Use `describe`/`it` with `should [behavior] when [condition]` names
8. **Update barrel exports**: Add new files to the relevant `index.ts` barrel files.
9. **Store in domain model graph**:
```
mcp__plugin_ruflo-core_ruflo__agentdb_hierarchical-store({ key: "domain/context-<context>/aggregate-<aggregate-name>", value: "Aggregate <aggregate-name> (parent: context-<context>)", tier: "semantic" })
mcp__plugin_ruflo-core_ruflo__agentdb_causal-edge({ sourceId: "entity:context-<context>", targetId: "entity:aggregate-<aggregate-name>", relation: "contains" })
mcp__plugin_ruflo-core_ruflo__memory_store({ key: "ddd-aggregate-<context>-<aggregate-name>", value: "AGGREGATE_SUMMARY", namespace: "tasks" })
```
10. **Post-task hook**: `npx @claude-flow/cli@latest hooks post-task --task-id "ddd-aggregate-<aggregate-name>" --success true`
© ruvnet · MIT · ruvnet/ruflo