AI agents
AI CAD voor RFQ-agents: Adam, FeatureScript, OpenSCAD
Het is zondag 09:47 in Veldhoven. Een klant heeft net een Catia V5-assembly geüpload naar je RFQ-portaal. Je CAD-pipeline leest geen Catia V5. Wat nu?

Het is 09:47 op zondagochtend in Veldhoven. Een klant heeft net een Catia V5-assembly in de RFQ-portal van een metaalbewerker met 24 man personeel gesleept. De pipeline leest geen Catia V5. De portal geeft 415 Unsupported Media Type terug. De klant mailt de eigenaar direct. De eigenaar mailt ons.
Dit is het soort edge case dat bepaalt welke CAD-laag je daadwerkelijk uitrolt. We hebben het voorjaar besteed aan het beoordelen van drie opties voor één klant: een precisieverspaningsbedrijf dat 1.180 STEP-uploads per week ontvangt van inkopers uit automotive, semicon en biotech. De RFQ-agent moet elk bestand lezen, kosten inschatten, een offerte genereren en binnen vier werkuren terugkoppelen. De vraag waar we steeds op terugkwamen: welke parametrische modelleringsengine ligt eronder?
Wat de RFQ-agent moet kunnen
De agent doet vijf dingen achter elkaar. Hij accepteert een upload (STEP, IGES, DWG, soms Solidworks of Catia). Hij opent het bestand en haalt de geometrie eruit in iets waar het kostenmodel mee kan rekenen — features, toleranties, oppervlakte, aantal bochten, gatspecificatie, draaddiepte. Hij toetst de NDA van de inkoper, de historische prijslijst en de actuele werkplaatsplanning. Hij schrijft een offerte-PDF in de huisstijl van de werkplaats. Hij zet de regels in het ERP.
Stap één en twee zijn het lastige deel. Stap drie tot vijf is leidingwerk. Als de geometrielaag fout zit, klopt elke volgende stap niet, en verliest de werkplaats €18.000 omzet zodra hij voor het eerst een roestvast 316L-laswerk te laag offreert.
We hebben drie lagen onder die pipeline getest. Elke laag weegt dezelfde drie dingen tegen elkaar af: kosten per RFQ bij het werkelijke volume van de werkplaats, retentie van tekeningen op een manier waar de juristen van de klant hun handtekening onder durven te zetten, en wie de telefoon opneemt als de parser op een zondag stuk gaat.
Adam, drie maanden onderweg
Adam ging live in YC's W25-batch en haalde deze week de voorpagina van Hacker News. Het is open-source AI CAD: een stack die parametrisch modelleren behandelt als een reeks intenties en een model laat schrijven, bewerken en refactoren in B-rep-historie. We lazen de lanceringspost de ochtend dat hij verscheen en testten de engine dezelfde dag.
Wat ons beviel: de history graph is leesbaar. Een model kan een constraint koppelen, de check zien falen, de fout lezen en opnieuw proberen — de loop is kort. De geometriekernel verwerkt STEP netjes, en de testset die we erop afvuurden (43 laswerken, 88 plaatwerkonderdelen, 12 gietbehuizingen) ging zonder oppervlakteverlies heen en weer.
Wat ons niet beviel: het is drie maanden oud. Er zit geen commerciële Catia V5-translator in. Het team is klein en de patch-cadans is die van elk pre-Series-A open-source project. Een Catia-bug op zondagochtend belandt bij je eigen engineer, niet bij een supportwachtrij. Voor een eenmansstudio is dat prima. Voor een bureau van 24 man met 1.180 wekelijkse uploads is dat een reëel risico dat ergens in het contract moet landen.
OnShape en FeatureScript
OnShape is de tegenovergestelde afweging. FeatureScript is een getypeerde taal voor het bouwen van parametrische features. De kernel is Parasolid — dezelfde kernel die onder NX en Solid Edge zit — en hij leest vrijwel elk neutraal formaat dat je erop afvuurt, inclusief Catia V5 met de Enterprise-translator-add-on. De API is volwassen. De documentatie is eerlijk. De prijsstelling niet.
Voor een werkplaats van 24 man met API-gebruik op productieniveau is Enterprise het enige werkbare tier. De gepubliceerde kosten per seat lopen snel op, en een self-serve quotation-agent is formeel een gedeelde seat — wat een gesprek met hun sales is, geen vinkje. Dat gesprek hebben we gevoerd. Het bedrag dat terugkwam, lag een orde van grootte boven wat de werkplaats op de CAPEX-regel wilde zetten.
Het andere punt is dataresidentie. OnShape is cloud-native, wat betekent dat klanttekeningen op Amerikaanse infrastructuur staan. Voor een Tier-2-leverancier in automotive met Duitse OEM-klanten is dat een werkbaar antwoord. Voor een defensietoeleverancier is het een no-go. De werkplaats heeft beide soorten klanten.
OpenSCAD plus een Claude tool-use loop
De derde optie is degene die we niet hadden verwacht uit te rollen. OpenSCAD is een script-gebaseerde parametrische modeller — tekst erin, geometrie eruit. Er zit geen B-rep-kernel onder en hij leest Catia niet native. Wat hij wél heeft: een negentien jaar oude codebase, een eenvoudige taal die een model betrouwbaar kan schrijven en refactoren, en nul runtime licentiekosten.
De loop die we hebben gebouwd is klein. Claude leest het STEP-bestand (via een read_step-tool die een gelicentieerde translator aanroept — we kozen voor CADExchanger vanwege de formaatdekking), redeneert over de geometrie en levert OpenSCAD-source. Een render-tool compileert dat en geeft de resulterende STEP terug plus een geometrie-diff ten opzichte van het origineel. Komt de diff boven de tolerantie uit, dan bewerkt het model de source en probeert opnieuw. Typische convergentie ligt op twee of drie beurten.
tools = [
{
"name": "read_step",
"description": "Extract features, holes, bends, threads from a STEP file.",
"input_schema": {
"type": "object",
"properties": {"path": {"type": "string"}},
"required": ["path"],
},
},
{
"name": "render_scad",
"description": "Compile OpenSCAD source to STEP. Returns the path and a geometry diff vs the reference.",
"input_schema": {
"type": "object",
"properties": {
"source": {"type": "string"},
"reference_step": {"type": "string"},
},
"required": ["source", "reference_step"],
},
},
]
De OpenSCAD-source zelf is het artefact dat we teruggeven aan de engineer van de werkplaats voor review. Het is tekst. Je kunt het diffen. Het wordt geversioneerd in git. Uploadt een klant een bijna-duplicaat van het onderdeel van vorige maand, dan haalt het model de eerdere source op en bewerkt die, in plaats van opnieuw te beginnen.
// quote-2026-06-14-A77.scad — sheet-metal bracket, 2mm SS304
module bracket(length, width, hole_d, bend_angle) {
difference() {
union() {
cube([length, width, 2]);
translate([length, 0, 0])
rotate([0, -bend_angle, 0])
cube([30, width, 2]);
}
translate([length/2, width/2, -1])
cylinder(h = 4, d = hole_d, $fn = 64);
}
}
bracket(length = 120, width = 40, hole_d = 8.5, bend_angle = 90);
Kosten per RFQ bij 1.180 per week
De werkplaats draait ruwweg 4.720 RFQ's per maand. We hebben drie maanden echt verkeer gemeten over alle drie de stacks en de spreiding is breder dan de brochures suggereren.
De Claude-plus-OpenSCAD-loop kwam uit op €0,04 tot €0,07 per RFQ aan model-tokens, met Sonnet 4.5 voor geometrieredenering en een kleine Haiku-pass voor triage. CADExchanger zit op een vaste licentie, dus de translatorkosten amortiseren bij dit volume tot onder een cent. Totaal: onder €350 per maand, plus of min bij verkeerspieken.
Adam, self-hosted op een single workstation-class GPU, kwam tussen €600 en €900 per maand uit, inclusief stroom en een afschrijvingsplakje voor de doos. Dat is prima, maar de kosten zitten in de hardware-vloer, niet in de per-call. Halveert het volume, dan blijf je die vloer betalen.
OnShape Enterprise, in de vorm die we nodig zouden hebben, kwam boven €4.000 per maand uit voordat er ook maar een API-quotum bovenop kwam. Hun seat-model is gebouwd voor een menselijk engineering-team, niet voor een server-side agent die om 02:00 een STEP-bestand van een Koreaanse inkoper offreert.
Tekeningen onder NDA
De helft van de klantenbasis van de werkplaats stuurt tekeningen onder NDA. Drie van de grotere klanten — namen die we niet kunnen noemen — schrijven een harde dataresidentie-clausule in het contract: tekeningen blijven binnen de EU, en het inspectierecht op de pipeline ligt bij hun inkoopteam, niet bij hun juristen.
De Claude-loop draait op Anthropic's EU-endpoint voor de model-calls; de renderer en de CADExchanger-CLI draaien op de eigen hardware van de werkplaats in een rack in Eindhoven. Tekeningen passeren één netwerkgrens en komen terug. Source code, OpenSCAD-bestanden en offertes zitten in een git repo waar de werkplaats volledig eigenaar van is. We kunnen een klant de exacte bytes laten zien die het pand verlieten, op welk moment, en naar welk IP.
Adam, self-hosted, doet hetzelfde. OnShape kan dat per definitie niet. Dat ene feit diskwalificeerde de cloud-optie bij twee van de top-vijf klanten van de werkplaats voordat we ook maar in de buurt van het prijsgesprek kwamen.
On-call om 09:47 op een zondag
Dit is de vraag die de meeste CAD-evaluaties overslaan. De Catia V5-upload die deze hele vergelijking veroorzaakte, is geen hypothese. Het gebeurt ongeveer twee keer per kwartaal bij deze werkplaats en het antwoord kan niet zijn 'wacht tot maandag.'
Het antwoord van OnShape: hun supportwachtrij. Reactietijden zijn gedocumenteerd. Het escalatiepad bestaat. We hebben het zien werken en we hebben het zien falen. Twee keer tijdens de pilot bleef het ticket zestien uur openstaan.
Het antwoord van Adam: GitHub Issues, de YC Slack, of je eigen engineer. Drie maanden onderweg is dat geen klacht — het is een feit over de volwassenheid van een open-source project in deze fase. Wie Adam uitrolt, rolt het team uit dat het voor je onderhoudt.
Het antwoord van OpenSCAD: het bestand is tekst. Het model leest de fout, herschrijft het script en probeert opnieuw. Voor exotische formaten als Catia V5 zit de bottleneck bij de translator, niet bij de modeller, en CADExchanger heeft een echt supportcontract met een echt Europees telefoonnummer. De zondagochtend-failure mode degradeert tot: de agent mailt de inkoper, vraagt om een STEP-export en offreert achttien minuten later wanneer er antwoord komt. Dat is een prima failure mode. Het kost je de deal niet.
Welke stack je ook kiest, doe de zondagstest voordat je tekent. Upload een Catia V5-assembly, een Solidworks pack-and-go en een IGES-bestand uit 1995 met kapotte trimming curves. Tijd de round trip. Het eerste formaat dat je niet binnen twee uur kunt offreren, is het formaat dat de agent failliet doet gaan.
Wat we voor de Veldhovense werkplaats hebben uitgerold
We zijn uitgekomen bij de OpenSCAD-plus-Claude tool-use loop, met CADExchanger voor formaatvertaling en een kleine private RAG-index over twintig jaar historische offertes van de werkplaats. De agent offreert rond 94% van de inkomende RFQ's zonder menselijke review en routeert de rest naar een senior calculator met een vooringevuld concept. De doorzet van de werkplaats op offertes ging van drie per calculator-dag naar achtentwintig, en de senior calculator besteedt zijn ochtenden nu aan de onderdelen die echt om hersens vragen.
Toen we deze AI-agent voor de metaalbewerker bouwden, was het ding waar we steeds tegenaan liepen dat de Catia V5-translator het eigenlijke product was, niet het model. We hebben uiteindelijk meer budget aan CADExchanger besteed dan aan Claude, en de agent werd pas betrouwbaar toen we formaatdekking als een eerste-orde-regel behandelden en niet als een nakomertje.
Beoordeel je deze week zelf een CAD-laag voor je eigen RFQ-pipeline, dan is dit de vijfminutenaudit: tel het aantal unieke CAD-formaten dat je vorige maand binnenkreeg, vermenigvuldig met het aantal klanten per formaat, en vraag je leverancier wat hun antwoord is voor het kleinste formaat op die lijst. Is het antwoord 'we komen erop terug,' dan heb je je shortlist.
Kern
Bij 1.180 RFQ's per week verslaat een per-call CAD-stack een per-seat-stack met een orde van grootte — maar alleen als je translator de formaten dekt die op zondag binnenkomen.
FAQ
Kan Adam Catia V5 out-of-the-box lezen?
Niet in de open-source build per juni 2026. Catia V5 vraagt om een gelicentieerde translator — CADExchanger, Datakit, of Dassault zelf. Reken erop als aparte begrotingspost vóór je begint met bouwen.
Waarom niet Solidworks met zijn API gebruiken?
Die draait op Windows-desktops, niet als headless server, en het licentiemodel is niet gebouwd voor een agent die altijd aanstaat. Hetzelfde probleem als OnShape, met slechtere antwoorden voor dataresidentie bij EU-klanten.
Wat kost een Claude tool-use loop per RFQ aan tokens?
Rond €0,04 tot €0,07 met Sonnet 4.5 voor geometrieredenering en Haiku voor triage, gemeten over 4.720 RFQ's per maand bij een Veldhovense precisieverspaningsbedrijf met 24 man personeel.
Hebben we CADExchanger nog nodig als we OpenSCAD gebruiken?
Voor multi-format input (Catia, NX, Solidworks, IGES) wel. OpenSCAD modelleert prima native, maar leest geen vreemde B-rep-formaten. Combineer ze en begroot de licentie.