Asapi
The Agent Trials / Tasks / The repair desk's triage

Customer service · Task 20 of 34

The repair desk's triage

Triage 80 appliance-repair customers one fresh session at a time: name the exact unit, find the fault on a question budget, and quote by the company's policy.

Setting
Appliance repair company, service desk
Deliverable
One ticket per customer: unit, fault, disposition, parts list and estimate
Asking the right questionsConflicting sourcesData qualityUnstated requirements
5
Models
ran the standard setup
100%
Best score
3 models tied
100%
Median score
across those models
1.6 h
Typical run
median time, standard setup

The task

A made-up appliance repair company is paid only for parts and labour, so its service desk triages every customer before a technician goes out. The agent takes 20 customers, one per fresh session: it reads the customer's booking form, asks checks from a catalogue within a question budget, and submits a ticket naming the exact unit, the fault, what happens next, the parts to bring and the price. It has the makers' manuals, diagnostic guides, service bulletins, the company's policy, a parts and stock database and a thousand past jobs.

The prompt only asks for a correct ticket. The real test is careful desk work on every customer: trusting the customer's answers over the form, spending questions where they separate faults, and using only the documents that are in force.

What it tests

Asking the right questions

Each customer allows only a few checks, so each one has to narrow the faults that are left.

Knowing which document wins

Manual editions, bulletins and price sheets come in old and new versions side by side.

Spotting bad data

The booking form is sometimes wrong, and only the customer's own answers count.

What the job really needs

The parts technicians actually fit show up in past jobs, not in the manual alone.

Challenges

1A form that can be wrong

Customers fill in the booking form before the call, as in real life, and sometimes describe the wrong sign.

2Old papers still on the shelf

Superseded bulletins, an older check catalogue and last year's price sheet sit beside the current ones.

3A limited number of questions

A check that cannot tell the remaining faults apart wastes part of a small budget.

4Every maker its own serial code

The year of manufacture has to be read the way that maker writes it.

5No memory between customers

Each session starts fresh, so every customer is worked out from the files again.

Results

0%25%50%75%100%StandardGPT-6 AstraGPT-6.1 SolOpus 5.5Sonnet 5.5GPT-6 Luna
ModelStandardTime (standard)Cost (standard)
GPT-6 Astra100%94 min$58.84
GPT-6.1 Sol100%81 min$10.48
Opus 5.5100%202 min$32.69
Sonnet 5.596%48 min$15.46
GPT-6 Luna72%108 min$1.05

One run per model and setup. 100% = everything right (or, for a plan scored in money, the best plan); 0% = the obvious answer or worse.

Setups: Standard, the job as asked.

What models got right and wrong

Test environment

Kind
Simulated service desk: the triage desk of an appliance repair company, with made-up makers and models (Arvana, Corvo, Halden, Norvik, Pellam, Tovell; 21 product lines, 12 kinds of appliance), and customers played by a hidden daemon in the container. 4 variants (seeds 0 to 3) of 20 customers each, each variant its own run
Agent's interface
A terminal in a fresh Docker container (Ubuntu 24.04, Python 3, the SQLite command line; 2 CPUs, 4 GB), one fresh session per customer as an unprivileged user, driven by the agent's own command-line tool through harbor: Claude Code or Codex CLI
Documents
Per variant, 187 or 188 files in /app: in docs/, 104 Markdown service manuals (one per model revision, some with a later edition), 21 Markdown diagnostic guides (one per product line), 52 or 53 Markdown service bulletins, the check catalogue and an older copy of it, and a short index; in policy/, the pricing and dispatch policy (Markdown) and 3 CSV files (the price sheet in force, an older price sheet, replacement values); inventory.db (SQLite: parts, fits, kits, alternates, stock at three branches); history/jobs.csv (966 to 1,049 past jobs); and an empty work/ folder. 750 files over the 4 variants
Applications
Two commands. customer: complaint (the opening complaint, from the customer's booking form, and the question budget) and ask CHECK (ask the customer one check from the catalogue). ticket: check FILE (a ticket's format) and submit FILE (submit the ticket, once; it closes the customer). The SQLite command line and Python read the files. No other apps
Web
Not needed: nothing the task asks about is online. The container can reach the internet; the makers and models are made up. Claude Code's web page reader (WebFetch) was on for Opus 5.5 and Sonnet 5.5, and neither run used it; Codex's web search was turned off for GPT-6 Astra, GPT-6.1 Sol and GPT-6 Luna
People
20 customers per variant, one per session, played by the daemon's code with no language model: each answers a check with a fixed reply from its case ("not sure" for a check the case does not cover), the same for every agent. The opening complaint can be wrong. Nobody else
Time
None. The documents and price sheets are dated, and the policy is in force from a stated date
Actions
Ask checks, within each customer's question budget (6 to 25 questions; asking a check again is free), and submit one ticket per customer. Nothing in the files can be changed
Deliverable
One JSON ticket per customer, submitted with ticket submit: model, revision, year of manufacture, fault code, disposition (and its reason where one is needed), a draft parts list (part number, quantity, source branch), and labour hours, estimate total and lead time where the disposition needs a parts list
All 34 tasks