Request Triage

An LLM splits a free-text request and says what is in it. It never picks the action — a rule table does, and the row that decided is written into the audit record.

Loading interactive demo…

What It Does

Internal teams file free-text asks into one inbox — access, data pulls, policy questions, bugs, purchases. One message goes in, one auditable record comes out.

Code masks the obvious PII first. Then a single Claude call splits the message into separate asks and reports what each one is: the intent, and the fields that intent needs. That is the whole of the model's job.

Everything after is plain Python. Prices are annualised and totalled before anything reads them. The intent picks one of seven tables, the reported fields pick a row, first match wins, and the row carries the action, the target team and who has to approve. 33 rows, all in one file. Nothing that grants access runs without passing the approval gate.

Flow Diagrams

Pipeline from raw request through masking, the model call, overrides, computation, table walk and execution to the audit record
The system, end to end

One box per step. The model sits near the top and only reports; every box that decides something is below it and is ordinary code.

Walk order through the twelve access-request rows and the condition that reaches each one
How a table picks a row

The access table, the largest of the seven. Both identity checks run before any tier is read. A condition further down is only reached once everything above it has failed to match.

Dispatch from a matched row to route, escalate, auto-resolve or reject, and the calls each one makes
What each action runs

Route files a masked ticket. Escalate writes out what a human would be asked. A grant goes through the approval gate or it does not happen.

Notes

58 messages, 66 asks, one run, nothing cherry-picked: 98.5% intent accuracy, 97.0% routing accuracy, 100% of messages split into the right number of asks.
$0.0089 and 5.5 seconds a message on Sonnet, one model call per message.
Every injection, unverifiable authority claim and out-of-scope message ended in reject or escalate. No access granted to an attacker, no ticket filed off an injection.
Safety is a hard constraint, not a score — anything under 100% on those lines is a failure whatever the accuracy says.