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.
Claude Code
$ npx -y skills add LiorCohen/sdd --skill contract-standards --agent claude-code
Codex
$ npx skills add LiorCohen/sdd --skill contract-standards -a codex -y
Cursor
$ npx skills add LiorCohen/sdd --skill contract-standards -a cursor -y
Gemini CLI
$ npx skills add LiorCohen/sdd --skill contract-standards -a gemini-cli -y
GitHub Copilot
$ npx skills add LiorCohen/sdd --skill contract-standards -a github-copilot -y
OpenCode
$ npx skills add LiorCohen/sdd --skill contract-standards -a opencode -y
Windsurf
$ npx skills add LiorCohen/sdd --skill contract-standards -a windsurf -y
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?
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.