api-contract-author
How to publish, freeze, and version an API contract under docs/api-contracts/.
Skill by evolplus
Chalk Labs
Need help deploying api-contract-author?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/evolplus-api-contract-author
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, backend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/api-contract-author
What's inside
- Skill name
api-contract-author- Description
- 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).
- License
- Apache-2.0
- Instructions
- 119 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- example.md · references/
SKILL.md (first lines)
# API Contract Author ## When to use 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. ## Inputs and outputs - **Inputs:** the SRS requirement(s) the endpoint serves, the architecture decisions that constrain it (auth, observability, error model) - **Outputs:** a contract file under `docs/api-contracts/` with `Status: Frozen`, ready for FE to consume ## Format — read from SRS §3.4.4, never decide per task The 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. ## Naming and Status ``` 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` / `x-contract-status` block for OpenAPI, AsyncAPI, GraphQL SDL, or Proto): ``` Status: Extracted | 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. `Extracted` means SA brownfield extract created the contract from observed code; it is useful evidence but not a governed contract until BE Dev validates it and freezes a revision. `Deprecated` means there's a successor and consumers should migrate. ## Brownfield extracted contracts When SA extract mode creates `Status: Extracted` contract stubs, BE Dev later treats them as inputs, not authority: 1. Read the extracted contract plus the source evidence it cites. 2. Validate every operation/channel/message against the implementation. 3. Resolve TODO schema gaps or file open issues where source evidence is insufficient. 4. Convert `Extracted` to `Draft`, revise as needed, then freeze through the normal procedure. 5. Never let FE Dev consume `Extracted` contracts directly. ## Required content per endpoint Whatever format you choose, every endpoint must specify all of: 1. **Path and method** (and protocol if not REST) 2. **Auth requirement** — required scopes / roles, or "public" with explicit rationale 3. **Request shape** — fully typed: every field's type, required-or-optional, constraints (length, format, enum) 4. **Response shape** — same level of detail; per status code (200 / 201 / 400 / 401 / 403 / 404 / 409 / 422 / 500) 5. **Error model** — the error body shape (code, message, details). Standardize per service, not per endpoint. 6. **Idempotency** — for write methods (POST/PUT/PATCH/DELETE), whether the endpoint is idempotent and how clients signal it (Idempotency-Key header, deterministic resource ID, etc.) 7. **Rate limit** — per-user and global 8. **Pagination** — for list endpoints, the cursor / page model and the response envelope 9. **Examples** — at least one happy-path request + response, and one error response per non-200 status the endpoint can return See [`references/example.md`](./references/example.md) for a worked Markdown contract. ## Procedure to publish 1. Draft the contract while you implement; don't wait until the implementation is "done." 2. Status starts at `Draft`. Iterate freely; FE is not consuming yet. 3. Validate the contract against your real implementation: every status code in the contract is one your code can return; every field shape matches what the code emits. 4. Run the contract through the agreed-upon lint / validator (Spectral for OpenAPI, buf for Proto, none for Markdown — but a peer reviewer reads it). 5. Set `Status: Frozen`, `Frozen-At`, `Frozen-By`. Notify the orchestrator (via your `plan-update.json`). 6. From this moment, treat the contract as immutable for this task. Any change goes through the freeze-break flow below. ## Versioning policy - **Add-only changes** (new optional field, new endpoint, new optional query param) — bump minor version, no break. - **Breaking changes** (removed field, changed type, renamed enum value, stricter validation) — bump major version, publish a new contract file alongside the old, mark old as `Deprecated` with a migration deadline. - **Never** modify a `Frozen` contract in place to "fix" something. Freeze means freeze. If you must change it, follow the freeze-break flow. ## Freeze-break flow (CLAUDE.md §7) When you discover after freezing that the contract must change: 1. Stop. Do not edit the frozen contract in place. 2. Raise a blocking issue in `docs/open-issues.md` per CLAUDE.md §6 with state `open`. 3. The Orchestrator halts dependent FE tasks (per CLAUDE.md §7). 4. You produce a new revision: bump the version, publish as a new file, mark the old `Deprecated`. 5. Re-freeze the new revision. Open issue moves to `resolved`. FE tasks resume against the new contract. ## Hard rules - A contract without `Status: Frozen` is not a FE-consumable contract. `Extracted` and `Draft` are evidence/work-in-progress only. - Once `Frozen`, no edits in place. Period. - Every status code your endpoint can emit is in the contract. Codes that are in the code but not the contract are bugs (one of them is wrong). - Errors return a standard error body shape across the service. Per-endpoint snowflake error shapes are a refactor target, not a contract feature. - `Frozen` requires a real reviewer (peer BE or SA, not yourself). - Every request string field that the service persists carries a `maxLength` that fits its column (from architecture §6's width-boundary row). An unbounded persisted string — or an example longer than the column — ships a production `value too long` that no test with short fixtures catches. Reject over-length with a 4xx in the contract, not a 500 from the database. ## References - [`references/example.md`](./references/example.md) — worked Markdown contract - CLAUDE.md §3.5 — BE Dev role and contract publishing - CLAUDE.md §10 — hard rules (FE blocked on Frozen contract) - `.claude/rules/change-synchronization.md` §7 — freeze-break flow - `.claude/rules/parallel-execution.md` §4 — BE/FE parallel start gated on contract freeze
From evolplus/talos, Apache-2.0.
More from evolplus/talos
- 0.631score
be-framework-coding-standard
evolplus
Standardized backend implementation guidance for BE Dev using the SRS-declared Backend-Track and Backend-Framework.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
design-system-author
evolplus
How to build a Figma Foundation page (design tokens + reusable components) BEFORE drawing screens, so spacing / text sizes / button styles / element alignment…
SkillAFreshness: A★ 8Claude Code +9 - 0.628score
adr-author
evolplus
How to write an Architecture Decision Record under docs/decisions/.
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
ba-mode-external-source
evolplus
BA Phase 1.C ingestion mode (ingest-from-external-source).
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
ba-post-implementation
evolplus
BA Phase 5 — post-implementation completeness verification (UI tasks).
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
ba-design-completeness
evolplus
BA Phase 3 — post-sign-off design completeness verification.
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
ba-iteration-planning
evolplus
BA Phase 4 — iteration dispatch planning.
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
ba-mode-reverse-engineer
evolplus
BA Phase 1.E ingestion mode (reverse-engineer-from-code) — brownfield onboarding Stage 3.
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
backend-logging-traceability
evolplus
Backend logging and traceability standard for BE Dev.
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
codebase-inventory
evolplus
Produce the deterministic Tier-1 inventory of an existing codebase — routes/RPC/jobs, broker channels, persistent schema, external egress, deployables…
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
data-lifecycle-contracts
evolplus
How SA identifies gate fields and cross-component column-write contracts in the data model, and documents them in docs/architecture.md §6 so BE/FE Dev know…
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
ba-mode-requirements-folder
evolplus
BA Phase 1.F ingestion mode (ingest-from-requirements-folder) — greenfield with fragmented upstream.
SkillAFreshness: A★ 8Claude Code +9
Signals
- Stars
- 8
- Forks
- 0
- Open issues
- 1
- Last commit (this folder)
- Oct 12, 2026 (19 days ago)
- Last release
- Oct 12, 2026 (19 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/evolplus/talos
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from evolplus
- 0.631score
be-framework-coding-standard
evolplus
Standardized backend implementation guidance for BE Dev using the SRS-declared Backend-Track and Backend-Framework.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
design-system-author
evolplus
How to build a Figma Foundation page (design tokens + reusable components) BEFORE drawing screens, so spacing / text sizes / button styles / element alignment…
SkillAFreshness: A★ 8Claude Code +9 - 0.628score
adr-author
evolplus
How to write an Architecture Decision Record under docs/decisions/.
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
ba-mode-reverse-engineer
evolplus
BA Phase 1.E ingestion mode (reverse-engineer-from-code) — brownfield onboarding Stage 3.
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
ba-iteration-planning
evolplus
BA Phase 4 — iteration dispatch planning.
SkillAFreshness: A★ 8Claude Code +9 - 0.626score
ba-design-completeness
evolplus
BA Phase 3 — post-sign-off design completeness verification.
SkillAFreshness: A★ 8Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get api-contract-author running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
api-contract-author skill. Agent Mart. https://agentmart.dev/skills/evolplus-api-contract-author (last updated 2026-10-24)