Skip to content

Local-first · No LLM in the loop

Records every Claude Code, Cursor and Antigravity (Gemini) session, flags risky diffs with deterministic rules, and posts one receipt per pull request. Secrets are redacted first.

$npm install -g @agent-receipt/cli$agentreceipt --version

Needs Node 20+ and git

Get early access

Risk receipt · sample

Claude Code · 3 files · +10 −4

  • Secret-like valueBLOCK
  • Checks disabledWARN
  • Tests weakenedWARN
  • New dependencyWARN

VerdictBlocking

[ 03 / 03 ]

Review

One receipt lands on the pull request, with a verdict and the evidence behind it.

  1. 01 Record
  2. 02 Flag
  3. 03 Review
diff · src/fetchUser.ts + 2 files
+export async function fetchUser(id: string, tries = 3) {
+// eslint-disable-next-line @typescript-eslint/no-explicit-anyCHECKS_DISABLED
+const apiKey = "sk-live-••••••••••••";SECRET_LIKE
−expect(await fetchUser('2')).toBeDefined();TEST_WEAKENED
+"p-retry": "^6.2.0",NEW_DEPENDENCY
+return await res.json();

Risk receipt · sample

Claude Code · 3 files · +10 −4

  • Checks disabledWARN
  • Secret-like valueBLOCK
  • Tests weakenedWARN
  • New dependencyWARN

Flags4

Blocking

[ Works with ]

Claude Code. Cursor.
Gemini, through Antigravity.

One receipt format and one rule engine. Each tool plugs in through its own hook adapter, built from that tool’s own hook documentation.

  • Claude Code

    Supported

    by Anthropic

    • Prompts✓ recorded
    • File edits✓ recorded
    • Shell commands✓ recorded

    The first adapter, and the one the demo above uses.

    $agentreceipt init --pre-push
  • Cursor

    Supported

    by Anysphere

    • Prompts✓ recorded
    • File edits✓ recorded
    • Shell commands✓ recorded

    Agent edits only. Inline Tab completions are not agent changes.

    $agentreceipt init --agent cursor --pre-push
  • Antigravity

    Supported

    by Google · Gemini

    • Prompts✓ recorded
    • File edits✓ recorded
    • Shell commands✓ recorded

    Antigravity has no prompt hook, so prompts are read from its conversation log when an edit, a command or the end of a turn is reported.

    $agentreceipt init --agent antigravity --pre-push

Not yetThe standalone Gemini CLI, Windsurf and other editors are not wired up. An adapter is one file plus the tool’s hook config, and the rules and the report do not change.

[ Try it ]

Paste a diff.
Watch it get flagged.

This is the real rule engine, the same code the CLI runs, not a mock-up. Edit the diff and the flags change. Delete the line with the key and its BLOCK disappears.

diff · editable
live receiptscanning…

Scanning…

Same rule engine as the CLI · the diff is scanned in memory and is not stored or logged

[ AgentReceipt in numbers ]

7
risk rules
Deterministic, each pointing at real diff lines
0
LLM calls
To flag a risk or compute a metric
3
sync modes
Off, summary-only, full-redacted
14
day rework window
Measured from git blame

Counts of what ships in this repository today.

[ Demo ]

From first command to finished receipt.

Not a mock-up either: the exact output of the CLI on a small repository where an agent retried a fetch, dropped two test assertions and added a dependency.

~/my-apprecording

Real CLI output from a throwaway repo · folder name shortened

[ Product ]

Four things, each checkable against the code.

Sample data below. Everything the page shows is something the CLI or the dashboard really does.

  • [01]

    Every session, on the record.

    The prompt, the files, the diff and the flags, tied to the commit and stored in git notes so the receipt travels with the repository.

    PROMPT

    Add retry with backoff to fetchUser

    FILES CHANGED (3)

    • src/fetchUser.ts+10 −3
    • package.json+1 −0
    • tests/fetchUser.test.ts+0 −2
  • [02]

    Risk flagged by rules, not vibes.

    Seven deterministic rules read only the lines the agent added. Each flag says what was found, why it matters, and points at the evidence.

    +export async function fetchUser(id: string, tries = 3) {
    +// eslint-disable-next-line @typescript-eslint/no-explicit-anyCHECKS_DISABLED
    +const apiKey = "sk-live-••••••••••••";SECRET_LIKE
    −expect(await fetchUser('2')).toBeDefined();TEST_WEAKENED
    +"p-retry": "^6.2.0",NEW_DEPENDENCY
    +return await res.json();
  • [03]

    Policy as code.

    Write the rules your team already follows. The check fails the pull request and tells you what, where, why and how to fix it.

    {
      "policies": [
        { "rule": "deny-agent-changes",
          "path": ["**/migrations/**"] },
        { "rule": "max-files-per-session",
          "value": 20 },
        { "rule": "require-human-approval",
          "path": ["src/payments/**"] }
      ]
    }
  • [04]

    Metrics you can audit.

    AI share of merged changes and 14-day rework, from your git history and receipts. Every number explains its own formula, and nothing is estimated.

    AI SHARE

    sum(min(PR lines, receipt lines)) / sum(PR lines)

    REWORK, 14 DAYS

    changed within 14d / AI-attributed at merge

    COST PER PR

    not available unless it was actually recorded

[ Security ]

Your code stays yours.

Sync is off by default. When you turn it on, you choose how much leaves your machine.

  • [01]

    Local-first

    Everything works on your machine. Nothing is uploaded unless you turn sync on.

  • [02]

    Redacted at the source

    Secrets are removed before the first byte is written, and the server re-checks and rejects secret-like payloads.

  • [03]

    Opt-in, in two sizes

    summary-only sends counts and flags, no prompts or code. full-redacted adds redacted prompts and diffs.

  • [04]

    Tenant isolation

    Row Level Security on every table, with tests that prove one organization cannot read another’s data.

  • [05]

    Keys you can revoke

    API keys are stored hashed, scoped to one organization, and shown once.

  • [06]

    An audit trail

    Viewing or exporting prompts and receipts is itself recorded.

[ Quickstart ]

Five minutes.
One repository.

You need Node 20+, git and Claude Code, Cursor or Antigravity. Install the command, set up a project, and make your first receipt.

Get early access
# 1. install, once
npm install -g @agent-receipt/cli
agentreceipt --version

# 2. set up your project
cd /path/to/your/repo
agentreceipt init --pre-push

# 3. use your agent as usual, then
agentreceipt check
agentreceipt finalize
agentreceipt show

[ FAQ ]

Questions before you install.

Rather see it than read it?

Paste a diff and watch the real rules flag it. Nothing is stored.

Try it on a diff
Does AgentReceipt use an LLM?

No. Flags come from fixed rules that read the git diff, and every metric is plain arithmetic over your data. The same input always gives the same output.

What leaves my machine?

Nothing, unless you opt in. With sync set to summary-only, only counts, file names and flags are uploaded. With full-redacted, redacted prompts and diffs are uploaded too. The server re-checks every upload for secrets and rejects any that look like one.

Which agents does it support?

Claude Code, Cursor and Antigravity, each through its own hook adapter. Pick one with agentreceipt init --agent cursor (or all). Gemini models are covered when you use them inside Antigravity, Google’s agent IDE; the standalone Gemini CLI is a different tool and is not wired up. Antigravity has no prompt hook, so its prompts are read from its own conversation log when an edit or command is recorded. Windsurf and other editors are not wired up yet; the adapter interface is agent-neutral, so they can be added without changing the rules or the report.

Can a receipt be wrong?

Receipts are written on the author’s machine, so they are self-reported. A missing receipt proves nothing about how code was written. Treat the comment as a review aid, not as an audit trail.

Is secret detection perfect?

No. It is pattern-based, so it can miss unusual secrets and can flag harmless strings. It is a safety net, not a guarantee. Keep real secrets out of prompts anyway.

Is my diff stored when I use the playground?

No. It is scanned in memory by the same rules the CLI uses and the result is returned. The server does not store it, and its logs record only counts, never the diff or the prompt.

Put your
agents on the record.

AgentReceipt is invite-only while we are early. Tell us who you are and we will email your sign-in details once your request is approved. Your team joins from inside.

Try it on a diff first

No spam. We only email you about your access. Privacy