Governed backend for AI agents

Agents propose.
Humans approve.
Nothing ships unheld.

A preventive approval gate for every agent write — in a governed spreadsheet on its own, or wired to Postgres, MySQL, BigQuery, Snowflake. Protected outputs wait in PENDING; you approve per cell, per write.

Request early access

The invariant:  a protected output never publishes on the strength of an unapproved agent write.

sheet · revenue_forecast agent: fp&a-bot
lineQ2Q3
Bookings1,040,0001,120,000
Net revenue980,000 1,240,0001,880,000Pending
Gross margin62%64%
agent proposes Net revenue · Q3 → 1,880,000
14:22:07 · APPROVE · human:anton · cell Q3 · sha256 9f3a…c1 ◇→ 7b1e…

Live: propose → hold → approve → commit

Why the name

To hold the pen is to have the final say — the hand that signs. Agents are fast with a pen; Penholder keeps it in yours. Every write they propose is held — pending — until you take the pen back and approve.

The term is borrowed from diplomacy: at the UN Security Council, the penholder is the delegation that leads a resolution — the one who drafts and holds the pen on its text. Here, that pen stays with a human.

Agents draft. You hold the pen.

The third option

Agents are fast.
Production is unforgiving.

Give an agent write access and one bad row can silently move a number you report on. Take it away and it's a toy. Penholder is the third option: agents draft, a human signs off, and nothing protected publishes until then.

How it works

Propose → Hold → Approve → Commit.

A gate, not a rollback. The change is caught before it lands — per cell, per write.

01 · PROPOSE
Agent proposes

An agent is a first-class principal — per-cell ACL, provenance. It proposes an edit or a database write. It never gets raw credentials.

02 · HOLD
Held in PENDING

Protected outputs freeze. A bad upstream input holds everything derived from it — taint stops the silent recompute.

03 · APPROVE
Human approves

You review current vs proposed and approve per cell, per write. Approve or reject. The human keeps the last word.

04 · COMMIT
Fail-closed commit

Only on approval does it commit — fail-closed on conflict, and hash-chained into a tamper-evident op-log.

However you run it

Start with a sheet. Add your data when you want.

The spreadsheet is a first-class governed store on its own. Databases are optional — read from many, write back to any. Use one layer or all three; the gate is the same.

Layer 1
Governed spreadsheet

The grid is the store. Agents propose, you approve. Op-log, taint, per-cell ACL and a tamper-evident audit — all on a plain sheet. No database required.

Layer 2
Compose many sources

Pull rows from Postgres, BigQuery, other workbooks into one governed model. Bring scattered data together in a sheet — read exactly what you need.

Layer 3 · optional
Writeback to your DBs

When you're ready, approved changes commit back to your real databases — fail-closed on conflict, hash-chained. The top of the ladder, not the entry ticket.

One gate — whether it's a cell or a database.

Connectors · read in, write back

Bring data in from anywhere. Write back when you approve.

Writeback is optional
Live in beta
Postgres MySQL SQLite BigQuery Snowflake
On the roadmap
Databricks Redshift ClickHouse SQL Server Supabase MariaDB DuckDB Oracle

Compose one governed sheet from many sources — then, when you're ready, push approved changes back. Agents get a proposal channel, not raw credentials; fail-closed on conflict; every write hash-chained. Row-mutation for OLTP, append-only for warehouses. Plenty of teams never leave the sheet.

one gate · every write
Preventive, not reactive

Hold before publish. Not undo after damage.

The reactive approach
  • Undo & rollback — after it already landed
  • An audit log you read after the fact
  • Read-only database connections
  • Whole-model diffs, not the one cell that matters
Penholder
  • Hold-before-publish — the write is caught first
  • Per-cell approval gate — approve exactly what moved
  • Governed writeback to your production database
  • Tamper-evident op-log — provable, not just logged
Tamper-evident

An audit trail that can't be quietly rewritten.

Every proposal, approval, and commit is hash-chained. Break a link and it shows. Provenance and delegation are recorded per principal — human or agent.

op-log · revenue_forecastchain verified ✓
14:22:07 · APPROVE · human:anton · cell Q3 · 9f3a…c1 ◇→ 7b1e…
14:22:03 · HOLD · derived · Net revenue · taint from C7
14:21:58 · PROPOSE · agent:fp&a-bot · cell Q3 · 1,240,000 → 1,880,000
14:20:11 · COMMIT · db:postgres · customers.mrr · txid 8841 · 7b1e…
Where it earns its place

Who holds the pen.

Finance

Close numbers no agent can move without sign-off. Forecasts, consolidations, commissions — proposed at machine speed, published only on approval.

Ops

Let agents update records at scale and approve the exceptions. Writes land in your CRM or database only after a human clears them.

Risk & Data

A preventive gate and a provable log for every automated write — the maker/checker control regulated work already requires.

Security

Your data stays yours.

Agents can propose. They never hold the keys — and no one outside your account sees your data. Governance and privacy are the same posture, not a bolt-on.

Agents never hold the keys

An agent gets a proposal channel — not your database logins or API keys. A rogue agent can propose a change; it can't connect to anything.

Credentials stay out of the log

Connection secrets live in an encrypted, account-scoped store — never written to the op-log, never visible to an agent or a reviewer.

Isolated by construction

Each account's workbooks are byte-isolated. No request can name another tenant's data, and reads are gated per cell, per reader.

No side doors out

Outbound connections are SSRF-guarded — a bound source can't be pointed at an internal address or a cloud metadata endpoint.

Signed, tamper-evident audit

Every action is hash-chained and HMAC-signed. Break a link and it shows. Provenance is recorded per principal — human or agent.

Numbers computed, not guessed

A deterministic engine does the math; agents propose structure and inputs. No protected figure is ever an LLM's guess.

Hosted · closed beta · by request

Give your agents production access. Keep the last word.

Penholder is a hosted service, not a repo. We're onboarding design partners hands-on — a working system, wired to your data, with the gate in your control.

Tell us which databases you run in production and what you'd hand an agent first. We'll set up a live demo on your scenario.

No self-serve, no credit card. We reply to design-partner fits within a few days. By requesting access you agree to our Privacy Policy.

Keep the pen.

Agents draft. You hold the last word. Nothing protected ships until you say so.

Request early access