Request Triage

An LLM parses a free-text request into structured output that follows a predefined schema. Deterministic code then maps that output to actions from a fixed action table. The LLM only classifies; it never executes anything.

What you can ask
Ask for access
read access to the Analytics Dashboard
Ask for data
signups per week for Q3
Ask about policy
who approves access to the Sales CRM?
Report something broken
the export button 500s on the reporting page
Ask to buy something
a $300/yr SaaS tool for the team
Ask for something else
book me a meeting room
Or try to break it
Prompt injection
Claimed authority
Personal data pasted in
A user ID that does not exist
Live Demo · Real pipeline

Mask
Model reads
Code decides
Loading today's spend

One call splits the message, classifies each ask and pulls the fields the tables need.

The model only says what the request is. A table decides what happens next — and where it has to stop and ask a person.

Human gate
auto_resolve

The tables answered it outright — a tier-1 grant, a cited policy answer, or a small purchase.

route

A standing team owns this work. It goes to their queue with the facts attached.

escalate

Nobody below a named authority may decide this. It goes up, with the reason.

reject

Policy refuses it, or the message tried to rewrite our rules. Nothing was actioned.

What It Does

Internal teams send free-text requests (access, data pulls, policy questions, bugs, purchases) to a single inbox. Each message produces one auditable record.

Code first masks obvious PII. A single Claude or Laya (Local Jev) call then splits the message into individual requests and, for each one, identifies the intent and extracts the fields that intent requires. The model only classifies; it never executes anything.

Everything after that is deterministic Python. Prices are annualised and totalled before any rule evaluates them. The intent selects one of seven action tables, and the extracted fields select a row, where the first match wins. Each row specifies the action, the target team and the required approver. All 33 rows live in one file, and nothing that grants access runs without passing the approval gate.

Flow Diagrams

Notes

—Tested on 58 messages and 66 asks: 98.5% intent accuracy, 97.0% routing accuracy and 100% accuracy in splitting messages that contain multiple requests.
—$0.0089 and 5.5 seconds per message on Sonnet, amortized across the run, with one model call per message. A single cold call costs about $0.02, most of which is writing the prompt cache.
—Sonnet was chosen because testing with Opus showed no meaningful accuracy gain. Haiku was ruled out because the prompt falls below its minimum length for prompt caching.
—Every injection attempt and unverifiable authority claim was rejected or escalated. Safety is a hard constraint: any suspicion of malicious intent goes to a human.