La guía del CLI
Una herramienta que lee la librería que tú tienes instalada. No genera plantillas a ciegas: parsea tus .d.ts con la API del compilador de TypeScript, así que describe tu proyecto y no un ideal.
Instalar
Como dependencia de desarrollo. No es una dependencia de ejecución: tu aplicación no lo necesita en producción.
npm install -D @nestjslatam/ddd-cli
Orientarse: ddd list
Lo primero que conviene hacer en un proyecto que no conoces. Imprime cada pieza que exporta tu versión de la librería, agrupada por cómo se usa.
extend hereda de ella
implement cumple la interfaz
compose el agregado delega en ella
use se llama directamente
Aggregates
compose AggregateValidationOrchestrator
extend DddAggregateRoot extends AggregateRoot
Value Objects
extend DddValueObject extends AbstractNotifyPropertyChanged
extend IdValueObject extends DddValueObject
extend NumberValueObject extends DddValueObject
extend StringValueObject extends DddValueObject
…
66 símbolos · ddd explain <nombre> para cualquiera de ellos
Esa división en cuatro es casi todo lo que hay que entender del diseño. compose es la que más se confunde: BrokenRulesManager, ValidatorRuleManager y TrackingStateManager son colaboradores que un agregado tiene, no bases de las que se hereda.
Andamiar: new y extend
npx ddd new value-object OrderTotal --kind number
npx ddd new validator OrderTotalRules --for OrderTotal
npx ddd extend AbstractRuleValidator ShippingRules
extend deriva el contrato de las declaraciones instaladas, así que funciona con bases que nunca ha visto — incluida una que hayas escrito tú en tu propio fork.
No escribe nada antes de que veas la lista y confirmes:
Sku extends StringValueObject
Ficheros bajo src
create shared/valueobjects/sku.ts value-object
1 nuevo · 0 ya existentes
¿Escribir este fichero? (s/N)
Y todo lo que emite pasa su propia auditoría: las plantillas no son sólo plausibles, cumplen las cuatro reglas que validate aplica.
Auditar: ddd validate
Cuatro reglas, cada una un error que la librería hace fácil y silencioso. Los cuatro compilan. Los cuatro pasan los tests.
Un create() que no comprueba isValid. Devuelve objetos inválidos sin error.
Un override que no encadena. Los validadores de la base desaparecen.
Leer un campo propio dentro de addValidators(). Revienta en cada construcción — así se publicó rota NumberValueObject durante dos versiones.
Un handler sin commit(). El comando triunfa y ningún evento se despacha.
Además señala las llamadas a isValid que no cuadran con tu versión instalada, que es la parte mecánica de migrar de la 2.x a la 3.x:
error 3 Order.create() llama a isValid(), pero la librería
instalada lo declara como getter
Códigos de salida: 0 limpio, 1 con violaciones. Se puede poner en CI tal cual.
Servidor MCP, sin clave de API
Si ya trabajas en Claude Code, Codex o Cursor, ese agente tiene modelo y credenciales. El CLI no necesita los suyos.
claude mcp add ddd -- npx -y @nestjslatam/ddd-cli mcp
Aparecen siete herramientas: ddd_list, ddd_describe, ddd_new, ddd_extend, ddd_validate, ddd_aggregate_schema y ddd_render_aggregate.
El reparto de trabajo es lo importante. El agente decide la frontera del agregado, las invariantes y los nombres — criterio. El CLI hace lo que un modelo hace mal: leer las declaraciones instaladas con exactitud, renderizar de forma determinista y auditar contra el idioma.
Y hay un bucle de corrección que merece señalar: el agente produce una especificación, el CLI la renderiza, y una especificación que no cumple el esquema vuelve con los problemas campo por campo, así que el agente se corrige solo sin que haya nadie mirando.
Nada toca el disco sin permiso
Ninguna llamada escribe salvo que pase write: true, y aun así jamás sobrescribe un fichero existente. Un agente trabajando sin supervisión no debe pisar código de dominio escrito a mano.
Todos los comandos
Cinco de los siete no tocan un modelo jamás.
alias: ls
Cada estereotipo, agrupado, con su rol. Sin modelo.
alias: why
Contrato, qué implementar, un ejemplo. Necesita modelo salvo con --raw.
alias: n
Value object, validador, evento, excepción, agregado o enum. Sin modelo.
alias: x
Subclase con los miembros abstractos esbozados. Sin modelo.
alias: check
Las cuatro reglas del idioma. Sin modelo, apto para CI.
alias: ga
Modela un agregado desde una descripción en prosa. Necesita modelo.
Servidor MCP para un agente de IA. Sin clave de API.
La guía extendida
Construye el dominio de transporte marítimo de Eric Evans desde cero hasta diez ficheros que compilan, comando a comando. Cada línea de salida se produjo ejecutando la herramienta, no se escribió de memoria.
