REFERENCE ARCHITECTURE

A P&C carrier, component by component: where the agents sit and who watches them

The ten components of a property and casualty carrier, the agent workstations that sit on them, and a full worked day: a renewals alert at 08:40 followed through ops triage, a developer, an auditor and compliance — six roles, one set of records.

Architecture 24 min read Key figure · 6 roles, 1 incident, 1 thread All posts

A property and casualty carrier is not one system. It is nine or ten distinct functions, each with its own queue, its own authority, its own regulator and its own definition of a bad day. When you put AI agents into that operating model, the question is not "where does the AI go" — it is which seat does it occupy, what is it allowed to do from that seat, and who is watching.

This is the reference architecture we run at Vsure: the components of the carrier, the agent workstations that sit on them, and which InsightLense view each team actually opens. It is the post to forward to the colleague who asks "yes, but how would this work here".

The components

Every carrier has these, whether or not they are separate systems. The names differ; the responsibilities do not.

ComponentOwnsFails as
DistributionProducers, appointments, commissions, submission flowBusiness you never saw
Clearance & intakeReceiving, deduplicating and triaging submissionsTwo underwriters quoting the same risk
UnderwritingAppetite, risk assessment, rating, quoting, referral, bindingMispriced risk on the book
Policy administrationIssuance, endorsements, cancellations, reinstatements, renewalsCoverage that does not match the contract
Billing & premium auditInvoicing, receivables, exposure audit at expiryPremium leakage
ClaimsFNOL, coverage, reserving, investigation, settlement, closureReserve inadequacy and leakage
RecoverySubrogation, salvage, deductible recoveryMoney left on the table
Ceded reinsuranceTreaty and facultative placement, cessions, recoveriesRetained loss you thought was covered
ActuarialReserving, rate adequacy, experience analysisA reserve opinion nobody can support
Finance & complianceStatutory reporting, filings, market conductA finding

Notice that every failure mode in the right-hand column is a money or contract failure, not a software failure. That is the whole reason agent observability in this industry cannot stop at the model call: nobody at a carrier has ever been asked to explain a token count.

The workstation

The unit that makes this tractable is not "an agent". It is a workstation — a named seat in the operating model, which a human or an agent occupies.

Definition

A workstation has four properties, all of them independent of who is sitting at it: a queue of work it is responsible for, a set of capabilities it can invoke, an authority level per capability, and a manager it escalates to. An actor — agent or person — occupies a workstation and inherits its constraints.

This framing matters more than it sounds, for three reasons.

It is how carriers already think. Desks, seats, books of business, referral authority — the vocabulary already exists and it already has an authority model attached. You are populating an existing structure, not inventing one.

It makes agent and human interchangeable at the boundary. The same seat can be staffed by a person on Monday and an agent on Tuesday without any permission change, because the authority belongs to the seat.

It gives observability a stable subject. "What did CL-DOKAFOR do" is a question about an actor who may be replaced. "What happened at the adjuster workstation this quarter" survives staff changes, model upgrades and prompt rewrites — which is what an auditor is actually asking.

Where the workstations sit

flowchart TB
    subgraph front["Front office"]
        D["Distribution"] --> CL["Clearance
and intake"] CL --> UW["Underwriting"] UW --> PA["Policy
administration"] end subgraph back["Servicing"] PA --> BA["Billing and
premium audit"] CLM["Claims"] --> REC["Recovery"] CLM --> CED["Ceded
reinsurance"] end subgraph control["Control functions"] ACT["Actuarial"] FIN["Finance and
compliance"] end PA --> CLM BA --> FIN CED --> FIN CLM --> ACT LENSE["InsightLense — runs, authority decisions, business events, scores
one thread per policy, claim or submission"] front -.-> LENSE back -.-> LENSE control -.-> LENSE style LENSE fill:#14162b,stroke:#4b34e0,color:#fff style front fill:#efecfe,stroke:#4b34e0 style back fill:#e2f5f9,stroke:#0e97b0 style control fill:#fbede3,stroke:#b4531b
The observability layer is horizontal, not a component. It is not another system in the flow — it sits underneath all of them, keyed on the same business references the components already use, which is why one query can cross from a submission to a cession.

Here is the staffing, workstation by workstation. Authority levels are the ones we actually run; yours will differ, and the levels themselves are the interesting conversation.

WorkstationComponentKey capabilitiesAuthority
Broker deskDistributionfind_prospects, assemble_package, submitL1 draft, L2 open account
Clearance deskIntakededuplicate, triage, assignL2
Underwriting deskUnderwritingcheck_appetite, rate, quote, bindL2 to limit, refer above
Policy servicesPolicy adminendorse, cancel, reinstate, renewL3, notify after
Premium auditBillingrequest_records, compute_exposure, adjustL2 within band
FNOL deskClaimstake_notice, verify_coverage, assignL2
Adjuster deskClaimspost_reserve, settle, closeL2 to $50k, escalate above
Recovery deskRecoveryidentify_subro, pursue, settle_recoveryL2
Ceded deskReinsuranceallocate_loss, cede, track_capacityL3, capacity-bounded
Referral deskCross-cuttingapprove, decline, set_limitL3 / L4 — human

The last row is the important one. The referral desk is a workstation like any other — it just happens to be staffed by a person, and it appears in the same records as the rest.

One piece of work, crossing five components

A submission becomes a policy becomes a claim becomes a cession. Each hand-off crosses a component boundary, and each boundary is where threading either holds or breaks.

sequenceDiagram
    autonumber
    participant BD as Broker desk
    participant UD as Underwriting desk
    participant RD as Referral desk
(human) participant AD as Adjuster desk participant CD as Ceded desk BD->>UD: submission VS-2027-0832950 UD->>UD: appetite, rate, quote UD->>RD: rate change +31% — refer RD-->>UD: approved with note UD->>UD: bind → policy POL-2027-4471 Note over UD,AD: same thread continues
onto the policy AD->>AD: FNOL → claim CLM-2027-0418 AD->>RD: settle $58,000 — above L2 RD-->>AD: approved AD->>CD: loss exceeds retention CD->>CD: allocate to treaty layers Note over BD,CD: five components, two humans,
one continuous record
Two human decisions inside an otherwise automated flow. Both are recorded in the same thread as the agent work around them — which is the property that makes the sequence auditable rather than merely logged.

Who watches what

This is the part that decides whether an observability layer gets used or becomes a dashboard nobody opens. Different teams want genuinely different things from the same underlying records.

TeamThe question they actually askInsightLense capability
Underwriting ops Is the queue moving, and why did this risk refer? Authority records, escalation rate per capability, thread view
Claims ops Are reserves adequate, is there leakage, what is cycle time? Business ledger with old/new values, ledger assertions
Actuarial How did reserves move, and who moved them? Business events filtered to reserve, actor kind dimension
Reinsurance Did every loss allocate correctly, how much capacity is left? Cession events, capacity alerts
Finance What does the AI cost, and does it reconcile to the invoice? Derived cost, per-actor budgets, cost per business outcome
Compliance & audit Agent or human, which exceptions, who approved, can it be altered? Actor kind, escalation join, append-only ledger
Platform / SRE Why did this run stall, what did it cost, where is the latency? Run traces via OTLP, step tree, spend
AI engineering Did the prompt version we promoted actually perform better? Prompt version evidence, scores, judge/human agreement
Executive How much is autonomous, how much value does it touch, what broke? Actor rollups, value moved, incidents

Nine teams, one store. The reason this works is that all nine questions are filters over the same four record types described in the data model post — nobody is running a separate pipeline, and nobody's number disagrees with anybody else's.

What this looks like in InsightLense

Two views, from opposite ends of the building, over identical underlying data.

Workstation overview Q1 2027 2 desks need attention
WorkstationStaffed byWork itemsEscalatedCost / itemStatus
Broker deskagent1,2040%$0.31healthy
Underwriting deskagent1,20414%$0.52healthy
Policy servicesagent882%$2.42cost outlier
Adjuster deskagent77565%$0.18healthy
Ceded deskagent3120%$0.09healthy
Referral deskhuman216approves 97%
Two findings on one screen. Policy services costs eight times what any other desk does per item. The referral desk approves 97% of what reaches it — which means some limit below it is set too tight and supervisor attention is being spent on nothing.

An underwriting manager reads that top-down. An auditor opens the same data from the other end, filtered to a single policy, and gets a chronology instead:

Thread POL-2027-4471 5 components · 2 human decisions
08 Janunderwritingquote_issued — rate change +31%
08 Janauthorityrate_change — referred to UW-MANAGER-01
09 Janauthorityapproved by human — "loss history supports"
09 Janpolicypolicy_bound — $1.84M premium
22 Marclaimsreserve_changed — $50,000$250,000
14 Aprcededloss_ceded L1 — $15,000,000
Underwriting, policy admin, claims and reinsurance in one chronology. Four systems, one identifier, including the underwriting manager's note from January sitting next to the cession in April.

A worked day: one alert, six roles

Everything above is structure. This is what it looks like when something goes wrong on a Tuesday — one real incident, followed from the first monitor through to the compliance sign-off six weeks later. Each stage shows the view that person actually opens.

08:40 — Pipeline monitoring

The operations lead starts on the pipeline board. Three flows carry essentially all of the carrier's work: submissions in, claims through, renewals out. Each is a queue with a throughput, a cycle time and a referral rate, and the job at 08:40 is to spot which one is not behaving like yesterday.

Pipelines today vs 30-day median 1 alert firing
PipelineIn flightCleared 24hCycle timeReferral rateStatus
Submissions142614.2h14%normal
Claims88372.1d65%normal
Renewals2031200.9h0%alert
Two numbers on the renewals row are wrong together. Cycle time has dropped to 54 minutes and the referral rate is zero — against a 30-day median of 6% referral. Faster and smoother looks like an improvement on any throughput dashboard, which is exactly why this needed an alert rather than an eye.

This is the failure mode that operational dashboards are worst at. Throughput up, cycle time down, error rate flat — every conventional signal says the renewals desk had a good night. The only thing that says otherwise is a control that has stopped producing records.

08:41 — The alert

The rule that fired is not a threshold on a business metric. It is a coverage rule: for a control that is supposed to gate an action, compare the number of actions that should have tripped it against the number of authority records actually written.

Alert · INC-2027-0114 control coverage breach opened 08:41
rulecoveragerenewal_rate_change — actions over threshold must produce an authority record
window18hsince 14:20 yesterday
expected14 referrals (rate change above +25%)
observed0 authority records
exposure14 policies · $4.12M premium bound without referral
first14:22POL-2027-4471 — rate change +31%, bound, no referral
The alert names the exposure, not just the anomaly. $4.12M of premium bound without the referral the underwriting authority requires — which is the number that decides whether this is a Tuesday-morning ticket or a phone call to the chief underwriting officer.

A control that stops firing produces no errors, no failures and no latency. The only evidence is an absence, and absences need a rule that is looking for them.

08:52 — Ops triage: business problem or system problem?

The first question is not "what broke". It is whether the rate changes were genuinely above the threshold — because if the rating engine had started producing wrong numbers, that is a completely different incident with a much larger blast radius.

The ops lead opens one affected policy as a thread. This is the moment the three record types earn their keep: the business event says the rate change was +31%, and the authority section is empty.

Thread POL-2027-4471 authority records: 0
14:21:58runrenewal agent — 9 steps, $0.14
14:22:03businessrate_computed — expiring $1.40Mrenewal $1.84M (+31.4%)
14:22:03authority— no record —
14:22:04businesspolicy_renewed — bound, $1.84M
One second between the rate being computed and the policy being bound. The rate itself is correct and the agent did nothing wrong — it was never asked to refer, because nothing asked it.

That settles the triage in about ten minutes. The rating is right, the agent behaved correctly, and the defect is in the software between the two. Ops pauses the renewals desk, writes the exposure into the incident, and hands it to engineering.

Why ops could answer this without an engineer

The distinction between "the numbers are wrong" and "the control is not running" is the single most valuable triage an operations team can make, and it usually requires a developer because the evidence lives in logs. Here it is two adjacent rows in a view built for non-engineers.

09:20 — The developer

Engineering picks it up with the thread already narrowed to one policy and one second. The run view shows what the agent did; the question is what the product did between step 7 and step 8.

Run POL-2027-4471 9 steps · 3,180 tokens · $0.14
StepNameTypemsResult
6compute_rate_changetool210+31.4%
7check_renewal_authoritytoolnot invoked
8issue_renewaltool640200 bound
9finishllm380completed
Step 7 is a gap, not a failure. The capability exists and the agent has it, but nothing in the renewal path calls it — so there is no failed call to find in a log, only a step that never happened.

From there it is ordinary debugging. The developer pulls the control coverage view, sees that renewal_rate_change is the only control in the book with a coverage gap, and traces it to a refactor: an early return added for a different case moved the enforcement branch into a helper that the renewal path no longer calls. The fix is one branch, plus making the decision a required argument of issue_renewal so a future refactor cannot silently drop it again. That reasoning is set out in full in the control that was computed but never enforced.

Fix ships at 14:10. The coverage alert clears on the next window. Total elapsed: five and a half hours, of which about forty minutes was investigation — the rest was review and deploy.

The hand-off, end to end

flowchart LR
    M["08:40 Ops
pipeline board
renewals anomalous"] --> A["08:41 Alert
control coverage
$4.12M exposure"] A --> T["08:52 Ops triage
thread view
rating fine, control missing"] T --> D["09:20 Developer
run view
step 7 never invoked"] D --> F["14:10 Fix shipped
decision now required"] F --> AU["Week 6 Auditor
exception register
enumerate the 14"] AU --> C["Week 6 Compliance
filed-rate check
attestation"] style M fill:#efecfe,stroke:#4b34e0 style A fill:#fbede3,stroke:#b4531b style T fill:#efecfe,stroke:#4b34e0 style D fill:#e2f5f9,stroke:#0e97b0 style F fill:#e2f5f9,stroke:#0e97b0 style AU fill:#fbede3,stroke:#b4531b style C fill:#fbede3,stroke:#b4531b
Six roles, one thread, no hand-off document. Each stage narrows the same records rather than translating them into a new artefact — which is why the auditor six weeks later is reading the same rows the ops lead read on the morning.

Week 6 — The auditor

Quarterly control testing. The auditor is not interested in the outage; they are interested in the population. Fourteen policies bound without a required referral is a control exception, and the test is whether the carrier can enumerate the affected population exactly, say what was done about each one, and demonstrate that the control now works.

None of that requires engineering involvement, because the ledger is append-only and the window is bounded by two timestamps.

Exception register control = renewal_rate_change 14:20 21 Jan → 14:10 22 Jan export: CSV
PolicyRate changePremiumReferralRemediationClosed by
POL-2027-4471+31.4%$1.84Mmissingreviewed 23 Jan, upheldUW-MANAGER-01
POL-2027-4478+27.1%$0.42Mmissingreviewed 23 Jan, upheldUW-MANAGER-01
POL-2027-4492+44.8%$0.61Mmissingre-rated, endorsement issuedUW-MANAGER-01
…11 more+25.4% – +38.2%$1.25Mmissingreviewed 23 Jan, upheldUW-MANAGER-01
Thirteen upheld, one re-rated. The highlighted row was outside what the manager would have approved, so an endorsement corrected it — and because corrections are new events rather than edits, both the original binding and the correction survive with their own actors and reasons.

The auditor's three questions and where each is answered:

QuestionAnswered byEffort
Is the population complete? Ledger query bounded by the incident window; the coverage rule defines membership One query
What was done about each? Remediation events on the same threads, each with a named human approver Same query
Does the control work now? Control coverage view: 41 referrals produced since the fix, 0 unaccounted One view

Week 6 — Compliance

Compliance asks a question neither ops nor the auditor asked, and it is the one with regulatory teeth: were any of those fourteen policies bound outside filed rates? A missing internal referral is an internal control failure. A policy bound outside the filed rate is a regulatory matter with a reporting obligation attached.

Filed rate conformance 14 policies · INC-2027-0114 by state and filing
StateFilingPoliciesWithin filed rangeActor kindStatus
NJCGL-2026-1166agentconforming
NYCGL-2026-0855agentconforming
PACGL-2026-1433agentconforming
All fourteen within filed rates. The referral threshold is an internal underwriting control set well inside the filed range, so the failure was a governance breach and not a rate deviation — which is the difference between a documented internal finding and a regulatory filing.

That distinction is worth dwelling on, because it is the kind of question that otherwise takes three weeks and a spreadsheet. Compliance needed to join fourteen policies to their state filings and confirm each bound premium fell inside the filed range. Because the business events carry the premium, the state and the actor kind, and because the population was already defined by the incident, it is a view rather than a project.

The attestation compliance files says four things: the population was fourteen, all fourteen were within filed rates, one was re-rated on internal grounds, and the control has produced 41 correct referrals since remediation. Every one of those is a link into the ledger rather than an assertion.

What each team took from the same records

RoleOpenedWanted to knowTime to answer
OperationsPipeline board → threadIs this business or system?12 minutes
DeveloperRun view → control coverageWhich code path?40 minutes
Underwriting managerException registerWhich 14, and do I stand behind them?Same day
AuditorException register → coverageComplete population, remediated, fixed?One session
ComplianceFiled rate conformanceInternal breach or regulatory event?One session
ExecutiveIncident rollupExposure, and is it closed?One line

Six roles, six different views, one set of records. Nobody exported anything for anybody else, nobody wrote a hand-off document, and the auditor six weeks later read the same rows the operations lead read on the Tuesday morning.

The measure of an observability layer is not the incident it helps you fix. It is whether the person who asks about it six weeks later has to ask you.

Rolling this out

Nobody adopts ten workstations at once. The order that worked for us, and the reasoning:

  • Instrument before you automate. Put the correlation id and the business ledger on the components you already have, staffed by the people already there. You will find defects immediately — six of the ten we found at Vsure were in code that predated any agent.
  • Start at a low-consequence desk. Clearance and FNOL are ideal: high volume, structured, cheap to be wrong, noticed immediately. Not claims settlement, however tempting the savings look.
  • Staff the referral desk with a person from day one. An agent workstation without a human above it is not an autonomy design, it is an unguarded write.
  • Set limits from cost-of-being-wrong, not model confidence. The autonomy ladder post has the four-quadrant version of this.
  • Watch escalation and approval rate together. A desk escalating a lot into a referral desk that approves everything is a limit in the wrong place, and it is the most common misconfiguration we see.
On the figures in this post

The volumes and costs are from the Vsure ledger and are checkable in the product. Every workstation listed has been run end to end by an agent; the carrier does not run itself on a schedule, and we keep that distinction explicit because it is the first thing a prospect tests.

The thing to take away

The interesting question in insurance AI is no longer whether an agent can rate a risk or reserve a claim. It can. The question is whether, eighteen months later, you can sit in front of an examiner and show which seat did it, what that seat was permitted to do, which human signed the exception and what the number was before it changed.

That is not a model capability. It is an architecture decision, and it is made — or lost — at the point where the agent writes to the system of record.

Where do your agents already act on real records?

Tell us that, and what you would need to prove about those actions to an auditor. We will set up a hands-on walkthrough within two weeks.

Request a demo →