Asapi
For AI labs / Catalogue / Unattended train‑ticket buyer for a rate‑limited booking site
Environment datasheet · Household

Unattended train‑ticket buyer for a rate‑limited booking site

ID laycode/task09 · revision 1 · tested by 28 October 2026

A weekly commuter asks for an app that buys one seat each way for every open weekend still missing a ticket, inside the commuter's travel windows and the booking site's limits, with Start, Stop and a page showing what it bought. The agent builds it from one account note.

Checks
26, 3 sections weighted 60/20/20, no gates
Versions
Request only, with a hint, told the rules
Attempts
24: 8 models × 3 versions, one each
Best, request only
100% (Opus 5.5)
Best, told the rules
100% (4 models)
Full solves
6 of 24
Attempts with any reward
22 of 24
Median, request only
12 min, 30 tool calls
The job

Fast enough to win returned seats, slow enough to stay inside the site's rules

Role
Sole builder on a commuter's laptop, with one account note and a practice booking site that has no API document.
Request
An app that keeps checking the site and buys each missing weekend journey with the saved card as seats appear: one seat per direction inside the Friday and Sunday time windows, never a journey already ticketed, and a control page to start and stop it.
Deliverable
A running worker and a control page showing its state, the journeys still missing and the details of each new ticket, plus a short note.
What the reward depends on
All eight missing journeys bought, a Sunday released at midnight among them, read from the site's own log; no hand‑bought ticket bought again; the site's pause and login limits kept; Start and Stop only the owner can use.
Where the requirements are
In the user's message, the account note and the site's own pages: the Terms page sets the search, login, session and hold rules and the release time. There is no API document.
The world

A practice booking site with its own clock, holds and lockouts

Interface
A terminal in a fresh Docker container, driven by Claude Code, Codex CLI or, for Gemini 4 Argon, Antigravity CLI. Web search and fetch are off.
The site
A private practice booking site with a timetable, search, seat maps, seat holds that expire, saved‑card payment, bookings and Terms, its own clock, seeded stock and two tickets already bought by hand. It logs every request.
Other buyers
Seeded rules, not agents: released seats on the busy trains sell out within seconds, and returned seats come back briefly at seeded moments.
The site's limits
Published limits on searches, logins and session length; going over them pauses, suspends or locks the account.
Grading
A fresh copy of the site on a staged clock that crosses midnight, with a traffic capture. An operator model, GPT‑6.1 Sol, presses Start, then Stop, then Start again; a new Sunday goes on sale at midnight.
Limits
One build session of 120 minutes, 150 model responses and $20 at list prices.
The reward

26 checks in three weighted sections; tickets count only from the site's log

Structure
Build: 17 checks share 60 points, the eight missing journeys among them. Edge cases: 5 share 20, the site's rules and the midnight release. Security: 4 share 20.
Who decides
Scripts decide 19 checks from the site's log and scans of the app for secrets; two LLM judges, GPT‑6.1 Sol and GPT‑5.6 Luna, decide 7, and Opus 5.5 ruled their split votes. 43 of 624 verdicts are marked ruled, 15 of them scripted ones re‑decided after an audit.
What counts
Holds, rows on the app's control page or claims in the note never count as tickets; control times come from the real requests; Start and Stop are replayed from another network and from a cross‑site page.
Formula
Reward = (60 × build passed / 17 + 20 × edge passed / 5 + 20 × security passed / 4) / 100. An app that can't run fails all 26 checks.
Results

One model bought all eight journeys; told the rules, four did

With only the request, Opus 5.5 met all 26 checks, two apps scored 96%, and two attempts left no working app. A hint lifted the mean from 65% to 76%, as those two recovered, but the median fell from 83% to 79%. Told the rules, four models fully solved it.

VersionMedianFully solved
Request only8 models, one attempt each83%1 of 8
With a hint8 models, one attempt each79%1 of 8
Told the rules8 models, one attempt each98%4 of 8

Each dot is one attempt; the line marks the median.

ModelRequest onlyWith a hintTold the rules
GPT‑6 AstraOpenAI79%79%100%
GPT‑6.1 SolOpenAI57%75%100%
Gemini 4 ArgonGoogle96%100%100%
Opus 5.5Anthropic100%96%100%
Fable 5.1Anthropic88%78%96%
Sonnet 5.5Anthropic96%91%96%
GPT‑6 LunaOpenAI0%34%85%
Sonnet 5Anthropic0%52%61%

One attempt per model and version. Gemini 4 Argon was tested on this environment only.

With a hint: the request plus 6 points from someone familiar with the job.

Told the rules: the request plus 25 product requirements from an IT specialist.

Failures

What the models got wrong

Counted over the 8 models, one attempt each, with only the request.

  1. Journeys left unbought. 7 of 8 attempts missed at least one of the eight journeys, 34 of 64 in all; 5 of the 6 apps that ran checked each trip too seldom to catch a returned seat.

  2. Too cautious. One app ran all session but held and bought no seat, pacing far below the site's limit.

  3. No working app. 2 of 8 attempts left none: one wrote no app, the other couldn't find the account note.

  4. Controls open to other sites. 1 of the 6 running apps took Start and Stop from any form post, so another website could control it.

Cost

What an attempt costs

Length
With only the request, the median attempt took 12 minutes and about 30 tool calls (19 to 67 across the 8).
Cost
The median attempt cost $1.65 at list prices, from $0.22 to $5.93 across the 8; all 24 attempts came to $59. GPT‑6 Luna has no published price, so its figures use the dearest default rate and are upper bounds; Gemini 4 Argon's are its logged tokens at Google's list price.
What's counted
The agent model only: the operator's and judges' calls aren't included.
Licence

What you license

With a licence
Revision 1 in all three versions: the account note, the practice site with its seeded stock and limits, the staged‑clock grading harness with the traffic capture, the judges' instructions, and the grader's report on each of the 24 attempts, as baseline results. No reference app is stored.
Format
The build runs in Docker with the site on the attempt's own network. Grading runs each app in real time, about 75 minutes and one app at a time, on a dedicated Linux VM whose clock is staged. Packaged as a Harbor task on request.
Fresh variants
Other data, people and facts in the same design, on request. They're never published.
Public or not
The AI Agent Trials, our public benchmark, sums up the job and shows each model's score. The site, grader and judges' instructions aren't published.
Known limitations

What we haven't measured, and what's uneven

Try a sample environment

Three are downloadable as Harbor tasks, with graders and reference solutions. Request one with your work email, or book a call about the other 53.