pitfallpayments.py
idempotency key required on the charge endpoint
the test that caught it: test_charge_idempotent
The check failed on attempt 2. The reason became a note.
Desktop app · macOS · Windows · Linux
Mark 1 runs beside your coding agent. It checks the work with your own tests, stops retry loops before they get expensive, remembers what went wrong, and signs a receipt you can verify without trusting us.
v0.1.2 · 18 Sep 2026 · Intel? Get the x64 build
Mark1-mac-arm64.dmg 161 MB Mark1-mac-x64.dmg 168 MB Mark1-win-x64.exe 133 MB Mark1-linux-x86_64.AppImage 160 MB Mark1-linux-amd64.deb 122 MB
Unsigned build. macOS: right-click the app, choose Open, then Open again. Windows: More info, then Run anyway. Linux:
chmod +x the AppImage.
How it works
Capture, verify, arrest, remember, route, receipt. Nothing changes in how you drive the agent.
Hooks and transcript tails from the agent you already run. It reads only after you consent.
Your tests, build, types and lint run as anchors and each returns a verdict.
Stops the retry loop at the knee, before the next attempt costs more than it is worth.
The reason a check failed is kept as a short note and injected next time.
On API-key traffic, a cheaper model where it already passes. Subscription agents keep theirs.
Signed by your device and by our server. Verifiable offline, by anyone.
Arrests
Every retry is a bet. Mark 1 tracks the odds that the next attempt lands against what it will cost, and stops the loop when the bet is no longer worth it. You see the numbers it used.
The rule
p̂_LCB(n) · V(task) ≤ c(n)
When the lower bound on the chance that attempt n lands, times what the task is worth, is no more than what attempt n will cost, the loop stops. The verdict and the evidence go to you instead of into another retry.
Local caps, whatever the policy says
Verify
Anchors are the checks you already have: tests, build, types, lint. Mark 1 runs the ones you consent to and records a verdict: satisfied, violated, refused or error. No second model grading the first.
Each anchor is consented once per tool, bound to the binary it hashes. Revoke any time.
ruff check . static default on tsc --noEmit static default on cargo check static default on go vet ./... static default on pytest -q suite opt in Memory
When an attempt fails a check, the reason is kept as a short note and handed to the agent the next time it reaches the same place. Notes, not transcripts.
pitfallpayments.py
idempotency key required on the charge endpoint
the test that caught it: test_charge_idempotent
The check failed on attempt 2. The reason became a note.
pitfallpayments.py
idempotency key required on the charge endpoint
the test that caught it: test_charge_idempotent
Handed to the agent before it touches the same endpoint again.
Routing
On API-key traffic, Mark 1 keeps a ladder per task type and routes to the cheapest model whose measured pass rate holds. Subscription agents keep their model and get everything else.
Routing only touches traffic that carries your API key. If your agent runs on a subscription, the model is chosen by the subscription and Mark 1 leaves it alone.
Proof
Every number on your dashboard traces to a receipt signed by your device and by our server. The verifier is a standalone binary that runs offline. Anyone can check a receipt. Nobody can edit one.
One receipt
{
"seq": 185,
"checkpoint": 4,
"issued_at": "2026-09-18T14:02:19Z",
"prev_receipt_hash": "b1f4a0c97d21…",
"merkle_root": "7d21c4e9a0b5…",
"device_sig": "ed25519:…",
"server_sig": "ed25519:…",
"witness": "pending"
} Synthetic values, real field names. Hashes shortened for display.
How much of the traffic Mark 1 actually saw. Every number carries it.
Dollars on API keys, quota on subscriptions. Never mixed in one report.
Below the coverage floor a number is indicative and says so. Guarantee-grade is refused, not softened.
Agents
Claude Code, Codex, Gemini CLI, opencode, Copilot CLI and Cursor. Mark 1 attaches through each agent's own hooks and config, never the binary. Pinned versions are listed, and anything it writes can be reverted byte for byte.
Anthropic
OpenAI
SST
GitHub
Anysphere
Pinned versions are listed in the app.
Download · macOS · Windows · Linux
Pick your platform. The first run asks for consent before it reads anything.
v0.1.2 · 18 Sep 2026 · Intel? Get the x64 build
Mark1-mac-arm64.dmg 161 MB Mark1-mac-x64.dmg 168 MB Mark1-win-x64.exe 133 MB Mark1-linux-x86_64.AppImage 160 MB Mark1-linux-amd64.deb 122 MB
Unsigned build. macOS: right-click the app, choose Open, then Open again. Windows: More info, then Run anyway. Linux:
chmod +x the AppImage.
First run
Unsigned build
Signing is in progress. Until it lands, each OS needs one extra step on first open.
chmod +x the AppImage. Pricing · Preview
Subscription agents are priced in quota, so Mark 1 reports tokens and arrests, not dollars. API-key agents get routing too, and dollars appear only when the cost basis is real.
Regime 01
Your agent draws on a plan quota. The plan picks the model, so there is no price per token to report.
Reports tokens and arrests, not dollars.
Regime 02
Your agent bills per token through your own key, so Mark 1 can see what every attempt costs.
Reports tokens, arrests and dollars. Dollars appear only when the cost basis is real.
Pricing arrives with the first guarantee-grade reports.
FAQ
Claude Code, Codex, Gemini CLI, opencode, Copilot CLI and Cursor. Mark 1 attaches through each agent’s own hooks or config file and never touches the agent binary. The pinned versions it has been tested against are listed inside the app.
It reads only the projects you enable: the agent’s hooks, the tail of its transcript, and the anchors you consent to run. What leaves the machine is typed evidence, verdicts and receipts, plus sanitized diff hunks only if you opt in. Full diffs and source code never leave, and what does leave is pinned to your region.
An arrest stops the next attempt when another try is likely to cost more than it is worth. Mark 1 arrests at most three times in a row and never more than an hourly ceiling, and if you pause it, the pause wins. The off switch is in Settings.
An outcome your own tests, build, type checker or lint passed. Mark 1 runs the checks you consented to and records the result as a verdict: satisfied, violated, refused or error. No second model grades the first.
No. On a subscription your plan picks the model, so there is nothing for Mark 1 to route. It still watches the session, gates retries and remembers what failed, and it still signs receipts. Routing needs an API key, because that is the only regime where Mark 1 can choose the model per task.
Code signing is in progress. Until it lands: on macOS, right-click the app, choose Open, then Open again. On Windows, choose More info, then Run anyway. On Linux, chmod +x the AppImage.
A receipt is a checkpoint over your session events, signed by your device and by our server. The verifier is a standalone binary that runs offline, with no account and no network. Export a receipt from the Receipts screen and anyone can check it without trusting Omium.
Until check coverage is above the floor and a noise certificate exists for your setup, Mark 1 cannot stand behind a number, so it labels it indicative. The app says so on every screen where such a number appears. Guarantee-grade numbers arrive once both conditions hold.