Show HN: Autonomous CAD design and OpenFOAM optimization loop using local LLMs A developer created an autonomous multi-agent system that uses local LLMs, CadQuery, and OpenFOAM to design and optimize 3D-printable quadcopter propellers. The system employs a team of AI agents to propose designs and a physics-based referee to score them, enabling multi-objective optimization for quiet, efficient, and strong propellers. The project demonstrates a trustworthy approach where AI suggests but never scores, relying on trusted code for evaluation. An autonomous multi-agent system for parametric design, simulation, and multi-objective optimization of 3D-printable quadcopter propellers — powered by free, local LLMs Ollama , CadQuery, and OpenFOAM CFD. This project tries to answer a simple question: instead of an engineer hand-tweaking a propeller and testing it over and over, can we let a group of AI models do that loop themselves — and end up with a better propeller than a person would patiently grind out by hand? The target propeller should be three things at once: quiet , efficient it doesn't waste battery , and strong it pushes a lot of air . Those goals fight each other — a bigger, grippier blade gives you more thrust but more noise, for example — so there's no single "best" answer. There's a set of good trade-offs, and the job is to find them. If you're new to AI agents, this is a nice thing to learn from, because it's not a chatbot. It's AI used as a worker that actually does something and checks its own results. Picture a small research team where every member is a program: - A few junior members are fast and cheap. Their job is to brainstorm — throw out lots of propeller designs, some sensible, some weird. They don't need to be smart, they need to be prolific. These run on your own computer with free local models via Ollama , so brainstorming costs nothing. - A lead researcher is the expensive, smart one. It doesn't generate the grunt work; it reads the results, notices patterns "the 5-blade designs are getting quieter — push harder there" , and decides what the team tries next. That role is Antigravity , the agent running the show. - A referee that never lies: plain, trusted math and physics code. The AIs only ever propose designs. They're never allowed to score their own work. The referee does the scoring, so a confident-but-wrong model can't fool the system. That last point is the whole trick, and it's worth remembering as a general lesson about AI: let models suggest, let trusted code decide. Models are great at coming up with options and terrible at being a reliable judge of truth. So we use them only for the part they're good at. The team works in a loop. One lap looks like this: Propose — the cheap models spit out a batch of new propeller designs. Build — code turns each design into actual 3D geometry a real CAD file . Score — the physics code estimates how much thrust, how much noise, and how efficient each one is. This first pass is fast approximate math, not a full simulation. Shortlist — the system keeps the designs that aren't beaten on every goal at once. That surviving set is called the Pareto front — the current "menu" of best trade-offs. Reflect — Antigravity looks at the front and steers: what's working, what to explore next. Write it down — a one-line summary of the round gets logged, and the loop starts again. Every so often, the most promising designs get the expensive treatment: a real fluid-dynamics simulation CFD , run locally with OpenFOAM that models the air actually flowing over the blade. That's slow, so we only spend it on candidates that already look good on the cheap math. There's one more helper worth naming: a surrogate model a Gaussian Process, from scikit-learn . Think of it as the team learning to guess the simulation's answer from the designs it has already simulated — so it can skip a lot of slow runs and spend them only where it's genuinely unsure. It's the system getting smarter about where to look as it goes. The one rule that makes this trustworthy: the AI agents only ever propose designs — they never score them. Scoring is done by plain physics code that can't be talked into a wrong answer. Here's the whole loop: flowchart TD OBJ "Antigravity sets the objective