OPEN SOURCE / MIT Independent verification for AI-coded software

Test whatyour AI didn’t.

THE TRUST GAP

AI can change the implementation and the tests that judge it.

MaruCheck keeps an independent record of approved behavior, then challenges every change against it.

AI SAID “DONE” / MARU STARTED CHECKING RELEASE BLOCKED
MARU / VERIFYfeat/subscription-limits ANALYZING
AGENT PATCH2 files changed
src/subscriptions/limits.ts+1 −1
 export const limits = {- FREE_LIMIT: 5,+ FREE_LIMIT: 10, PRO_LIMIT: Infinity }
CODING AGENT

Implementation updated. Existing tests pass.

VERIFICATION SEQUENCERUN-1048
  1. 01
    Diff classifiedbusiness-logic · billing
    DONE
  2. 02
    Risk assessedcontract + historical signals
    HIGH · 72
  3. 03
    Contract checkedsubscription-management#SUB-001
    CONFLICT
  4. 04
    Evidence normalizedexpected 5 · observed 10
    1 FINDING
$maru verify --diffAnalyzing changed behaviorVERIFICATION GATE: BLOCKED
Fits the tools already doing the work

Codex

Claude Code

Cursor

GitHub Actions

Vitest

Playwright

01 — THE BLIND SPOT

AI writes software fast.

A green suite can still prove the wrong product.

02 — UNDER PRESSURE

One change enters.
Every assumption gets challenged.

Scroll through a real MaruCheck decision. The proof changes because the state changes.

MARU / LIVE VERIFICATION RUNNING
00.00 / Patch capturedThe agent changes the limit.

2 files · billing logic

STEP 01 / 05
00.00 / Patch captured

The agent changes the limit.

The implementation moves from five to ten. The existing tests still pass.

2 files · billing logic
00.17 / Intent loaded

The contract remembers five.

Approved behavior remains independent of whatever the implementation currently returns.

subscription-management#SUB-001
00.31 / Risk compounded

The change is not treated equally.

Path sensitivity, contract criticality, and changed-test coverage produce an explainable score.

contract + billing + blast radius
01.08 / Memory recalled

An old failure returns to the plan.

A confirmed historical bug forces its regression test back into verification.

MEM-0143 · related regression
03.42 / Decision reached

The release stops with a reason.

MaruCheck reports the semantic conflict instead of silently changing approved intent.

expected 5 · observed 10

03 — SEMANTIC DRIFT

The tests adapted.
The promise did not.

src/billing/limits.ts1 semantic change
FREE_LIMIT = 5+ FREE_LIMIT = 10
SEMANTIC CHANGE DETECTED
Expected
Free users may create 5 projects.
Observed
Free users may create 10 projects.
OWNER APPROVAL REQUIRED

04 — QA MEMORY

A bug should only surprise you once.

When related code changes again, MaruCheck recalls the failure and forces its regression back into the plan.

How memory is matched
MEM-0143

Invoice ownership bypass

Missing server-side account check.

RELATED PATH CHANGED
REGRESSION RECALLED

cross-account.test.ts

Forced into this verification plan.

05 — AGENT BOUNDARY

Let the agent call the verifier.
Don’t let it approve itself.

Codex, Claude Code, Cursor, and compatible MCP clients can run MaruCheck and read structured evidence. Approval remains human-owned.

Connect an MCP client
CODEX → MARU MCP CONNECTED

CODING AGENTI changed invoice authorization. Existing tests pass.

TOOL CALLmaru_run_verification
{ "diff": "working-tree", "evidence": true }
RESULT / 1.42sBLOCKED

Cross-account regression reproduced.

invoice-access#INV-001 · critical

06 — LOCAL EXECUTION

The check runs where
the change lives.

Source and secrets stay in the repository or CI runner. MaruCheck produces reviewable evidence under .maru/.

maru — local verificationstdio / trusted

~/project main*

$maru verify --diff

01Verification gate: BLOCKED

02[CRITICAL] BLOCKING · invoice-access#INV-001

03Expected: Users can only read invoices owned by their account.

04Actual: Cross-account invoice payload returned.

05Reproduce: npx vitest run tests/regressions/cross-account.test.ts

06Report: .maru/artifacts/runs/RUN-1048/report.json

07 — RELEASE PROOF

Not another confidence score.
A decision with receipts.

YOUR REPOSITORYCode · tests · secretsLOCAL
MARUCHECKContracts · findings · evidenceINSPECTABLE