Agentic AI for Field Service Decision Support
An agent that takes actions, not one that returns paragraphs. Three MCP servers, a diagnostic task it resolves by choosing tools, and then the four ways it goes wrong: a description written for a human instead of a model, an approval it must not talk its way past, an instruction planted in a customer's own words, and the arithmetic that turns nine steps out of ten right into a workflow that fails more often than it succeeds.
planner: model (claude-sonnet-5)manual search: local stubtickets and parts: synthetic training dataMCP 2026-07-28
Demonstrations 1 to 3 asked whether a model was right. This one asks what happens when
it is wrong and something has already been done about it.
What is real here. The MCP protocol handling, the agent loop, the
guardrail decisions, the traces and every measured number are computed live from
this code. The service tickets and the parts catalogue are synthetic:
360 tickets and 366 parts generated by
scripts/build_data.py from a fixed seed, because no public service-ticket
corpus exists. They are fiction, and every screen that shows them says so.
Screens
| Screen | What it demonstrates |
|---|---|
| 1 Diagnose | One machine, one symptom, three tools chosen and called by the agent. |
| 2 Contracts | The tool contracts themselves: schemas, descriptions, boundaries, and the four MCP annotation hints with their real defaults. |
| 3 Descriptions | The same task against a vague tool description and a precise one. Both runs live. |
| 4 Approval | A denied approval, expressed as an MCP input_required round trip. |
| 5 Injection | An instruction planted in a customer's ticket text, and the layer that stops it. |
| 6 Reliability | Per-step success measured over many runs, and what it multiplies out to. |
| 7 Determinism | Two agent steps replaced by code, and the reliability delta. |
| 8 Skill | A fully specified reusable Skill, its portable frontmatter, and its measured invocation and success rates. |
| 9 Explicit code | The same flow as a state machine with declared state and failure handling. |
| Authority | Automatic, requires approval, prohibited — as executable policy. |
| Traces | Every span from every run on this box. |
Model availability
OPUSMAX_API_KEY is set, so a model chooses the tools and their arguments. Tool-selection accuracy on these screens reflects that model. Compare it with the offline router by unsetting the key and reloading: the failure modes are the same, the rates are not.