• contact@verticalserve.com
Home / Engineering / Post 113
Engineering Blog · Post #113

Inside the Intake Triage Agent: Six P&C Scenarios Showing the First Decision InsightUW Makes on Every Inbound

Every inbound to a commercial P&C carrier — broker email, portal POST, API call, bot upload — has to be classified before anything else can happen. Is it a new submission? A renewal? A follow-up on something already in flight? A question, an OOO bounce, a marketing email, spam? Get this wrong and the rest of the cascade does the wrong work on the wrong record. The Intake Triage Agent is the first agent every inbound touches, and it makes that decision in seconds — with six possible verdicts and a confidence score on each.


The architecture in one picture

The Intake Triage Agent runs as a five-band pipeline. Inbound channels at the top are every way a submission can enter the platform. Ingress guards + dedup reject spoofed senders, scan for viruses, and collapse re-receipts of the same Message-ID instead of spawning duplicate submissions. Three parallel classification passes — LLM, deterministic rules, thread / submission matching — produce independent signals that merge into a single verdict. The decision band at the bottom picks one of six paths, and every path writes an audit event so downstream agents (and auditors) can reconstruct what happened.

Intake Triage Agent architecture — five bands: inbound channels, ingress guards + dedup, hydrate routing context, parallel classification across LLM / deterministic rules / thread matching, verdict + routing to NEW SUBMISSION / RENEWAL / FOLLOW-UP / UA REVIEW / SPAM / DROP
The Intake Triage Agent — five bands (inbound channels, ingress guards + dedup, routing context hydration, parallel classification across three families, verdict + routing). Every verdict writes an audit event; only NEW SUBMISSION and RENEWAL trigger the downstream cascade, while FOLLOW-UP attaches and notifies, UA REVIEW halts pending human confirmation, and SPAM / DROP terminate without burning downstream cost.
Click the image to open at full resolution.

Reading the five bands

BandWhat lives thereWhy it's there
Inbound channels Email (Outlook / Exchange / Graph / IMAP), broker portal POST, REST API POST, bot uploads from carrier apps The agent is channel-agnostic. P&C is email-dominant today, but portals, APIs, and bots are growing — one agent handles all of them.
Ingress guards + dedup DKIM / SPF / DMARC, size cap, virus scan, RFC 5322 Message-ID dedup over a 30-day window Spoofed broker domains are rejected at the edge. Viruses are scanned before persistence. Duplicate Message-IDs collapse into the existing email thread — brokers re-send constantly and this prevents double-submissions.
Hydrate routing context Sender domain → broker, prior threads, mailbox → LOB hint, broker scorecard Gives the classifier more than just the subject line. The same subject from a tier-1 broker on the property mailbox tells a different story than the same subject from an unknown sender on the casualty mailbox.
Parallel classification Three independent passes: LLM (Claude · intent + LOB + urgency), Deterministic rules (mailbox map · keywords · regex · allow/deny), Thread / submission matching (In-Reply-To, fuzzy match, policy-number regex) Parallel because the three pass-types are independent and produce different signals. Merging them with explicit precedence gives a verdict that's more robust than any single pass.
Verdict + routing Six verdicts: NEW SUBMISSION, RENEWAL, FOLLOW-UP, UA REVIEW, SPAM, DROP. Each routes differently downstream. The agent's deliverable is one of these six labels with a confidence score. Everything that happens after — extraction, clearance, enrichment — is driven by the label.

The six verdicts in one paragraph each

NEW SUBMISSION — intent is "submission," confidence ≥ 0.7, no existing thread match. A UWSubmissionQueue row is created (status=pending_extraction), a UW is assigned via FIFO or skills-based routing, and the cascade proceeds to document extraction → clearance → ... About 50–60% of inbound on most commercial books.

RENEWAL — intent is "renewal" and a prior policy is found via broker + insured + LOB lookup. The prior_policy_guid is linked and the Renewal Pull-Forward Agent is invoked to clone SOV / endorsements / T&Cs. Cascade proceeds with the renewal flag set. About 25–35% of inbound on a mature book.

FOLLOW-UP — thread match found via In-Reply-To header, References chain, or fuzzy subject + sender against open submissions. The email is attached to the existing UWSubmissionQueue row, the assigned UW is notified, and any closed tasks linked to that submission auto-reopen. No new cascade. About 10–15% of inbound.

UA REVIEW — confidence is below 0.7 OR the LLM and deterministic passes disagree. Routed to the UA queue with the per-pass reasoning surfaced ("LLM said submission 0.62; deterministic mailbox hint was property; thread match found nothing"). Cascade halts; the UA confirms intent (with optional LOB override) and the cascade resumes from the corrected verdict. ~3–8% of inbound.

SPAM — spam confidence ≥ 90% (deterministic denylist hit, or LLM spam classifier ≥ 0.90). Quarantined into the compliance review bucket. No submission row created. No downstream agents invoked. The audit event still fires so the volume can be reported. ~2–5% of inbound.

DROP — non-submission email that isn't spam. Out-of-office auto-replies, marketing pitches from aggregators, vendor sales emails, delivery-receipt bounces. Logged with the reason but no submission record, no cascade. Distinct from spam because these are legitimate emails that simply aren't underwriting work. ~5–10% of inbound.


Six P&C scenarios

Each scenario below exercises one of the six verdict paths with a representative P&C line and a representative trigger. The "What the UW sees" line is the actual outcome surfaced on the InsightUW Live Console and the workbench.

Scenario 1 · Clean Property submission from a tier-1 broker NEW SUBMISSION · conf 0.94

Channel Email to property@carrier.com · subject "NEW SUBMISSION · Bridgepoint Logistics · Property · $15M TIV · NJ"
Sender dana.singh@lockton.com · DKIM pass · broker = Lockton Risk Advisors (tier 1)
Attachments ACORD 140 (PDF) · SOV (XLSX) · 5-year loss runs (PDF) · virus scan clean
What fires LLM: intent=submission · LOB=Property · urgency=normal · confidence 0.94. Deterministic: mailbox map → Property; subject regex hits NEW. Thread match: no prior thread. All three passes agree.
What UW sees Submission card appears in the Property workbench within 2 seconds, assigned to Sarah Chen (next FIFO + Property-licensed in NJ). Live Console shows intake_triage as auto-cleared, cascade proceeding to document_extraction.
Audit row UWAuditEntry · event=intake_classified · classification=NEW SUBMISSION · confidence=0.94 · routing_strategy=mailbox+llm
Wall-clock < 2 seconds from email landing to cascade started.

Scenario 2 · Casualty renewal that auto-links to the prior policy RENEWAL · pull-forward

Channel Email to casualty@carrier.com · subject "RENEWAL · Stillwater Manufacturing · GL/Umbrella · effective 2026-09-01"
Sender robert.kim@marsh.com · broker = Marsh & McLennan
What fires LLM: intent=renewal · LOB=Casualty · urgency=normal · confidence 0.91. Deterministic: subject regex hits RENEWAL prefix. Thread match: no thread, but the routing service finds an in-force policy for Stillwater Manufacturing on Marsh expiring 2026-08-30 — prior policy linked automatically.
What UW sees Renewal submission lands pre-populated. The Pull-Forward Agent has already cloned the prior SOV, endorsements, T&Cs, and 3-year loss summary. UW opens the workbench and sees the prior + new side by side with the diff highlighted. Cascade proceeds with the renewal flag set.
Audit row UWAuditEntry · event=intake_classified · classification=RENEWAL · prior_policy_guid=… · routing_strategy=broker_insured_match

Scenario 3 · Broker reply with additional loss runs for an in-flight Cyber submission FOLLOW-UP · attached

Channel Email to cyber@carrier.com · subject "Re: Submission #SUB-2026-CY-0084 — additional loss runs attached"
Sender kelly.tran@apex-wholesale.com · broker = Apex Wholesale Brokerage
Attachments Two PDFs labeled "2023-Q4-incidents.pdf" and "2024-IR-summary.pdf"
What fires Thread match wins. In-Reply-To header chains to the original Cyber submission landed three days ago. Subject contains the carrier's own submission number (regex extraction). Thread-match precedence overrides any LLM new-submission interpretation.
What UW sees No new submission row. The email and both attachments attach to the existing in-flight Cyber submission. The assigned UW (David Park) gets an in-app notification: "Apex Wholesale sent additional loss runs on SUB-2026-CY-0084 — 2 new docs." The Missing-Info Agent's open ask for prior losses auto-resolves; the task closes.
Audit row UWAuditEntry · event=email_attached · routing_strategy=in_reply_to · attached_to=SUB-2026-CY-0084

Scenario 4 · Ambiguous wholesaler email about a Marine cargo voyage UA REVIEW · cascade halts

Channel Email to casualty@carrier.com (wrong mailbox) · subject "Quick question on Pacific Routes shipment"
Sender sam.olu@pacific-surplus.com · broker = Pacific Surplus Insurance Services
Body excerpt "Hey team — wanted to check if you'd consider Marine cargo on a Houston → Singapore voyage for an existing insured. Not sure if this is something we re-submit or just add to the binder. Can call to discuss."
What fires LLM: intent could be submission OR question OR follow-up — confidence 0.62 (below the 0.7 threshold). Deterministic: mailbox map says Casualty but body mentions Marine — conflict. Thread match: no thread found. All three signals disagree.
What UW sees Cascade halts. The UA queue surfaces a yellow card: "intake_triage — low classification confidence (0.62). LLM said submission/question; mailbox hint was casualty but body mentions Marine. Thread match found nothing." Buttons: Review & Confirm (with LOB override dropdown), Mark as FOLLOW-UP, Drop. UA picks "submission · Marine" and the cascade resumes from the corrected verdict.
Audit row UWAuditEntry · event=intake_uncertain · then on UA ack: UWAuthorityOverride · cleared_by_role=ua · justification stored

Scenario 5 · Marketing pitch from an unverified domain SPAM · quarantined

Channel Email to property@carrier.com · subject "Boost your property quote conversion 3x — guaranteed!"
Sender growth@quoteboost-ai.io · DKIM fail · domain on sender denylist
What fires Deterministic wins. Sender denylist hit + DKIM fail + subject regex matches marketing template ("boost", "guaranteed", "3x"). LLM spam classifier confirms at 0.97. No thread match. Cascade short-circuits before LLM intent classification spends a token.
What UW sees Nothing — the email never reaches the workbench. The quarantine bucket grows by one row; compliance can review weekly.
Audit row UWAuditEntry · event=intake_spam · spam_confidence=0.97 · reason="denylist+dkim_fail+marketing_regex"

Scenario 6 · Out-of-office auto-reply bouncing back from a broker DROP · logged

Channel Email to uw-team@carrier.com · subject "Automatic reply: Re: SUB-2026-PR-0211 quote follow-up"
Sender jane.lopez@lockton.com (broker is on vacation) · auto-reply header present
Body excerpt "I'm out of office until July 7. For urgent matters, please contact derek.morris@lockton.com…"
What fires Deterministic: Auto-Submitted: auto-replied header present + subject prefix "Automatic reply:". LLM: intent=non_submission, confidence 0.99. Thread match: chains to outbound SUB-2026-PR-0211 follow-up; agent records the broker is OOO so the cadence timer pauses, but no new submission.
What UW sees The Follow-up Communication Agent's cadence reminder for SUB-2026-PR-0211 is paused until 2026-07-07. UW's task list shows the broker as OOO. No noise on the workbench.
Audit row UWAuditEntry · event=intake_dropped · reason=auto_reply · linked_submission=SUB-2026-PR-0211 · cadence_paused_until=2026-07-07

How the three classification passes combine

The merge precedence is explicit — it's not "average the scores." Each pass has a different role and a different way of winning:

  1. Thread match wins over LLM intent. If the email is in a reply chain to an existing submission (In-Reply-To header, References chain, or fuzzy subject + sender match), it's a follow-up — even if the LLM thinks the subject reads like a new submission. Brokers occasionally reply with edited subjects that look like new submissions but are really updates.
  2. Deterministic spam wins over LLM. If the sender domain is denylisted or DKIM fails or the subject matches a known marketing template, the LLM doesn't get a chance to overrule. This also short-circuits cost — no LLM tokens burned on obvious spam.
  3. Otherwise, LLM intent + LOB are used. Deterministic mailbox→LOB hint is a tiebreaker when the LLM's LOB confidence is below 0.5.
  4. Confidence below 0.7 routes to UA regardless of intent. The agent refuses to commit when the model isn't sure — a false NEW SUBMISSION wastes downstream cycles, a false FOLLOW-UP attaches to the wrong record.

What the agent reads — and what it doesn't

The Intake Triage Agent has a deliberately narrow scope. Its job is classify and route — nothing more. Specifically:

The agent doesThe agent does NOT
Classify intent (submission / renewal / follow-up / question / spam / drop) OCR or extract fields from attachments — that's the Document Extraction Agent
Identify the LOB and the urgency band Run sanctions / OFAC / capacity checks — that's the Clearance Agent
Detect thread membership and link follow-ups Resolve the insured master record — that's the Submission Enrichment Agent
Apply rush detection per-LOB keyword rules Decide whether to decline — that's the Auto-Declination Agent
Assign a UW via FIFO or skills-based routing Compute aggregate capacity or BOR conflicts — those are Clearance + BOR Conflict Agents
Write the canonical email row and submission row Send any outbound emails — that's the Follow-up Communication Agent

Every additional responsibility added to intake would slow it down and make retries harder. Keeping it narrow lets the rest of the pipeline run unblocked, and it makes intake the most reliable agent in the cascade — failure modes are well understood and recovery is fast.


Per-LOB rush detection at intake

The agent decides rush vs normal at intake — before extraction runs. This is what makes the rush SLA timer start at the right minute, not three steps later when someone notices.

LOBRush keywords (admin-tunable per tenant)Rush SLA
PropertyCAT, flood, hurricane, wildfire, hail, freeze, earthquake4h
Marinecargo emergency, war risk, voyage, hull damage, total loss4h
CasualtyTRIA, umbrella, excess, large loss6h
Cyberbreach, incident, ransomware, active intrusion2h
D&Osecurities-class-action, SEC enforcement, bankruptcy6h
WCcatastrophic injury, fatality, OSHA fine8h

A rush hit sets UWSubmissionQueue.is_rush = true and overrides the FIFO queue position. The workbench surfaces it with a red rush pill at the top of the list, and the SLA clock starts ticking at the moment the email landed — not when someone happened to open it.


Tunables a carrier owns

Everything the agent uses to decide is admin-configurable per tenant and per LOB. Engineering doesn't touch a thing when classification thresholds shift or new mailboxes are added:

  • Spam confidence threshold (default 0.90) — higher means fewer false-positive spam classifications
  • Low-confidence threshold (default 0.70) — below this, routes to UA regardless of intent
  • Dedup window (default 30 days) — re-receipt of same Message-ID collapses to existing email
  • Rush keyword list per LOB — triggers is_rush=true and overrides FIFO; admin-managed per tenant
  • Mailbox → LOB mapping per mailbox
  • Sender allowlist / denylist per tenant — hard pass or fail before LLM runs
  • Subject regex catalog per tenant — hard signals for NEW / RENEWAL / QUOTE / DECLINE prefixes
  • FIFO vs skills-based UW assignment per team
  • LLM model + region per tenant — Bedrock Claude default; Azure OpenAI failover
  • LLM cost cap per inbound (default $0.05) — hard ceiling; classification falls back to deterministic-only beyond

Why this matters for P&C

Manual triage on a commercial P&C inbox takes 5–15 minutes per email and is the single most boring part of an Ops analyst's day. Multiply by 200–800 inbound per day per team and you have one full-time role that's just sorting email. Done by humans, this work is uneven (spam misses, follow-ups attached to the wrong record, wrong-LOB routing), slow (rush submissions sit for hours before someone notices), and invisible to the audit trail (the decision lives in someone's head).

OutcomeTraditional inbox triageInsightUW Intake Triage Agent
Time per inbound 5–15 minutes of analyst time 1–3 seconds wall-clock
Follow-up attachment accuracy ~80% — analysts attach to the wrong record under load ~98% — thread match via In-Reply-To wins decisively over LLM
Rush detection UW notices when they open the email — often hours later Detected at intake; SLA clock starts at email-landed timestamp
Spam catch rate Variable; depends on the analyst Consistent threshold; quarantined to compliance review bucket
Audit trail "It got routed to me, I don't know why" Per-inbound audit row with classification, confidence, and routing strategy
Capacity to scale inbound Linear in headcount Linear in inbound — adding 50% more email doesn't add 50% more Ops

What's Next

This post covered the Intake Triage Agent end-to-end. Subsequent posts will go deeper on:

  • The Document Extraction Agent — the multi-step pipeline that runs after intake: classify each attachment, extract per-doc-type with state and LOB overlays, cross-validate fields across attachments + email body
  • The Routing Service — how the broker + insured prior-bind match works, why the 90-day window matters, and how it powers BOR conflict detection downstream
  • The Follow-up Communication Agent — how cadence reminders pause on broker OOO detection and resume when the broker is back

Want to see the Intake Triage Agent classify a real broker email end-to-end — including a UA REVIEW with the LLM-vs-deterministic disagreement surfaced — in a 45-minute working session against your inbound? Request a demo.

See InsightUW run on your data

A 45-minute working session with a real broker email and your LOBs.

Request a demo