AI design reviews on your pull requests

Ship faster with your agents, and keep every UI change on your design system

A pull request written by an agent, reviewed by Crocotaste. In PromoBanner.tsx a raw button is a violation, cited from Button.tsx:21 and DESIGN.md:58, with a one-line suggested change and a prompt for your agent. Lint, types and tests pass, the crocotaste check is neutral with 1 violation, and the merge button stays yours.

Works with every coding agent, and with your teammates

Agents ship fast, but the UI drifts

Your coding agent doesn't always follow your design system

  1. Hardcoded value. #4ade80 when you already have --color-success.tokens.css:18
  2. Hand-rolled component. A raw <button> next to your <Button>: different radius, different green.Button.tsx:21
  3. Off-scale. 13px body text in a 12 / 14 type scale.DESIGN.md:12

PR #479 · PricingCard.tsx · as the agent shipped it

Each one is small enough to merge. A few weeks of them, and your product stops looking like one product.

Three steps to your first review

Your part is one install and one merge

  1. Install the GitHub App

    Pick the repositories. It reads your code and writes only comments, approvals, checks and one issue per repository.

    Parsed references are reused for at most 30 minutes, held only in memory, never on disk.

    Install crocotasteon acme · 2 selected repositories

    with these permissions

    • Read access to code
    • Read access to metadata
    • Read and write access to pull requests
    • Read and write access to checks
    • Read and write access to issuesone onboarding issue per repository

    and for your account

    • Read access to email addressessign-in
  2. Your agent writes DESIGN.md

    We open one issue per repository. Your coding agent answers it with a pull request you read and merge.

    No DESIGN.md yet? Reviews run on the parsed system, and the check says so.

    Generate your DESIGN.md#470 · opened by crocotaste
    Add DESIGN.mdAgent#471 · agent/design-md
    ## Tokens
    --color-success #16a34a
    ## Components
    <Button> size sm | md
    ## Decisions
    Never hand-roll a control the library already has.
  3. Every UI pull request gets a review

    About a minute later: a green check if it's on-system, a cited comment if it isn't.

    All checks have passed4 successful checks
    • Lintpassed
    • Typespassed
    • Testspassed
    • crocotasteOn-system · 6 files · 42 tokens · 12 components · 9 decisions · 0 violations
    crocotaste approved these changes. Nothing to snap at.

Every finding cites its source, or it doesn't exist

What's off, what your system has instead, and the line that says so

crocotasteViolationsrc/components/PricingCard.tsx:41

This is a hand-rolled button next to your <Button>. Your system has Button size="sm" variant="secondary" for this role.

Button.tsx:21DESIGN.md:58
<button className="px-4 py-2 rounded-md bg-emerald-500 text-white">Go pro</button>
<Button size="sm" variant="secondary">Go pro</Button>
Prompt for your coding agent
In "src/components/PricingCard.tsx" around line 41:
Replace the raw <button> with the design-system <Button size="sm" variant="secondary"> from components/Button.tsx. Keep the label "Go pro". See DESIGN.md:58: "never hand-roll a control the library already has".
fingerprint 3f2a9c1esurvives force-pushcloses itself when fixed
  1. Violation, drift, or nothingNo severity scale to argue about.
  2. What your system has insteadNever “consider”: the component you already own.
  3. Cited, or deleted in codeA filter after the model drops any finding without a source.
  4. The fix is already writtenA one-line fix is a GitHub suggestion. One click commits it.
  5. Or hand it to your agentPaste the prompt into your agent. The check carries the same findings as JSON.
  6. Nothing gets posted twiceFingerprints survive a force-push. A fixed finding closes itself.

A learning loop for your design system

Tell it why once, and every review and agent follows your call

9decisionsin DESIGN.md, read by every review and agent

It flags a hand-rolled button

src/campaign/CampaignBanner.tsxline 12
crocotasteViolation

Hand-rolled <button> where your Button component exists

Cited from src/components/Button.tsx:21

Every finding names its source: here, your own Button.

You reply with the reason

Replying tocrocotasteHand-rolled <button> where your Button component exists
you

@crocotaste ignore the campaign embed can use a plain button: it renders outside the app and can't import Button

Dismissed here. Your reason is the part worth keeping.

It drafts the decision for you

DESIGN.md · ## Decisionsdraft
### The campaign embed can use a plain button
the campaign embed can use a plain button: it renders outside the app and can't import Button. Source: src/components/Button.tsx:21.

Paste it or hand it to your agent. Crocotaste never writes to your repo.

You merge it, and it sticks

MergedRecord decision: The campaign embed can use a plain button #492
Every review reads it now
So does your agent

It lives in your repo now. Nobody has to say it twice.

  • Dismissed stays dismissedOn that pull request, for good. Elsewhere it comes back until you merge the rule.
  • Nothing to keep in syncWe store no design rules of our own. Your DESIGN.md is the only copy.
  • Your agents learn it tooThey read the same file, so they stop writing what you dismissed.

No design system yet?

Make one with your coding agent, then keep every pull request on it

A Claude Code plugin takes you from a brand idea to a brand book, a DESIGN.md and your first mockups, all from your tokens. Crocotaste picks up from there.

Get the plugin
claude plugin install crocotaste --marketplace crocotaste/crocotaste-plugin

BRAND.html

  • 01 Foundations
  • 02 Mark
  • 03 Color
  • 04 Typography
  • 05 Spacing
  • 06 Iconography
  • 07 Components
  • 08 Motion
  • 09 Voice
  • 10 Responsive

Aa

Outfit 600 · 32/40

DESIGN.mdderived
## Tokens
--color-primary #047f56
## Components
<Button> size sm | md
## Decisions
One primary button per screen.

Your merge button stays yours

It never blocks a merge, and every check says what's next

acme/web · last 9030 pull requests

one bar per PR

0red checks, ever

Last 90 pull requests, none red: 75 on-system, 13 drift noted, check still green, 2 neutral, mergeable, next step written

Last 30 pull requests, none red: 22 on-system, 7 drift noted, check still green, 1 neutral, mergeable, next step written

  • on-system
  • drift noted, check still green
  • neutral, mergeable, next step written
  • blocked by us
crocotasteOn-system
crocotaste1 finding · 1 drift
crocotaste3 findings · 2 violations · 1 drift
crocotasteCouldn't complete · re-run with @crocotaste review
crocotasteReview budget used · top up or upgrade
crocotasteReviewing 6 files…
  • Our problems never block youModel hiccup, empty balance, stale commit: the check goes neutral and your pull request stays mergeable.
  • The next step is on its faceRe-run, top up, or nothing at all. Every neutral check says which.
  • It stays quietA push storm becomes one review, and the summary is edited in place.

Start free, then size it to what you ship

One pull request is one review, which covers two AI reads of it

reviews a month
105
a month
$79
a review at 105
$0.75

Team covers it · one cell = 10 reviews

  • Starter

    $19a month

    25 reviews · $0.76 each

    For a solo dev shipping UI most days

    Start free
  • Team

    Fits you

    $79a month

    120 reviews · $0.66 each

    For 5–15 engineers

    Start free
  • Business

    $249a month

    400 reviews · $0.62 each

    For 15–50 engineers, heavy agent volume

    Start free
$25

for 25 reviews, a dollar a review, good for 12 months. Top up any plan, or skip the plan.

No charge for going over

Every plan starts with 3 free reviews on install, no card. Pick one in the dashboard when you need it. Public repositories get 50 free reviews a month through December 31, 2026.

Questions, answered

The ones teams ask before they install

Everything else is in the docs, or one email away

Does Crocotaste write to my repository?

No, and it can't. The GitHub App reads your code and can write only pull request comments, approvals, checks and issues. DESIGN.md is written by you or your coding agent; Crocotaste only asks for it.

What if we don't have a design system?

You have more of one than you think. Reviews run on what the repo already holds (Tailwind config, token files, component exports), and the check says so. The onboarding issue asks your coding agent to write a DESIGN.md from that code, which sharpens the next review and your agents too. With nothing at all to check against, the review is skipped for free, and the check points you to DESIGN.md instead of passing a change against nothing.

Does Crocotaste work with a DESIGN.md from Stitch or the awesome-design-md gallery?

Yes. Any DESIGN.md in Google's format is read as it is: the tokens and components in its front matter, the rules under its sections, and the entries under Decisions. We read all 84 files in the awesome-design-md gallery: 71 parse in full, and the rest still give their rules.

Will it flood our PRs with comments?

No. One summary comment, edited in place on every push. Dismiss a finding and it stays gone on that PR. Fix one, and its comment names the commit that fixed it and collapses.

Which coding agents does it work with?

All of them. It reviews the pull request, so it doesn't matter what wrote the code. Every finding carries a prompt you can paste, and the check run emits JSON an agent loop can pick up on its own.

What counts as a review?

One pull request is one review, and it covers two AI reads: the first, and one more after you push new UI lines. Pushes never spend a review. A third read (@crocotaste review or Re-run) is one more review; an ask with nothing new to read is free. Drafts, backend-only PRs and anything we couldn't review cost nothing. When a plan runs out, reviews pause with a neutral check until next month or a top-up. We never charge for going over.

What counts as a UI change?

Any file that matches the UI glob: components, styles, design tokens, Tailwind config, stories. The full list is in the docs. A backend-only PR is skipped with a neutral check and costs nothing.

Is our code used for training?

No. Your diff goes to the model for that one review and isn't kept. Parsed references are reused for at most 30 minutes, held only in the worker's memory, never on disk. We keep the findings we posted (message, suggestion, fingerprint: the same text already on your pull request) and the counts we bill from. No file contents, no copy of your repo.

How does the trial work?

3 reviews free on install, no card. Point it at one repo and open a pull request: a green check if it's clean, a cited finding if it drifted.

Is it free for open source?

Public repositories get 50 free reviews a month per GitHub account through December 31, 2026, from a shared monthly pool. They are spent first; past them a public pull request uses your trial, plan or pack reviews, and with none left it pauses with a neutral check until the 1st.

Install on one repo, open a pull request

Your first review in about a minute, 3 free and no card

  1. 00:00 PR #1 opened by your agent
  2. 00:04 queued · UI files detected
  3. 00:19 read tokens.css, Button.tsx at base
  4. 00:41 checks done · AI read running
  5. 00:58 On-system · approved