Can AI agents run a factory?
AI agents write the PLC programs for 100 factory cells. A simulated plant runs every program and grades it on success and safety.
Best on Hard 72%, GPT-6 Astra / 13 models / 476 test conditions
# leaderboard
→On the 30 Hard tasks the best model passes 72% of its runs. 8 of 13 models pass fewer than half.
| # | Model | Hard pass rate | All 100 tasks | Cost per Hard run | |
|---|---|---|---|---|---|
| 1 | GPT-6 Astra OpenAI · Codex | 72% | 92% | $0.98 | |
| 2 | GPT-6.1 Sol OpenAI · Codex | 70% | 91% | $0.25 | |
| 3 | Opus 5.5 Anthropic · Claude Code | 60% | 77% | $0.87 | |
| 4 | GPT-6.1 Terra OpenAI · Codex | 58% | 85% | $0.036 | |
| 5 | Fable 5.1 Anthropic · Claude Code | 56% | 82% | $5.61 | |
| 6 | Sonnet 5.5 Anthropic · Claude Code | 45% | 72% | $0.39 | |
| 7 | DeepSeek V4.1 Flash DeepSeek · mini-swe-agent · via OpenGateway | 21% | 71% | $0.019 | |
| 8 | Haiku 5.5 Anthropic · Claude Code | 11% | 66% | $0.049 | |
| 9 | GPT-6 Luna OpenAI · Codex | 9% | 48% | $0.013 | |
| 10 | Nemotron 3.5 Super VL NVIDIA · mini-swe-agent · via OpenRouter (DeepInfra) | 6% | 51% | $0.070 | |
| 11 | GLM-5.3 Flash Z.ai · mini-swe-agent · via OpenGateway | 4% | 43% | $0.019 | |
| 12 | Solar Pro 4 Upstage · mini-swe-agent · via OpenRouter (Upstage) | 0% | 17% | $0.27 | |
| 12 | Solar Mini 4 Upstage · mini-swe-agent · via OpenRouter (Upstage) | 0% | 9% | $0.20 | |
0255075100% | |||||
Table 1. Results as of 28 October 2026. 13 models, 3 runs per task. A run passes only if every condition succeeds with no safety violation. Bars: pass rate over the scored runs on the 30 Hard tasks, with a 95% interval (bootstrap over tasks). All tasks: pass rate on all 100. Cost: mean API spend per Hard run.
# results
Capable, but not yet consistent
With three runs per task, up to 87% of the Hard tasks are passed at least once (GPT-6.1 Sol and Opus 5.5). Passing all three runs is rarer: at most 60% (GPT-6 Astra).
- Best pass rate, 1 run
- 72%
- GPT-6 Astra
- Best within 3 runs
- 87%
- GPT-6.1 Sol and Opus 5.5
- Best in all 3 runs
- 60%
- GPT-6 Astra
- Never passed
- 3 of 30
- Hard tasks, in 117 runs
| Model | pass^3 | pass@1 | pass@3 |
|---|---|---|---|
| GPT-6 Astra | 60% | 72% | 83% |
| GPT-6.1 Sol | 57% | 70% | 87% |
| Opus 5.5 | 21% | 60% | 87% |
| GPT-6.1 Terra | 47% | 58% | 67% |
| Fable 5.1 | 37% | 56% | 80% |
| Sonnet 5.5 | 25% | 45% | 63% |
| DeepSeek V4.1 Flash | 13% | 21% | 37% |
| Haiku 5.5 | 7% | 11% | 20% |
| GPT-6 Luna | 3% | 9% | 17% |
| Nemotron 3.5 Super VL | 0% | 6% | 10% |
| GLM-5.3 Flash | 0% | 4% | 13% |
| Solar Pro 4 | 0% | 0% | 0% |
| Solar Mini 4 | 0% | 0% | 0% |
Spending more buys little
GPT-6.1 Sol passes within 2.2 points of GPT-6 Astra and costs 4 times less per Hard run. The most expensive model, Fable 5.1 at $5.61 a Hard run, passes 16.7 points fewer than GPT-6 Astra.
| Model | Hard pass@1 | Cost per Hard run |
|---|---|---|
| GPT-6 Astra | 72% | $0.98 |
| GPT-6.1 Sol | 70% | $0.25 |
| Opus 5.5 | 60% | $0.87 |
| GPT-6.1 Terra | 58% | $0.036 |
| Fable 5.1 | 56% | $5.61 |
| Sonnet 5.5 | 45% | $0.39 |
| DeepSeek V4.1 Flash | 21% | $0.019 |
| Haiku 5.5 | 11% | $0.049 |
| GPT-6 Luna | 9% | $0.013 |
| Nemotron 3.5 Super VL | 6% | $0.070 |
| GLM-5.3 Flash | 4% | $0.019 |
| Solar Pro 4 | 0% | $0.27 |
| Solar Mini 4 | 0% | $0.20 |
# tasks
100 tasks in two suites, each at three levels: Easy, Medium and Hard. A task is one factory work cell: its devices, an I/O map with exact addresses, an operating spec, a completion condition and safety rules. All come from PLCWorld; we audited and fixed them before ranking any model.
50 tasks
Motion control
Lifts, hoists, rotary tables, gantries and servo axes. In the Hard tasks, independent requests share equipment such as one shuttle or one reference axis: the program schedules it, holds each position and brings every fixture back without a collision.
50 tasks
Material handling
Conveyors with stops, grippers, carriages and robots that move real parts. The Hard tasks add kits, filling lines that share a tank, packing and winding: the program has to know which part is where, not just switch outputs.
MAT-H09, Material handling
Two filling lines, one tank
Two filling lines share one tank and one capping head. The program times refills, container arrivals and hand-offs at the exit, and keeps track of what each container actually received and which cap it got.
6 conditions. 7 of 13 models passed at least one of their runs (43 runs in all).
MOT-H01, Motion control
Two hoists, one shuttle
Two hoist cells take requests on their own but share one shuttle and one rotary approach cell. The program serves both, prepares the next job, and returns every moving fixture to its place without a collision.
6 conditions. 7 of 13 models passed at least one of their runs (39 runs in all).
MOT-H02, Motion control
Holding position through a reference change
A lift, a gantry and a reference axis serve alignment requests one after another. When the reference changes, every request must still hold its true target position, before the change and after it.
3 conditions. No model has passed it: 0 of 39 runs.
# grading
A program grades every run: no LLM judge and no human grading. Each model works through its own harness (Codex, Claude Code, mini-swe-agent), three runs per task, and leaves one file. Here is one Hard task, MAT-H02, from the brief to the verdict.
01
The brief
Each task describes one work cell: its devices, the I/O map with exact addresses, the operating spec, the completion condition and the safety rules.
Brief
MAT-H02
Maintain accessibility of bypass storage in situations where the FIFO lead and the required types of two kits differ, and transfer actual parts as kit members of the current order.
Inputs
Outputs
- Conditions
- 9
- Scan
- 10 ms
- Signals
02
The program
The agent leaves one IEC 61131-3 Structured Text file, /app/program.st. It gets no PLC compiler and no plant simulator, so the program has to be right before it ever runs.
program.st
GPT-6.1 Terra
156CASE state OF157 0:158 IF NOT X11 AND D1 = 0 AND gen <= 2 THEN159 source := 0;160 dest := 0;161 IF D5 <> 0 AND X15 AND D13 < 2 AND D6 = D11 THEN162 source := 2; dest := 4;163 ELSIF D5 <> 0 AND X16 AND D14 < 2 AND D6 = D12 THEN164 source := 2; dest := 5;165 ELSIF D7 <> 0 AND X15 AND D13 < 2 AND D8 = D11 THEN166 source := 3; dest := 4;167 ELSIF D7 <> 0 AND X16 AND D14 < 2 AND D8 = D12 THEN168 source := 3; dest := 5;169 ELSIF X10 AND D3 <> 0 THENLines 156–169 of 237, as submitted for MAT-H02: choosing where the next part comes from and where it goes. This program passed every condition. 03
The plant
A separate verifier compiles the file and runs it scan by scan, every 10 ms of plant time, in closed loop with a simulated plant.
- 1Sample the inputs
- 2Run the program
- 3Write the outputs
- 4Move the plant
every 10 ms of plant time
Repeated under 9 conditions for this task (476 across the benchmark), with device parameters, timings and disturbances varied inside the published ranges.
04
The verdict
Task success and safety are judged separately in every condition. A run passes only if every condition reaches the goal with no safety violation; anything less scores 0.
# access
Run it, or add your model
The tasks, the verifier and the reference programs are public. Send us a model for the leaderboard, or a flaw you found in a task.
Code and data
Run it yourself
All 100 tasks in Harbor format (tag v1.2), as three datasets: Easy, Medium and Hard. Grading runs in a separate verifier container.
github.com/Koomook/autofactory-bench
Leaderboard
Add a model
Send us a model and its harness, or an error you found in a task.
bong@team-attention.com