Your checks, when the agent stops.

Prism runs your typecheck, lint and the tests the change reaches. The receipt gives one verdict, and its lens checks flag changed code no test covers and callers the change left behind.

SHIPNOT PROVENNO-SHIP
Your agent
YouTidy up the reduce in computeTotals
AgentDone. The reduce in computeTotals is shorter now.
PrismPrism · NO-SHIP (1 check failed)
Prism receipt: changed 1 file, 5 dependents, 2 tests reach it — NO-SHIP
Proven          2 scoped test files · typecheck ✓
Failed          test ✗ Failed Tests 1
AgentThe test caught it: I wrote price + qty instead of price * qty. Fixed, and the next receipt says SHIP.
~/northwind
$ prism receipts show 1Prism · NO-SHIP (1 check failed)Prism receipt: changed 1 file, 5 dependents, 2 tests reach it — NO-SHIPProven          2 scoped test files · typecheck ✓Failed          test ✗ Failed Tests 1
What runs

Your own checks, scoped to the change.

Prism never invents a command. It reads your package.json and runs what is there. A failure counts only when this change caused it.

Your typecheck

The first of typecheck, types or check:types in your package.json.

Your lint

The first of lint, lint:check or oxlint.

The tests that reach it

Only the test files the change reaches, with vitest, jest or bun. Otherwise your own test script, run in full.

A bug a typecheck misses

One character, caught.

The agent wrote + where it meant *. The types still line up, so the typecheck passes. The test that reaches computeTotals fails, and the receipt says NO-SHIP.

src/billing/totals.ts
@@ computeTotals- … sum + l.price * l.qty, 0);+ … sum + l.price + l.qty, 0);typecheck ✓ passes · test/totals.test.ts ✗ fails
Prism receipt~/northwind
NO-SHIP
The typecheck passed. A test this change reaches failed.
1file changed
5dependents
2tests reach it
Proventypecheck ✓
Failedtest ✗ · Failed Tests 1
During review

Lenses add their checks.

Every receipt also runs the lens checks on the change. Here the tests pass, but the QA lens finds two callers the change did not update.

Your agent
YouAdd an optional VAT rate to computeTotals
AgentDone. computeTotals takes vatRate and returns vat.
PrismPrism · SHIP
Prism receipt: changed 1 file, 5 dependents, 2 tests reach it — SHIP
Proven          2 scoped test files · typecheck ✓ · test ✓
Finding         src/billing/totals.ts — dependents_not_in_diff: src/billing/totals.ts changes computeTotals; not edited: src/billing/credit-note.ts, src/billing/invoice.ts → Fix this before shipping. (high risk)
AgentTests pass, and the QA lens found two callers I didn’t update. Updating them now.
~/northwind
$ prism receipts show 2Prism · SHIPPrism receipt: changed 1 file, 5 dependents, 2 tests reach it — SHIPProven          2 scoped test files · typecheck ✓ · test ✓Finding         src/billing/totals.ts — dependents_not_in_diff: src/billing/totals.ts changes computeTotals; not edited: src/billing/credit-note.ts, src/billing/invoice.ts → Fix this before shipping. (high risk)
Anatomy

Read a receipt in four lines.

Prism receipt~/northwind
NOT PROVEN
Reason: timeout. A check ran past its time limit.
1file changed
5dependents
2tests reach it
Proventypecheck ✓
Timed outtest — timed out after 60000ms
Prove itrun: npx vitest run test/totals.test.ts (~3 s) → proves src/billing/totals.ts
1
Verdict

One word first: SHIP, NOT PROVEN or NO-SHIP.

2
Reason

Why, in a few words. NOT PROVEN always names one of nine reasons.

3
What was checked

How many files changed, what depends on them, which tests reach them, and what passed.

4
Prove it

For NOT PROVEN, the quickest command that would prove the change.

Verdicts

Three verdicts.

The checks this change reaches pass.

Prism receipt~/northwind
SHIP
The checks this change reaches pass.
1file changed
5dependents
2tests reach it
Proven2 scoped test files · typecheck ✓ · test ✓

Typecheck, lint and the tests that reach the change all passed.

Next: Commit and push.

Something is missing, and Prism says what.

Prism receipt~/northwind
NOT PROVEN
Reason: timeout. A check ran past its time limit.
1file changed
5dependents
2tests reach it
Proventypecheck ✓
Timed outtest — timed out after 60000ms
Prove itrun: npx vitest run test/totals.test.ts (~3 s) → proves src/billing/totals.ts

No test reaches a file, a check timed out, or dependencies are missing.

Next: Run the Prove it command, or add the missing test.

A check this change broke.

Prism receipt~/northwind
NO-SHIP
The typecheck passed. A test this change reaches failed.
1file changed
5dependents
2tests reach it
Proventypecheck ✓
Failedtest ✗ · Failed Tests 1

A test, the lint or the typecheck failed because of this change, or it touched an off-limits path. Checks that were already failing are kept apart.

Next: Fix it before you commit. Your agent sees the same receipt.
Before you push

Check the branch, too.

Where hooks are available, the receipt prints when the agent stops. Otherwise the rule asks the agent to call receipt before it says it is done; prism install turns that tool on. Before a push, prism review --fail-on high exits 1 on a risky branch, and prism receipts show 1 --as markdown gives text for the pull request.

Your agent
YouAdd an optional VAT rate to computeTotals
AgentDone. computeTotals now takes vatRate and returns vat.
PrismPrism · SHIP
Prism receipt: changed 1 file, 5 dependents, 2 tests reach it — SHIP
Proven          2 scoped test files · typecheck ✓ · test ✓
~/northwind
$ prism receiptsReceipts (3 of 3) 1 2026-10-16 09:18 SHIP · 1.2s 2 2026-10-16 09:18 NOT PROVEN (untested) · 0.6s 3 2026-10-16 09:17 NO-SHIP · 1.7sShow one: prism receipts show <n>

Nine reasons for NOT PROVEN

Every NOT PROVEN names one, so you know what to do next.

ReasonMeans
untestedA changed file has no test reaching it.
no_node_modulesTests reach it, but dependencies are not installed.
unknown_runnerTests reach it, but no known runner could run them.
skipped_offlineChecks were not asked for.
still_runningChecks were still running; ask again and the receipt shows them.
timeoutA check ran past its time limit.
already_failingEvery check that reaches it was failing before this session.
unsupported_languageOnly files in languages Prism can’t check yet changed.
supersededA newer change replaced this one before its checks finished.
no_sessionNo session start was recorded, so the change set was never established.

Try it in your repo.

Install Prism, then connect every agent on this machine. Open the agent again.

$npm install -g @prismapp/cli && prism install all