agents-standards
Standards for authoring SDD plugin agents — frontmatter, self-containment, skill references, and no-user-interaction rules.
Scaffolds Node.js/TypeScript backend components with CMDO architecture, driven by component settings.
$ npx -y skills add LiorCohen/sdd --skill backend-scaffolding --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/backend-scaffoldingContext preview
The summary Claude sees to decide when to auto-load this skill.
Scaffolds Node.js/TypeScript backend components with CMDO architecture, driven by component settings.
name: backend-scaffolding description: Scaffolds Node.js/TypeScript backend components with CMDO architecture, driven by component settings. user-invocable: false
Creates a Node.js/TypeScript backend component following the CMDO (Config, Model, DAL, Operator) architecture. Scaffolding is driven by **component settings** defined in `sdd/sdd-settings.yaml`. Delegate to the `techpack-settings` skill for the authoritative server settings schema — it accepts a component type (`server`) and returns the typed settings object including `server_type`, `databases`, `provides_contracts`, and framework defaults.
Use when creating server components. Supports multiple named instances (e.g., `main-server`, `background-worker`).
Server components are scaffolded based on their settings in `sdd/sdd-settings.yaml`. Delegate to the `techpack-settings` skill for the complete server settings schema and defaults — it returns `server_type` (express/fastify/nestjs), `databases` (array of referenced database component names), `provides_contracts` (array of contract component names), and framework-specific configuration.
// Pseudocode for settings-driven scaffolding
const scaffoldServer = async (component: ServerComponent): Promise<void> => {
// Always scaffold: core structure, operator lifecycle, model layer
await scaffoldCore(component);
// Conditional: HTTP routes (only if server provides contracts)
if (component.settings.provides_contracts.length > 0) {
await scaffoldRoutes(component, component.settings.provides_contracts);
}
// Conditional: API clients (only if server consumes contracts)
if (component.settings.consumes_contracts.length > 0) {
await scaffoldApiClients(component, component.settings.consumes_contracts);
}
// Conditional: DAL layer per database
for (const db of component.settings.databases) {
await scaffoldDAL(component, db);
}
};components/servers/<name>/
├── package.json
├── tsconfig.json
├── .gitignore
└── src/
├── index.ts # Entry point
├── config/
│ ├── index.ts
│ └── load_config.ts # Config loading
├── operator/
│ ├── index.ts
│ ├── create_operator.ts # Operator factory
│ ├── lifecycle_probes.ts # Health/ready endpoints (port 9090)
│ ├── logger.ts # Structured logging
│ ├── metrics.ts # Metrics collection
│ └── state_machine.ts # Lifecycle state machine
├── controller/
│ ├── index.ts
│ └── create_controller.ts # Controller factory
└── model/
├── index.ts
├── dependencies.ts # Dependency injection interface
├── definitions/
│ └── index.ts # Empty barrel
└── use-cases/
└── index.ts # Empty barrel└── src/
└── operator/
└── create_http_server.ts # HTTP server setup (port 3000)└── src/
└── controller/
└── http_handlers/
└── index.ts # Route handlers for contractsFor each database in `databases`, creates:
└── src/
└── dal/
└── <database-name>/
└── index.ts # DAL functions for this database
└── operator/
└── create_database_<name>.ts # Database connection setupFor each contract in `consumes_contracts`, generates API client from contract spec.
| Layer | Purpose | Location | |-------|---------|----------| | **C**onfig | Configuration loading and validation | `src/config/` | | **M**odel | Business logic, definitions, use cases | `src/model/` | | **D**AL | Data Access Layer, database operations | `src/dal/` | | **O**perator | Application lifecycle, servers, telemetry | `src/operator/` |
Plus **Controller** for HTTP request handling.
Servers live at `components/servers/<name>/`:
| Component Name | Directory | |----------------|-----------| | `main-server` | `components/servers/main-server/` | | `background-worker` | `components/servers/background-worker/` |
| Variable | Description | |----------|-------------| | `{{PROJECT_NAME}}` | Project name | | `{{PROJECT_DESCRIPTION}}` | Project description | | `{{PRIMARY_DOMAIN}}` | Primary business domain | | `{{SERVER_NAME}}` | Server component name |
All templates are colocated in this skill's `templates/` directory:
skills/components/backend/backend-scaffolding/templates/
├── package.json
├── tsconfig.json
├── .gitignore
└── src/
├── index.ts
├── config/
├── operator/
├── controller/
├── model/
└── dal/When scaffolding a server component, the config section is generated based on settings.
Settings:
- name: main-server
type: server
settings:
server_type: api
databases: [primary-db]
provides_contracts: [public-api]Generated config (`components/config/envs/default/config.yaml`):
main-server:
port: 3000
probesPort: 9090
logLevel: info
databases:
primary-db:
host: localhost
port: 5432
name: myapp
ssl: falseSettings:
- name: background-worker
type: server
settings:
server_type: worker
databases: []
provides_contracts: []
consumes_contracts: [public-api]Generated config:
background-worker: probesPort: 9090 logLevel: info qu
Structure for AI-assisted development AI coding assistants are powerful but chaotic. You prompt, you get code, but then what?
Repo: LiorCohen/sdd
Standards for authoring SDD plugin agents — frontmatter, self-containment, skill references, and no-user-interaction rules.
Standards for authoring SDD plugin commands — frontmatter, user interaction, skill/agent invocation, CLI integration, and output formatting.
Create a commit following repository guidelines with proper versioning and changelog updates.
Two-step self-review at every task lifecycle phase. Step 1 (this skill) runs in-context to gather session signals — files read vs grepped, user pushback, build…
D2 diagramming language reference for architecture diagrams, sequence diagrams, grid layouts, SQL tables, and class diagrams. Produces .d2 files rendered via…
Writes and maintains user-facing documentation for the SDD plugin. Proactively detects when docs are out of sync with plugin capabilities.