Re-engaged. Nadia responsive again after the portfolio review. Climate Week meeting being set. We would not call this diligence yet.
Pull requests for AI changes to business records.
Your agent proposes. A human approves. A separate merge engine writes — the agent is never issued a write credential.
“Prediction: systems of record will need to become AI harnesses or face replacement by agents”
Nothing failed. Every API call succeeded.
An agent with a write token updated a deal’s close date at 2:14 am, off a misread email. The forecast moved a quarter. Nobody knew until the pipeline review, eleven days later.
The problem is not that agents propose bad changes — reviewers exist for that. The problem is that a write credential turns a proposal into a fact, silently, with no diff, no evidence and no signature.
02:14:07 agent.write Opportunity "Northwind" · Close date 2026-11-30 → 2026-09-30 token: crm_admin (full write) · evidence: — · reviewer: — +11 days forecast review — variance traced to one record root cause: "targeting end of Q3" meant their fiscal Q3
Four gates. Three of them can stop it.
A batch of proposed changes, each with its cited evidence, a stated reason and a confidence score. No write happens here — or anywhere the agent can reach.
Twelve rules produce a verdict per change; named, signed signals produce the risk score. Schema violations are blocked before a reviewer ever sees them.
Diff, evidence and verdict side by side. Approve, reject with a note, or ask for context. Batch approval by policy class — never a bypass.
Against live record state, immediately before the write. A record that moved since review — or became immutable — fails closed and is audited.
Approved changes only, by the sole holder of the write credential. Before/after snapshot and evidence references land in the append-only audit trail.
The agent reads whatever it likes. Reads are not the mechanism.
What it cannot do is write. And what it cannot do is tell ActionsLedger what a record currently says: the ledger reads the record itself and computes the before side of every diff. A fabricated "current value" has nowhere to land.
The merge worker is the sole holder of the write credential. Not the agent, not the ledger’s read path, not the reviewer’s browser.
The agent cited evidence that argues against its own proposal.
A real case from the review console: the agent proposes advancing an investor from 04. Dataroom Access to 05. Initial Due Diligence. Confidence 71%. Risk 87/100. One of its own two citations reads: "Re-engaged. Meeting being set. We would not call this diligence yet."
The reviewer sees it in three seconds and rejects.
Verifiable citations defeat fabrication, not bad reasoning. The machine did not catch this — a human did, fast, because the verbatim excerpt sat next to the diff. That is the claim, and it is the honest one.
Twelve deterministic rules. The most restrictive verdict wins.
Auto-approval is an allowlist, not a fallback. The same twelve rules cover every system of record; a PolicyProfile names which properties carry stage, money, ownership and personal data in a given schema.
// Auto-approval is an allowlist, not a fallback. { id: "rule.stage.review", statement: "Changing Stage always requires human review, regardless of confidence.", maxOutcome: "needs_review" }
{ "change": "chg-n5", "policyResult": "needs_review",
"risk": { "score": 87, "level": "high",
"signals": [
{ "Action type: change_stage", +40 },
{ "Property sensitivity: Stage", +20 },
{ "Agent confidence 71%", +12 },
{ "2 corroborating sources", 0 },
{ "Affects revenue forecast", +15 } ] } }Onboarding a new system is one implementation and one profile.
Nothing else changes — not the policy engine, not the review console, not the audit trail. Two guarantees fall out of the schema descriptor with no per-system code:
- 01An agent cannot invent a select option that does not exist. Closed option sets are read from the schema and enforced on every property a change would write.
- 02Computed properties are refused. Formulas and rollups are marked read-only by the descriptor; a write to one is blocked before it reaches a reviewer’s queue.
interface SystemConnector { describeSchema(): Promise<SchemaDescriptor> // props, options, computed readRecord(id): Promise<BusinessRecord|null> versionOf(record): string // Last edited | Modstamp | xmin applyChange(change, ctx): Promise<WriteOutcome> }
Every event commits to its predecessor.
Sequence-numbered, hash-chained, exportable as SOC 2 evidence. A rejected change is retained forever. A refused merge is recorded as deliberately as a successful one — on an audit surface, the writes that didn’t happen are half the story.
prev: sha256:b81d44…
The credential inventory is the security model.
One component can change a record. Everything else says "no path" — not "policy forbids it", but "there is no credential with which to do it." Self-hosted and VPC deployment on the Enterprise tier; hosted is single-tenant per workspace.
The full credential model, on the Security page →100 proposed changes/mo, 30-day audit retention. Shadow mode included.
Unlimited systems and changes, 1-year audit retention, policy editor.
SSO/SAML, roles, segregation of duties, hash-chained audit export, 7-year retention.
Custom connectors, configurable retention, DPA, SLA.
We charge per reviewer, never per proposed change. Volume pricing would make you think twice about letting the agent look at more of your workspace — which is exactly backwards.
Q1What if the agent is bad?
Shadow mode. It proposes, nothing merges, and you see the approval rate before you grant anything. A bad agent costs you reading time, not data.
Q2Won't reviewers just rubber-stamp?
Batch approval by policy class, so humans only see what needs a human. And the honest answer: rubber-stamping is the failure mode we design against hardest — it is why evidence sits next to the diff instead of behind a click.
Q3Why not a runtime policy gate on tool calls?
A gate must be right about every call, in the moment, with no reviewer. A custody boundary has to be right about one thing: who holds the token. We chose the smaller thing to have to be right about.
Q4Do you store our data?
Records, no — read on demand. Cited source excerpts, yes, immutably, so the audit trail still resolves in five years. Retention windows per tier are on the pricing page.
Q5Self-hosted?
Enterprise tier. Same codebase, your VPC, your keys. The credential inventory above doesn't change — it just all runs on your infrastructure.
No magic. A policy engine, an evidence pack, and a signature on every write.
Free tier, shadow mode by default: the agent proposes, nothing merges, and you see the approval rate before you grant anything.