DETERMINISTIC BY DESIGN

Keep your
coding agents honest.

Write your requirements as durable specs with permanent IDs. Spec Engine binds them to the real code across every repo and catches drift in CI, before it ships.

verified drift broken caught in CI, per requirement
specs/billing.spec.md
## [SPEC-0042] Refunds are idempotent
Replaying a refund with the same key
must never issue a second refund.
implworker/refunds/handler.ts:44agent·Claude
testworker/refunds/handler.test.tsci·unit
bound across 3 repos VERIFIED
QUICK START
$ bun add -g @spec-engine/spec-engine
WHY IT HOLDS

Spec Engine treats a requirement like a machined part: stamped with a permanent ID, bound to the code that implements it, and measured continuously for drift.

DETERMINISTIC

A spec resolves to one answer: implemented, verified, drifted, or broken. No ambiguity, no vibes.

MECHANICAL

Specs clamp to code like tooling to a workpiece. Move the code, the binding follows or flags.

TRUSTWORTHY

CI is the referee. Drift is caught before it ships, not discovered in production a quarter later.

WORKS WITH YOUR PRDs

PRDs are great. They just don't live past production.

We're not replacing your PRD. But the day you ship, it stops keeping up. The fix QA found never made it back in. The quick customer request got deployed to the web app and forgotten on mobile. Six months on, the doc describes a product you no longer have.

Specs in Spec Engine live past production. Every one is versioned, and it only changes by being superseded or removed on purpose, never by quietly falling out of sync.

KICKOFF BUILD QA SHIP +6 MONTHS
PRD
QA fix not added
OUT OF DATE
Spec
v1
v2
v3
the PRD captures intent at kickoff · the spec keeps it true, versioned, long after ship
HOW IT WORKS

Four moving parts, one source of truth

01
Write the spec

Capture each requirement as a durable spec. Spec Engine stamps it with a permanent ID that never gets reused.

02
Bind it to code

Tag the code and tests that satisfy it with @spec(ID). The binding follows refactors across repos.

03
Verify in CI

Every run records who implemented each requirement and who verified it with tests, per repo.

04
Catch drift

The moment an agent or human drops or contradicts a requirement, the gate blocks the merge.

THE SOURCE OF TRUTH

See every requirement's real status

One coverage matrix across the whole platform: who implemented each requirement in source, who verified it with tests, and where it has drifted onto an outdated version.

REQUIREMENT
web
api
worker
mobile
cli
STATUS
SPEC-0011 Rate limit: 100 req / min / key
S
VERIFIED
SPEC-0042 Refunds are idempotent
S
DRIFT
SPEC-0014 Exports scoped to the tenant
S
BROKEN
SPEC-0002 PII never logged in plaintext
S
VERIFIED
verified S src only T test only none
PLATFORM-WIDE CONSISTENCY

One requirement. Every surface.

Changes used to be filed per service: an issue for the API, one for the web app, one for mobile. Then you forget the internal admin and the support tools. Then the customer portal, and now it's broken.

Not with Spec Engine.

THE OLD WAY · ONE TICKET PER SERVICE
APIISSUE-2101filed
Web appISSUE-2102filed
MobileISSUE-2103filed
Internal adminforgotten
Support toolsforgotten
Customer portalSHIPPED BROKEN
[SPEC-0042]Refunds are idempotent
API VERIFIED
Web app VERIFIED
Mobile VERIFIED
Internal admin VERIFIED
Support tools VERIFIED
Customer portal VERIFIED
one spec · every surface bound and verified · nothing forgotten
DRIFT GATE

Catch drift before it ships.

Don't let your agent gaslight you into thinking you never wrote the requirement.

A requirement that quietly disappears without being superseded is indistinguishable from an agent dropping it. Agents can't tell intent from accident, so the CI gate holds the merge, and the audit trail shows exactly who wrote it and when.

Supersession is what lets every agent on the platform tell drift apart from intention.

MERGE BLOCKED PR #482
specs/billing.spec.md
− ## [SPEC-0042] Refunds are idempotent
worker/refunds/handler.ts
− // @spec(SPEC-0042)
no supersedes record found · silent drop
WHAT YOU GET

The precision of a principal engineer

For people who know exactly what they want. You set the requirement; Spec Engine holds everyone to it, agent or human.

[ ID ]
Permanent IDs

Every requirement gets a stable identifier that survives renames, refactors, and rewrites.

spec → code
Cross-repo bindings

One requirement, bound to its implementation and tests across every repo in the platform.

CI gate
Drift caught in CI

Silent drops and contradictions block the merge before they reach production.

4 states
One clear status

Verified, drift, broken, or unbound. Deterministic, never a guess.

v1 → v4
Versions & audit trail

Amendments mint versions and mark predecessors superseded. Full history, who and when.

agents
Agent-coherent

Agents building on the platform stay on-spec instead of wandering off it.

WHO IT'S FOR

For anyone who owns an outcome

If you decide what the product must do, or you have to prove it does, Spec Engine keeps everyone honest to it.

Developers

Prove what you built satisfies the requirement, without writing a status update.

Vibe coders

Ship fast with an agent and still know the moment something quietly broke.

Agencies

Hand off a codebase where every client requirement is traceable to the code that meets it.

Product managers

Watch requirements stay true across every surface, long after the PRD goes stale.

Business analysts

Write a requirement once and see exactly where it lives in the product.

QA

Know which requirements are verified by tests, and which only claim to be.

The spec is the source of truth.

Requirements that outlive features. Drift caught before it ships. Agents that stay honest.