forgecad 0.9.14 → 0.9.16

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.
Files changed (239) hide show
  1. package/LICENSE +6 -4
  2. package/README.md +8 -4
  3. package/dist/assets/{AdminPage-eWGs2K6H.js → AdminPage-CXvls4-J.js} +2 -2
  4. package/dist/assets/{BenchmarkPage-CTrLKfpo.js → BenchmarkPage-B27zk8xL.js} +4 -15
  5. package/dist/assets/{BlogPage-5nPesyds.js → BlogPage-CMAVvgQL.js} +2 -2
  6. package/dist/assets/{DocsPage-C4Y3nbYc.js → DocsPage-knf4I4h7.js} +9 -3
  7. package/dist/assets/EditorApp-BHMQlJ-D.js +14686 -0
  8. package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-BpjZgzk0.css} +846 -0
  9. package/dist/assets/{EmbedViewer-C8fB4n5U.js → EmbedViewer-D7ZGlFjx.js} +3 -3
  10. package/dist/assets/{LandingPageProofDriven-jSz0LaMM.js → LandingPageProofDriven-CnevhTE8.js} +36 -38
  11. package/dist/assets/LegalPage-BPTUmqeg.js +39 -0
  12. package/dist/assets/LegalPage-BRlScr9A.css +91 -0
  13. package/dist/assets/{PricingPage-B83B90zh.js → PricingPage-B0D4goG_.js} +19 -19
  14. package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
  15. package/dist/assets/{SettingsPage-DY889pcu.js → SettingsPage-CFF-UgjI.js} +2 -2
  16. package/dist/assets/app-CE3sYcV7.css +3890 -0
  17. package/dist/assets/{app-bEww1ic4.js → app-T0pDcSX4.js} +3382 -1069
  18. package/dist/assets/cli/{render-Cho2uKG_.js → render-C5pcIISc.js} +477 -29
  19. package/dist/assets/{constructionHistoryWorker-HYwzJY4m.js → constructionHistoryWorker-Ba2Hm58b.js} +928 -243
  20. package/dist/assets/{evalWorker-CjQwJSE-.js → evalWorker-vkx310U2.js} +8883 -6040
  21. package/dist/assets/{forgecad_geometry-CH2nvuLA.js → forgecad_geometry-Dgceylq9.js} +43 -1
  22. package/dist/assets/forgecad_geometry_bg-dD4RNQF1.wasm +0 -0
  23. package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-BuTJDVX6.js} +1179 -273
  24. package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
  25. package/dist/assets/{targets-D6PWsv6X.js → jointPose-B_Cgedn9.js} +71 -3
  26. package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
  27. package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
  28. package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
  29. package/dist/assets/{manifold-rmfAcdwF.js → manifold-BWgsjmAM.js} +1 -1
  30. package/dist/assets/{manifold-uRzgk5O8.js → manifold-D6IFSkhH.js} +2 -2
  31. package/dist/assets/{manifold-CG9Fokx-.js → manifold-rZexZI0G.js} +1 -1
  32. package/dist/assets/{reportWorker-4cW_ZpoS.js → reportWorker-0AGij1Ru.js} +8659 -12771
  33. package/dist/assets/{scalar-sampling-budget-CfDiFvh7.js → scalar-sampling-budget-J5cuzxT1.js} +8050 -6203
  34. package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-Vl4Wxa1y.js} +50 -6
  35. package/dist/assets/{solver-DuJAO8S6.js → solver-BZ9LPTHs.js} +1 -1
  36. package/dist/assets/solver_bg-DAHZJ_rw.wasm +0 -0
  37. package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
  38. package/dist/cli/render.html +1 -1
  39. package/dist/docs/index.html +2 -2
  40. package/dist/docs-raw/AI/ai-native-cad.md +50 -0
  41. package/dist/docs-raw/AI/usage.md +5 -12
  42. package/dist/docs-raw/CLI.md +34 -10
  43. package/dist/docs-raw/component-model.md +27 -11
  44. package/dist/docs-raw/generated/assembly.md +374 -187
  45. package/dist/docs-raw/generated/concepts.md +245 -237
  46. package/dist/docs-raw/generated/core.md +283 -6
  47. package/dist/docs-raw/generated/curves.md +274 -361
  48. package/dist/docs-raw/generated/lib.md +9 -19
  49. package/dist/docs-raw/generated/output.md +29 -4
  50. package/dist/docs-raw/generated/runtime-names.md +49 -0
  51. package/dist/docs-raw/generated/sdf.md +31 -0
  52. package/dist/docs-raw/generated/sheet-metal.md +9 -0
  53. package/dist/docs-raw/generated/sketch.md +44 -1
  54. package/dist/docs-raw/generated/viewport.md +11 -3
  55. package/dist/docs-raw/guides/coordinate-system.md +20 -16
  56. package/dist/docs-raw/guides/geometry-conventions.md +2 -2
  57. package/dist/docs-raw/guides/inspection-bundles.md +2 -1
  58. package/dist/docs-raw/guides/joint-design.md +24 -0
  59. package/dist/docs-raw/guides/positioning.md +13 -3
  60. package/dist/docs-raw/legal/privacy.md +63 -0
  61. package/dist/docs-raw/legal/software-license.md +55 -0
  62. package/dist/docs-raw/legal/terms.md +87 -0
  63. package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +1 -1
  64. package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
  65. package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
  66. package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
  67. package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
  68. package/dist/docs-raw/skills/forgecad-lld.md +1 -1
  69. package/dist/docs-raw/skills/forgecad-make-a-model.md +40 -39
  70. package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
  71. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
  72. package/dist/docs-raw/skills/forgecad-project.md +3 -1
  73. package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +1 -1
  74. package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
  75. package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
  76. package/dist/docs-raw/skills/forgecad.md +4 -3
  77. package/dist/docs-raw/welcome.md +2 -0
  78. package/dist/index.html +40 -12
  79. package/dist/llms.txt +8 -0
  80. package/dist/site.webmanifest +1 -1
  81. package/dist/sitemap.xml +49 -13
  82. package/dist-cli/{check-compiler-U5SOPN7X.js → check-compiler-SYQ2PWOB.js} +1 -2
  83. package/dist-cli/{check-query-propagation-XOKNSSYU.js → check-query-propagation-HIAGV62W.js} +1 -2
  84. package/dist-cli/{chunk-EXWGNL6K.js → chunk-SPZE3DUY.js} +20659 -17930
  85. package/dist-cli/forgecad.js +3568 -1250
  86. package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
  87. package/dist-cli/forgecad_geometry_bg.wasm +0 -0
  88. package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
  89. package/dist-cli/solver_bg.wasm +0 -0
  90. package/dist-skill/CONTEXT.md +1192 -725
  91. package/dist-skill/SKILL.md +3 -2
  92. package/dist-skill/docs/API/core/concepts.md +64 -1
  93. package/dist-skill/docs/CLI.md +34 -10
  94. package/dist-skill/docs/generated/assembly.md +339 -213
  95. package/dist-skill/docs/generated/core.md +283 -6
  96. package/dist-skill/docs/generated/curves.md +272 -362
  97. package/dist-skill/docs/generated/lib.md +9 -19
  98. package/dist-skill/docs/generated/output.md +29 -4
  99. package/dist-skill/docs/generated/runtime-names.md +40 -0
  100. package/dist-skill/docs/generated/sdf.md +31 -0
  101. package/dist-skill/docs/generated/sheet-metal.md +9 -0
  102. package/dist-skill/docs/generated/sketch.md +44 -2
  103. package/dist-skill/docs/generated/viewport.md +2 -87
  104. package/dist-skill/docs/guides/coordinate-system.md +20 -16
  105. package/dist-skill/docs/guides/geometry-conventions.md +2 -2
  106. package/dist-skill/docs/guides/inspection-bundles.md +2 -1
  107. package/dist-skill/docs/guides/joint-design.md +24 -0
  108. package/dist-skill/docs/guides/positioning.md +13 -3
  109. package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
  110. package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
  111. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
  112. package/dist-skill/library/forgecad-make-a-model/SKILL.md +39 -38
  113. package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
  114. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
  115. package/dist-skill/library/forgecad-project/SKILL.md +2 -0
  116. package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
  117. package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
  118. package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
  119. package/examples/api/assembly-kinematics-limb.forge.js +116 -0
  120. package/examples/api/connector-frame-rig-chain.forge.js +102 -0
  121. package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
  122. package/examples/api/exact-surface-studio.forge.js +6 -8
  123. package/examples/api/helix-basics.forge.js +8 -8
  124. package/examples/api/lean-foundations/README.md +12 -0
  125. package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
  126. package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
  127. package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
  128. package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
  129. package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
  130. package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
  131. package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
  132. package/examples/api/route3d-elbow.forge.js +71 -0
  133. package/examples/api/transition-curves.forge.js +44 -15
  134. package/examples/api/variable-sweep-test.forge.js +3 -1
  135. package/examples/api/y-blend-corner-showcase.forge.js +0 -2
  136. package/examples/generative/coral-vase.forge.js +1 -1
  137. package/examples/nurbs-tube.forge.js +1 -1
  138. package/package.json +17 -13
  139. package/dist/assets/EditorApp-lXv53A1m.js +0 -13610
  140. package/dist/assets/app-CsHnaBWt.css +0 -1789
  141. package/dist/assets/forgecad_geometry_bg-C5_E9Oa9.wasm +0 -0
  142. package/dist/assets/solver_bg-CWvv4lnN.wasm +0 -0
  143. package/dist/docs-raw/API/README.md +0 -16
  144. package/dist/docs-raw/API/core/concepts.md +0 -118
  145. package/dist/docs-raw/INDEX.md +0 -138
  146. package/dist/docs-raw/RELEASING.md +0 -87
  147. package/dist/docs-raw/agent-native-api.md +0 -27
  148. package/dist/docs-raw/beta-deployment.md +0 -304
  149. package/dist/docs-raw/beta-operations.md +0 -325
  150. package/dist/docs-raw/blueprint-first.md +0 -145
  151. package/dist/docs-raw/cli-monetization.md +0 -112
  152. package/dist/docs-raw/coding-best-practices.md +0 -120
  153. package/dist/docs-raw/coding.md +0 -340
  154. package/dist/docs-raw/deployment.md +0 -374
  155. package/dist/docs-raw/guides/skill-maintenance.md +0 -161
  156. package/dist/docs-raw/guides/surface-members.md +0 -82
  157. package/dist/docs-raw/harbor-cli.md +0 -854
  158. package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
  159. package/dist/docs-raw/internals/compiler.md +0 -307
  160. package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
  161. package/dist/docs-raw/internals/constraint-solver.md +0 -176
  162. package/dist/docs-raw/internals/shape-from-slices.md +0 -152
  163. package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
  164. package/dist/docs-raw/platform/admin.md +0 -45
  165. package/dist/docs-raw/platform/architecture.md +0 -82
  166. package/dist/docs-raw/platform/auth.md +0 -139
  167. package/dist/docs-raw/platform/email.md +0 -67
  168. package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
  169. package/dist/docs-raw/platform/observability.md +0 -197
  170. package/dist/docs-raw/platform/projects.md +0 -111
  171. package/dist/docs-raw/platform/sharing.md +0 -90
  172. package/dist/docs-raw/product/README.md +0 -39
  173. package/dist/docs-raw/product/api-as-product-language.md +0 -13
  174. package/dist/docs-raw/product/business-model.md +0 -15
  175. package/dist/docs-raw/product/competitive-positioning.md +0 -17
  176. package/dist/docs-raw/product/creative-manufacturing.md +0 -15
  177. package/dist/docs-raw/product/founder-story.md +0 -11
  178. package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
  179. package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
  180. package/dist/docs-raw/product/product-loop.md +0 -17
  181. package/dist/docs-raw/product/strategic-decisions.md +0 -22
  182. package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
  183. package/dist/docs-raw/product/user-segments.md +0 -15
  184. package/dist/docs-raw/product/vision.md +0 -26
  185. package/dist/docs-raw/rl-environments.md +0 -350
  186. package/dist/docs-raw/runbook.md +0 -611
  187. package/dist-cli/check-compiler-U5SOPN7X.js.map +0 -1
  188. package/dist-cli/check-query-propagation-XOKNSSYU.js.map +0 -1
  189. package/dist-cli/chunk-EXWGNL6K.js.map +0 -1
  190. package/dist-cli/forgecad.js.map +0 -1
  191. package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
  192. package/dist-cli/solver-46FFSK2U.js.map +0 -1
  193. package/dist-skill/SKILL-dev.md +0 -145
  194. package/dist-skill/docs-dev/API/core/concepts.md +0 -118
  195. package/dist-skill/docs-dev/CLI.md +0 -677
  196. package/dist-skill/docs-dev/agent-native-api.md +0 -27
  197. package/dist-skill/docs-dev/blueprint-first.md +0 -145
  198. package/dist-skill/docs-dev/coding-best-practices.md +0 -120
  199. package/dist-skill/docs-dev/coding.md +0 -340
  200. package/dist-skill/docs-dev/component-model.md +0 -164
  201. package/dist-skill/docs-dev/generated/assembly.md +0 -794
  202. package/dist-skill/docs-dev/generated/core.md +0 -2117
  203. package/dist-skill/docs-dev/generated/curves.md +0 -2583
  204. package/dist-skill/docs-dev/generated/lib.md +0 -169
  205. package/dist-skill/docs-dev/generated/output.md +0 -247
  206. package/dist-skill/docs-dev/generated/sdf.md +0 -446
  207. package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
  208. package/dist-skill/docs-dev/generated/sketch.md +0 -1811
  209. package/dist-skill/docs-dev/generated/viewport.md +0 -585
  210. package/dist-skill/docs-dev/generated/wood.md +0 -108
  211. package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
  212. package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
  213. package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
  214. package/dist-skill/docs-dev/guides/joint-design.md +0 -78
  215. package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
  216. package/dist-skill/docs-dev/guides/positioning.md +0 -161
  217. package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
  218. package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
  219. package/dist-skill/docs-dev/internals/compiler.md +0 -307
  220. package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
  221. package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
  222. package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
  223. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
  224. package/examples/api/bolted-service-cover.forge.js +0 -17
  225. package/examples/api/cable-gland-anchor.forge.js +0 -14
  226. package/examples/api/captured-cartridge-guide.forge.js +0 -14
  227. package/examples/api/captured-linear-slide.forge.js +0 -13
  228. package/examples/api/clevis-pin-joint.forge.js +0 -13
  229. package/examples/api/datum-enclosure.forge.js +0 -16
  230. package/examples/api/hose-barb-port.forge.js +0 -14
  231. package/examples/api/knuckled-hinge-assembly.forge.js +0 -15
  232. package/examples/api/living-hinge-cover.forge.js +0 -14
  233. package/examples/api/pcb-terminal-block.forge.js +0 -22
  234. package/examples/api/pinned-lever-pivot-stack.forge.js +0 -14
  235. package/examples/api/retained-shaft-knob-stack.forge.js +0 -15
  236. package/examples/api/routed-tube-clip.forge.js +0 -15
  237. package/examples/api/seated-bearing-stack.forge.js +0 -30
  238. package/examples/api/snap-latch-cover.forge.js +0 -14
  239. package/examples/api/thumb-screw-clamp.forge.js +0 -15
@@ -0,0 +1,63 @@
1
+ # Privacy Policy
2
+
3
+ Effective May 31, 2026. This policy explains what ForgeCAD collects and how it is used.
4
+
5
+ Human-readable page: https://forgecad.io/privacy
6
+
7
+ ## Who we are
8
+
9
+ ForgeCAD is operated by Narek Kostandyan, Individual Entrepreneur, doing business as "ForgeCAD". For privacy requests or questions, contact contact@forgecad.io.
10
+
11
+ ## Information we collect
12
+
13
+ ForgeCAD collects account information such as name, email address, authentication provider data, avatar, plan status, settings, and legal acceptance records.
14
+
15
+ ForgeCAD stores project files, model code, generated outputs, published shares, API tokens, billing state, support messages, and service logs needed to operate the product.
16
+
17
+ ForgeCAD may collect technical information such as IP address, browser, device, operating system, approximate location, pages viewed, CLI command metadata, errors, performance data, and security events.
18
+
19
+ ## How we use information
20
+
21
+ We use information to provide the editor, CLI, project sync, publishing, billing, support, security, abuse prevention, diagnostics, product improvement, and legal compliance.
22
+
23
+ We may use aggregated or de-identified information to understand product usage and improve reliability, documentation, performance, and onboarding.
24
+
25
+ ## Private project content
26
+
27
+ Private projects are not sold. ForgeCAD does not use private project content to train public AI models unless you explicitly agree to that use or ask us to process the content for a feature that requires it.
28
+
29
+ If you publish or share a model, people with access to the published or shared link may view the content according to the sharing settings you choose.
30
+
31
+ ## Cookies and local storage
32
+
33
+ ForgeCAD uses cookies, local storage, and similar technologies for authentication, CSRF protection, preferences, checkout flow continuity, session security, and product diagnostics.
34
+
35
+ Some browser storage is essential for the service to work. You can control cookies through your browser, but disabling them may break sign-in or hosted project features.
36
+
37
+ ## Service providers
38
+
39
+ ForgeCAD may use service providers for hosting, databases, email delivery, payment processing, analytics, error monitoring, authentication, storage, and customer support.
40
+
41
+ Payment details are handled by payment providers such as Stripe. ForgeCAD does not store full card numbers.
42
+
43
+ ## Security and retention
44
+
45
+ We use reasonable technical and organizational safeguards, but no internet service can guarantee perfect security.
46
+
47
+ We retain information while your account is active, while needed to provide the service, or while needed for legal, security, billing, backup, and dispute-resolution purposes.
48
+
49
+ ## Deletion and rights
50
+
51
+ You may delete your account from the product where supported or contact contact@forgecad.io for account, project, or privacy requests.
52
+
53
+ Depending on where you live, you may have rights to access, correct, delete, export, restrict, or object to the processing of your personal information.
54
+
55
+ ## International use
56
+
57
+ ForgeCAD and its service providers may process information in countries other than where you live. When required, we rely on appropriate safeguards for international transfers.
58
+
59
+ ## Children and changes
60
+
61
+ ForgeCAD is not directed to children under 13. Do not create an account if you are not old enough to use online services in your jurisdiction.
62
+
63
+ We may update this policy as the product changes. Material updates will be reflected on this page with a new effective date.
@@ -0,0 +1,55 @@
1
+ # ForgeCAD Software License
2
+
3
+ Effective May 31, 2026. This license governs the ForgeCAD npm package, CLI, browser application code, bundled runtime, and packaged assets.
4
+
5
+ Human-readable page: https://forgecad.io/license
6
+
7
+ ## Software covered
8
+
9
+ This license applies to the ForgeCAD npm package, command-line interface, browser application code, bundled runtime, and packaged assets distributed with ForgeCAD.
10
+
11
+ ForgeCAD, including its compiler, runtime, CLI, browser application, APIs, standard library, schemas, documentation, and packaged assets, is owned by Narek Kostandyan, Individual Entrepreneur (d.b.a. "ForgeCAD"). All rights not expressly granted in this license are reserved.
12
+
13
+ Public example files, public agent skills, and public companion repositories may use a separate license when a repository or file says so.
14
+
15
+ ## Free personal non-commercial use
16
+
17
+ You may install and use the Software for free for personal non-commercial use, learning, experimentation, individual evaluation, and other non-commercial work.
18
+
19
+ ## Pro commercial use
20
+
21
+ If you use the Software as a human-operated CAD tool for commercial work, you need an active ForgeCAD Pro subscription unless ForgeCAD has separately agreed to different written terms.
22
+
23
+ This includes designing models for customers, client work, paid freelance work, employer work, products for sale, and funded commercial projects.
24
+
25
+ ## Enterprise backend, embedded, and AI use
26
+
27
+ You need a ForgeCAD Enterprise agreement before using the Software in an automated backend, hosted service, embedded application, product integration, reinforcement-learning environment, AI training or evaluation workflow, benchmark, or other internal or external application workflow that calls ForgeCAD on behalf of users, customers, jobs, scripts, agents, models, or external systems.
28
+
29
+ For clarity, high-throughput, parallel, automated, or programmatic generation, rendering, validation, or evaluation requires an active ForgeCAD Enterprise agreement, regardless of who owns the resulting models, scripts, outputs, variants, mutations, or data derivatives.
30
+
31
+ ## Your models and outputs
32
+
33
+ You own the models, scripts, exports, images, reports, and other outputs you create with ForgeCAD, subject to your rights in any input material and subject to using ForgeCAD under the required plan for your use case.
34
+
35
+ ## Pricing and written agreements
36
+
37
+ Current plan details are available at forgecad.io/pricing. If you have a written agreement with ForgeCAD, that agreement controls where it conflicts with this license.
38
+
39
+ ## Restrictions
40
+
41
+ Except as allowed by this license or by a separate written agreement, you may not sell, sublicense, rent, lease, redistribute, white-label, or offer the Software itself as a hosted, embedded, or API service.
42
+
43
+ You may not remove copyright, license, pricing, telemetry, subscription, or branding notices, or bypass license checks, subscription checks, usage limits, or technical protection measures.
44
+
45
+ ## No warranty, limitation, and termination
46
+
47
+ The Software is provided as is, without warranty of any kind.
48
+
49
+ To the maximum extent permitted by law, ForgeCAD and Narek Kostandyan, Individual Entrepreneur, will not be liable for indirect, incidental, special, consequential, exemplary, or punitive damages or for lost profits, revenue, data, manufacturing losses, procurement losses, or business interruption.
50
+
51
+ Your rights under this license terminate automatically if you violate these terms. After termination, you must stop using the Software unless ForgeCAD reinstates your rights in writing.
52
+
53
+ ## Contact
54
+
55
+ For Enterprise licensing, commercial questions, or alternative licensing terms, contact contact@forgecad.io.
@@ -0,0 +1,87 @@
1
+ # Terms of Service
2
+
3
+ Effective May 31, 2026. These terms govern ForgeCAD accounts, hosted services, software access, and paid plans.
4
+
5
+ Human-readable page: https://forgecad.io/terms
6
+
7
+ ## Acceptance
8
+
9
+ ForgeCAD is operated by Narek Kostandyan, Individual Entrepreneur, doing business as "ForgeCAD" ("ForgeCAD", "we", "us").
10
+
11
+ By creating an account, accessing ForgeCAD, installing the ForgeCAD software, or using the hosted service, you agree to these Terms, the Privacy Policy, and the ForgeCAD Software License.
12
+
13
+ If you use ForgeCAD for an organization, you represent that you have authority to bind that organization. A separately signed agreement with ForgeCAD controls where it conflicts with these Terms.
14
+
15
+ ## Accounts and eligibility
16
+
17
+ You are responsible for your account, credentials, API tokens, project files, and all activity under your account.
18
+
19
+ Do not create an account if you are not old enough to use online services in your jurisdiction or if you cannot legally agree to these Terms.
20
+
21
+ ## Plans and commercial use
22
+
23
+ Free is for personal non-commercial use, learning, experimentation, individual evaluation, and other non-commercial work.
24
+
25
+ Pro covers one named person using ForgeCAD as a human-operated CAD tool for commercial work, including client work, employer work, professional models, products for sale, and funded commercial projects.
26
+
27
+ Each person doing commercial ForgeCAD work needs their own active Pro subscription unless ForgeCAD has separately agreed to different written terms.
28
+
29
+ Enterprise is required for automated backend use, hosted or embedded workflows, product integrations, shared seats, team deployments that need custom terms, and AI training, evaluation, benchmarking, or reinforcement-learning environments.
30
+
31
+ ## Enterprise AI and automation use
32
+
33
+ You may not use ForgeCAD as infrastructure for training, evaluating, benchmarking, fine-tuning, reinforcement learning, reward environments, automated model generation, or agent workflows unless you have an active ForgeCAD Enterprise agreement.
34
+
35
+ This applies whether the workflow is external-facing or internal, and whether it runs for users, customers, jobs, scripts, agents, models, or other automated systems.
36
+
37
+ Ownership of models, scripts, environments, exports, or other outputs does not grant a license to use the ForgeCAD software, runtime, CLI, APIs, docs, examples, skills, validation tools, or methods outside the plan required for that use case.
38
+
39
+ For clarity, ownership of any model, script, environment, task, or output, including any variant, mutation, or derivative produced by running the ForgeCAD compiler, runtime, CLI, or APIs, does not grant any right to operate ForgeCAD for high-throughput, parallel, automated, or programmatic generation, rendering, validation, or evaluation. Such operation requires an active ForgeCAD Enterprise agreement, regardless of who owns the resulting data.
40
+
41
+ ## Your content and outputs
42
+
43
+ You retain your rights in models, scripts, exports, images, reports, project files, prompts, and other content you create or upload, subject to your rights in any input material and your compliance with the required ForgeCAD plan.
44
+
45
+ You grant ForgeCAD the limited rights needed to host, process, render, validate, store, transmit, back up, and display your content for the service features you use.
46
+
47
+ If you publish or share a model, you are responsible for the content you make available and for having the rights needed to share it.
48
+
49
+ ## Acceptable use and compliance
50
+
51
+ Do not use ForgeCAD to break the law, infringe others' rights, bypass license or subscription controls, attack the service, scrape private data, upload malware, or interfere with other users.
52
+
53
+ Do not upload regulated, export-controlled, classified, or highly sensitive information unless you have the legal right to do so and a separate written agreement with ForgeCAD covers that use.
54
+
55
+ Do not resell, sublicense, lease, redistribute, white-label, or offer ForgeCAD itself as a hosted service, API, embedded product, or application feature without a written Enterprise agreement.
56
+
57
+ ## Billing
58
+
59
+ Paid subscriptions renew until canceled. Stripe or another payment provider may process checkout, tax collection, invoices, and payment details.
60
+
61
+ You are responsible for applicable taxes, accurate billing information, and timely payment. Fees are non-refundable except where required by law or separately agreed in writing.
62
+
63
+ Plan names, prices, limits, and included features may change. Existing paid users will receive reasonable notice before material plan changes take effect.
64
+
65
+ ## CAD, manufacturing, and safety
66
+
67
+ ForgeCAD is a design and automation tool. You are responsible for reviewing, testing, validating, and safely manufacturing any model, export, toolpath, part, assembly, or design decision.
68
+
69
+ Do not rely on ForgeCAD output as a substitute for professional engineering review, safety certification, regulatory compliance, or manufacturing quality control.
70
+
71
+ ## Service changes and termination
72
+
73
+ ForgeCAD may change, suspend, or discontinue features, limits, or service availability as the product evolves.
74
+
75
+ ForgeCAD may suspend or terminate access if you violate these Terms, create security or operational risk, or fail to pay required fees.
76
+
77
+ ## Warranty and liability
78
+
79
+ ForgeCAD is provided as is, without warranties of merchantability, fitness for a particular purpose, non-infringement, availability, or accuracy.
80
+
81
+ To the maximum extent permitted by law, ForgeCAD and Narek Kostandyan, Individual Entrepreneur, will not be liable for indirect, incidental, special, consequential, exemplary, or punitive damages, lost profits, lost revenue, lost data, manufacturing losses, procurement losses, or business interruption.
82
+
83
+ ## Changes and contact
84
+
85
+ ForgeCAD may update these Terms as the product changes. Material updates will be reflected on this page with a new effective date.
86
+
87
+ For legal, privacy, billing, or Enterprise questions, contact contact@forgecad.io.
@@ -5,7 +5,7 @@ Reconstruct a parametric ForgeCAD model from an existing 3D CAD or mesh file suc
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-3d-reconstruction/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-3d-reconstruction/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -5,7 +5,7 @@ Create rough high-level ForgeCAD concept models from simple primitives to explor
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-blockout-model/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-blockout-model/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -5,7 +5,7 @@ Enforce the ForgeCAD Component Model when building multi-part assemblies. Parts
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-component-model/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-component-model/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -31,9 +31,11 @@ A part is a function from props to `{ shape, connectors, metadata }`. It builds
31
31
  - A connector = origin + axis (outward from the part)
32
32
  - Connectors meet **face-to-face**: both axes point outward, system brings them together
33
33
  - For prismatic joints: axes point along the shared slide direction
34
+ - Mirrored revolute axes need negated physical joint values for the same mirrored pose
34
35
 
35
36
  #### 3. Assembly Is Pure Composition
36
- - `addPart()` + `connect()` + `addJointCoupling()` nothing else
37
+ - Use `addPart()` + `connect()` for frame-aware serial assemblies
38
+ - Use `link()` + `edgeBetweenLinks()` + `addAngleBetweenLinks()` for solved point skeletons
37
39
  - Zero `translate()` calls for structural parts
38
40
  - Zero coordinate math
39
41
  - The assembly passes props down and reads metadata up
@@ -65,6 +67,13 @@ mount.withConnectors({
65
67
  assembly.connect("Base.mount_face", "Mount.flange", { as: "mount-fix" });
66
68
  ```
67
69
 
70
+ Revolute values are signed by the physical hinge axis. In a bilateral mechanism,
71
+ `axis: [1, 0, 0]` on the right side and `axis: [-1, 0, 0]` on the left side are
72
+ exact mirrors at rest, but the same `+theta` value rotates them in opposite
73
+ fore/aft senses. Use `Right: +theta`, `Left: -theta`, and mirror physical limits
74
+ as `[min, max] -> [-max, -min]`, or drive both sides from a side-neutral link
75
+ graph/control layer.
76
+
68
77
  ### Part Return Shape
69
78
 
70
79
  Every part file returns a structured object:
@@ -5,7 +5,7 @@ Write a high-level design document (HLD) for a model, mechanism, or assembly bef
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-high-level-spec/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-high-level-spec/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -5,7 +5,7 @@ Build real ForgeCAD geometry from one or more reference images by treating image
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-image-replicator/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-image-replicator/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -119,10 +119,10 @@ node dist-cli/forgecad.js render 3d path/to/model.forge.js /tmp/<slug>-replicate
119
119
  --size 1000 --edges thin
120
120
  ```
121
121
 
122
- Build side-by-side boards with the bundled helper:
122
+ Build side-by-side boards with the bundled helper. It is a self-contained `uv` script that installs Pillow on demand and does not require Chrome. The examples use the ForgeCAD source-checkout path; if the skill is installed elsewhere, resolve `scripts/compare_images.py` relative to the `forgecad-image-replicator` skill directory.
123
123
 
124
124
  ```bash
125
- node skills/forgecad-image-replicator/scripts/compare_images.mjs \
125
+ uv run agent-skill-library/forgecad-image-replicator/scripts/compare_images.py \
126
126
  /tmp/<slug>-replicate/refs/front.png \
127
127
  /tmp/<slug>-replicate/render-front.png \
128
128
  /tmp/<slug>-replicate/compare-front.png \
@@ -132,10 +132,10 @@ node skills/forgecad-image-replicator/scripts/compare_images.mjs \
132
132
  Common helper options:
133
133
 
134
134
  ```bash
135
- node skills/forgecad-image-replicator/scripts/compare_images.mjs ref.png render.png compare.png
136
- node skills/forgecad-image-replicator/scripts/compare_images.mjs ref.jpg render.png compare.png --height 1200 --fit contain
137
- node skills/forgecad-image-replicator/scripts/compare_images.mjs ref.png render.png compare.png --fit cover --labels "Target,Current"
138
- node skills/forgecad-image-replicator/scripts/compare_images.mjs ref.png render.png compare.png --no-labels
135
+ uv run agent-skill-library/forgecad-image-replicator/scripts/compare_images.py ref.png render.png compare.png
136
+ uv run agent-skill-library/forgecad-image-replicator/scripts/compare_images.py ref.jpg render.png compare.png --height 1200 --fit contain
137
+ uv run agent-skill-library/forgecad-image-replicator/scripts/compare_images.py ref.png render.png compare.png --fit cover --labels "Target,Current"
138
+ uv run agent-skill-library/forgecad-image-replicator/scripts/compare_images.py ref.png render.png compare.png --no-labels
139
139
  ```
140
140
 
141
141
  Use `--fit contain` by default. Use `--fit cover` only when both images already share the same crop and aspect.
@@ -177,4 +177,4 @@ For non-trivial references, expect several render, compare, canonical-view, and
177
177
  ## Bundled Files
178
178
 
179
179
  - `agents/openai.yaml`
180
- - `scripts/compare_images.mjs`
180
+ - `scripts/compare_images.py`
@@ -5,7 +5,7 @@ Write a Low-Level Design (LLD) for a CAD model — exact dimensions, constraints
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-lld/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-lld/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -5,7 +5,7 @@ Create manufacture-realistic prototype ForgeCAD (.forge.js) models in the active
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-make-a-model/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-make-a-model/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -49,9 +49,14 @@ Use today's date for the directory. Use the user's current ForgeCAD project when
49
49
 
50
50
  ### Workflow
51
51
 
52
- 1. Load the ForgeCAD skill — always invoke the `forgecad` skill first to get API docs and authoring guidance. Read at minimum the Core API reference. If any two parts are intended to touch or mate in the final model, read the positioning guide immediately and default to connectors + `matchTo()`.
52
+ 1. Load the ForgeCAD skill — always invoke the `forgecad` skill first to get API docs and authoring guidance. Read at minimum the Core API reference. If the model has moving parts, load the assembly group and `docs/permanent/guides/joint-design.md` before writing geometry. If any two parts are intended to touch or mate in the final model, read the positioning guide immediately and default to connectors + `matchTo()`.
53
53
  2. Create the directory — `mkdir -p YYYY/MM/DD/[folder]` as needed.
54
- 3. Write the modelcreate the `.forge.js` file(s) following ForgeCAD conventions:
54
+ 3. Prove moving-part kinematics before detailed geometry for any mechanism, robot, linkage, hinge, slider, suspension, gripper, wheel train, drawer, door, linkage toy, or articulated product:
55
+ - Author the rig first: links, frames, fixed ground references, parent/child relationships, joints, couplings, limits, defaults, mirrored-side sign mapping, and named controls.
56
+ - Choose the right rig primitive before modeling the skin: use link graphs (`link()`, `edgeBetweenLinks()`, `addAngleBetweenLinks()`) for point skeletons and closed loops; use frame/connector joints (`frame()`, `revoluteJoint()`, `prismaticJoint()`, `connect()`, `match()`) when part orientation matters.
57
+ - Attach only simple markers, bars, or proxy parts at first. Return the `Assembly` directly and run it at rest, mid-travel, and limit joint values until the solver, controls, connector/frame alignment, and `verify.*` checks pass.
58
+ - Only after the rig works should you replace proxies with manufacture-real geometry attached to the solved links, frames, and connectors. Do not bake a posed `SolvedAssembly` as the default return just to make one pose look right.
59
+ 4. Write the model — create the `.forge.js` file(s) following ForgeCAD conventions:
55
60
  - Treat the default build profile as `manufacture-realistic prototype`; choose and encode the artifact's manufacturing/process cues before adding styling detail
56
61
  - Declare `param()` / `boolParam()` for all tunable dimensions
57
62
  - If the model is split across files, use `main.forge.js` as the primary entry point, import renderable parts from neighboring `.forge.js` files, and keep only pure helpers/constants in plain `.js` modules
@@ -62,11 +67,12 @@ Use today's date for the directory. Use the user's current ForgeCAD project when
62
67
  - Make final mating geometry physically plausible: parts may touch, clear each other, or be boolean-joined, but should not unintentionally pass through each other
63
68
  - Model the physical artifact, not an educational diagram: no explanatory arrows, floating labels, section labels, legends, or text plaques unless the user explicitly requested a presentation/teaching view
64
69
  - Do not make the default returned model a cutaway, sectioned shell, permanently exploded assembly, or hidden-parts teaching view. ForgeCAD gives the user viewer and inspection tools for slicing, exploding, hiding, and looking inside after the real CAD exists.
65
- - Return the final geometry (single shape, array, or named objects array)
70
+ - Return the final artifact (single shape, array, named objects array, or `Assembly` for moving mechanisms)
71
+ - For moving assemblies, return the `Assembly` itself whenever possible so Motion controls re-run the real kinematic solve; avoid legacy viewport-only animation APIs for new work unless the user explicitly asks for them
66
72
  - Treat `fillet(shape, r)` and `chamfer(shape, r)` as experimental edge treatments: Manifold can produce incorrect results and OCCT can be very slow. Prefer simpler primitive profiles, lower segment counts, targeted edge selectors, and inspection before relying on the result.
67
- 4. Validate — run `forgecad run <file>` to check for errors. For multi-file projects, always validate `main.forge.js`.
68
- 5. Verify geometry — render a multi-angle visual evidence set before final delivery: whole-model context plus agent-chosen orthographic, oblique, underside, or hidden-object views that expose the relevant components and interfaces. Choose camera directions from the model's shape and likely failure modes, not from a fixed recipe. Use those views to look for internals that are accidentally visible, parts that visibly do not fit, floating details, blocked access, missing seats, and unexpected interference. Run `forgecad inspect physical components` when the model has multiple returned objects or visible attachments, run `forgecad debug assembly --fail-on warning` when the script uses `assembly()`, run `forgecad inspect mechanical-integrity <project-or-file> --collisions` before sharing generated mechanical work, and run the targeted `forgecad inspect <family> <mode>` commands that match the task (see Final Acceptance Gate and Render-Verify Loop below). For multi-file projects, render and inspect `main.forge.js`. Collision findings are model work, not FYI: remove unexpected overlaps before delivery.
69
- 6. Iterate from visual and inspection feedback — treat every render and inspection bundle as model evidence, not a checkbox. Read the normal PNGs, manifest, and evidence PNGs; convert each unexpected collision, thin region, missing section detail, wrong component count, floating body, distance gap, confusing object-color result, accidentally exposed internal structure, bad fit, or visually unsupported interface into a concrete model edit; then rerun the same targeted evidence pass until the result matches the intended physical component graph.
73
+ 5. Validate — run `forgecad run <file>` to check for errors. For multi-file projects, always validate `main.forge.js`. For moving assemblies, also run representative joint states with `--joint`, including rest/default, mid-travel, both limits, and any coupled or mirrored poses.
74
+ 6. Verify geometry — render a multi-angle visual evidence set before final delivery: whole-model context plus agent-chosen orthographic, oblique, underside, or hidden-object views that expose the relevant components and interfaces. Choose camera directions from the model's shape and likely failure modes, not from a fixed recipe. Use those views to look for internals that are accidentally visible, parts that visibly do not fit, floating details, blocked access, missing seats, and unexpected interference. For moving assemblies, render at several joint values with `--joint` so clearance, range, stops, and connected followers are proven in motion, not only at rest. Run `forgecad inspect physical components` when the model has multiple returned objects or visible attachments, run `forgecad debug assembly --fail-on warning` when the script uses `assembly()`, run `forgecad inspect mechanical-integrity <project-or-file> --collisions` before sharing generated mechanical work, and run the targeted `forgecad inspect <family> <mode>` commands that match the task (see Final Acceptance Gate and Render-Verify Loop below). For multi-file projects, render and inspect `main.forge.js`. Collision findings are model work, not FYI: remove unexpected overlaps before delivery.
75
+ 7. Iterate from visual and inspection feedback — treat every render and inspection bundle as model evidence, not a checkbox. Read the normal PNGs, manifest, and evidence PNGs; convert each unexpected collision, thin region, missing section detail, wrong component count, floating body, distance gap, confusing object-color result, accidentally exposed internal structure, bad fit, bad joint sweep, unconverged pose, follower drift, or visually unsupported interface into a concrete model edit; then rerun the same targeted evidence pass until the result matches the intended physical component graph.
70
76
 
71
77
  ### Manufacturing Process Is Not Assumed
72
78
 
@@ -123,6 +129,28 @@ Do not reveal hidden structure by permanently cutting away the production geomet
123
129
 
124
130
  When internals are hidden by the final exterior, verify them with exploration tools instead of changing the artifact: render underside or alternate camera views, use `forgecad inspect sections at|stack|sample`, use viewer-only cut planes or explode controls, temporarily make a shell transparent, or add named ghost objects for fit checks. Those views are diagnostic/presentation modes; they must not replace the real model unless the user explicitly asked for a cutaway teaching model.
125
131
 
132
+ ### Kinematics-First for Moving Parts
133
+
134
+ For moving models, the mechanism rig is the source of truth. Do not start with finished housings, arms, shells, covers, or decorative surfaces and then try to retrofit motion. Build the motion structure first, prove it, and attach geometry to it.
135
+
136
+ - Decide the rig shape before geometry: point links for closed-loop skeletons and distance/angle constraints; frames and connector joints for serial rigid parts whose orientation matters.
137
+ - Name every moving degree of freedom and encode its limits/defaults at the rig level. For mirrored revolute axes, make the sign mapping explicit instead of assuming equal values create mirrored poses.
138
+ - Add simple proxy geometry only to expose the rig: pivot markers, bars between links, slider blocks, wheel discs, or frame axes. Use those proxies to verify the mechanism before adding real material.
139
+ - Attach final geometry to solved links, frames, and connectors. A visible arm, cover, wheel, drawer, or follower should move because it is mated to the rig, not because a final `rotate()` or `translate()` happens to make one pose look assembled.
140
+ - Keep the default return as the unsolved `Assembly` when possible. This lets Motion controls and CLI `--joint` overrides re-run the real solve.
141
+ - Put representative pose checks in the script with `verify.*`: convergence, connector origins coinciding, link lengths holding, end effectors reaching their expected points, followers remaining attached, and required running clearances staying positive.
142
+
143
+ At minimum, run the mechanism at rest, mid-travel, both limits, and any mirrored/coupled poses:
144
+
145
+ ```bash
146
+ node dist-cli/forgecad.js run model.forge.js --joint "theta=0"
147
+ node dist-cli/forgecad.js run model.forge.js --joint "theta=45"
148
+ node dist-cli/forgecad.js run model.forge.js --joint "theta=90"
149
+ node dist-cli/forgecad.js render 3d model.forge.js /tmp/model-theta-45.png --joint "theta=45" --camera iso --size 700
150
+ ```
151
+
152
+ Use the real joint/control names from the assembly. For multiple controls, repeat `--joint`: `--joint "hip=20" --joint "knee=-35"`. If any pose fails to solve, clamps unexpectedly, breaks a connector check, or creates a new collision, the rig is not ready for final geometry.
153
+
126
154
  ### Mechanical Assembly Contract
127
155
 
128
156
  For mechanical models, a ForgeCAD script is not done when it merely looks assembled. Every visible piece must have a believable physical reason to be where it is: fused material, contact faces, a screw stack, a pin in a bore, a tab in a slot, a gasket on a land, a bearing in a seat, a cable in a channel, or a named intentional ghost.
@@ -137,37 +165,7 @@ For mechanical models, a ForgeCAD script is not done when it merely looks assemb
137
165
  - Purchased loose parts may remain separate bodies, but they should be named as purchased hardware or consumables and should sit in believable sockets, bores, races, guides, or fastener stacks.
138
166
  - Encode interface intent with `verify.*`, not only comments. Use `verify.clearanceBetween("cover is seated on gasket", cover, gasket, -0.01, 0.05)` for contact/seated fits and clearance bands, `verify.minClearance(...)` or `verify.notColliding(...)` for keep-out/running gaps, and `verify.connectorDistance(...)` for connector-authored mates. Part counts and generic dimensions are useful supporting checks, but they do not prove an interface by themselves.
139
167
 
140
- For ordinary removable covers, prefer `lib.boltedServiceCover(...)` before hand-placing plates, tabs, screw heads, gaskets, and holes. It creates the parent ledge, gasket, cover plate with fused pull tabs, shared bolt pattern, and installed screws as one mechanically accountable interface.
141
-
142
- For electronics boxes, backplates, service-stack housings, and camera/monitor enclosures, prefer `lib.datumEnclosureAssembly(...)` before independently placing panels, ribs, bosses, ports, covers, and screws. It creates the tray, ledges, standoffs, ribs, service port, gasket, cover, and screws from one shared datum system.
143
-
144
- For PCB-mounted terminal blocks, thermostat backplates, control boards, and wire-entry electronics panels, prefer `lib.pcbTerminalBlockAssembly(...)` before placing a loose green block near a board or cover. It creates the backplate, fused standoffs, PCB mounting screws, PCB pin holes, terminal pins, and seated purchased terminal block from one shared datum system.
145
-
146
- For snap-retained covers, cartridges, small clasps, and housings, prefer `lib.snapLatchCoverAssembly(...)` before drawing decorative snap tabs. It creates latch windows, underside catch lands, fused snap hooks, barbs, and clearance checks so the cover is retained by real geometry.
147
-
148
- For ordinary pinned handles, cam levers, release levers, and latch arms, prefer `lib.pinnedLeverAssembly(...)` before hand-placing a hub, arm, washers, and pin. It creates a fused lever body, aligned pivot bore, retained pin, thrust washers, support land, and low stop land as one mechanically accountable pivot stack.
149
-
150
- For trunnions, side knobs, adjustable pivots, and clamp shafts, prefer `lib.retainedShaftAssembly(...)` before hand-placing rods, washers, and knobs. It creates bored support cheeks, a through shaft, thrust washers, knobs, retaining heads, and shared bore dimensions as one mechanically accountable stack.
151
-
152
- For thumb screws, desk clamps, vise screws, capo pressure screws, and small fixture hold-downs, prefer `lib.thumbScrewClampAssembly(...)` before hand-placing a knob, screw cylinder, pressure pad, and bracket jaw. It creates the C-frame, threaded boss/bore, captive pressure pad, hand knob, and seated workpiece contact from one shared datum system.
153
-
154
- For drawer slides, quick-release plates, and guided linear carriages, prefer `lib.capturedLinearSlide(...)` before hand-placing rails and a block. It creates a U-channel rail with return lips, end stops, a captured carriage, and explicit travel/clearance dimensions.
155
-
156
- For pump cartridges, filter cassettes, battery cartridges, skeg cassettes, and removable slide-in modules, prefer `lib.capturedCartridgeGuideAssembly(...)` before placing a loose tray and block. It creates return lips, a rear stop, a captured cartridge flange, pull tab, insertion travel, and explicit clearance dimensions.
157
-
158
- For molded flexible battery doors, sample covers, blister latches, and polypropylene-style service flaps, prefer `lib.livingHingeCoverAssembly(...)` before drawing two plates with a decorative hinge strip. It creates one fused molded strip with fixed leaf, thin flexible web, moving cover leaf, pull lip, snap barb, catch land, and web-thickness checks.
159
-
160
- For doors, barn-door leaves, lids, locket leaves, and small hinged access panels, prefer `lib.knuckledHingeAssembly(...)` before hand-placing barrels and a pin. It creates alternating fused knuckles, two leaves, a shared bore, and a retained pin as one mechanically accountable hinge.
161
-
162
- For crank links, damper rod ends, crossheads, and clevis-yoke pivots, prefer `lib.clevisPinJointAssembly(...)` before hand-placing an eyelet and pin. It creates bored clevis ears, a captured center link eye, a rear bridge, and a retained pin as one mechanically accountable load path.
163
-
164
- For bearings, rollers, burr cartridges, spindle supports, and purchased radial bearings, prefer `lib.seatedBearingAssembly(...)` before hand-placing a ring and shaft near a block. It creates a bored housing, counterbore pocket, bearing shoulder, seated bearing, shaft, collars, and shared clearance dimensions as one mechanically accountable support.
165
-
166
- For cables, wires, hoses, pump tubes, and panel pass-throughs, prefer `lib.cableGlandAnchorAssembly(...)` before hand-placing a loose cylinder near a wall. It creates the panel clearance hole, hollow gland body, compression nut, and routed cable/tube as one mechanically accountable pass-through.
167
-
168
- For routed cables, wires, hoses, pump tubes, and sensor leads that run along a surface, prefer `lib.routedTubeClipAssembly(...)` before drawing a tube that floats between endpoints. It creates a base panel, saddle clip bores, clip screw holes, installed screws, and the retained tube route from one shared datum system.
169
-
170
- For fluid hoses, pump inlets/outlets, filter ports, and lab tubing, prefer `lib.hoseBarbPortAssembly(...)` before drawing a tube that stops at a block. It creates the bored receiver, raised boss, hollow barbed fitting, installed hose, and clamp band as one accountable hose-port interface.
168
+ Do not introduce canned finished-object helpers for project-specific assemblies. When a repeated physical pattern appears, build the project-specific interface explicitly: use `lib.fastenerSet()` or `lib.boltPattern()` for screw stacks, real bores/counterbores/pockets for purchased parts, connectors plus `matchTo()` for mating parts, and `verify.*` checks for seated contact and running clearances. Reusable library vocabulary should be primitives, cutters, patterns, and mechanical contracts, not finished thermostat backplates, clamp brackets, hinge leaves, or other canned objects.
171
169
 
172
170
  ### Final Geometry Should Be Physically Plausible
173
171
 
@@ -211,6 +209,8 @@ Before telling the user the model is done, prove both technical validity and vis
211
209
 
212
210
  The model should include at least one verification that proves a mechanical interface, not just object count. Prefer checks such as `verify.clearanceBetween("bearing is seated in pocket", bearing, housing, -0.01, 0.1)`, `verify.minClearance("carriage clears rail", carriage, rail, 0.15)`, `verify.notColliding("cover screw clears parent hole", screw, parent)`, or `verify.connectorDistance("leg connector is seated", bench, "Rail.leg_0", "Leg0.head", 0, 0.01)`.
213
211
 
212
+ For moving assemblies, this gate is incomplete until the rig has been run through representative control states. Use `--joint` overrides and/or in-script `solve(state)` verification to cover rest/default, mid-travel, physical limits, coupled states, and mirrored-side poses. Each tested pose should keep the solver converged, attached geometry following the rig, and clearances/collisions within the intended mechanical contract.
213
+
214
214
  2. Run collision evidence and read both the manifest and images:
215
215
 
216
216
  ```bash
@@ -246,7 +246,7 @@ Before telling the user the model is done, prove both technical validity and vis
246
246
 
247
247
  5. Treat ProductSkin and surface-member limitations honestly. If `inspect fit interference` reports boolean-test warnings because a sampled `Product.skin` loft has boundary edges, distinguish that from real collision findings. You may still deliver if `collisionCount` is clean, the intended connectivity is correct, and the visual attachment audit passes. Mention the residual warning briefly in the final response.
248
248
 
249
- 6. Final response must name the evidence: commands run, render views checked, any focus/hide filters used, component count, collision count, and any residual warnings or intentional exceptions. Do not just say "validated."
249
+ 6. Final response must name the evidence: commands run, render views checked, joint values tested for moving assemblies, any focus/hide filters used, component count, collision count, and any residual warnings or intentional exceptions. Do not just say "validated."
250
250
 
251
251
  ### Render-Verify Loop
252
252
 
@@ -443,6 +443,7 @@ Primitive placement convention:
443
443
  Key composition tools:
444
444
 
445
445
  - Connectors + `matchTo()` for parts that should touch in the final model
446
+ - `assembly()` link graphs, frames, and connector joints for moving mechanisms
446
447
  - `group()` for local-coordinate subassemblies
447
448
  - `attachTo()` for quick bounding-box placement
448
449
  - `.translate()` / `.rotate()` for free offsets or bridging computed locations, not as the default assembly contract
@@ -5,7 +5,7 @@ Analyze, verify, and grade ForgeCAD or CAD-as-code models against a user require
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-model-grader/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-model-grader/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -64,7 +64,7 @@ This skill is an evaluator workflow. Do not edit the model unless the user expli
64
64
 
65
65
  ```bash
66
66
  node dist-cli/forgecad.js inspect fit interference path/to/model.forge.js /tmp/model-grade/collisions --camera iso --force --size 700
67
- python skills/forgecad-render-inspect/summarize_manifest.py /tmp/model-grade/collisions
67
+ python agent-skill-library/forgecad-render-inspect/summarize_manifest.py /tmp/model-grade/collisions
68
68
  ```
69
69
 
70
70
  Read the manifest and inspect the relevant evidence PNGs. Treat unexpected collisions, thin regions, missing sections, wrong component counts, floating bodies, and confusing object colors as evidence, not as warnings to wave away.
@@ -5,7 +5,7 @@ Turn a fuzzy physical product, mechanism, or CAD artifact request into a concret
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-prepare-prompt/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-prepare-prompt/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -181,7 +181,7 @@ By the end of this skill, there should be:
181
181
 
182
182
  9. If implementation continues immediately, hand off to `forgecad`.
183
183
  For moving mechanisms, load:
184
- - `skills/forgecad/SKILL.md`
184
+ - `~/.agents/skills/forgecad/SKILL.md`
185
185
  - `docs/permanent/generated/assembly.md`
186
186
  - `docs/permanent/generated/output.md`
187
187
  - `docs/permanent/guides/joint-design.md`
@@ -5,7 +5,7 @@ ForgeCAD project CLI workflow — creating, managing, syncing projects and files
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-project/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-project/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -15,6 +15,8 @@ ForgeCAD project CLI workflow — creating, managing, syncing projects and files
15
15
 
16
16
  **forgecad.io** is the primary platform for ForgeCAD projects. The CLI is the main way AI agents interact with it — creating projects, managing files, publishing models, and collaborating. `forgecad studio <project-path> [project-path ...]` opens the installed local editor for users; `forgecad dev <project-path> [project-path ...]` is mainly for ForgeCAD source development.
17
17
 
18
+ Keep one long-running `forgecad studio <project-path> [project-path ...]` process open with every active project folder listed in its arguments; the user opens the single printed localhost port once, and AI agents should only create or edit files under those folders so the browser updates live without starting more servers.
19
+
18
20
  ### Authentication
19
21
 
20
22
  ```sh
@@ -5,7 +5,7 @@ Solve ForgeCAD CAD reconstruction benchmark or RL episodes in a prepared workspa
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-reconstruction-benchmark/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-reconstruction-benchmark/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -5,7 +5,7 @@ Run and interpret ForgeCAD inspection bundles for model verification. Use when a
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-render-inspect/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-render-inspect/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -67,7 +67,7 @@ Routing:
67
67
  Run the bundled helper:
68
68
 
69
69
  ```bash
70
- python skills/forgecad-render-inspect/summarize_manifest.py /tmp/model-inspect
70
+ python agent-skill-library/forgecad-render-inspect/summarize_manifest.py /tmp/model-inspect
71
71
  ```
72
72
 
73
73
  Use `jq` for targeted follow-up when needed:
@@ -93,6 +93,7 @@ Routing:
93
93
  | Question | Evidence command |
94
94
  |----------|------------------|
95
95
  | Quick visual sanity | `inspect visual image` |
96
+ | Kinematic rig, joints, axes, and links | `inspect visual rig` |
96
97
  | Object naming and identity | `inspect visual objects` |
97
98
  | Exact local section measurement, bore widths, rib thickness through a chosen line | `inspect section --ray ...` |
98
99
  | Hidden internals, cavities, pockets, screw paths, captured components | `inspect sections at|stack|sample` |
@@ -111,6 +112,7 @@ Explicit fast bundle:
111
112
 
112
113
  ```bash
113
114
  forgecad inspect visual objects model.forge.js --camera iso --size 700
115
+ forgecad inspect visual rig model.forge.js --camera iso --size 700
114
116
  forgecad inspect sections at model.forge.js --plane yz --offset 12.5 --size 700
115
117
  forgecad inspect sections stack model.forge.js --plane yz --every 1 --size 700
116
118
  forgecad inspect sections sample model.forge.js --count 5 --size 700
@@ -5,7 +5,7 @@ Turn a concrete ForgeCAD artifact, build brief, HLD, or existing model into buil
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad-visual-spec/SKILL.md` |
8
+ | Source | `agent-skill-library/forgecad-visual-spec/SKILL.md` |
9
9
 
10
10
  ---
11
11
 
@@ -5,7 +5,7 @@ ForgeCAD model authoring, editing, debugging, and execution guidance for .forge.
5
5
  | Field | Value |
6
6
  | --- | --- |
7
7
  | Installed by | `forgecad skill install` |
8
- | Source | `skills/forgecad/SKILL.md` |
8
+ | Source | Generated from `docs/permanent/` by `scripts/build-forgecad-skill.mjs` |
9
9
 
10
10
  ---
11
11
 
@@ -23,7 +23,7 @@ Author or modify ForgeCAD models, sketches, assemblies, and CLI workflows. Prefe
23
23
  6. Default to a concrete first pass — easy iteration beats speculative design review.
24
24
  7. If an existing model is broken, replace the weak structure rather than preserving bad architecture.
25
25
  8. Validate with `forgecad run <file>` (add `--debug-imports` for import chain issues, and pass `--backend manifold|occt|truck` when the backend matters).
26
- 9. For `jointsView()` animations, keep wrapped revolute tracks continuous across branch cuts; do not assume the viewport will auto-fix `-180/180` jumps.
26
+ 9. For moving assemblies, return the `Assembly` directly so runtime controls re-solve the link/edge kinematics model instead of stacking viewport-only transforms.
27
27
  10. Model the physical artifact, not an educational diagram. Do not add explanatory labels, arrows, legends, or text plaques unless the user explicitly asks for a presentation or teaching view. Product markings are allowed only when they would exist on the real object.
28
28
  11. Build the real closed CAD first. Do not bake cutaways, sectioned shells, permanently exploded layouts, or hidden-parts views into the default model just to show internals. Use viewer-only cut planes, `explodeView`, object hiding, transparency, or `inspect sections` after the artifact exists.
29
29
 
@@ -46,6 +46,7 @@ Load groups top-to-bottom, stopping when you have what the task needs.
46
46
  Execution model, colors, coordinate system, primitives, booleans, patterns, imports, parameters, topology, edge queries.
47
47
 
48
48
  - `docs/permanent/API/core/concepts.md`
49
+ - `docs/permanent/generated/runtime-names.md`
49
50
  - `docs/permanent/generated/core.md`
50
51
 
51
52
  #### 2. Static Assembly and Positioning (for any multi-part model)
@@ -95,7 +96,7 @@ Parametric bolts, nuts, washers, standard hardware, gears, pipes, and structural
95
96
 
96
97
  #### 9. Runtime Viewport APIs (for cut planes, exploded views, hiding, and animation playback)
97
98
 
98
- Viewer-only APIs such as cutPlane, explodeView, jointsView, and animation behavior.
99
+ Viewer-only APIs such as cutPlane, explodeView, render labels, comparison references, and runtime display behavior.
99
100
 
100
101
  - `docs/permanent/generated/viewport.md`
101
102