← Instruments

// instruments · 06

I don't speak geometry

A 3D printer, a folder of almost-working models, and what one good prompt and three failed ones taught me about the substrate problem.

I don't know how to CAD. I have a 3D printer in the corner of the office and a folder on my desktop that has been growing for a year. The folder is full of models I downloaded from Handy and elsewhere that almost work. A vent adapter that needs to be 4 mm wider. A bracket whose mounting holes are in the wrong place for the screws I have. A window seal close to right but a quarter inch short. Every one of them is a part I could use if I knew Fusion or Onshape. I don't, and the cost of learning enough to fix a fifteen-minute problem is not fifteen minutes.

One evening I posed the question to an agent. By the end of the night I had a working tool and the first modified part coming off the printer. The model is called Maquette. This is the story of why it worked on the first try for one kind of prompt and failed three times in a row on another, and what the gap told me about designing tools for the work I actually do.

The cheap thing moved

When I started, I thought the hard part of going from prompt to printable part would be the geometry. It is not. The agent is fluent in geometry. The hard part is whether the prompt has something concrete for the agent to push against. With the right anchor, the agent works on the first try. Without one, it improvises, and three iterations later you have three different failures and no idea which variable broke which version.

That is a UX problem, not a modeling problem. The model is not the bottleneck. The interface between what I want and what the agent can act on is.

The first prompt worked

The first prompt I dropped into Maquette was on a part from that folder. The file was an STL of a hose pass-through, and the hole through the middle was 6 mm. I needed 8 mm. I wrote "widen the hole to 8 mm" and dropped the STL into an inbox/ folder. The agent produced a printable 3MF in outbox/ a few minutes later, with a one-page report on whether the result was watertight, whether walls had stayed thick enough to print, and a note on what it changed. I sliced it, printed it, and the part fit on the first try.

The reason it worked is that the agent did not have to invent anything. Before it picked an operation, it ran a function on the mesh that handed back its dimensions, its volume, its surface area, the location of every flat face, the diameter of every hole. The phrase "the hole" in my prompt got resolved to specific coordinates before any code was written. My prompt narrowed one variable. The mesh constrained everything else.

The second prompt failed three times

The same night I tried a second prompt: "a phone stand for my desk, max 100×60×80 mm, PLA." Same agent. Same model. Three iterations. Three different failures. One had walls too thin to print. One had a base that did not sit flat. One had the phone cradle angled wrong for the desk it was supposed to live on.

The agent was not getting worse with each pass. It was getting random. I thought at first this was a model-capability problem. It was not. The prompt was the problem. A phone stand is a vocabulary the agent does not share with me. It does not know what shape a phone stand is, where the base sits relative to the cradle, what angle holds a phone the right way. Every dimension was free. There was nothing for the prompt to push against.

The realization, sitting at the desk that night watching the third failure: I had given the agent a problem with no anchor. The mesh prompt had a substrate the agent could read. The phone stand prompt had prose, and prose is not something a model can interrogate.

Three prompts, three substrates

That is how Maquette ended up with three modes, but the modes are not really about what the user is doing. They are about how much the prompt has to carry on its own.

Modify is the mode that worked the first night. You bring a mesh, the agent reads it, your prompt narrows one variable. The mesh is the spec. This is the mode that handles the folder on my desktop, which is the work I actually wanted the tool for in the first place.

Reference is for when there is no mesh but there is a known thing. "Like a hose clip but for a 25 mm pipe." For this to work, the agent has to know what a hose clip is, and a phrase in a prompt does not teach it. So I built a small motif library. Each motif is a file the agent loads and edits at named parameters. The shape stays fixed. The dimensions change. The phrase resolves to a copy of the file with INNER_DIAMETER_MM = 25. The vocabulary the prompt was assuming now lives somewhere the agent can read.

Creative is the hardest one. There is no mesh and there is no template, only a constraint. "A pen organizer, max 80×40×20 mm, four bays." For this mode the agent writes a spec first and waits for me to approve it before any geometry is built. The spec is a paragraph I can read in thirty seconds: dimensions, wall thickness, bay layout, print orientation. If the spec is wrong, I fix it in thirty seconds. If the spec is right, the geometry follows. The spec is the artifact I trust. The build script is disposable.

The pattern across all three modes is the same: the agent works when there is something concrete to push against. Modify has it from the start. Reference and creative had to have it manufactured.

What this looks like from a designer's chair

The version of this story that flatters the build is "I built a 3D modeling agent." The version that is actually useful to a product designer is this: the cost of generating geometry collapsed, and what mattered was how I described what I wanted. The three modes are three answers to one design question. How much of the work does the prompt have to do?

When the user brings their own substrate, the prompt can be a sentence. When the user knows the category but not the dimensions, the substrate is a motif library. When the user knows only the constraints, the substrate is a spec that gets reviewed before anything is built.

I have seen this shape before, and so has anyone who has designed for an AI surface in the last year. The work of design is no longer to specify the output. The work is to specify the interface between intent and action, and to make sure the interface has something the agent can stand on. A prompt is not a brief. A prompt is a contract with a substrate.

What ships and what doesn't

Modify is live and is the mode I use most days. It is what closed the folder on my desktop down from a year's backlog to a working queue. The motif library is live with three motifs and is validated on the hose clip and the cable bracket. Creative with the spec gate is live and was validated on the pen organizer.

Two validator gaps surfaced in the first weeks of running this. One is a watertightness disagreement between the in-memory mesh and the exported file when booleaned subparts share a face. The fix is to overlap boolean interfaces by about a millimeter, which is build hygiene I should have had from day one. The other is the overhang gate, which checks for angled faces and walks right past a flat ceiling at zero degrees. The pen organizer had a 100×40 mm flat ceiling above the desk channel and the gate stayed silent. Both are scoped fixes.

A second version of Maquette is in exploration that swaps the modeling backend for one with a visual feedback loop, for the cases where the geometry cannot be validated from description alone. The current version stays in production. The new one only takes over when a job lands that the current one cannot see.

The deeper finding

I did not set out to build a 3D modeling agent. I set out to fix the folder. The agent was a means. What the work taught me is that the model is not the variable. The substrate is. An LLM doing geometry needs something to read. A mesh, a motif file, a spec. When the substrate is there, the prompt can be small. When the substrate is missing, no prompt is large enough.

Building an instrument that anchors an LLM in geometry, for a designer who does not speak geometry, is not a feature you ship. It is the interface to a practice that was previously out of reach.