agents-standards
Standards for authoring SDD plugin agents — frontmatter, self-containment, skill references, and no-user-interaction rules.
OpenAPI contract standards for API specification, versioning, and type generation.
$ npx -y skills add LiorCohen/sdd --skill contract-standards --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/contract-standardsContext preview
The summary Claude sees to decide when to auto-load this skill.
OpenAPI contract standards for API specification, versioning, and type generation.
name: contract-standards description: OpenAPI contract standards for API specification, versioning, and type generation.
Standards for OpenAPI contract components that define API specifications and generate TypeScript types.
---
Contract components are the single source of truth for API types:
1. **Define API shape** in OpenAPI 3.0 YAML 2. **Generate TypeScript types** consumed by server and webapp 3. **Validate API consistency** via Spectral linting 4. **Enable type-safe development** across the stack
---
components/contract[-{name}]/
├── package.json # Build scripts (generate:types, validate)
├── tsconfig.json # TypeScript config for generated types
├── openapi.yaml # OpenAPI 3.0 specification
├── .spectral.yaml # Spectral linting rules (optional)
├── .gitignore # Ignores generated/ directory
└── generated/ # Git-ignored generated output
└── api-types.ts # Generated TypeScript types---
Contract components do not require application config from `components/config/`. They are build-time artifacts, not runtime services. The `contract-scaffolding` skill generates an `openapi.yaml`, `package.json` with type generation scripts, and a `generated/` directory for TypeScript types.
---
openapi: '3.0.3' info: title: Project API version: '1.0.0' description: API description
| Pattern | Example | Use Case | |---------|---------|----------| | `/resources` | `/users` | Collection endpoint | | `/resources/{id}` | `/users/{userId}` | Single resource | | `/resources/{id}/subresources` | `/users/{userId}/orders` | Nested resources |
**Rules:**
Operation IDs become handler function names:
paths:
/users:
get:
operationId: listUsers # -> handleListUsers
post:
operationId: createUser # -> handleCreateUser
/users/{userId}:
get:
operationId: getUser # -> handleGetUser
put:
operationId: updateUser # -> handleUpdateUser
delete:
operationId: deleteUser # -> handleDeleteUser**Rules:**
components:
schemas:
User:
type: object
required:
- id
- email
properties:
id:
type: string
format: uuid
email:
type: string
format: email
name:
type: string
createdAt:
type: string
format: date-time
CreateUserRequest:
type: object
required:
- email
properties:
email:
type: string
format: email
name:
type: string
Error:
type: object
required:
- code
- message
properties:
code:
type: string
message:
type: string**Naming Conventions:**
Define reusable error responses:
components:
responses:
BadRequest:
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/Error'**Health check endpoints are NOT defined in the contract.** They are infrastructure endpoints implemented directly in the Operator layer:
These run on a separate port (e.g., 9090) from the main API.
---
<plugin-root>/fullstack-typescript/system/system-run.sh contract generate-types <component-name>
Server and webapp consume types via workspace dependency:
// In server or webapp
import type { components, paths } from '@project/contract';
// Schema types
type User = components['schemas']['User'];
type CreateUserRequest = components['schemas']['CreateUserRequest'];
// Path types (for typed API clients)
type GetUserPath = paths['/users/{userId}']['get'];---
| Strategy | When to Use | |----------|-------------| | URL path (`/v1/users`) | Breaking changes require new version | | No versioning | Internal APIs, rapid iteration |
For most SDD projects, avoid versioning until you have external consumers.
Track changes in `info.version`:
info: version: '1.0.0' # Bump on breaking changes
---
<plugin-root>/fullstack-typescript/system/system-run.sh contract validate <component-name>
Uses `.spectral.yaml` for custom rules (optional).
1. **All paths have operationId** 2. **All schemas have required fields defined** 3. **Response
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.