Indestructible by design
DROP TABLEwrites a layer, doesn't lose data. Truncates, bad migrations, runaway updates — all recoverable down to the row, structurally. There is no “disable history” switch because history is the storage model.
Every state preserved. Every change attributed. Every mistake reversible — by session, by agent, by minute. Sandstone is wire-compatible Postgres, indestructible by design.
Each layer is a session. None of them are ever erased.
DROP TABLEwrites a layer, doesn't lose data. Truncates, bad migrations, runaway updates — all recoverable down to the row, structurally. There is no “disable history” switch because history is the storage model.
Every connection carries identity, session, and prompt as first-class metadata. Query “what did claude-code touch on Tuesday” as cleanly as you query “rows where status equals active.”
Speaks the Postgres protocol. Works with psql, Prisma, SQLAlchemy, Drizzle, anything. No driver changes. No new query language. The extras are extensions to the SQL you already write.
Sandstone exposes time, branches, and agent identity through the same SQL surface you already use. Connection variables tag every write. AS OF reads any past state. One stored procedure reverts a single agent session without touching legitimate writes around it.
No new client. No vendor lock at the protocol layer. If you ever need to leave, your data exports back to vanilla Postgres — with the history as a sibling schema you can keep or drop.
-- tag every write with agent identity SET sandstone.agent = 'claude-code'; SET sandstone.session = '3a4f-deploy'; SET sandstone.prompt = 'add email index to users'; -- read any moment of any table SELECT * FROM users AS OF '2026-05-08 14:00'; -- selective revert: undo one session, nothing else CALL sandstone.revert_session('3a4f-deploy'); -- branch a database in milliseconds, hand it to an agent CALL sandstone.branch('main', 'agent-sandbox-9b21');
SELECT table_name, op, ts FROM sandstone.changes WHERE agent = 'claude-code' AND ts > NOW() - '1 hour'::interval;
SELECT * FROM orders AS OF '2026-05-05 09:00:00';
CALL sandstone.revert_where( agent_pattern => 'agent:%', since => NOW() - '30 min'::interval );
SELECT * FROM sandstone.diff_sessions( '9b21-refactor', '3a4f-deploy' );
Private beta. Limited slots. Migration tooling included. We onboard ten teams a week.