New in 0.15.0: an app in your browser
Your AI agent says it did the right thing. Deedglass checks what it really changed.
Deedglass sits between your AI tools and your systems. Rules decide each action first; then it reads what really changed, locks a record anyone can check, and a person can put it back.
npx deedglassOne command in a terminal opens the console in your browser, signed in: no Docker, no account and no database to set up, and your records stay on this computer. It shows what your agents did, what is waiting for you to approve, and the locked records.
Developers: curl -fsSL https://deedglass.com/install.sh | sh installs the CLI on macOS or Linux, about 7 s on one network in India. Then deedglass start plays the 301-row scene with no questions. Or grade an MCP config in your browser. Healthcare teams: explore Deedglass Health → for FHIR R4 and clinical write verification.
Deedglass installs on a computer, not a phone.
deedglass play, scene 4 of 6, trimmed: the Postgres lines are replayed from a recorded run. The panel shows the same run.Works with
- Claude Code
- Cursor
- Windsurf
- VS Code
- Goose
- OpenAI Agents SDK
- LangChain
Connects to
- Postgres
- HAPI FHIR
- Medplum
- GitHub
- Stripe sandbox
- Slack
- Notion
- Gmail drafts
Product names and logos are trademarks of their owners. Shown to indicate compatibility, not endorsement.
public.orders 500 rows
“Updated order 42. 1 row.”
- The agent said
- 1 row
- Postgres changed
- 301 rows
Doesn't match Postgres changed 301 rows in public.orders. The agent reported 1.
How it works
Not what it asked. What it did.
One run from our demo: a one-row update, a trigger nobody mentioned, and 301 changed rows. Follow it down the page.
-
Step 1 of 6
The agent ships one order.
A support agent sends one UPDATE through Deedglass. Your rule allows a single-order status change, so it runs. The tool answers UPDATE 1, and the agent reports one row.
-
Step 2 of 6
A trigger nobody mentioned fires.
An old trigger on the orders table ships the next 300 open orders too. The agent can’t see it, and its tool still says one row.
-
Step 3 of 6
Postgres commits 301 rows.
Deedglass doesn’t take the agent’s word. It reads Postgres’s own change log and counts every row that transaction changed.
-
Step 4 of 6
Deedglass says Doesn’t match, and shows the diff.
One row was expected. 301 changed, 300 of them outside id = 42. Each row’s before and after goes into a sealed record.
-
Step 5 of 6
A person approves the undo.
Putting rows back is a write too, so your rule asks a person first. Nothing changes until someone approves.
-
Step 6 of 6
All 301 rows go back.
Deedglass puts every row back the way Postgres recorded it, then checks the undo the same way: Matches, Proven.
npx deedglass playFrom our demo: a recorded run of the trigger scene (14 October 2026) and the launch demo’s undo. Order ids, counts and the commit are the run’s; the cell layout is illustrative. npx deedglass play replays it in your terminal and labels which lines are live.
Who it’s for
One tool, three people who have to say yes.
Each gets the part they need. Pick yours.
-
The gate
Platform engineers
Put rules in front of every agent, including coding agents with a shell.
-
The record
Security teams
Get records you can check without trusting us, and the limits in writing.
-
Approvals
Engineering leads
Let teams use agents on production, with one switch to stop them all.
-
The benchmark
Deedglass caught 5 of 11. The 6 misses are listed.
Twelve cases where an AI agent’s report and the database differ, scored from Postgres’s own log.
For platform engineers
A gate for every agent, including the ones with a shell.
- Rules before each call. Put an MCP server behind
deedglass mcp wrap, or wrap a function with the SDK. Rules allow, block or ask a person. - Coding agents too. Once you turn it on, the shell guard asks you first when Claude Code is about to run
prisma migrate reset,DROP TABLEor anUPDATEwith noWHERE. - Watch a session.
deedglass observe runstarts your agent, then prints what Postgres committed on the watched tables while it ran, shell commands included, and saves the SQL to put it back.
The gate adds 5.81 ms to an allowed call at the median, 19.4 ms at p99 (our target was under 5 ms: missed). A write checked at Proven also waits for Postgres’s change log before the agent gets its answer: 118 ms at the median at 100 writes a second. Measured on an Apple M1 laptop. Method
$ npx prisma migrate reset --force
Deedglass asks first: prisma migrate reset drops the database, or every table in it, and applies your migrations again, so its data is gone. What runs where
- The Deedglass server
- One static binary, deedglass serve. Records, rules and the encrypted credential vault live in its own Postgres. No published image yet: build it from a checkout.
- The gate
- deedglass mcp wrap in front of an MCP server, or the SDK around your own function. The agent gets a Deedglass key, not the tool’s credentials.
- The check
- Proven reads your Postgres’s change log through a replication slot. It needs wal_level = logical and REPLICA IDENTITY FULL on the watched tables. The docs give the setting for RDS, Cloud SQL, Supabase, Neon and Azure, as guidance.
- The seal key
- One file on your Deedglass server. The public half lets anyone check records offline.
For security teams
Evidence you can check without trusting us.
- A sealed record of every action. Which agent, for whom, which rule decided, who approved, what changed and what the check found, with SHA-256 fingerprints of the request and result.
- Checked offline. Anyone with the public key can check the records, without an account and without us.
- People approve. Only a person can approve, in the Console, by a one-use email link or a signed Slack click. An agent can never approve itself.
- Credentials stay with Deedglass. The agent gets a Deedglass key; the real credential is encrypted and added only when the call goes out.
How far each system is checked today
| System | Level |
|---|---|
| Postgres | ProvenPostgres’s own change log |
| FHIR servers on Postgres (HAPI FHIR JPA 8.x, Medplum 5.x) | Proventhe server’s own change log |
| MySQL, via Debezium (deedglass witness debezium, run offline beside an action) | Provena Debezium change feed of what MySQL committed |
| GitHub, Slack, Notion, Gmail drafts, other FHIR servers, REST tools with a read-back | Checkedread back after the call |
| Stripe (sandboxes only; a live key is refused) | Checkedread back after the call |
| Other MCP tools, functions wrapped with the SDK | Claimedthe tool’s own answer, recorded as such |
Claimed: the tool said it worked. Checked: Deedglass read the result back from the system. Proven: the system of record’s own change log shows it.
If something goes wrong
Deedglass or its database is down
Agents that go through it can’t act. It fails closed instead of letting calls through.
The shell guard can’t run
The command goes ahead, unchecked. The guard is a second check next to Claude Code’s own rules, not a sandbox.
Nobody answers an approval
It expires after the time the rule sets (30 minutes by default) and nothing runs. The agent is told so.
You need every agent stopped
Stop all refuses every agent’s new actions on every instance within 2 seconds. A call a tool already received still happens.
Someone edits an old record
Each record is linked to the one before, so the chain check names the changed record. Cutting the newest records off the end isn’t visible in the chain alone.
An agent skips Deedglass
An agent that keeps its own credentials isn’t covered. The free scan lists the write paths that don’t go through your rules.
For engineering leads
Say yes to agents on production, with a record of every action.
- One switch. An admin can stop one agent or every agent; only an owner starts them all again.
- No rewrite. MCP agents point at Deedglass instead of the tool. Python and TypeScript agents add one wrapper.
- Free while we grow. Every feature is free on your servers, including the ones that used to be Pro. Anything free today stays free for people who run it themselves.
- If we stop. The core is Apache-2.0 and runs on your servers. Nothing calls home by default, and your records still check offline with your key.
Plainly: Deedglass is an independent systems project by Arjun Prabhakaran. There’s no SOC 2 report, no outside penetration test and no SSO yet. The source is on GitHub.
A pilot in four steps
Scan
Run npx deedglass scan in a repo your agents use. Read-only: it reads only your machine and any database you name.
Watch the demo
npx deedglass play in a terminal, or the browser version. No Docker, nothing sent.
One agent on staging
npx deedglass init, then put one agent’s Postgres or MCP server behind your rules.
Decide
Keep it. Every feature is free while we grow, and design partners receive dedicated direct engineering support.
Set it up
Real commands. Copy, paste, run.
Every line here was run against a published release, deedglass 0.4.0. Every release since is in the changelog.
Grade what your agents can change.
Reads your MCP configs, Claude Code settings, packages and the names of database URL variables, and grades the setup A to F. Read-only: it reads only your machine and any database you name.
Needs Node
npx deedglass scan Ask first before a destructive command.
The plugin adds the Deedglass MCP server, /deedglass:scan, /deedglass:wrap, /deedglass:watch and the shell guard, off until you turn it on in .claude/settings.json. It needs a deedglass binary on your PATH and uses no network.
Needs Claude Code
/plugin marketplace add deedglass/deedglass
/plugin install deedglass@deedglass then in .claude/settings.json: { "env": { "DEEDGLASS_SHELL_GUARD": "ask" } }
Put an MCP server behind your rules.
Every tool call goes to the gate first and runs only if your rules allow it. The key is an agent key: npx deedglass init writes one to .deedglass/quickstart.key.
Needs A running Deedglass server (npx deedglass init)
claude mcp add --env DEEDGLASS_API_KEY=<key> --transport stdio scratch -- \
deedglass mcp wrap --connector scratch -- \
npx -y @modelcontextprotocol/server-filesystem /tmp/deedglass-demo See what a coding session changed.
Starts Claude Code inside a watched session. When it exits you see, per table, the row changes Postgres committed, shell commands included, and the SQL to put them back is saved for you to review.
Needs A Postgres connector with observe on
deedglass observe run --connector <name> --undo-sql ~/deedglass-undo -- claude Govern your own TypeScript tool.
Your function runs only if your rules allow it, at most once, and the outcome is sealed. What your code reports is recorded as Claimed; use a connector for Checked or Proven.
Needs Node 22.12+, Bun, Deno or an edge runtime
npm install @deedglass/sdk
import { Deedglass, wrapTool } from '@deedglass/sdk';
const dg = new Deedglass(); // DEEDGLASS_API_KEY, DEEDGLASS_SERVER
const refund = wrapTool(refundCustomer, { client: dg, tool: 'billing.refund_customer' });
await refund({ customer: 'cus_123', amount: 2000 }); Rules are lines you can read.
Two rules from the demo policy: UPDATE and DELETE need a WHERE clause, and an undo waits for a person. deedglass policy test runs your cases before you push.
Needs Any editor
rules:
- id: block-unscoped-writes
match: { tool: [postgres.query, postgres.execute] }
when: sql.unbounded_write
decision: deny
reason: UPDATE and DELETE need a WHERE clause.
- id: undo-needs-approval
match: { tool: "*.undo", connector_type: postgres }
decision: require_approval
reason: Undoing a write changes data again, so a human confirms it first.
approval: { approvers: [role:admin], required: 1, expires_in: 30m } Measured, not promised
Numbers we can show you, and how we got them.
-
82 of 82
attack cases end the way we wrote down before running them. We wrote the suite and run it ourselves; there has been no outside penetration test yet.
See all of them -
23.5 ms
the longest it took Stop to reach a second server, over 20 tries. Target under 2 s, met.
-
1.53 s
to check 100,000 records and every link between them. Target under 5 s, met.
Check a record -
0 bytes
that the free scan sends to us. It reads your files and, only if you name one, a database, read-only.
Run it
Timings measured on an Apple M1 laptop, plugged in. The attack suite last ran on October 28, 2026.
Pricing
Free while we grow.
-
Always free
- Rules: allow, block or ask a person
- Checks: Matches, Doesn’t match, Can’t check
- Sealed records you can check offline
- Approvals, Stop and Insights
- Undo of one agent action, after a person approves
- deedglass scan and its A to F grade
-
Every feature
$0 while we grow
- The full scan report, on your machine
- Every policy pack, including the ones that used to be Pro
- Undo of a whole watched session in one step
- The security review pack
- The agency view of every org you look after
-
How you get it
- Self-hosted
- Open source
- Community support
Later we will offer paid support, SLAs and a hosted version for organisations. Anything free today stays free for people who run Deedglass themselves. What free means. Cloud beta in November.
What does Deedglass do, in one line?
Rules decide each AI agent tool call; Deedglass checks what really changed and seals a record.
Do I have to rewrite my agent?
No. MCP agents point at Deedglass instead of the tool. Python and TypeScript agents add one wrapper, with ready adapters for LangChain and the Claude Agent SDK, and in TypeScript for the OpenAI Agents SDK and the AI SDK. The agent gets a Deedglass key instead of the tool’s credentials.
Does it slow my agent down?
The gate adds 5.81 ms to an allowed call at the median and 19.4 ms at p99, measured on an Apple M1 laptop (our target was under 5 ms: missed). A Postgres write checked at Proven also waits for Postgres’s change log before the agent gets its answer: 118 ms at the median at 100 writes a second.
What does “Can’t check” mean?
We couldn’t read the result from the real system, so we say so instead of guessing. Connect that system and the same action gets checked.
What leaves my machine?
Nothing, by default. Deedglass runs on your own servers with your own Postgres. Every feature is free while we grow, so nothing checks a licence and nothing is sent to deedglass.com. The scan reads only your machine and any database you name. The deedglass licence commands, kept for a later paid option, are the only ones that call Dodo Payments or deedglass.com, and only when you run them. DEEDGLASS_NO_NETWORK=1 stops those calls. Every outbound call, and what turns it on, is listed on the security page.
What does it cost?
Nothing. Every Deedglass feature is free to use while we grow, including the ones that used to be Pro. Later we will offer paid support, SLAs and a hosted version for organisations. Anything free today stays free for people who run Deedglass themselves.
Can Deedglass protect healthcare and clinical records?
Yes. Deedglass Health provides write verification for FHIR R4 resources, ABDM, NHCX bundles, and hospital databases. High-risk clinical changes can require doctor approval before execution, with sealed records for quality and audit review.
What if Deedglass the company stops?
The core is Apache-2.0 and runs on your servers with your own Postgres. Nothing calls home by default, and your records still check offline with your public key.
Who is behind it?
Deedglass is an independent systems initiative founded by Arjun Prabhakaran to establish physical ground truth for autonomous AI agents. The core engine is open source under Apache-2.0, published on GitHub, and runs directly on your infrastructure with zero external telemetry.
Start here
Know what your agents really did.
Start with the free scan. It reads only your setup and any database you name.
