Back to blog
Article

The Model Learned CAD. The Spool Still Jammed.

GPT-6 Astra rebuilds parts as CAD code at 95.9% voxel overlap. When our agent printed a part in July, the CAD was one step of ten, and the checks around it decided the result.

The words The model learned CAD, the spool still jammed, set in capitals on a dark ground beside a thin line drawing of a filament spool feeding a print nozzle, with the word jammed in gold.

In July I asked an agent, out loud, for a clip that would hold a DJI mic on my AirPods Max. It wrote the part, checked it against a real scan of the headphones, sliced it, fixed a slicer warning, looked through the printer's camera to confirm the bed was empty, and started the print: 33.3 grams of filament, 257 layers, about 1 hour 47 minutes (agents-cli blog, July 21, 2026). Partway in, the filament spool jammed. I went and looked at the spool.

On September 11, VoxelMatters reported that GPT-6 Astra scored 95.9% on BenchCAD, a benchmark that asks a model to rebuild a part as CAD code. Geometry is no longer the bottleneck for agents that make physical things. The work is everything around the model: checking fit against the real object, reading the slicer's warnings, confirming the bed is clear, and noticing when the printer itself fails.

What 95.9% measures

BenchCAD shows a model several rendered views of a part and asks for the CAD program that builds it. Kerry Stevenson at Fabbaloo described the setup on September 16, 2026: the model has to reproduce the modeling sequence, and the result is measured geometrically against the real part. The metric is mean voxel IoU. Fill both solids with small cubes and count the share that overlap.

Two details matter more than the headline. The output is code: a CAD program keeps a hole diameter you can change tomorrow, which a mesh does not. And the score is a tool-using score. Per VoxelMatters (September 11, 2026), Astra reached 95.9% "working with tools", against 84.3% for Claude Fable 5.1 and 83.3% for GPT-5.6 Sol, at roughly 43% lower estimated API cost than Sol and 86% lower than Fable 5.1 in the configurations OpenAI tested.

BenchCAD mean voxel IoU, working with toolsBar chart. GPT-6 Astra 95.9 percent, Claude Fable 5.1 84.3 percent, GPT-5.6 Sol 83.3 percent. Bars start at zero.GPT-6 Astra95.9%Claude Fable 5.184.3%GPT-5.6 Sol83.3%
BenchCAD mean voxel IoU with tools, as reported at the GPT-6 Astra launch. Bars start at zero. Source: VoxelMatters, September 11, 2026; confirmed by Fabbaloo, September 16, 2026.

The curve behind that number is steep. Fabbaloo counts scores in the low 20% range when tracking started earlier this year, and 96% eight months later (September 16, 2026).

VoxelMatters also wrote the sentence this post is about. Whether the output "holds up against the tolerances additive manufacturing workflows require is a separate question from the benchmark score." A benchmark compares the model's part with a ground-truth part. A real job has no ground-truth part. It has the object the part must fit, a printer with its own limits, and a room the printer sits in.

Ten steps, one of them CAD

Here is the July run in order. The full write-up has every screenshot; the agent ran locally, through agents-cli, on my own machine.

The July run, step by stepTen steps from a spoken request to a finished reprint. Step two, writing the part in OpenSCAD, is the model's CAD step. Steps three, four, six and seven are checks against the real world. Step nine, the spool jam, is outside anything on the screen and is marked in gold.1 Spoken requesta clip for a mic; no measurements, no CAD file2 Write the partparametric OpenSCAD: clamp, boom, cradle3 Find the real objectan AirPods Max scan on Sketchfab, in a browser4 Check the fitclamp rendered against the mesh in Blender5 SliceBambu Studio, driven through its own window6 Read the warningthe boom would sag: tree supports on, slice again7 Check the bedthe printer's camera: the plate is clear8 Send the job33.3 g, about 1 h 47 min, 257 layers9 The spool jamsin the filament path, where no screen reaches10 Reprintfinished at layer 257 of 257CAD stepcheck against the worldoutside the screen
The July run as a pipeline. Steps and numbers from the agents-cli write-up, July 21, 2026.

The agent wrote the clip as parametric OpenSCAD: a clamp that grips the ear cup and a cradle that holds the mic on a short boom, with cup thickness, boom length and mic diameter as variables. That is step two, and it is the step BenchCAD measures. Four later steps checked the CAD against something the model could not know from the request.

The real object. A clamp that grips a curved ear cup is only as good as its curve. The agent opened a signed-in browser, pulled an AirPods Max scan from Sketchfab, loaded it into Blender, and rendered the clamp against the real mesh.

A render of the printed clip, in orange, clamped to the bottom of an AirPods Max ear cup, holding a black mic on a short boom, drawn against the scanned headphone mesh.

The fit check: the agent's clamp rendered against a real AirPods Max scan in Blender. Source: agents-cli blog, July 21, 2026.

The slicer. The agent drove Bambu Studio through its window, the way a person drives it, and sliced both parts. The slicer raised a warning: the mic boom was a floating cantilever that would sag mid-air. The geometry matched the intent exactly, and as drawn it could not be printed. The agent read the warning, turned on tree supports and sliced again.

The bed. Before spending 33.3 grams of filament and nearly two hours (July 21, 2026), the plate has to be empty. The agent opened the printer's live camera, waited for the lens to focus, and confirmed the previous print was gone. Then it sent the job.

A low-angle frame from a 3D printer's own camera showing an empty textured build plate, with a filament spool in the background.

The frame the agent read before sending the job: the plate is clear. Source: agents-cli blog, July 21, 2026.

The printer. The nozzle reached 220 °C and the bed 65 °C (July 21, 2026), and the first layer went down. Then the spool jammed, a mechanical fault in the filament feed. The reprint finished; the printer's camera shows it at layer 257 of 257, clamp on the left and the boom standing in its tree supports on the right.

The finished reprint on the printer bed: a small clamp on the left and the mic cradle with its long boom held up by branching tree supports on the right.

The reprint, seen by the printer's own camera at the last layer. Source: agents-cli blog, July 21, 2026.

Count the dots in the figure. One step is the model doing CAD. Four are the agent checking that CAD against the world, through a browser, a 3D tool, a desktop slicer and a camera. One is a failure that no software on the machine could reach.

Why the checks are the work

Each check catches a failure that a perfect benchmark score cannot see.

A part can match its intended shape exactly and still miss the ear cup, because the intended shape was a guess about a curve nobody measured. The scan replaced the guess with the object.

A part can be modeled perfectly and still sag on the printer, because printability depends on orientation, overhangs and supports. BenchCAD scores the solid. The slicer scores whether the solid can be built one layer at a time, and only the slicer's warnings say so.

A file can be correct and printable and still drive the nozzle into a print someone left on the plate. Only a look at the bed rules that out.

And a job can be correct, printable and safely started, and then a spool tangles.

I wrote about the same gap in Every Agent Demo Hides the Same Number: a demo sets the cost of failure to zero. A benchmark does too. Nothing in BenchCAD burns filament, jams a feeder or leaves half a boom on the bed. In a real run each of those costs time and material, and the checks are how an agent keeps that cost small.

The checks share one more property: each lived on a different surface. The scan lived on a website. The fit lived in Blender. The warning lived in a desktop app's window. The bed lived on a camera feed. An agent that can only write files produces an excellent .scad file and stops there. The agent that printed the clip spent most of its run reading pages and screens, which is why we spend so much effort on what it costs an agent to look at a page, as in The Fastest Browser Agent Isn't the Cheapest to Run.

Where the agent stops

The honest limit. The agent could see the printer through its camera and could not touch it. A jammed spool is a job for hands. A better model changes nothing here, and a run that hides the boundary ends with a confident "printed" and a bed holding half a part.

The right behavior at that boundary is to say so. A run that reaches the physical world should end in a state it can prove: done, with the evidence that it is done; failed, with what failed; or waiting on a person, with what that person has to do. In July, that person was me, walking over to the spool.

What this means for Rush

Rush is the API for work. A caller sends a request, an agent does the work in its own cloud sandbox with a computer and a browser, and the result comes back with proof: for a job like this one, files and a report, plus the full trajectory of what the agent did. Rush does not drive the printer on your desk; the July run was local. What carries over is the shape of the result. For a part, the deliverable is the parametric source, the renders against the real object, and the record of every check the agent ran on the way, so whoever prints it can see what was verified and what was left to them. A run whose proof is missing ends as needs_review.

Fabbaloo wrote on September 16, 2026 that a future model might reach 100% on BenchCAD. When one does, step two in that figure will be perfect, and the other nine will still be there: the scan to find, the warning to read, the bed to look at, the spool to clear. The models learned the part of making things that looks like intelligence. The rest is checking, and checking is where an agent earns the word done.

Read Next