forgecad 0.10.1 → 0.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/assets/{AdminPage-DcCnj0qo.js → AdminPage-CK7ObBz3.js} +1 -1
- package/dist/assets/{BenchmarkPage-BVEpJSVk.js → BenchmarkPage-Ds7Z2doN.js} +1 -1
- package/dist/assets/{BlogPage-DHaGP50_.js → BlogPage-DlPbpt6A.js} +1 -1
- package/dist/assets/{DocsPage-CDoxHkz8.js → DocsPage-vZb3b3Y0.js} +9 -14
- package/dist/assets/{EditorApp-BpjZgzk0.css → EditorApp-C5f24ZN9.css} +8 -0
- package/dist/assets/{EditorApp-BJ0Dloyh.js → EditorApp-HLoKfe15.js} +152 -21
- package/dist/assets/{EmbedViewer-CRKZbY0y.js → EmbedViewer--KnqBKrJ.js} +3 -3
- package/dist/assets/{LandingPageProofDriven-BxHkYRE7.js → LandingPageProofDriven-C_LssmnA.js} +1 -1
- package/dist/assets/{LegalPage-B-u6FrVv.js → LegalPage-DGsyo4n1.js} +1 -1
- package/dist/assets/{PricingPage-CzpZ6-Ce.js → PricingPage-BOE27B-R.js} +1 -1
- package/dist/assets/{SettingsPage-CIZSSAd0.js → SettingsPage-f47cnk39.js} +1 -1
- package/dist/assets/{app-DaTMg3nH.js → app-D6ccu2Xx.js} +7826 -7559
- package/dist/assets/{scalar-sampling-budget-prBw_s8t.js → backendInit-DbTkQN9J.js} +87141 -78777
- package/dist/assets/cli/{render-DPf4AYJK.js → render-BsngirjC.js} +147 -186
- package/dist/assets/{constructionHistoryWorker-AwMMWSxg.js → constructionHistoryWorker-PCwXrTDB.js} +8419 -1447
- package/dist/assets/{evalWorker-CjZZWRWW.js → evalWorker-CS63PfZu.js} +25501 -17997
- package/dist/assets/{forgecad_geometry-Dgceylq9.js → forgecad_geometry-CZ_IfuvA.js} +120 -9
- package/dist/assets/forgecad_geometry_bg-C3rQHfwg.wasm +0 -0
- package/dist/assets/{inspectWorker-CZsCFtQT.js → inspectWorker-Y4cOzNyA.js} +37208 -34464
- package/dist/assets/{jointPose-DzQOViQH.js → jointPose-AMvCywzS.js} +1 -1
- package/dist/assets/{manifold-DgXo0T5P.js → manifold-CBry38ly.js} +2 -2
- package/dist/assets/{manifold-K1SkarlQ.js → manifold-Crd_F2qx.js} +1 -1
- package/dist/assets/{manifold-BYlzU521.js → manifold-k2kRcc85.js} +1 -1
- package/dist/assets/{reportWorker-B9nWwSrB.js → reportWorker-CWvn0CEv.js} +46635 -44646
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/AI/usage.md +2 -4
- package/dist/docs-raw/CLI.md +34 -20
- package/dist/docs-raw/README.md +1 -1
- package/dist/docs-raw/component-model.md +1 -1
- package/dist/docs-raw/generated/assembly.md +2 -2
- package/dist/docs-raw/generated/concepts.md +6 -4
- package/dist/docs-raw/generated/core.md +71 -2
- package/dist/docs-raw/generated/curves.md +8 -1
- package/dist/docs-raw/generated/lib.md +1 -1
- package/dist/docs-raw/generated/output.md +0 -64
- package/dist/docs-raw/generated/runtime-names.md +6 -6
- package/dist/docs-raw/generated/sdf.md +2 -2
- package/dist/docs-raw/generated/viewport.md +3 -12
- package/dist/docs-raw/guides/inspection-bundles.md +1 -1
- package/dist/docs-raw/guides/simready-quickstart.md +3 -1
- package/dist/docs-raw/simulation-workflow.md +58 -0
- package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
- package/dist/docs-raw/skills/forgecad-image-replicator.md +2 -2
- package/dist/docs-raw/skills/forgecad-mujoco-verify.md +78 -0
- package/dist/docs-raw/skills/forgecad-spec-by-walking-through-it.md +145 -0
- package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad.md +24 -24
- package/dist/docs-raw/skills/index.md +2 -3
- package/dist/index.html +1 -1
- package/dist/sitemap.xml +15 -15
- package/dist-cli/{check-compiler-II7NLPAB.js → check-compiler-HPF2T2FS.js} +1 -1
- package/dist-cli/{check-query-propagation-7462TR3R.js → check-query-propagation-HYSLTXAB.js} +1 -1
- package/dist-cli/{chunk-UWTJCGXF.js → chunk-WLUKAW3H.js} +51134 -43247
- package/dist-cli/forgecad.js +5467 -1451
- package/dist-cli/{forgecad_geometry-QOQIIP53.js → forgecad_geometry-2IMYCUWW.js} +119 -8
- package/dist-cli/forgecad_geometry_bg.wasm +0 -0
- package/dist-skill/CONTEXT.md +98 -86
- package/dist-skill/SKILL.md +1 -1
- package/dist-skill/docs/API/core/concepts.md +1 -1
- package/dist-skill/docs/CLI.md +34 -20
- package/dist-skill/docs/generated/assembly.md +2 -2
- package/dist-skill/docs/generated/core.md +71 -2
- package/dist-skill/docs/generated/curves.md +8 -1
- package/dist-skill/docs/generated/lib.md +1 -1
- package/dist-skill/docs/generated/output.md +0 -64
- package/dist-skill/docs/generated/runtime-names.md +6 -6
- package/dist-skill/docs/generated/sdf.md +2 -2
- package/dist-skill/docs/generated/viewport.md +3 -12
- package/dist-skill/docs/guides/inspection-bundles.md +1 -1
- package/dist-skill/library/README.md +2 -3
- package/dist-skill/library/forgecad-blockout-model/SKILL.md +1 -1
- package/dist-skill/library/forgecad-image-replicator/SKILL.md +2 -2
- package/dist-skill/library/forgecad-mujoco-verify/SKILL.md +66 -0
- package/dist-skill/library/forgecad-mujoco-verify/scripts/mujoco_verify.py +385 -0
- package/dist-skill/library/forgecad-spec-by-walking-through-it/SKILL.md +132 -0
- package/dist-skill/library/forgecad-visual-spec/SKILL.md +1 -1
- package/dist-skill/website/skills/forgecad-blockout-model.md +1 -1
- package/dist-skill/website/skills/forgecad-image-replicator.md +2 -2
- package/dist-skill/website/skills/forgecad-mujoco-verify.md +78 -0
- package/dist-skill/website/skills/forgecad-spec-by-walking-through-it.md +145 -0
- package/dist-skill/website/skills/forgecad-visual-spec.md +1 -1
- package/dist-skill/website/skills/forgecad.md +24 -24
- package/dist-skill/website/skills/index.md +2 -3
- package/examples/analysis/clearance-fit.forge.js +31 -0
- package/examples/analysis/lever-arm-actuator.forge.js +43 -0
- package/examples/analysis/tipping-tripod.forge.js +35 -0
- package/examples/api/gyroid-voronoi-blend.forge.js +1 -1
- package/examples/api/organic-noise-sculpture.forge.js +1 -1
- package/examples/api/sdf-circular-array-knurling.forge.js +1 -1
- package/examples/api/{sdf-custom-raymarch.forge.js → sdf-custom-field-mesh-preview.forge.js} +3 -4
- package/examples/api/sdf-materialize-tree.forge.js +2 -2
- package/examples/api/sdf-plain-return.forge.js +3 -2
- package/examples/api/sdf-shapes.forge.js +2 -2
- package/examples/api/sdf-surface-basket-weave.forge.js +2 -2
- package/examples/generative/twisted-lattice-tower.forge.js +1 -1
- package/examples/generative/voronoi-lampshade.forge.js +1 -1
- package/examples/products/sportscar.forge.js +77 -0
- package/package.json +2 -4
- package/dist/assets/forgecad_geometry_bg-dD4RNQF1.wasm +0 -0
- package/dist/assets/manifold-CzYf_iub.js +0 -3023
- package/dist/docs-raw/skills/forgecad-high-level-spec.md +0 -101
- package/dist/docs-raw/skills/forgecad-lld.md +0 -41
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +0 -63
- package/dist-skill/library/forgecad-high-level-spec/SKILL.md +0 -94
- package/dist-skill/library/forgecad-lld/SKILL.md +0 -34
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +0 -50
- package/dist-skill/website/skills/forgecad-high-level-spec.md +0 -101
- package/dist-skill/website/skills/forgecad-lld.md +0 -41
- package/dist-skill/website/skills/forgecad-prepare-prompt.md +0 -63
- /package/dist-skill/library/{forgecad-prepare-prompt → forgecad-spec-by-walking-through-it}/references/default-profiles.md +0 -0
- /package/dist-skill/library/{forgecad-prepare-prompt → forgecad-spec-by-walking-through-it}/references/master-prompt.md +0 -0
|
@@ -139,11 +139,13 @@ Then export the package that matches your simulator:
|
|
|
139
139
|
node dist-cli/forgecad.js export mjcf examples/robotics/simready-diff-drive-rover.forge.js --output /tmp/rover-mjcf
|
|
140
140
|
node dist-cli/forgecad.js export sdf examples/robotics/simready-diff-drive-rover.forge.js --output /tmp/rover-sdf
|
|
141
141
|
node dist-cli/forgecad.js export urdf examples/robotics/simready-diff-drive-rover.forge.js --output /tmp/rover-urdf
|
|
142
|
+
node dist-cli/forgecad.js export usd examples/robotics/simready-diff-drive-rover.forge.js --output /tmp/rover-usd
|
|
142
143
|
```
|
|
143
144
|
|
|
144
145
|
Use MJCF/MuJoCo for the fastest local physics loop. Use SDF for Gazebo Sim. Use URDF when the next tool expects a ROS/PyBullet/Isaac import path.
|
|
146
|
+
Use USD for native Isaac Sim/OpenUSD handoff: the package contains a text `.usda` stage with USD Physics bodies, colliders, mass, joints, velocity drives, a `PhysicsScene`, and package-local validation script.
|
|
145
147
|
|
|
146
|
-
|
|
148
|
+
For Isaac workflows, prefer `export usd` when you want to avoid importer heuristics and preserve authored physics metadata directly in USD. Use URDF only when a downstream tool specifically expects URDF or when you need an importer-managed conversion step.
|
|
147
149
|
|
|
148
150
|
Every package includes `simready-manifest.json`. That manifest is the neutral handoff: model name, units, profile, bodies, joints, drives, controllers, contacts, and validation results.
|
|
149
151
|
|
|
@@ -2,6 +2,64 @@
|
|
|
2
2
|
|
|
3
3
|
ForgeCAD should make a robot or simulated asset runnable without making the CAD API own the control algorithm.
|
|
4
4
|
|
|
5
|
+
## Native Analysis: The Closed Feedback Loop
|
|
6
|
+
|
|
7
|
+
Some analyses need no external simulator at all — they are computed directly from the model geometry and return a machine-readable feedback report an AI agent (or you) can act on. This is the simulation feedback cycle in its simplest, fastest form: **edit the `.forge.js` → run the analysis → read the metrics → change a parameter → re-run.**
|
|
8
|
+
|
|
9
|
+
Every native analysis emits the same `forgecad.feedback/v1` contract: name-keyed `metrics` each with a `pass`/`warn`/`fail` status, `findings` that carry an actionable `suggest`, and a `trust` block recording the assumptions behind the numbers.
|
|
10
|
+
|
|
11
|
+
### Mass properties
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node dist-cli/forgecad.js sim mass model.forge.js --density 2700 --json
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Reports volume, mass, surface area, bounding box, center of mass, the full inertia tensor about the center of mass, principal moments and axes, and a per-object breakdown. Volume, center of mass, and principal axes are exact regardless of material; pass `--density <kg/m3>` (e.g. `2700` aluminium, `7850` steel, `1240` ABS) for accurate mass and inertia magnitude — otherwise it defaults to water and says so.
|
|
18
|
+
|
|
19
|
+
### Static stability (tip-over)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
node dist-cli/forgecad.js check stability model.forge.js --min-margin-mm 5 --json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Computes the center of mass, derives the support footprint as the convex hull of the lowest geometry, and reports the **signed tip-over margin** (distance from the CoM projection to the footprint edge — negative means it tips), the tilt angle at which it tips, the critical edge, and the **center-of-mass shift needed** to reach the required margin. Exits non-zero when the margin is below `--min-margin-mm`. Use `--up x|y|z` to set the up axis.
|
|
26
|
+
|
|
27
|
+
A worked closed loop ships in `examples/analysis/tipping-tripod.forge.js`: at the default base the rig tips by about 3 mm, the report points the fix in −X, and `--param BaseSpreadMm=90` recovers a comfortable positive margin.
|
|
28
|
+
|
|
29
|
+
### Tolerance / GD&T stack-up
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
node dist-cli/forgecad.js sim tolerance model.forge.js --json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Treats the model's continuous parameters as the varying manufacturing inputs and its numeric `verify.*` results as the measured responses — so ordinary `param(...)` and `verify.inRange(...)` calls already declare the stack-up, with no special API. It builds a finite-difference Jacobian, runs a deterministic Monte Carlo over the linearized surrogate, and reports per-response mean/sigma, Cp/Cpk, yield % and DPMO, worst-case and RSS envelopes, a ranked variance-contribution list (**which dimension to tighten**), and a tolerance-allocation recommendation to reach the target Cpk. A nonlinearity guard errors (pointing you to `--method full-rebuild`) rather than silently reporting a wrong yield; exits non-zero when any response's Cpk is below `--target-cpk` (default 1.33).
|
|
36
|
+
|
|
37
|
+
A worked closed loop ships in `examples/analysis/clearance-fit.forge.js`: the default (loose) bores hold the clearance spec at only ~84% yield, the report names the dominant dimension, and `--tol BoreDia=±0.05 --tol ShaftDia=±0.05` lifts Cpk above 1.33.
|
|
38
|
+
|
|
39
|
+
### Mechanism budget (DOF + static-hold torque)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
node dist-cli/forgecad.js sim mechanism model.forge.js --json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The deterministic budget tier of rigid-body dynamics, computed straight from the assembly joint graph — no external solver, no time-stepping. It reports the actuated degrees of freedom (with a spatial Grübler mobility diagnostic for closed loops) and, for each actuated joint, the gravity-hold torque (revolute) or force (prismatic) it must supply at the current pose, derived from the mass of everything distal to it. When a joint carries a `Sim.drive` effort, the report includes the budget margin and flags over-budget joints. Use `--joint Name=Value` to evaluate a specific pose. The dynamic/contact tier (RL, collisions) is the external Pinocchio/MuJoCo export.
|
|
46
|
+
|
|
47
|
+
A worked closed loop ships in `examples/analysis/lever-arm-actuator.forge.js`: a 1 kg arm at 0.15 m needs 1.47 N·m (= m·g·r) and holds with ~63% margin against its 4 N·m motor; `--param ArmLength=900` pushes it to 4.4 N·m and trips `MECHANISM.HOLD.OVER_BUDGET`.
|
|
48
|
+
|
|
49
|
+
### Rigid-body dynamics export (Pinocchio)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
node dist-cli/forgecad.js export pinocchio model.forge.js --output out/robot_pinocchio
|
|
53
|
+
cd out/robot_pinocchio && uv run --python 3.11 --with pin --with numpy python scripts/run_pinocchio.py
|
|
54
|
+
node dist-cli/forgecad.js sim dynamics out/robot_pinocchio
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The dynamic tier. `export pinocchio` reuses the URDF package (per-link inertials computed from the solid) and adds a runnable Pinocchio harness. `run_pinocchio.py` builds the model with `pin.buildModelFromUrdf`, sweeps each joint, computes the gravity-hold torque with `pin.computeGeneralizedGravity`, and writes `feedback.json` in the same `forgecad.feedback/v1` contract; `sim dynamics` reads it back. Pinocchio (BSD-2-Clause) and Coal (BSD-3-Clause) are user-installed — `pip install pin coal` on Linux/macOS, conda-forge on Windows — never bundled.
|
|
58
|
+
|
|
59
|
+
This closes the same loop as `sim mechanism` and cross-checks it: on the lever-arm example, Pinocchio reports the same 1.47 N·m shoulder hold torque the native tier computes analytically.
|
|
60
|
+
|
|
61
|
+
See [docs/internal/simulation-feedback-cycle.md](./simulation-feedback-cycle.md) for the full strategy across all simulation categories.
|
|
62
|
+
|
|
5
63
|
The source `.forge.js` model owns geometry, assembly structure, physical metadata, joints, drive intent, contact hints, and the neutral simulation contract. Exported packages then generate an editable simulator lab with all names and wiring connected. Rewards, policies, perturbation tests, curriculum, and RL libraries stay in simulator-side code.
|
|
6
64
|
|
|
7
65
|
## Current Path: ForgeCAD To MuJoCo
|
|
@@ -18,7 +18,7 @@ A blockout is a spatial planning artifact: 3-7 simple masses that answer where p
|
|
|
18
18
|
| Need | Skill |
|
|
19
19
|
|------|-------|
|
|
20
20
|
| High-level 3D idea using simple masses | `forgecad-blockout-model` |
|
|
21
|
-
| Written concept or architecture before CAD | `forgecad-
|
|
21
|
+
| Written concept or architecture before CAD | `forgecad-spec-by-walking-through-it` |
|
|
22
22
|
| Accurate, detailed, parametric ForgeCAD model | `forgecad-make-a-model` |
|
|
23
23
|
|
|
24
24
|
### Method
|
|
@@ -18,7 +18,7 @@ The reference image is evidence, not the deliverable. The deliverable is a real
|
|
|
18
18
|
### Companion Skills
|
|
19
19
|
|
|
20
20
|
- `forgecad` — API docs, model authoring, renderer behavior.
|
|
21
|
-
- `forgecad-
|
|
21
|
+
- `forgecad-spec-by-walking-through-it` — when the images underdetermine artifact family, process posture, scale, operating story, or validation boundary.
|
|
22
22
|
- `forgecad-make-a-model` — file placement, project structure, decomposition, definition of done.
|
|
23
23
|
- `forgecad-render-inspect` — pre-delivery inspection for multi-part, internal, mechanical, thin-wall, or fit-sensitive objects.
|
|
24
24
|
|
|
@@ -30,7 +30,7 @@ Infer the real object before matching any camera — identity, manufacture, scal
|
|
|
30
30
|
|
|
31
31
|
1. Stage references in `/tmp/<slug>-replicate/refs`, keeping originals and adding view names where possible (`front`, `side`, `rear-iso`, `top`, `detail`).
|
|
32
32
|
2. Read each image as evidence, recording: visible facts; scale cues; camera cues; unknowns (hidden/occluded geometry); conflicts across images or stylization.
|
|
33
|
-
3. Write a Real Object Brief — a hard gate before modeling: (a) artifact identity + operating story; (b) assumed scale and units; (c) process posture + part/BOM boundary (real geometry vs purchased vs ghost vs omitted); (d) inferred hidden-side geometry + expected canonical front/back/left/right/top/bottom forms; (e) validation views and inspection evidence. Use `forgecad-
|
|
33
|
+
3. Write a Real Object Brief — a hard gate before modeling: (a) artifact identity + operating story; (b) assumed scale and units; (c) process posture + part/BOM boundary (real geometry vs purchased vs ghost vs omitted); (d) inferred hidden-side geometry + expected canonical front/back/left/right/top/bottom forms; (e) validation views and inspection evidence. Use `forgecad-spec-by-walking-through-it` when these are underdetermined.
|
|
34
34
|
4. Build a coarse 3D blockout — model the object, not the image: large volumes, axes, symmetry, side depth, rear form, underside, hidden continuations. Render canonical views before any reference-camera comparison. Follow `forgecad-make-a-model` for project structure.
|
|
35
35
|
5. Calibrate one camera per usable reference, only after the blockout makes sense from canonical views. Use the object center as `target`; estimate azimuth/elevation/distance/FOV from visible faces and perspective cues; use orthographic when parallel edges stay parallel with no perspective convergence.
|
|
36
36
|
6. Render comparison boards: render the model from each calibrated reference camera and place it next to the original. Never compare from memory.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<!-- Generated by scripts/build-forgecad-skill.mjs — do not edit. Edit agent-skill-library/forgecad-mujoco-verify/SKILL.md instead. -->
|
|
2
|
+
|
|
3
|
+
# forgecad-mujoco-verify
|
|
4
|
+
|
|
5
|
+
Verify ForgeCAD MJCF exports in MuJoCo with real dynamics, contacts, root behavior, controls, required joint travel, and rendered evidence before calling a model simulation-ready. Use when making a ForgeCAD assembly sim-ready, debugging MJCF contacts, checking why a body falls through the floor, validating actuator motion, or proving a mechanism moved through the intended range.
|
|
6
|
+
|
|
7
|
+
| Field | Value |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| Installed by | `forgecad skill install` |
|
|
10
|
+
| Source | `agent-skill-library/forgecad-mujoco-verify/SKILL.md` |
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## ForgeCAD MuJoCo Verify
|
|
15
|
+
|
|
16
|
+
Use this when `forgecad export mjcf ...` is part of the deliverable. A model is not sim-ready just because `forgecad check simready` passes or the MJCF file loads: it must be loaded in MuJoCo, stepped under gravity, driven with the intended controls, contact pairs inspected, and rendered from useful views.
|
|
17
|
+
|
|
18
|
+
Routing: geometry-only visual inspection -> `forgecad-render-inspect`; model authoring/API questions -> `forgecad`; building a new model -> `forgecad-make-a-model`.
|
|
19
|
+
|
|
20
|
+
### Definition Of Done
|
|
21
|
+
|
|
22
|
+
1. **Export from the exact source file.**
|
|
23
|
+
```bash
|
|
24
|
+
rm -rf /tmp/forgecad-mjcf && mkdir -p /tmp/forgecad-mjcf
|
|
25
|
+
forgecad export mjcf path/to/model.forge.js --output /tmp/forgecad-mjcf
|
|
26
|
+
```
|
|
27
|
+
2. **Load the generated scene in MuJoCo.** Use `scene.xml`, not only the model XML, so the floor/camera/package context is included.
|
|
28
|
+
3. **Check the root behavior.** If the model has a free root, it needs real support/contact geometry or an explicit fixed-root export path. Do not hide a floor failure by turning the whole shell into a giant bounding box that blocks moving internals.
|
|
29
|
+
4. **Check initial poses numerically.** For mechanisms, compute the expected body/link axes from the design source and compare them to MuJoCo `xmat`/`xpos`. Joint `ref`/default and connector frames can disagree with visual intuition.
|
|
30
|
+
5. **Keep meaningful collisions.** Do not mark moving functional parts `Sim.collider.none(...)` just to make motion pass. If full visual mesh contact is unstable, use a physically defensible simplified collider or proxy and state what physical surface it represents.
|
|
31
|
+
6. **Run the intended control with numeric acceptance criteria.** Define the expected signed post-settle joint travel before running the test: e.g. "this drive should rotate the drum -0.04 to -0.06 cycles, then stop near zero velocity" or "this wheel should move at least +1 cycle and keep spinning". Use cycles for revolute/indexing mechanisms when that is easier to reason about, and radians for direct MuJoCo qpos checks. A controller that only jitters, moves the wrong direction, overshoots through a stop, or eventually jams after skipping the intended state is a failure even when the process exits 0.
|
|
32
|
+
7. **Inspect contact pairs.** Contact names should match the physical story: floor/support, card/card, wheel/ground, stop/follower, etc. Contacts against a filled-in AABB, hidden fixture, or unrelated side plate usually indicate bad collider selection.
|
|
33
|
+
8. **Render evidence.** Save initial, settled, and driven frames from views that actually show the moving parts. If the model orientation is not obvious, generate a labeled camera preview grid first, inspect it, then rerun with the azimuth/elevation that shows the functional face. Do not report GIFs/frames before visually confirming they are not from the back, underside, or an occluded side.
|
|
34
|
+
|
|
35
|
+
### Helper Script
|
|
36
|
+
|
|
37
|
+
This skill ships a MuJoCo smoke verifier:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
uv run --python 3.11 --with mujoco --with pillow \
|
|
41
|
+
python <this-skill-dir>/scripts/mujoco_verify.py /tmp/forgecad-mjcf \
|
|
42
|
+
--settle-seconds 2 \
|
|
43
|
+
--seconds 8 \
|
|
44
|
+
--actuator drum_velocity=-0.75 \
|
|
45
|
+
--watch-joint drum_joint \
|
|
46
|
+
--expect-drive-cycles drum_joint=-0.06:-0.03 \
|
|
47
|
+
--expect-final-qvel drum_joint=-0.02:0.02 \
|
|
48
|
+
--render-dir /tmp/forgecad-mjcf/verify \
|
|
49
|
+
--camera-preview-grid
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Use `--actuator name=value` more than once for multi-actuator models. Use `--expect-drive-cycles joint=min:max` to assert signed final-minus-settled revolute travel in cycles/turns. Use `--expect-drive-delta joint=min:max` when you want raw MuJoCo qpos units instead. Use `--expect-final-qvel joint=min:max` to assert terminal velocity when the mechanism should stop or continue at a bounded speed. The script prints JSON with root drift, initial-to-final joint delta, post-settle drive delta, derived cycle counts, final velocities, expectation ranges, and top contact pairs, then writes PNG frames if `--render-dir` is supplied.
|
|
53
|
+
|
|
54
|
+
Prefer explicit travel envelopes over loose "it moved" checks:
|
|
55
|
+
|
|
56
|
+
- Stops/latches: assert a signed drive cycle or delta range and a near-zero final velocity range.
|
|
57
|
+
- Continuous drives: assert the signed drive cycle/delta is large enough over the run and final velocity remains in the expected direction/range.
|
|
58
|
+
- Indexing mechanisms: assert the expected cycle step size, not just eventual stall. If the mechanism reaches a stop only after skipping several indices, treat that as failure.
|
|
59
|
+
- Gravity-settling mechanisms: evaluate functional travel with post-settle drive delta, not initial-to-final delta.
|
|
60
|
+
|
|
61
|
+
When rendered orientation matters, start with `--camera-preview-grid`, open `camera_preview_grid.png`, pick the azimuth that shows the mechanism face or contact interface, then rerun with `--camera-azimuth <deg>` and any needed `--camera-lookat`, `--camera-distance`, or `--camera-elevation` adjustment. For mechanism evidence, prefer front/front-quarter views for user-facing GIFs and add a side/contact view only when it explains a collision better.
|
|
62
|
+
|
|
63
|
+
### Contact Debugging Rules
|
|
64
|
+
|
|
65
|
+
- In MuJoCo UI, enable contact visualization with `Rendering` -> `Contact points` and `Contact forces`; use the right-side perturb/visualization panels if available in your build.
|
|
66
|
+
- If rotation is blocked, list contacts during the stall and sort by repeated pairs. The blocker is usually the pair that appears every step while the driven joint velocity trends to zero.
|
|
67
|
+
- If a body falls through the floor, inspect the exported geoms. Visual geoms have `contype="0" conaffinity="0"` and cannot support anything; collision geoms are usually group 3.
|
|
68
|
+
- Bounding boxes are fast but dangerous for hollow frames, windows, handles, and side plates. They collide as the filled AABB, not the visible object.
|
|
69
|
+
- Mesh collision on complex moving parts can be too exact or solver-hostile. Prefer simple physical proxies for contact-critical moving bodies, such as a slab for a flap card or cylinders for rolling contact, but keep them colliding.
|
|
70
|
+
|
|
71
|
+
### Reporting
|
|
72
|
+
|
|
73
|
+
Report the exact export command, the MuJoCo command/script, key numeric results, the most important contact pairs, and the rendered image paths. Say what was not verified. Never say "sim-ready" when only `forgecad run`, `forgecad check simready`, or a successful export was executed.
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
## Bundled Files
|
|
77
|
+
|
|
78
|
+
- `scripts/mujoco_verify.py`
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
<!-- Generated by scripts/build-forgecad-skill.mjs — do not edit. Edit agent-skill-library/forgecad-spec-by-walking-through-it/SKILL.md instead. -->
|
|
2
|
+
|
|
3
|
+
# forgecad-spec-by-walking-through-it
|
|
4
|
+
|
|
5
|
+
Design a ForgeCAD model, mechanism, or assembly by fixing WHAT before HOW in a git-reviewed design document, validated by mentally operating the thing step by step. Covers fuzzy-request intake and process choice, high-level design (HLD), and low-level design (LLD). Use on "spec this out", "plan the design", "write the HLD/LLD", a vague build request that needs concrete decisions, or any moment the right move is a reviewable spec before code.
|
|
6
|
+
|
|
7
|
+
| Field | Value |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| Installed by | `forgecad skill install` |
|
|
10
|
+
| Source | `agent-skill-library/forgecad-spec-by-walking-through-it/SKILL.md` |
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Spec by Walking Through It
|
|
15
|
+
|
|
16
|
+
The design document — a git-committed, diff-reviewed markdown file — is the source of truth. Not the code, not the chat, not your head. You iterate it by commit-and-review, and the `git diff` is the review artifact.
|
|
17
|
+
|
|
18
|
+
**Validate the design by mentally operating the thing, step by step.** Walk it as someone assembles, uses, or moves it. The step with no answer — *"how does the servo get inside the housing?"* — is the real design gap. A spec that reads complete on the page can still hide a hole that only surfaces when you try to put it together in your head. State each gap falsifiably: not "tolerances might be tight" but "the 12mm arm cantilevers under gripping load, may flex >0.5mm."
|
|
19
|
+
|
|
20
|
+
**Every number has a reason; the narrative comes before the numbers.** Describe the object as if over the phone, then derive each value and show its math: `wallThickness = 2.4mm = 6 × 0.4mm nozzle`. The design is **implementation-blind** — shaped by the object, never by what the ForgeCAD API makes easy. **Manufacturing process is one of those reasons** — a design decision you weigh, never a default you inherit (never assume FDM/printing).
|
|
21
|
+
|
|
22
|
+
**A vague request is a set of decisions you make honestly, not information to extract.** No placeholders ("appropriate motor"); choose a defensible value, show why, continue. The Decisions table fills only after user review, so the loop stays in the document.
|
|
23
|
+
|
|
24
|
+
### Altitude — three phases, one document trail
|
|
25
|
+
|
|
26
|
+
| Phase | When | Output |
|
|
27
|
+
|-------|------|--------|
|
|
28
|
+
| Intake | request is fuzzy / process unspecified | engineering brief + master prompt |
|
|
29
|
+
| HLD | design is wrong in *approach*, alternatives exist | `<name>-hld.md` |
|
|
30
|
+
| LLD | decisions locked, or a simple single-body part | `<name>-lld.md` |
|
|
31
|
+
|
|
32
|
+
The HLD carries only decision-driving dimensions and genuinely-different alternatives; the LLD carries enough that someone builds from it alone. Speccing every tolerance in an HLD, or revisiting locked decisions in an LLD, is an altitude error — back up. Simple parts skip straight from HLD to code, or from a request to an LLD.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
### Phase 1 — Intake (fuzzy request → concrete brief)
|
|
37
|
+
|
|
38
|
+
Use when the user wants something physically real but the ask is vague ("make me a robot gripper", "make it production ready", "pick sensible numbers"). This phase owns intake; once the brief is concrete, continue to HLD or hand off to the `forgecad` skill.
|
|
39
|
+
|
|
40
|
+
**Manufacturing is a design decision, not a default.** Derive the process stack from artifact family, load path, scale, safety expectations, material, production intent, and operating story — never assume printing/plastic. If the user names a process, honor it but warn when it is unsafe or dishonest for the duty. Family→process anchors live in `references/default-profiles.md`.
|
|
41
|
+
|
|
42
|
+
**Default posture: manufacture-realistic prototype** — real materials, purchased-part boundaries, assembly logic, validation; no claims of production tooling or certification. Other postures only when justified: `production-realistic`, `printable`, `visual-CAD`, or a specific process posture (`sheet-metal`, `CNC-machined`, `laser-cut`, `welded-tube`, `injection-molded`, `cast`, `hybrid purchased-hardware`). Pick the posture honest for the artifact, not the easiest CAD surface.
|
|
43
|
+
|
|
44
|
+
**Family-scoped numbers.** Every starter assumption is scoped to one artifact family; never reuse numbers across families.
|
|
45
|
+
|
|
46
|
+
Workflow:
|
|
47
|
+
1. **Normalize the ask** into plain mechanism language ("6 DOF gripper" → standalone gripper, wrist+gripper, or arm+gripper).
|
|
48
|
+
2. **Build a specific operating story** — invented (non-famous) org, named program, prototype revision, review moment, mission pressure (pilot gate, demo date, investor milestone), and the generic failure mode to avoid. Prefer bold high-agency stories over modest lab exercises. Never assert the user works for a named real company; use real products only as public comparison anchors; never clone proprietary designs.
|
|
49
|
+
3. **Classify the artifact family** (`references/default-profiles.md`); use the no-family-fits escape rather than forcing one. Rideables route to human-vehicles, never chassis.
|
|
50
|
+
4. **Choose the process posture** per the taxonomy above.
|
|
51
|
+
5. **Pick qualitative levers** — duty (`light`/`general`/`sturdy`), scale (`compact`/`medium`/`large`), cost (`cheapest`/`balanced`/`performance-first`) — and translate to family-scoped starter assumptions.
|
|
52
|
+
6. **Close only critical gaps** — at most 3 grouped questions, always choice menus, never raw engineering inputs unless the architecture truly depends on them. Good: "light desk demo, useful hobby tool, or sturdier bench mechanism?" Bad: "What payload mass?"
|
|
53
|
+
7. **Write the engineering brief**: artifact + family + normalized interpretation; operating story + production reason + test setting + failure mode to avoid; output posture; intended loads, size envelope, motion/DOF; process stack + material defaults; purchased-part (BOM) boundary; validation standard; variant policy (versions are selectable params, one rendered at a time); file organization (`main.forge.js` entry for multi-file); explicit uncertainty policy.
|
|
54
|
+
8. **Emit one master prompt** — fill `references/master-prompt.md`; return the finished prompt, not notes about it. It must demand exactly `BUILD-READY` or `BEST-EFFORT BUILD CANDIDATE` (human-bearing furniture and rideables usually end the latter).
|
|
55
|
+
|
|
56
|
+
Defaults if the user stays vague: `general-duty` / `medium` / `balanced`, invent the operating story, use family starter assumptions.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
### Phase 2 — High-Level Design (HLD)
|
|
61
|
+
|
|
62
|
+
Aligns user and agent on *what* to build before *how*. Brevity is a readability tool, not a metric — include whatever evidence, diagrams, and dimensions a good decision needs. Write the sections top to bottom; the order is the workflow.
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
# [Name] — High-Level Design
|
|
66
|
+
|
|
67
|
+
## Problem
|
|
68
|
+
What must this do? Hard requirements (grip 40-90mm objects, fit a 60mm
|
|
69
|
+
housing, use purchased bearings). State the problem without implying a
|
|
70
|
+
solution. Unspecified process choice is an open design dimension.
|
|
71
|
+
|
|
72
|
+
## Approach
|
|
73
|
+
How it works conceptually. ASCII diagram of key elements and their
|
|
74
|
+
spatial relationships — diagram labels stay in this markdown, never
|
|
75
|
+
carried into CAD geometry unless the real artifact needs markings.
|
|
76
|
+
|
|
77
|
+
## Key Interfaces
|
|
78
|
+
Every point where this touches another part or the outside world:
|
|
79
|
+
mating surfaces, shared dimensions, coordination points. These are the
|
|
80
|
+
contracts that constrain the design.
|
|
81
|
+
|
|
82
|
+
## Dictionary
|
|
83
|
+
| Term | What it is |
|
|
84
|
+
Define every domain term in plain words, with dimensions where relevant.
|
|
85
|
+
Write for a developer without a mechanical-engineering background.
|
|
86
|
+
|
|
87
|
+
## Alternatives
|
|
88
|
+
| Option | Description | Tradeoff |
|
|
89
|
+
2-3 genuinely different strategies, not minor variations. Mark one
|
|
90
|
+
recommended and say why. If there is honestly one approach, say so.
|
|
91
|
+
|
|
92
|
+
## Usage Guide
|
|
93
|
+
Work backwards from how someone uses, assembles, or operates the thing,
|
|
94
|
+
step by step. If a step doesn't make sense ("how does the servo get
|
|
95
|
+
inside?"), flag it inline with ⚠️ and promote it to Concerns.
|
|
96
|
+
|
|
97
|
+
## Concerns
|
|
98
|
+
1. Numbered, falsifiably specific — a reviewer must be able to say "real
|
|
99
|
+
problem" or "fine, because…".
|
|
100
|
+
|
|
101
|
+
## Decisions
|
|
102
|
+
| # | Decision | Rationale |
|
|
103
|
+
Filled ONLY after user review — never pre-decide. Each row resolves a
|
|
104
|
+
concern or alternative.
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Rules: if you're speccing every part, formula, and tolerance, you're writing an LLD — back up. If you can't draw it, you don't understand it yet.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### Phase 3 — Low-Level Design (LLD)
|
|
112
|
+
|
|
113
|
+
Implements the HLD's locked Decisions table; it never revisits those decisions. Simple single-body parts skip the HLD and start here. Complex assemblies split into a numbered directory: overview, global constraints, per-component files, assembly, verification.
|
|
114
|
+
|
|
115
|
+
An LLD is **narrative-first** (reads like describing the object over the phone), **authoritative** (the single source code implements), **implementation-blind**, and shows **every number's rationale**.
|
|
116
|
+
|
|
117
|
+
Required structure:
|
|
118
|
+
1. **Narrative** — what it is, how it behaves and interacts, why it exists. Concrete comparisons ("about the size of a deck of cards"); no ungrounded vague terms.
|
|
119
|
+
2. **Technical** — typed parameter table (length / angle / count / boolean / choice / ratio / clearance — design-document vocabulary, not the runtime `Param.*` API), always with units (mm, degrees default) and a rationale for every default and range; derived dimensions shown as math; geometry and constraints, each constraint with a rationale.
|
|
120
|
+
3. **Verification** — mandatory checklist: dimensional, functional, printability/process checks.
|
|
121
|
+
|
|
122
|
+
Don'ts: never open with a parameter list (story before numbers), never leave a constraint implicit, never skip verification. Completeness gate before presenting: can someone build from this alone? Does it implement every HLD decision? Is every constraint explicit with a rationale?
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### Review via git
|
|
127
|
+
|
|
128
|
+
HLDs and LLDs iterate through git, not conversation:
|
|
129
|
+
- **Commit every version.** No drafts floating in chat. After writing, commit and tell the user it's ready for review.
|
|
130
|
+
- **Feedback arrives as file edits (inline comments, strikethroughs) or chat — check both.** Read `git diff`: the diff is the review artifact.
|
|
131
|
+
- **Update, commit, repeat** until the Decisions table is filled and the user says "go."
|
|
132
|
+
|
|
133
|
+
### Pipeline
|
|
134
|
+
|
|
135
|
+
| Stage | This skill's phase | Output | Next |
|
|
136
|
+
|-------|--------------------|--------|------|
|
|
137
|
+
| Explore a fuzzy ask | Intake | engineering brief + master prompt | HLD |
|
|
138
|
+
| Decide *what* to build | HLD | `*-hld.md` (Decisions filled) | LLD |
|
|
139
|
+
| Detail *how* to build | LLD | `*-lld.md` | `forgecad-make-a-model` + `forgecad` → `.forge.js` |
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
## Bundled Files
|
|
143
|
+
|
|
144
|
+
- `references/default-profiles.md`
|
|
145
|
+
- `references/master-prompt.md`
|
|
@@ -15,7 +15,7 @@ Turn a concrete ForgeCAD artifact, build brief, HLD, or existing model into buil
|
|
|
15
15
|
|
|
16
16
|
### Scope
|
|
17
17
|
|
|
18
|
-
Only for artifacts already concrete enough to visualize (a specific `.forge.js` model, build brief, or HLD); route vague briefs to `forgecad-
|
|
18
|
+
Only for artifacts already concrete enough to visualize (a specific `.forge.js` model, build brief, or HLD); route vague briefs to `forgecad-spec-by-walking-through-it` first. Read minimum context — entry `.forge.js`, one key helper if it delegates geometry, brief/HLD — and capture what must survive the image model: artifact type and scale, major subassemblies, actuation style, visible mechanisms, material and color cues.
|
|
19
19
|
|
|
20
20
|
### Core Rule
|
|
21
21
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by scripts/build-forgecad-skill.mjs — do not edit. Edit docs/
|
|
1
|
+
<!-- Generated by scripts/build-forgecad-skill.mjs — do not edit. Edit docs/skill/ instead. -->
|
|
2
2
|
|
|
3
3
|
# forgecad
|
|
4
4
|
|
|
@@ -7,7 +7,7 @@ ForgeCAD model authoring, editing, debugging, and execution guidance for .forge.
|
|
|
7
7
|
| Field | Value |
|
|
8
8
|
| --- | --- |
|
|
9
9
|
| Installed by | `forgecad skill install` |
|
|
10
|
-
| Source | Generated from `docs/
|
|
10
|
+
| Source | Generated from `docs/skill/` by `scripts/build-forgecad-skill.mjs` |
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -18,9 +18,9 @@ Author or modify ForgeCAD models, sketches, assemblies, and CLI workflows. Prefe
|
|
|
18
18
|
### Workflow
|
|
19
19
|
|
|
20
20
|
1. Identify the artifact: `.forge.js`, SVG asset, or CLI/export task.
|
|
21
|
-
2. **If the model has any moving parts, load the `assembly` group and `docs/
|
|
21
|
+
2. **If the model has any moving parts, load the `assembly` group and `docs/skill/guides/joint-design.md` upfront** — do not defer the kinematic structure to a refactor pass.
|
|
22
22
|
3. Load only the docs the task needs (see Source Map below). Start from the top group, add others as needed, and prefer these docs and recipes over ad-hoc repo examples.
|
|
23
|
-
4. If any two parts are intended to touch or mate in the final model, load `docs/
|
|
23
|
+
4. If any two parts are intended to touch or mate in the final model, load `docs/skill/guides/positioning.md` immediately and default to connectors + `matchTo()`.
|
|
24
24
|
5. Default to a concrete first pass — easy iteration beats speculative design review.
|
|
25
25
|
6. If an existing model is broken, replace the weak structure rather than preserving bad architecture.
|
|
26
26
|
7. Validate with `forgecad run <file>` (add `--debug-imports` for import chain issues; pass `--backend manifold|occt|truck` when the backend matters).
|
|
@@ -46,77 +46,77 @@ Load groups top-to-bottom, stopping when you have what the task needs.
|
|
|
46
46
|
|
|
47
47
|
Execution model, colors, coordinate system, primitives, booleans, patterns, imports, parameters, topology, edge queries.
|
|
48
48
|
|
|
49
|
-
- `docs/
|
|
50
|
-
- `docs/
|
|
51
|
-
- `docs/
|
|
49
|
+
- `docs/skill/API/core/concepts.md`
|
|
50
|
+
- `docs/skill/generated/runtime-names.md`
|
|
51
|
+
- `docs/skill/generated/core.md`
|
|
52
52
|
|
|
53
53
|
#### 2. Static Assembly and Positioning (for any multi-part model)
|
|
54
54
|
|
|
55
55
|
Axis conventions, winding rules, and placement strategy. If parts should touch in the final model, read this group before writing placement code. Connectors + `matchTo()` are the default for mating interfaces; raw `translate()` and `rotate()` are for free offsets, not assembly contracts.
|
|
56
56
|
|
|
57
|
-
- `docs/
|
|
58
|
-
- `docs/
|
|
57
|
+
- `docs/skill/guides/coordinate-system.md`
|
|
58
|
+
- `docs/skill/guides/positioning.md`
|
|
59
59
|
|
|
60
60
|
#### 3. Sketch APIs
|
|
61
61
|
|
|
62
62
|
2D construction, transforms, booleans, paths, on-face sketching, extrusion, anchors, text, regions.
|
|
63
63
|
|
|
64
|
-
- `docs/
|
|
64
|
+
- `docs/skill/generated/sketch.md`
|
|
65
65
|
|
|
66
66
|
#### 4. Curves and Surfacing (for lofts, sweeps, splines)
|
|
67
67
|
|
|
68
68
|
Smooth curves, Hermite splines, lofted and swept solids. For straps, inlays, guards, brace members, vents, or physical bands that live on a carrier surface, use `Carrier` + `SurfaceBody` surface-member primitives before reaching for `variableSweep`, SDF sculpting, or manual boolean overlap recipes.
|
|
69
69
|
|
|
70
|
-
- `docs/
|
|
71
|
-
- `docs/
|
|
70
|
+
- `docs/skill/guides/surface-members.md`
|
|
71
|
+
- `docs/skill/generated/curves.md`
|
|
72
72
|
|
|
73
73
|
#### 5. Assemblies and Mechanisms (for joints or kinematics)
|
|
74
74
|
|
|
75
|
-
Assembly graph, joint types, couplings, validation,
|
|
75
|
+
Assembly graph, joint types, couplings, validation, and simulation export.
|
|
76
76
|
|
|
77
|
-
- `docs/
|
|
77
|
+
- `docs/skill/generated/assembly.md`
|
|
78
78
|
|
|
79
79
|
#### 6. Sheet Metal (for bent parts, K-factor, flat patterns)
|
|
80
80
|
|
|
81
81
|
Bend operations, flat pattern unfolding, K-factor configuration.
|
|
82
82
|
|
|
83
|
-
- `docs/
|
|
83
|
+
- `docs/skill/generated/sheet-metal.md`
|
|
84
84
|
|
|
85
85
|
#### 7. Output and Export (for STL/3MF/STEP, BOM, dimensions)
|
|
86
86
|
|
|
87
87
|
Mesh export, exact geometry export, bill of materials, dimension annotations.
|
|
88
88
|
|
|
89
|
-
- `docs/
|
|
89
|
+
- `docs/skill/generated/output.md`
|
|
90
90
|
|
|
91
91
|
#### 8. Toolbox (fasteners and standard parts)
|
|
92
92
|
|
|
93
93
|
Parametric bolts, nuts, washers, standard hardware, gears, pipes, and structural profiles.
|
|
94
94
|
|
|
95
|
-
- `docs/
|
|
96
|
-
- `docs/
|
|
95
|
+
- `docs/skill/generated/lib.md`
|
|
96
|
+
- `docs/skill/generated/wood.md`
|
|
97
97
|
|
|
98
98
|
#### 9. Runtime Viewport APIs (for cut planes, exploded views, hiding, and animation playback)
|
|
99
99
|
|
|
100
100
|
Viewer-only APIs such as cutPlane, explodeView, render labels, comparison references, and runtime display behavior.
|
|
101
101
|
|
|
102
|
-
- `docs/
|
|
102
|
+
- `docs/skill/generated/viewport.md`
|
|
103
103
|
|
|
104
104
|
#### 10. Recipes and Debugging (for patterns and troubleshooting)
|
|
105
105
|
|
|
106
106
|
Modeling patterns, debugging tactics, copyable snippets.
|
|
107
107
|
|
|
108
|
-
- `docs/
|
|
109
|
-
- `docs/
|
|
108
|
+
- `docs/skill/guides/scene-presentation.md`
|
|
109
|
+
- `docs/skill/guides/joint-design.md`
|
|
110
110
|
|
|
111
111
|
#### 11. CLI (for validation/render/export tasks)
|
|
112
112
|
|
|
113
113
|
Test-run, export pipelines, debug flags.
|
|
114
114
|
|
|
115
|
-
- `docs/
|
|
116
|
-
- `docs/
|
|
115
|
+
- `docs/skill/CLI.md`
|
|
116
|
+
- `docs/skill/guides/inspection-bundles.md`
|
|
117
117
|
|
|
118
118
|
#### SDF Modeling (smooth booleans, TPMS, deformations, fromFunction)
|
|
119
119
|
|
|
120
120
|
Primitives, smooth booleans, TPMS lattices, twist/bend/displace, morph, custom functions, gotchas. The doc preamble's precision caution applies to every SDF workflow.
|
|
121
121
|
|
|
122
|
-
- `docs/
|
|
122
|
+
- `docs/skill/generated/sdf.md`
|
|
@@ -14,13 +14,12 @@ forgecad skill install
|
|
|
14
14
|
| [forgecad-3d-reconstruction](/docs/skills/forgecad-3d-reconstruction) | `forgecad skill install` | Reconstruct a parametric ForgeCAD model from an existing 3D CAD or mesh file such as STL, OBJ, 3MF, STEP, or STP; inspect the source asset directly, author real ForgeCAD geometry, and iteratively compare the candidate with `forgecad compare 3d`. |
|
|
15
15
|
| [forgecad-blockout-model](/docs/skills/forgecad-blockout-model) | `forgecad skill install` | Create rough high-level ForgeCAD concept models from simple primitives to explore layout, proportions, motion, and part relationships without production detail. Use when asked for a quick model sketch, blockout, spatial mockup, or intuitive low-detail 3D concept. |
|
|
16
16
|
| [forgecad-component-model](/docs/skills/forgecad-component-model) | `forgecad skill install` | Enforce the ForgeCAD Component Model when building multi-part assemblies. Parts build at origin, connectors position them, data flows down from parent. Use when building or reviewing any multi-file ForgeCAD project. |
|
|
17
|
-
| [forgecad-high-level-spec](/docs/skills/forgecad-high-level-spec) | `forgecad skill install` | Write a high-level design document (HLD) for a model, mechanism, or assembly before detailed specification or coding. Use when starting a new design, rethinking an existing one, or when the user asks to spec out, plan, or think through a model at a high level. Works backwards from requirements — defines the problem, explores alternatives, records decisions. Produces a right-sized design document for review and iteration. |
|
|
18
17
|
| [forgecad-image-replicator](/docs/skills/forgecad-image-replicator) | `forgecad skill install` | Build real ForgeCAD geometry from one or more reference images by treating images as evidence, inferring the object, then validating against both reference-matched and canonical views. |
|
|
19
|
-
| [forgecad-lld](/docs/skills/forgecad-lld) | `forgecad skill install` | Write a Low-Level Design (LLD) for a CAD model — exact dimensions, constraints, parameters, and verification criteria. Use after a High-Level Design (HLD) exists and decisions are locked, or for simple parts that don't need an HLD. The detailed design document that code implements. |
|
|
20
18
|
| [forgecad-make-a-model](/docs/skills/forgecad-make-a-model) | `forgecad skill install` | Create manufacture-realistic prototype ForgeCAD (.forge.js) models in the active CAD project. Handles file placement, invokes the forgecad skill for API guidance, and validates the result. |
|
|
21
19
|
| [forgecad-model-grader](/docs/skills/forgecad-model-grader) | `forgecad skill install` | Analyze, verify, and grade ForgeCAD or CAD-as-code models against a user requirement, design brief, prompt, reference, or acceptance criteria. Use when asked to evaluate, judge, QA, benchmark, score, rate, or compare a CAD model; render it from multiple angles, run targeted inspections when needed, visually verify the evidence, and produce a 0-10 score with concise justification. |
|
|
22
|
-
| [forgecad-
|
|
20
|
+
| [forgecad-mujoco-verify](/docs/skills/forgecad-mujoco-verify) | `forgecad skill install` | Verify ForgeCAD MJCF exports in MuJoCo with real dynamics, contacts, root behavior, controls, required joint travel, and rendered evidence before calling a model simulation-ready. Use when making a ForgeCAD assembly sim-ready, debugging MJCF contacts, checking why a body falls through the floor, validating actuator motion, or proving a mechanism moved through the intended range. |
|
|
23
21
|
| [forgecad-project](/docs/skills/forgecad-project) | `forgecad skill install` | ForgeCAD project CLI workflow — creating, managing, syncing projects and files on forgecad.io. Covers init, push, pull, file operations, member management, publishing, and sharing. |
|
|
24
22
|
| [forgecad-reconstruction-benchmark](/docs/skills/forgecad-reconstruction-benchmark) | `forgecad skill install` | Solve ForgeCAD CAD reconstruction benchmark or RL episodes in a prepared workspace by rebuilding a visible reference asset as readable parametric ForgeCAD in the fixed submission path, using visual and geometric self-checks while respecting sandbox limits. |
|
|
25
23
|
| [forgecad-render-inspect](/docs/skills/forgecad-render-inspect) | `forgecad skill install` | Run and interpret ForgeCAD inspection bundles for model verification. Use when asked to inspect a ForgeCAD model, analyze an inspection bundle, validate collisions, wall thickness, connectivity, floating bodies, sections, masks, depth, normals, or Zebra stripes. |
|
|
24
|
+
| [forgecad-spec-by-walking-through-it](/docs/skills/forgecad-spec-by-walking-through-it) | `forgecad skill install` | Design a ForgeCAD model, mechanism, or assembly by fixing WHAT before HOW in a git-reviewed design document, validated by mentally operating the thing step by step. Covers fuzzy-request intake and process choice, high-level design (HLD), and low-level design (LLD). Use on "spec this out", "plan the design", "write the HLD/LLD", a vague build request that needs concrete decisions, or any moment the right move is a reviewable spec before code. |
|
|
26
25
|
| [forgecad-visual-spec](/docs/skills/forgecad-visual-spec) | `forgecad skill install` | Turn a concrete ForgeCAD artifact, build brief, HLD, or existing model into builder-honest image prompts for AI image models. Use when the user wants visual-spec renders that show the final product while keeping mechanisms, seams, hardware, and build cues visible instead of drifting into concept art. |
|
package/dist/index.html
CHANGED
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
84
84
|
html, body, #root { width: 100%; min-height: 100%; background: var(--fc-bg); color: var(--fc-text); font-family: system-ui, -apple-system, sans-serif; }
|
|
85
85
|
</style>
|
|
86
|
-
<script type="module" crossorigin src="/assets/app-
|
|
86
|
+
<script type="module" crossorigin src="/assets/app-D6ccu2Xx.js"></script>
|
|
87
87
|
<link rel="stylesheet" crossorigin href="/assets/app-CjsbDlb7.css">
|
|
88
88
|
</head>
|
|
89
89
|
<body>
|
package/dist/sitemap.xml
CHANGED
|
@@ -2,91 +2,91 @@
|
|
|
2
2
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
3
|
<url>
|
|
4
4
|
<loc>https://forgecad.io/</loc>
|
|
5
|
-
<lastmod>2026-06-
|
|
5
|
+
<lastmod>2026-06-14</lastmod>
|
|
6
6
|
<changefreq>weekly</changefreq>
|
|
7
7
|
<priority>1.0</priority>
|
|
8
8
|
</url>
|
|
9
9
|
<url>
|
|
10
10
|
<loc>https://forgecad.io/docs</loc>
|
|
11
|
-
<lastmod>2026-06-
|
|
11
|
+
<lastmod>2026-06-14</lastmod>
|
|
12
12
|
<changefreq>weekly</changefreq>
|
|
13
13
|
<priority>0.8</priority>
|
|
14
14
|
</url>
|
|
15
15
|
<url>
|
|
16
16
|
<loc>https://forgecad.io/docs/ai-native-cad</loc>
|
|
17
|
-
<lastmod>2026-06-
|
|
17
|
+
<lastmod>2026-06-14</lastmod>
|
|
18
18
|
<changefreq>weekly</changefreq>
|
|
19
19
|
<priority>0.9</priority>
|
|
20
20
|
</url>
|
|
21
21
|
<url>
|
|
22
22
|
<loc>https://forgecad.io/docs/ai-usage</loc>
|
|
23
|
-
<lastmod>2026-06-
|
|
23
|
+
<lastmod>2026-06-14</lastmod>
|
|
24
24
|
<changefreq>weekly</changefreq>
|
|
25
25
|
<priority>0.8</priority>
|
|
26
26
|
</url>
|
|
27
27
|
<url>
|
|
28
28
|
<loc>https://forgecad.io/docs/cli</loc>
|
|
29
|
-
<lastmod>2026-06-
|
|
29
|
+
<lastmod>2026-06-14</lastmod>
|
|
30
30
|
<changefreq>weekly</changefreq>
|
|
31
31
|
<priority>0.7</priority>
|
|
32
32
|
</url>
|
|
33
33
|
<url>
|
|
34
34
|
<loc>https://forgecad.io/docs/simready-quickstart</loc>
|
|
35
|
-
<lastmod>2026-06-
|
|
35
|
+
<lastmod>2026-06-14</lastmod>
|
|
36
36
|
<changefreq>weekly</changefreq>
|
|
37
37
|
<priority>0.8</priority>
|
|
38
38
|
</url>
|
|
39
39
|
<url>
|
|
40
40
|
<loc>https://forgecad.io/docs/simulation-workflow</loc>
|
|
41
|
-
<lastmod>2026-06-
|
|
41
|
+
<lastmod>2026-06-14</lastmod>
|
|
42
42
|
<changefreq>weekly</changefreq>
|
|
43
43
|
<priority>0.8</priority>
|
|
44
44
|
</url>
|
|
45
45
|
<url>
|
|
46
46
|
<loc>https://forgecad.io/docs/skills/forgecad-make-a-model</loc>
|
|
47
|
-
<lastmod>2026-06-
|
|
47
|
+
<lastmod>2026-06-14</lastmod>
|
|
48
48
|
<changefreq>weekly</changefreq>
|
|
49
49
|
<priority>0.7</priority>
|
|
50
50
|
</url>
|
|
51
51
|
<url>
|
|
52
52
|
<loc>https://forgecad.io/benchmark</loc>
|
|
53
|
-
<lastmod>2026-06-
|
|
53
|
+
<lastmod>2026-06-14</lastmod>
|
|
54
54
|
<changefreq>weekly</changefreq>
|
|
55
55
|
<priority>0.7</priority>
|
|
56
56
|
</url>
|
|
57
57
|
<url>
|
|
58
58
|
<loc>https://forgecad.io/blog</loc>
|
|
59
|
-
<lastmod>2026-06-
|
|
59
|
+
<lastmod>2026-06-14</lastmod>
|
|
60
60
|
<changefreq>weekly</changefreq>
|
|
61
61
|
<priority>0.6</priority>
|
|
62
62
|
</url>
|
|
63
63
|
<url>
|
|
64
64
|
<loc>https://forgecad.io/pricing</loc>
|
|
65
|
-
<lastmod>2026-06-
|
|
65
|
+
<lastmod>2026-06-14</lastmod>
|
|
66
66
|
<changefreq>monthly</changefreq>
|
|
67
67
|
<priority>0.5</priority>
|
|
68
68
|
</url>
|
|
69
69
|
<url>
|
|
70
70
|
<loc>https://forgecad.io/terms</loc>
|
|
71
|
-
<lastmod>2026-06-
|
|
71
|
+
<lastmod>2026-06-14</lastmod>
|
|
72
72
|
<changefreq>yearly</changefreq>
|
|
73
73
|
<priority>0.3</priority>
|
|
74
74
|
</url>
|
|
75
75
|
<url>
|
|
76
76
|
<loc>https://forgecad.io/privacy</loc>
|
|
77
|
-
<lastmod>2026-06-
|
|
77
|
+
<lastmod>2026-06-14</lastmod>
|
|
78
78
|
<changefreq>yearly</changefreq>
|
|
79
79
|
<priority>0.3</priority>
|
|
80
80
|
</url>
|
|
81
81
|
<url>
|
|
82
82
|
<loc>https://forgecad.io/license</loc>
|
|
83
|
-
<lastmod>2026-06-
|
|
83
|
+
<lastmod>2026-06-14</lastmod>
|
|
84
84
|
<changefreq>yearly</changefreq>
|
|
85
85
|
<priority>0.3</priority>
|
|
86
86
|
</url>
|
|
87
87
|
<url>
|
|
88
88
|
<loc>https://forgecad.io/blog/hello-forgecad-io</loc>
|
|
89
|
-
<lastmod>2026-06-
|
|
89
|
+
<lastmod>2026-06-14</lastmod>
|
|
90
90
|
<changefreq>monthly</changefreq>
|
|
91
91
|
<priority>0.5</priority>
|
|
92
92
|
</url>
|