Ceded reinsurance is audited from the outside in. The external auditor samples recoverables and asks for the bill. The reinsurer's claims team asks when they were told. The regulator asks for Schedule F and then for the support behind a line. In each case the question is not only “what is the number” but “who decided, on what, and when”.
Once agents prepare part of that work, the question gets a new branch: which parts did a machine prepare, at what level of authority, and which did a person approve? InsightCede answers it by refusing to let an agent do anything that is not written down.
Three records for every piece of work
Every time an agent runs, whatever happens, a run row is written: who it ran as, at what level and what limited it, the prompt it read, the model, tokens, cost, latency, the trace id and the outcome. If it found something for a person, it writes a decision row: the subject, the money, the evidence, the proposal and the explanation. And when a person answers, the answer is written back to the decision and recorded as feedback against the agent and action, which is what the autonomy roll-up reads.
erDiagram
AGENT_RUN ||--o| AGENT_DECISION : prepares
AGENT_DECISION ||--o| HELD_MESSAGE : "holds a send"
AGENT_DECISION ||--o| PULLBACK_WINDOW : "opens at L3"
AGENT_DECISION ||--o| FEEDBACK : "answered as"
FEEDBACK }o--|| AGENT_STATS : "rolled up into"
AGENT_RUN {
string agent_code
string autonomy_level
string limited_by
string prompt_version
string model
float cost_usd
string trace_id
}
AGENT_DECISION {
string title
string evidence_json
string proposal_json
float amount
string decision_status
string decided_by
string delta_json
}
Every row the agent writes during the run is also stamped. The run happens inside an
acting context: created_by and modified_by become
agent:<code>, and the row's properties carry the full actor — the agent,
its level, and, when a person's acceptance applied the proposal, who approved it and on whose
behalf. The listener fires only while an agent identity is current, so a person's own request
is never re-stamped. An in-process call the agent makes is made with a short-lived token
carrying an act claim, minted by the identity package and never taken from a
request.
What one run looks like
This is a real run record from the demo programme — a demo US property-casualty carrier, not a customer — read from the live API. It is the collections agent's chaser to Munich Reinsurance America for $15,730,529.
| Field | Value | What it answers |
|---|---|---|
agent_code · action | collections_agent · send_chaser | Which agent, doing what |
trigger · actor | schedule · jobs | Why it ran: the scheduled settlement step, not a person |
level · limited_by | L2 · agent | The authority it had, and that the agent's own setting was the binding limit |
prompt_name · prompt_version · prompt_source | collections.chaser · db-v1 · db | Which instructions it read, and that they came from the product's own row |
model · llm_calls | us.anthropic.claude-haiku-5-5 · 1 | Which model wrote the explanation and draft |
tokens · cost_usd · latency_ms | 501 in, 1,251 out · 0.000676 · 6,850 | What it cost and how long it took |
trace_id | none | No Lense trace: the exporter is off in the demo |
outcome · decision_guid | prepared · f6b663e9… | It stopped and asked; the decision it wrote |

The decision row, and its states
A decision row is what a person reads and answers. Its evidence is a list of label, value and source — every figure with the ledger table it came from and a link into the ledger where there is one. Its proposal says what accepting does: a send with recipients and a draft, a strike, a programme fix with steps, a credit proposal, a Schedule F draft. Its amount is the money at stake and the queue's first sort key; its deadline depends on the step, from two days for erosion notices to fourteen for programme work.
| Status | How a decision gets there |
|---|---|
| open | Prepared and waiting for a person |
| accepted · changed · rejected | A person's answer, with decided_by, decided_at, and for a change the delta they made |
| asked | Not used as a final state: an Ask appends the question to the note and the decision stays open, with no feedback recorded |
| acted | Acted at L3 or L4; for L3, after the pull-back window closed |
| noted | Explained, nothing for a person to answer — a clean cession is noted on the event, not queued |
| superseded | A later run prepared a different proposal for the same subject; an unchanged one is left alone |
| expired | Still open fourteen days past its deadline, so the queue stays honest; the agent prepares anew |
A decision pulled back inside its window does not get a status of its own: the held message is cancelled, the decision reopens at L2, and the note says who pulled it back. A send that fails on release is parked the same way, back with a person, never retried blind.

The dial is a record too
Changing what an agent may do is written down the same way. Setting a level or switching an agent off needs a manager or an administrator and a reason; the request is refused without one. The autonomy row keeps who set it, when and why, and an automatic demotion is written by the roll-up under its own name with the sentence that justified it — “People agreed with only 13 of 22 answers (59%) in 30 days” — so a level that moved without a person is distinguishable from one a person moved. Accepting a promotion records the recommendation it accepted. The ceiling is the one setting that is not on the page: it is the deployment's environment, changed by whoever changes the deployment.
One flow, end to end
| Use case details | A person answers a prepared decision |
|---|---|
| Trigger | A person presses Accept, Change, Reject or Ask on an open decision |
| Actor(s) | The analyst or manager answering; the agent whose proposal is applied |
| Agent | Whichever prepared it; the act on acceptance runs as that agent, approved by the person |
| Grounded in | The decision's own evidence and proposal, as prepared |
| Prepares | Nothing new: the answer applies or cancels what was prepared |
| Checkpoint & default level | The decision's level. At L1 accepting applies nothing unless the person asks it to act; at L2 it applies |
| What a person decides | The answer, a reason code, a note, and for a change the field they changed |
| What is recorded | The answer on the decision; feedback against the agent, action and line (not for Ask); the held message released or cancelled; every row written stamped as the agent, approved by the person |
When the model did not write it
If the model is switched off, unreachable or over its daily budget, the run still completes on the facts alone and the explanation ends with a sentence that says so: “(The model did not write this explanation: … The evidence stands on its own.)”. The step records a deterministic stand-in call. Nobody reading the record can mistake a template for the model's words.
A figure comes from a committed row or it is not in the record. A contact comes from the reinsurer master or the draft has no addressee.
What it does not do
- The prose is instructed, not checked figure by figure. Every agent's prompt says to use only the evidence and cite it, and the evidence and amount come from the ledger. But the platform's grounding guard — which throws away model text containing any number not in the facts — is not yet called by Cede's agents. In the demo, the counterparty agent's explanation states that Munich's excess over the 25% limit is “about $2,621,755”, a figure it calculated. It is right ($15,730,529.10 less $13,108,774.25), and nothing checked it.
- The demo has no traces and no released prompts. The Lense exporter is off unless
an endpoint is set, so
trace_idis empty, and InsightPrompts is not configured, so every run read the product's own prompt row (db-v1). - The prompt text itself is not kept. Traces carry no prompt or response text unless capture is switched on. What the model saw is reconstructed from the evidence and the prompt version, not read back verbatim.
- Model and cost live on the run, not the decision. They join on the run guid. A report on decisions alone will not show what they cost.
- The dial's own history is short. An autonomy row records who set it, when and why, and keeps its last twenty changes in its properties; anything older is in the audit of the change, not on the row.