Work / AI agents · physical actions

Faber, an agent that runs my 3D printer

You ask for a part in chat. Faber designs it as code, shows it in a browser for review, and only prints it after you sign off. Most of the work went into what stops it doing the wrong thing with a real machine.

Why the gates

A coding agent that's wrong fails a test and tries again. A printing agent that's wrong runs for six hours on the wrong plate, or makes a part that passes every check and doesn't fit. I wanted something I could tell "make me a mount for this" and trust with the printer.

How a part gets made

Parts are Python programs on top of a small modelling library with built-in checks. A design round ends with a model you can spin around in the browser and approve or send back. Only an approved design gets sliced, and only a sliced job that passes the guards goes to the printer.

Review viewer showing a two-part enclosure candidate labelled ring-puck E014-A
A candidate in the review viewer. Each link is scoped to one candidate by a token.

The gates

GateWhat it stops
A failed check exports nothingA model that fails any geometric check never reaches the slicer
Design review can't printThe review workflow has no path to the printer; printing is a separate workflow with its own authorisation and a physical preflight
Plate and bed guard, checked three timesA job set for the wrong plate or too cold a bed is refused at slice, at upload and at start
Start conditionsPrinter idle, plate confirmed, and the file hash matches what was reviewed

The plate guard exists because of a real print that ran at 35 °C on the wrong plate. The workflow rules in the agent's instructions are just instructions; the slice and start guards are code.

Things that went wrong

  • 43 green checks and a part that fell off. A fidget toy passed every check and printed cleanly. In hand: "doesn't stay fitted". The checks looked at clearances and never asked whether the part was actually captured. That's now its own check in the library.
  • Copy-paste designs. Before the library, each candidate was a 1,500-line script copied from the last one, and a design round could take an hour. Pulling the shared bits out is what made rounds short enough to iterate on.
  • The same file, twice. A plate of nine parts gave four good ones. The identical file printed again gave nine of nine. Both are in the log, which is why there's a log.

The log

Every print has a row: the file hash, a photo, and whether it was accepted, rejected or failed at design. When the agent suggests a material or an orientation, it has that history to go on.

Not shown

The code. This is the one I'd build a product on, so it stays private. A person still loads filament and clears the bed.