Agents at work
4 of 10 specialist roles called a model on the filmed clips; the 24 per-box inspectors are one code path.
The roles that called a model: customer-message-drafter, damage-reader, label-reader, policy-agent. The rest ran as app code (7 of the 10 are written to call a model when one is available). None of them can approve money: a refund needs a person's single-use token.
Loss RMA-20418 · customer-message-drafter: one recorded answer withheld, its customer message called the real camera a toy and said the camera body wasn't seen: false, so it is never shown or sent (a loss).
Loss RMA-20419 · customer-message-drafter: one recorded answer withheld, its customer message said the camera body couldn't be confirmed, from the label reader's BM-CB-55120 misread on a complete kit, so it is never shown or sent (a loss).
The shift, replayed: Bench 2
[Seeded shift fixture · synthetic] · replay of the seeded shift, not a live bench · selective dispatch7 of 11 roles ran (3 model calls) · 4 skipped · 1 live answer unavailable
- policy-agent unavailable: live answer unavailable (timeout after 90000 ms); app code stands in
- label-reader skipped: every serial read is at 0.90 or above and in the kit's format (bar 0.80): the serial matcher checks it as code
- voice-note-reader skipped: no voice note on this box
- carrier-claim-agent skipped: no damaged item and no transit evidence (no exception scan, carton not crushed, nothing said)
- restock-grader skipped: held for a person: grading waits for the decision (no item needs diverting now)
- ran: inspector-rma-20418, damage-reader, serial-matcher, customer-message-drafter, cost-agent, coordinator
- 1 · inspector-rma-20418…
- 1 · damage-reader…
- 2 · serial-matcher…
- 3 · policy-agent…
- 4 · customer-message-drafter…
- 4 · cost-agent…
- 5 · coordinator…
The coordinator merges the findings and routes the box once every agent has reported.
| Agent | Kind | Doing now (RMA-20418) |
|---|---|---|
label-reader decides whether each serial label is legible enough to match (≥ 0.80 and in the kit's serial format) Shift ablation: removing it changes a decision on 1 of 24 seeded boxes | model role, not called on this box (live: muse-spark-1.3) | skipped: every serial read is at 0.90 or above and in the kit's format (bar 0.80): the serial matcher checks it as code |
damage-reader reads each item crop for dents, scuffs or an opened sleeve, and the outer carton Shift ablation: removing it changes a decision on 1 of 24 seeded boxes | recorded live Meta outputmuse-spark-1.3 · 11.0 s · request chatcmpl-01a1a269-0d81-7787-9e4c-87058dd94c8b | queued |
voice-note-reader turns the lead's transcribed note into claims: a claim can raise a hold, never clear one Shift ablation: removing it changes a decision on 1 of 24 seeded boxes | model role, not called on this box (live: muse-spark-1.3) | skipped: no voice note on this box |
serial-matcher matches each serial read against the order record and names the order a stray serial belongs to Shift ablation: removing it changes a decision on 1 of 24 seeded boxes | code | queued |
carrier-claim-agent drafts a claim against the return carrier when damage and transit evidence meet Shift ablation: removing it changes a decision on 1 of 24 seeded boxes | model role, not called on this box (live: muse-wonder-1.0) | skipped: no damaged item and no transit evidence (no exception scan, carton not crushed, nothing said) |
policy-agent applies the return window and condition clauses and names the governing clauses Shift ablation: removing it changes a decision on 1 of 24 seeded boxes | live answer unavailableDETERMINISTIC · app code, no modeltimeout after 90000 ms; app code stands in, holds kept | queued |
restock-grader grades each returned item A / B / C and picks its resale channel Shift ablation: removing it changes no decision, only work a person uses | model role, not called on this box (live: muse-spark-1.3) | skipped: held for a person: grading waits for the decision (no item needs diverting now) |
customer-message-drafter drafts the customer's note: what was seen, what wasn't, the clause, and that a hold isn't a denial Shift ablation: removing it changes no decision, only work a person uses | DETERMINISTIC · app code, no modellive: muse-wonder-1.0 | queued |
cost-agent prices the inspection (estimated live model cost) and the fees a return costs the merchant Shift ablation: removing it changes no decision, only the fees line | code | queued |
coordinator fans each return out to the fleet, merges most-restrictive-first, prices the settlement and routes it to a person Shift ablation: removing it changes a decision on 24 of 24 seeded boxes | code | queued |
| Inspector · one code path, run once per box (24 runs in the shift) | ||
inspector-rma-20418 counts what settles in the tray for RMA-20418 and reconciles it with the packing slip Shift ablation: removing it changes a decision on 24 of 24 seeded boxes | code | queued |
| The other 23 inspector names are the same code path on the other boxes, not separate agents. | ||
| 27 code · 7 model roles · 34 names in the shift (the per-box inspectors are one code path) (recorded live Meta output on 2 boxes, app code elsewhere) | ||
Role cost at Meta list price (an estimate; this replay called no model and spent $0)
| Role | Per run | Runs in the shift | Shift (est. live) |
|---|---|---|---|
| label-reader | $0.0050 | 1 | $0.0050 |
| damage-reader | $0.0096 | 24 | $0.2310 |
| voice-note-reader | $0.0028 | 3 | $0.0083 |
| serial-matcher | app code | 24 | $0 |
| carrier-claim-agent | $0.0240 | 2 | $0.0480 |
| policy-agent | $0.0240 | 6 | $0.1440 |
| restock-grader | $0.0073 | 19 | $0.1392 |
| customer-message-drafter | $0.0220 | 6 | $0.1320 |
| cost-agent | app code | 24 | $0 |
| coordinator | app code | 24 | $0 |
| inspector (one code path) | app code | 24 | $0 |
| Whole shift, if every dispatched model role ran live | $0.7075 | ||
Over the seeded shift
[Seeded shift fixture · synthetic] · counts computed by the tray counter; a person decides every refundSelective dispatch vs running every agent on every box (estimates on the seeded shift)
Selective dispatch vs running every agent on every box
[Seeded shift fixture · synthetic] · cost and latency are estimatesAn optional specialist runs on a box only when that box's evidence calls for it: the voice-note reader when there is a note, the carrier-claim agent when there is damage or transit evidence, the label reader when a serial read is close to the bar, the policy agent near the window or on a hold, the restock grader on a complete box or an item to divert now, the drafter when there is a hold to explain. Counting, serial matching, the damage read, the arithmetic and the merge run on every box. Always-run is the reference.
| Over the shift | Selective | Always |
|---|---|---|
| Model calls a live run would make | 61 | 168 |
| Role runs skipped (all were model calls) | 107 | 0 |
| Estimated live model cost, whole shift | $0.705 | $2.271 |
| Model time, every call added up | 1111 s | 3529 s |
| Latency per box (critical path) | 43.4 s | 106.5 s |
| Boxes held for a person | 6 of 24 | 7 of 24 |
| Proposed refunds (a person decides) | $6,351 | $6,011 |
| Carrier claims drafted | 1 ($199) | 1 ($199) |
- Findings always-run made that selective missed: 1 holds · 0 claims · 17 drafts
- Holds selective added that always-run doesn't have: 0
What selective missed: 1 hold(s), 17 draft(s), incl. restock grades on 5 held boxes
- RMA-20419: camera_body · label_unreadable; customer note differs (always-run: customer-message-drafter; selective: app-code note for a complete box (no drafter run)); Re-scan the camera body label under the bench light; policy-agent: live answer unavailable (timeout after 90000 ms); the app-code result stands in, check it before acting
- RMA-20418: camera body B → Open-box listing; battery B → Open-box listing
- RMA-30107: camera body C → Refurbish or parts; lens B → Open-box listing; battery B → Open-box listing
- RMA-30110: camera body B → Open-box listing; lens B → Open-box listing; battery B → Open-box listing
- RMA-30113: camera body B → Open-box listing; lens B → Open-box listing; battery B → Open-box listing
- RMA-30116: camera body B → Open-box listing; lens B → Open-box listing; battery B → Open-box listing
The restock grader waits on a held box until a person decides; these grades are drafts that come later, not holds or money. They are still counted as missed.
- label-reader ran on 1 of 24 boxes; e.g. skipped: every serial read is at 0.90 or above and in the kit's format (bar 0.80): the serial matcher checks it as code
- voice-note-reader ran on 3 of 24 boxes; e.g. skipped: no voice note on this box
- carrier-claim-agent ran on 2 of 24 boxes; e.g. skipped: no damaged item and no transit evidence (no exception scan, carton not crushed, nothing said)
- policy-agent ran on 6 of 24 boxes; e.g. skipped: 20 of 30 days, no wear, every line OK: clause 4.2 governs (the window arithmetic ran as code)
- restock-grader ran on 19 of 24 boxes; e.g. skipped: held for a person: grading waits for the decision (no item needs diverting now)
- customer-message-drafter ran on 6 of 24 boxes; e.g. skipped: complete box: the fixed app-code note says everything came back (no model call)
Prompt caching on the model roles (from 4 recorded live calls)
Prompt caching on the model roles
From 4 recorded live callsEvery model role sends its fixed instructions first and the box's evidence last, with one stable cache key per role, so Meta can serve the repeated prefix from its cache. Cached input costs $0.15 instead of $1.25 per million tokens on Muse Spark ($0.20 instead of $4.00 on Muse Wonder).
Planning projection: 500 returns a day (not a measurement)
Planning projection: 500 returns a day
Projection from the seeded shift, not a measurementThe seeded shift averages 6.54 agent runs per box (2.54 of them model roles) with selective dispatch, and an estimated $0.125 per box if the model roles dispatched on each box ran live (segmentation plus model agents, at list price). Scaled to 500 boxes (the core pipeline's projection is on How it works):
Why these roles exist
A returns bench sees 24 boxes a shift. A missing lens cap, a swapped serial, a dent from transit, a smudged label, a late return: each needs a different check, and a tired person misses some.
One inspector code path run per box (the tray counter) and 10 specialist roles: label, serial, damage, the lead's voice note, policy, carrier claims, restock, the customer note and cost. The coordinator merges them most-restrictive-first.
A specialist runs on a box only when the box's evidence calls for it (61 model calls instead of 168 on the seeded shift), and a role stays only if removing it changes something (a decision, or work a person uses): the ablation on Evals freezes every output and removes one role at a time. Roles can raise holds and draft work; the refund still needs a person's single-use token.
The returns lead works the queues the coordinator builds: approve a clean refund, review a hold with its reasons, file the drafted carrier claim, quarantine a stray unit, send the drafted note.