From talos
How to publish, freeze, and version an API contract under docs/api-contracts/. Consult when the BE Dev needs to publish a contract before FE can start (CLAUDE.md §3.5 + §10).
How this skill is triggered — by the user, by Claude, or both
Slash command
/talos:api-contract-authorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are the BE Dev. Your task introduces or modifies an endpoint that an FE task depends on. CLAUDE.md §10 hard rule: *no FE Dev start on a backend-dependent task until the API contract is `Frozen`*. This skill defines the contract format, the freeze discipline, and the versioning policy.
You are the BE Dev. Your task introduces or modifies an endpoint that an FE task depends on. CLAUDE.md §10 hard rule: no FE Dev start on a backend-dependent task until the API contract is Frozen. This skill defines the contract format, the freeze discipline, and the versioning policy.
docs/api-contracts/ with Status: Frozen, ready for FE to consumeThe kit's format choice is project-wide, declared in docs/SRS.md §3.4.4 API Contract Format. As BE Dev, you do NOT pick the format per task — you read SRS §3.4.4 and use the declared format for the API style your endpoint serves. Mixing formats across endpoints in the same project (e.g., one users.openapi.yaml + one orders.md) is a contract-discipline violation; each API style has a single declared format.
Default formats per API style (from SRS §3.4.4):
| API style | Default format | Acceptable file extensions |
|---|---|---|
| REST (sync HTTP) | openapi-3.1 | .yaml, .yml, .json (with openapi-3.1 tag in info.openapi field) |
| gRPC | proto3 | .proto |
| GraphQL | graphql-sdl | .graphql, .gql |
| Async messaging | asyncapi-2.x | .yaml, .yml, .json (with asyncapi field) |
| Legacy / prototype only | markdown | .md — requires ADR justification per SRS §3.4.4 |
If SRS §3.4.4 declares openapi-3.1 for REST and you're tempted to write endpoint.md because "it's just a prototype," halt and either (a) update the SRS §3.4.4 declaration with an ADR justifying the markdown deviation OR (b) write the contract in the declared OpenAPI format. Don't silently drift.
If SRS §3.4.4 is missing but your task requires an API contract: halt and signal back to the Orchestrator. BA's Phase 1 should have captured the format declaration during ingestion; a missing §3.4.4 indicates an SRS gap that BA must close before BE Dev can proceed. Don't pick a format yourself.
docs/api-contracts/
├── users.openapi.yaml # service-level OpenAPI spec
├── orders.openapi.yaml
├── payments.proto # gRPC IDL
└── search-suggest.md # Markdown contract for one endpoint
Every contract file starts with a header (Markdown, or info/description block for OpenAPI):
Status: Draft | Frozen | Deprecated
Last-Updated: <ISO-8601>
Frozen-By: <agent or person>
Frozen-At: <ISO-8601>
Frozen is the only status FE Dev may consume from. Draft means the BE is still iterating; Deprecated means there's a successor and consumers should migrate.
Whatever format you choose, every endpoint must specify all of:
See references/example.md for a worked Markdown contract.
Draft. Iterate freely; FE is not consuming yet.Status: Frozen, Frozen-At, Frozen-By. Notify the orchestrator (via your plan-update.json).Deprecated with a migration deadline.Frozen contract in place to "fix" something. Freeze means freeze. If you must change it, follow the freeze-break flow.When you discover after freezing that the contract must change:
docs/open-issues.md per CLAUDE.md §6 with state open.Deprecated.resolved. FE tasks resume against the new contract.Status: Frozen is not a contract — FE cannot consume it.Frozen, no edits in place. Period.Frozen requires a real reviewer (peer BE or SA, not yourself).references/example.md — worked Markdown contract.claude/rules/change-synchronization.md §7 — freeze-break flow.claude/rules/parallel-execution.md §4 — BE/FE parallel start gated on contract freezenpx claudepluginhub evolplus/talos --plugin talosCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.