/ddd-aggregate
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 +
Claude Code
$ npx -y skills add ruvnet/ruflo --skill ddd-aggregate --agent claude-code
Codex
$ npx skills add ruvnet/ruflo --skill ddd-aggregate -a codex -y
Cursor
$ npx skills add ruvnet/ruflo --skill ddd-aggregate -a cursor -y
Gemini CLI
$ npx skills add ruvnet/ruflo --skill ddd-aggregate -a gemini-cli -y
GitHub Copilot
$ npx skills add ruvnet/ruflo --skill ddd-aggregate -a github-copilot -y
OpenCode
$ npx skills add ruvnet/ruflo --skill ddd-aggregate -a opencode -y
Windsurf
$ npx skills add ruvnet/ruflo --skill ddd-aggregate -a windsurf -y
SKILL.md
ddd-aggregate.SKILL.mdname: 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`
Read more
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`
📖 RuFlo Explained — Build an AI Team That Plans, Remembers, Tests, and Improves A 14-chapter guide: from the basic idea to a first useful task, then memory, agent teams, plugins, cost and verification. Agent = Model + Harness.
Other skills on ruflo.
More skills from other plugins.
agentmail
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
bmad
Answers BMad questions and recommends the next skill from what is installed. Use when the user asks bmad for help, what to do…
Questions about ddd-aggregate.
- Which coding agents can use ddd-aggregate?
- ddd-aggregate installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

