For AI agents
— make sure it should.
Writ scans your Python, TypeScript, or JavaScript agent, finds the writes it can make — refunds, permission changes, emails, deletes — and puts a gate in front of each one. ALLOW or DENY, before it runs. Every decision goes to your tamper-evident audit log.
Gate your first write in five minutes.
10,000 receipts/month free, no credit card. Then $1 per 1,000 receipts
How it works
One call before the write. Policy decides. Every decision — allowed or denied — lands in your audit log.
Run writ scan . on your codebase. The scanner finds likely write sites in Python, TypeScript, and JavaScript — Stripe calls, database mutations, file writes — and maps them to verbs. On Python it also inserts one writ_check() per function. Nothing changes until you run --apply.
Before the write runs, the agent calls POST /v1/check with five fields: sponsor, agent, verb, target, purpose. Policy returns ALLOW, DENY, or STEP_UP. The grant is spent on use — it cannot be reused for a different write.
Every decision writes to your audit log — whether it ran or not. HMAC-SHA256 chained. Run writ verify-chain to prove no record was altered. Stream live to any SIEM with writ stream.
HMAC-SHA256 chained. Alter any stored record and writ verify-chain catches it.
Supports NIST SP 800-53 AU-9. Hash-chained audit records. Your assessor determines compliance.
No key, no network? No ALLOW. An ALLOW only exists after a live policy evaluation — the gate can't fail open.
One call cuts off any agent, everywhere, immediately. No redeploy.
Integration
The Python client wraps the gate. DENY raises PermissionError and stops the write. ALLOW returns a 90-second token bound to exactly what you're about to do.
Coverage: Python — scan and auto-instrumentation. TypeScript and JavaScript — scan-only (via the polyglot extra locally: pip install "pywrit[polyglot]"; bundled by the GitHub App). Go: not yet covered.
Already using MCP? Drop Writ into Claude, Cursor, or any compatible agent — 17 tools, no code changes.
Checks can be skipped. Execution cannot. In enforcement mode Writ holds the credential in its vault and executes the write itself — Stripe, GitHub, Salesforce — so a wrapped write cannot complete without an ALLOW, and the agent never holds the raw credential.
Install the Writ GitHub App on selected repositories and every push and pull request is scanned for ungated write-sites, with results as a check run and in the portal.
Audit log
ALLOW or DENY, STEP_UP or REVOKE — all of them land in your audit log the moment they happen. Hash-chained. No gaps. Verify anytime.
writ verify-chain catches it.writ stream.Something goes wrong. One call. Every later check for that agent is DENY — everywhere, immediately, no redeploy.
Pricing
10,000 receipts/month free, no credit card. Then $1 per 1,000 receipts. The meter is your own audit log, so you can verify your bill.
forever, for the first 10,000 audit log entries/month
per 1,000 audit log entries above the free tier
Annual commit + volume, sized to your usage