$npx -y skills add ForgeCAD/forgecad-public-kit --skill forgecad-build-modelBuild or edit a manufacture-realistic .forge.js model in a project, then validate it with run, render, inspect, and export evidence.
| 1 | # Build Model |
| 2 | |
| 3 | Create new ForgeCAD models in the user's active ForgeCAD project. |
| 4 | |
| 5 | ## Default Output Standard |
| 6 | |
| 7 | Unless the user asks otherwise, the output is a **manufacture-realistic prototype**: a model someone could fabricate, buy parts for, assemble, inspect, and iterate in a real shop — not a concept sketch, not a universal 3D-printing exercise, not a claim of certified production readiness. |
| 8 | |
| 9 | - Include prototype-real features: wall thickness, fastener stacks, bosses, ribs, flanges, seats, gaskets, cable exits, service access, toleranced clearances, believable purchased parts. No invented tooling details, certifications, or safety ratings unless asked. |
| 10 | - Modifiers shift the standard: `blockout` → rough massing; `production-realistic` → DFM and production-intent materials; `printable` → make the selected printed parts honest; `visual-CAD` → clearly visual, not pretending build-ready. |
| 11 | - Zero unexpected final collisions is part of the definition of done (see Collision Policy). |
| 12 | |
| 13 | ## File Placement |
| 14 | |
| 15 | New `.forge.js` files go under date-based directories (today's date) in the user's current ForgeCAD project or a clearly named local folder: |
| 16 | |
| 17 | ``` |
| 18 | YYYY/MM/DD/file.forge.js — single-file model |
| 19 | YYYY/MM/DD/folder/main.forge.js — multi-file entry point (always main.forge.js) |
| 20 | YYYY/MM/DD/folder/parts/*.forge.js — standalone/importable parts |
| 21 | YYYY/MM/DD/folder/lib/*.js — pure helpers/constants, no geometry |
| 22 | ``` |
| 23 | |
| 24 | - Kebab-case descriptive names (`parametric-lego.forge.js`). Each part file must run standalone and import via `require('./parts/name.forge.js', params)`. |
| 25 | - Plain `.js` only for constants, math, tables, formatting — never geometry. |
| 26 | - Split files only for reusable parts or independent sub-assemblies, never for organization. |
| 27 | |
| 28 | ## Workflow |
| 29 | |
| 30 | 1. **Load the `forgecad` skill** — read at least the Core API reference. Moving parts: also the assembly group and joint-design guide. Mating parts: the positioning guide; default to connectors + `matchTo()`. |
| 31 | 2. `mkdir -p YYYY/MM/DD/[folder]`. |
| 32 | 3. Moving parts: prove the rig first (Kinematics-First below). |
| 33 | 4. Write the model — `param()`/`Param.bool()` for tunable dimensions; pick the manufacturing process before styling; build real internals; follow the contracts below. |
| 34 | 5. Validate — `forgecad run <file>` (`main.forge.js` for multi-file). |
| 35 | 6. Run the Final Acceptance Gate and Manufacturing Outputs checks below on `main.forge.js`. |
| 36 | 7. Iterate — convert every render/inspect finding into a model edit and rerun the same targeted evidence until reality matches the intended component graph. |
| 37 | |
| 38 | ## Process, Style, and Variants |
| 39 | |
| 40 | **Manufacturing process is a choice, not an assumption.** Never treat every model as printable. Pick process cues from the load path and operating story: machined, bent sheet, tube-and-plate, wood/composite, molded-look, printed, or hybrid purchased-hardware construction (rideables: metal/composite structure + purchased wheels/bearings; furniture: real joinery). Print-specific features (slicer clearances, heat-set inserts, layer-oriented ribs) only when the process includes printed parts. |
| 41 | |
| 42 | **Visual style: expensive and credible, not generically colorful.** Restrained material-driven palette (ivory, charcoal, satin black, brushed aluminum, brass, muted burgundy/green/navy, smoked polymer, natural wood); match color to material/process so metal, polymer, rubber, PCB, and wood read differently. Bright color only as small accents (controls, seals, indicators). Keep seams, fasteners, gaskets, and purchased parts legible. |
| 43 | |
| 44 | **Form is part of credibility.** Real products carry deliberate edge treatment — chamfered or rounded profiles where hands, seals, or tooling meet the part, draft on molded faces, consistent proportions and design language across parts. A knife-sharp box reads as a blockout, not a product. Get the rounding from profile-level geometry (rounded sketch corners, chamfered profiles) per the fillet caveat below. |
| 45 | |
| 46 | **Variants are parameter-selected.** Sizes/styles/revisions go behind one choice parameter (`Variant`, `Preset`); return only the selected variant. Comparison lineups only behind an explicit debug parameter so they can never pollute collision findings. |
| 47 | |
| 48 | ## Physical Artifact, Not Teaching Diagram |
| 49 | |
| 50 | Deliver the real closed artifact — covers installed, parts in assembled positions. The `forgecad` skill carries the no-labels/no-cutaway rule (no explanatory labels, arrows, or legends in production geometry; never a cutaway, sectioned, or exploded default); it binds here. Markings only when the real artifact has them (serial plates, gauge ticks, molded icons) — sparse, process-appropriate. Explain roles via named return objects and `verify.*`; review annotations go in `Viewport.label()` or a debug mode, never exported geometry. |
| 51 | |
| 52 | **Internal geo |