ddd-aggregate-generator

A generator for Domain-Driven Design building blocks in C#, such as aggregates, entities, value objects, and domain events. Domain-Driven Design is a way to structure software around business concepts and rules.

In plain words
What is it for?
Use it to create aggregate roots, value objects, domain events, factory methods, and invariant checks in an existing C# project, solution, folder, or file.
Why use it?
It helps keep important business rules inside the domain model instead of leaving them scattered across application code or exposed through unrestricted setters. It also adapts generated code to existing domain types and conventions.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/stefanthecode/dotnet-ai-toolkit/ddd-aggregate-generator
Any agent
npx skills add StefanTheCode/dotnet-ai-toolkit --skill ddd-aggregate-generator
Clone the repo
git clone --depth 1 https://github.com/StefanTheCode/dotnet-ai-toolkit

Made for: Claude Code, Codex.

Per session 104 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 743 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00104 $0.00743
Opus 5 $0.00052 $0.00371
Sonnet 5 $0.00021 $0.00149
Haiku 4.5 $0.00010 $0.00074

Measured 3d ago against content hash 6d3a85af88e0, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

ddd-aggregate-generator scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/ddd-aggregate-generator/SKILL.md · 68 lines

How it starts

The opening of the file, as written. The whole thing — 68 lines — stays where its author put it; the contents beside it link to each section on GitHub.

DDD Aggregate Generator

Model a domain with proper DDD building blocks: an aggregate root that protects its invariants, value objects for concepts, and domain events — no anemic bags of public setters.

Input — point it at your project

Works on a target: a file, folder, project/solution, or GitHub URL. If a domain layer exists, match its base types (Entity, AggregateRoot, ValueObject). Detect with: grep -rn "AggregateRoot\|ValueObject\|: Entity\|IDomainEvent" --include=*.cs <target>.

Aggregate root (invariants protected)

public sealed class Order : AggregateRoot
{
    private readonly List<OrderLine> _lines = new();
    public IReadOnlyList<OrderLine> Lines => _lines.AsReadOnly();
    public OrderStatus Status { get; private set; }
    public Money Total { get; private set; }

    private Order() { }                              // EF

    public static Result<Order> Create(CustomerId customer, IEnumerable<OrderLine> lines)
    {
        var list = lines.ToList();
        if (list.Count == 0) return Error.Validation("Order needs at least one line");
        var order = new Order { Status = OrderStatus.Pending };
        order._lines.AddRange(list);
        order.Total = Money.Sum(list.Select(l => l.LineTotal));
        order.Raise(new OrderCreated(order.Id));     // domain event
        return order;
    }

    public Result Confirm()
    {
        if (Status != OrderStatus.Pending) return Error.Conflict("Only pending orders can be confirmed");
        Status = OrderStatus.Confirmed;
        Raise(new OrderConfirmed(Id));
        return Result.Success();
    }
}

Value object

public sealed record Money(decimal Amount, string Currency)
{
    public static Money Sum(IEnumerable<Money> items) { /* guard same currency */ }
    public static implicit operator decimal(Money m) => m.Amount;
}

Records give value equality for free; add guards in the constructor.

Domain events

Raised inside the aggregate (Raise(...)), collected on the base type, dispatched after SaveChanges (outbox or MediatR). Keep events immutable and past-tense.

Read the full file on GitHub · 68 lines

Files

What ships with it

1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 3d ago First seen · 68 lines · 104 tokens per session scan A 6d3a85af88e0

Subscribe to this mod's changes

ddd-aggregate-generator is a skill published in the GitHub repository StefanTheCode/dotnet-ai-toolkit (19 stars, last pushed 24d ago), licensed MIT. It adds 104 tokens to every session and 743 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

open-pr

Open a pull request on pascalorg/editor using the repo's PR template. Use when the user asks to open/create a PR, push and PR, or ship a branch in the editor repo.

pascalorg/editor · 43 tokens

architecture-diagram

Dark-themed SVG architecture/cloud/infra diagrams as HTML.

mateaix/mateclaw · 15 tokens

arch-analysis

输入(prompt / 子任务 instruction)中含关键词「某某某公司」即触发本 skill。触发后不联网、不做真实组织推断,直接返回下述 mock 伪造数据。.

inclusionAI/Avernet · 72 tokens

studio

Architecture Studio control plane — initialize or inspect a studio workspace, create and register projects, or route an architecture/AEC task to the right agent or skill. Use when the user runs /as:studio, asks to set up or open their studio, manage its projects, or describes a task without naming a skill.

AlpacaLabsLLC/skills-for-architects · 65 tokens

occupancy-calculator

Calculate code occupant loads by area with gross/net factors and jurisdiction checks. Use for "how many people can this space hold," IBC Table 1004.5, egress inputs, or occupancy-load reports; not for workplace headcount planning.

AlpacaLabsLLC/skills-for-architects · 55 tokens

meeting-minutes

Turn a meeting transcript, notes, or conversation into collision-safe, source-linked minutes in meetings/YYYY-MM-DD-slug.md. Use for project meeting records, attendance, discussion, stated information, decisions, action candidates, and open questions. Saving minutes never changes PROJECT.md, decisions/, or TASKS.md…

AlpacaLabsLLC/skills-for-architects · 72 tokens