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.
Claude Code
$ npx -y skills add LiorCohen/sdd --skill backend-scaffolding --agent claude-code
Codex
$ npx skills add LiorCohen/sdd --skill backend-scaffolding -a codex -y
Cursor
$ npx skills add LiorCohen/sdd --skill backend-scaffolding -a cursor -y
Gemini CLI
$ npx skills add LiorCohen/sdd --skill backend-scaffolding -a gemini-cli -y
GitHub Copilot
$ npx skills add LiorCohen/sdd --skill backend-scaffolding -a github-copilot -y
OpenCode
$ npx skills add LiorCohen/sdd --skill backend-scaffolding -a opencode -y
Windsurf
$ npx skills add LiorCohen/sdd --skill backend-scaffolding -a windsurf -y
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?
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…
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…
D2 diagramming language reference for architecture diagrams, sequence diagrams, grid layouts, SQL tables, and class diagrams.…
Writes and maintains user-facing documentation for the SDD plugin. Proactively detects when docs are out of sync with plugin…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.