CremaSPEC Get the free skill

Spec-driven development assumes a spec. Crema is where you build it.

TL;DR

Crema is the spec control plane for teams building software with AI agents. It puts your spec in GitHub as one source of truth, and it sizes every step of writing and reviewing that spec for human judgment: one card, 25 minutes, the reason on the card.

Get Crema PRD, free MIT · Claude Code, Cursor, Kiro, Spec Kit
FIG. 1DECISION CARD · QUEUE VIEW
17:42cycle 1/2 card 4 of 6
Why we're doing this

Customers can't get their data out. Support hears it every week.

Who this is for
Persona: Carolina
The change

§2.4 Reports · CSV export · 3 acceptance tests

TESTS
3 /5
DEPENDENCIES
2 /6
Approve Deny Regenerate Edit
spec-agent 0.4 · controls v3 · PR #212 · 11:02
Within controls420 / 2000 words
## 2.4 Reports · CSV export
Carolina runs weekly board reporting from three saved report views. Today she copies rows by hand into a spreadsheet.
### Behavior
Every report table shows an Export button in the toolbar. Export produces a CSV of the rows currently visible, with the current filters and column order applied.
Exports over 50,000 rows run in the background and arrive by email as a download link that expires in 7 days.
### Acceptance tests
1. A report filtered to Q3 exports only Q3 rows.
2. Column order in the CSV matches the on-screen order.
3. A 60,000-row export sends an email within 10 minutes.
A Crema decision card: who this is for, why we're doing this, the change, test and dependency limits, four actions, provenance, and the spec with a word count against its limits.

Engineering put code under version control, review, and blame. The spec that drives it has none of that.

TL;DR

Product managers are understaffed about 3× against engineering, supply the spec with a chat window and a Drive folder, and are asked for more of it every quarter. Five governance problems emerge, and engineers already solved each of them for code.

  1. 01

    Length

    Agents write longest where they are least certain (Zhang et al., 2024). The longest sections are the least reliable and the least read.

  2. 02

    Drift

    Each spec is appended to a core spec no one can read. Versions multiply in Drive. Engineering, marketing, and the PM each pull context from Claude, pointed at whichever copy they found.

  3. 03

    Readability

    The text is written for a machine audience, at a length and density a human cannot review. Text for a model reader keeps its meaning at about a quarter of its length; text for a person does not (Zhu et al., 2026).

  4. 04

    Authorship

    A model wrote it and did not sign it. No one can say which sections a human decided. Most agent-authored pull requests receive no recorded review (Duma et al., 2026).

  5. 05

    Dependencies

    A change in one section breaks three others and nothing shows the chain.

Your code lives in GitHub. Crema puts your spec there too, and engineering points its coding agents at the repo.

TL;DR

One monorepo holds the spec. New sections and revisions are pull requests. A gate sizes each one to a cycle and requires its reason. You decide on a card. The decision record captures who decided what.

GOVERNANCE CHALLENGEAGENT CONTROL
LengthLimits on words per proposal. A new section or revision is at most 2,000 words when it reaches you. The gate returns anything larger to the agent to split. Review finds most defects at 200 lines per hour or slower (Kemerer & Paulk, 2009).
DriftSingle source of truth in GitHub. One version is current; every prior version is in the history. Linear, Jira, and Slack connect over MCP. Engineering's coding agents read from the same repo.
ReadabilityTwo renderings from one source. The machine-facing spec your agents consume, and the human-facing card you review: who this is for, why we're doing this, what is new or changed, the controls that apply, the spec text.
AuthorshipThe audit trail and decision records. Every section records who drafted it (you or an agent by name and version), the controls that governed the change, who decided, and when. Approvals are rationed so tired reviewers don't become a weakness (Turan, 2026).
DependenciesDependency graph enforcement. Cross-references between sections and links to tickets are parsed on every pull request. A change that would exceed the control limit blocks merge; Crema shows why.

You set the mix. Every step fits 25 minutes.

TL;DR

For every section you choose: write it, edit the agent's draft, regenerate with a prompt or a preset, or let the agent draft within your limits. A cycle is 25 minutes. Two cycles, then a break. Attention holds for about that long, and a tired reviewer approves more (McCarley et al., 2026).

  1. 01

    Write

    You bring notes, tickets, a transcript, an idea. You say who it is for and why. You write the section, or your agent drafts it, its tests, and its dependencies as a pull request within your agent's standing permissions. Crema PRD formats it.

    DRAFTED
  2. 02

    Admission gate

    A GitHub check confirms the reason and audience are present, the proposal fits one cycle, and the dependency impact is within agent limits. Anything over returns to the agent to split.

    ADMITTED
  3. 03

    Decide

    One card per decision. You approve, deny, regenerate with a note, or edit the spec text in place. The clock sits in the rail; the card has your attention.

    APPROVED
  4. 04

    Record

    The decision record captures the author, the agent limits that governed the change, the decision, the time, and the reason. Cards you did not reach stay marked open. Slack and Linear receive the entry over MCP.

    audit trail · append-only

Set agent controls on each proposer, in the repo.

Agent controls define which sections a proposer has permission to change, word and test limits per proposal, how many dependencies it may touch, and how often. They live in a file in the repo. Revoking them is a one-line change.

controls/agent-spec.ymlv3 · valid
agent: spec-agent@0.4
scope: specs/reports/**
limits:
  review_words: 2000
  tests_per_change: 5
  dependencies: 6
  proposals_per_week: 8
approval: human, any PM on reports
valid_until: revoked

Who proposed, who decided, when, and why. For every section.

TL;DR

The audit trail is append-only and derived from merged pull requests and recorded decisions. Nothing writes to it directly. It feeds Slack, Claude, and the dashboard, and it is the record a regulated team hands an auditor.

TIMESECTIONDRAFTED BYAGENT CONTROLSDECIDED BYSTATE
11:19§2.4 Reports · CSV exportspec-agent 0.4controls v3I. LeonardAPPROVED
11:08§2.3 Reports · SchedulingI. LeonardM. BoydAPPROVED
10:51§4.1 Billing · Refund windowspec-agent 0.4controls v2I. LeonardDENIED · over dependency limit
10:40§4.2 Billing · Prorationspec-agent 0.4controls v2NOT YET · cycle closed

Illustrative entries.

CremaPRD

The free skill for writing specs and spec changes.

Your agent loads Crema PRD before it writes a spec. The skill requires who each section is for and why it exists, caps every section at one cycle, and lists open questions with owners. It works with Claude Code, Cursor, Kiro, and Spec Kit.

Get Crema PRD
$ crema-prd validate specs/reports/export.md
who it is for: Persona: Carolina
reason present (31 words)
3 acceptance tests
dependencies: 2
420 / 2000 words
ready under controls v3