DDD-style entity modeling from requirements including extraction, attributes, relationships, and state machines. Use when extracting entities, defining attributes, modeling relationships, or when you see "entity", "data model", "relationship", "cardinality", "domain model", or "state machine".
Extracts domain entities from requirements and models them with attributes, relationships, and state machines using DDD principles.
/plugin marketplace add deepeshBodh/human-in-loop/plugin install deepeshbodh-humaninloop-plugins-humaninloop@deepeshBodh/human-in-loopThis skill inherits all available tools. When active, it can use any tool Claude has access to.
RELATIONSHIP-PATTERNS.mdSTATE-MACHINES.mdVALIDATION-RULES.mdscripts/validate-model.pyExtract and model domain entities from requirements using Domain-Driven Design principles. This skill covers entity identification, attribute definition, relationship modeling, and state machine documentation.
Look for entities in:
| Source | Pattern | Example |
|---|---|---|
| User stories | "As a [Role]..." | User, Admin, Guest |
| Subjects | "The [Entity] must..." | Task, Order, Product |
| Actions | "...create a [Entity]" | Comment, Message, Report |
| Possessives | "[Entity]'s [attribute]" | User's profile, Order's items |
| Status mentions | "[Entity] status" | TaskStatus, OrderState |
IF concept has its own lifecycle → Entity
IF concept only exists within another → Attribute
IF concept connects two entities → Relationship (possibly join entity)
IF concept has just one value → Attribute
Examples:
- "user email" → Attribute of User (just one value)
- "user address" → Could be Entity (if reused) or Attribute (if embedded)
- "order items" → Separate entity (has own lifecycle)
- "task status" → Enum/attribute (limited values)
When modeling in brownfield projects:
| Status | Meaning | Action |
|---|---|---|
[NEW] | Entity doesn't exist | Create full definition |
[EXTENDS EXISTING] | Adding to existing entity | Document new fields only |
[REUSES EXISTING] | Using existing as-is | Reference only |
[RENAMED] | Avoiding collision | Document new name + reason |
Every entity typically needs:
| Field | Type | Required | Description |
|---|---|---|---|
| id | Identifier | Yes | Primary key |
| createdAt | Timestamp | Yes | Creation time |
| updatedAt | Timestamp | Yes | Last modification |
| deletedAt | Timestamp | No | Soft delete marker |
| Attribute | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| id | UUID | Yes | auto-generated | Unique identifier |
| email | Email | Yes | - | User's email address |
| name | Text(100) | No | null | Display name |
| role | Enum[admin,member,guest] | Yes | member | Access level |
| isVerified | Boolean | Yes | false | Email verified flag |
Use conceptual types (not database-specific):
| Conceptual Type | Description |
|---|---|
Identifier / UUID | Unique identifier |
Text / Text(N) | String with optional max length |
Email | Email format string |
URL | URL format string |
Integer | Whole number |
Decimal / Decimal(P,S) | Decimal with precision |
Boolean | True/false |
Timestamp | Date and time |
Date | Date only |
Enum[values] | Fixed set of values |
JSON | Structured data |
Reference(Entity) | Foreign key reference |
Mark sensitive fields:
| Attribute | Type | Required | PII | Description |
|-----------|------|----------|-----|-------------|
| email | Email | Yes | **PII** | User's email |
| phone | Text(20) | No | **PII** | Phone number |
| ssn | Text(11) | No | **PII-SENSITIVE** | Social security |
Relationships connect entities with defined cardinality: One-to-One (1:1), One-to-Many (1:N), or Many-to-Many (N:M).
See RELATIONSHIP-PATTERNS.md for detailed patterns, join entity examples, and documentation formats.
## Entity Relationships
User ──1:N──▶ Task (owns) User ──1:N──▶ Session (has) User ◀──N:M──▶ Project (via ProjectMember) Task ──N:1──▶ Project (belongs to)
Entities with status fields need state transition documentation.
See STATE-MACHINES.md for patterns, diagram formats, and common workflows.
Model state machines when:
status or state fieldConstraints and validation rules ensure data integrity.
See VALIDATION-RULES.md for constraint patterns, format validations, and business rule documentation.
# Data Model: {feature_id}
> Entity definitions and relationships for the feature.
> Generated by Domain Architect.
---
## Summary
| Entity | Attributes | Relationships | Status |
|--------|------------|---------------|--------|
| User | 8 | 3 | [EXTENDS EXISTING] |
| Session | 5 | 1 | [NEW] |
| ...
---
## Entity: User [EXTENDS EXISTING]
> Existing entity extended with authentication fields.
### Attributes
| Attribute | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| passwordHash | Text | Yes | - | Hashed password |
| lastLoginAt | Timestamp | No | null | Last login time |
### Existing Attributes (Not Modified)
| Attribute | Type | Description |
|-----------|------|-------------|
| id | UUID | Existing primary key |
| email | Email | Existing email field |
---
## Entity: Session [NEW]
> User authentication session.
### Attributes
| Attribute | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| id | UUID | Yes | auto | Session identifier |
| userId | Reference(User) | Yes | - | Owning user |
| token | Text(255) | Yes | - | Session token |
| expiresAt | Timestamp | Yes | - | Expiration time |
| createdAt | Timestamp | Yes | auto | Creation time |
### Relationships
| Relationship | Type | Target | Description |
|--------------|------|--------|-------------|
| user | N:1 | User | Session belongs to user |
---
## Relationships
[Relationship documentation]
---
## State Machines
[State machine documentation if applicable]
---
## Traceability
| Entity | Source Requirements |
|--------|---------------------|
| User | FR-001, FR-002, US#1 |
| Session | FR-003, US#2 |
Before finalizing entity model, verify:
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.