Skip to content
Back to skills

Interface Contracts

ASecurity

How to freeze and arbitrate the interface between parallel implementers. Use when coordinating backend and frontend work on the same story.

  • 100 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added August 31, 2026
ai-agentsgofrontendbackend

Security analysis

A100/100

Scanned August 31, 2026

npx -y skills add Inebrio/Routerly --skill interface-contracts --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Interface Contracts?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Interface Contracts
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/inebrio-interface-contracts/badge)](https://www.skillsdirectory.com/skills/inebrio-interface-contracts)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: interface-contracts
description: How to freeze and arbitrate the interface between parallel implementers. Use when coordinating backend and frontend work on the same story.
---

# Interface contracts

Two implementers working at once fail in exactly one way: each assumes a
different shape at the line where their work meets. Freezing that line
before either starts is the whole job.

## What a contact point is

Anywhere data crosses between the people working in parallel: an HTTP
endpoint, a shared type, a config key, a file format, an event, an exit
code, an error string a caller matches on.

## Freezing one

A contract is frozen when both sides could implement against it without
asking a question. That means, for an endpoint:

- method and path, exactly as it will ship
- request shape, with field names and types
- response shape for success, with field names and types
- status codes, including the failure ones
- error body shape
- permission or auth required
- pagination, ordering, and what an empty result looks like

Vague is worse than wrong. `returns the list of items` is not a contract:
one side ships `{items: []}`, the other reads `[]`, and nobody finds out
until integration.

Shared types are the cheapest contract in a typed monorepo: define the type
once in the shared package, have both sides import it, and the compiler
enforces what a document cannot.

## Sequencing

Give the type or interface definition to one side as its first task and let
the other consume it. When both must start now, write the contract into the
blueprint and hold both to it verbatim.

## Arbitration

When the two sides disagree mid-flight:

1. The frozen contract wins. Neither side changes it unilaterally.
2. If the contract is genuinely wrong, decide the new shape, write it down,
   and tell both sides in the same message. Never let two versions coexist.
3. Prefer the change that keeps the consumer honest: an optional field is
   cheaper than a renamed one, a new endpoint is cheaper than a repurposed
   one.

## What is not yours to decide

- A gap in the plan goes back to whoever wrote the plan.
- A conflict with another story in flight goes up to whoever owns the
  dependency graph.
- A change to what the story asks for is not negotiable at this level.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.