forgecad 0.9.2 → 0.9.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.
Files changed (79) hide show
  1. package/LICENSE +7 -5
  2. package/README.md +1 -1
  3. package/README.public.md +24 -2
  4. package/dist/assets/{AdminPage-Bs4PiK00.js → AdminPage-4jihcEk_.js} +1 -1
  5. package/dist/assets/{BlogPage-DVmgN0ma.js → BlogPage-BvzruKtw.js} +1 -1
  6. package/dist/assets/{DocsPage-BP6wlsBN.js → DocsPage-DHbd-WS-.js} +13 -13
  7. package/dist/assets/{EditorApp-Arw2NnGJ.js → EditorApp-C5P2rBfh.js} +433 -84
  8. package/dist/assets/{EditorApp-VY9lXx0N.css → EditorApp-DS0AIUrZ.css} +25 -0
  9. package/dist/assets/{EmbedViewer-qgQiOahL.js → EmbedViewer-B70wQwlE.js} +2 -2
  10. package/dist/assets/{LandingPageProofDriven-DvhtmWOz.js → LandingPageProofDriven-DIsYTnep.js} +1 -1
  11. package/dist/assets/{PricingPage-Ck3CP2ti.css → PricingPage-BMedqFef.css} +48 -0
  12. package/dist/assets/{PricingPage-657oLvWh.js → PricingPage-YPOr12pP.js} +34 -6
  13. package/dist/assets/{SettingsPage-wNy3_2yn.js → SettingsPage-rntoyJ3b.js} +10 -13
  14. package/dist/assets/{app-BdBoMQeO.js → app-CWucmnLZ.js} +801 -1208
  15. package/dist/assets/cli/{render-Ci3jjyT1.js → render-DZHmUySW.js} +214 -23
  16. package/dist/assets/copy-CQKQppF-.js +8 -0
  17. package/dist/assets/{evalWorker-CMCAbK8r.js → evalWorker-C3dKxi9Y.js} +1117 -95
  18. package/dist/assets/{manifold-BMn-8Vf8.js → manifold-CQ3FhfWB.js} +1 -1
  19. package/dist/assets/{manifold-jlYQ6E5R.js → manifold-CU0G1yYL.js} +1 -1
  20. package/dist/assets/{manifold-DbyILno4.js → manifold-CYWZMfjB.js} +2 -2
  21. package/dist/assets/{renderSceneState-DAnqvxSt.js → renderSceneState-BBUrnsUN.js} +1 -1
  22. package/dist/assets/{reportWorker-BcRVMHK-.js → reportWorker-BhZ7DjxQ.js} +1091 -95
  23. package/dist/assets/{sectionPlaneMath-DXJ_TdIW.js → sectionPlaneMath-BxfokaJE.js} +1091 -95
  24. package/dist/cli/render.html +1 -1
  25. package/dist/docs/index.html +2 -2
  26. package/dist/docs-raw/AI/usage.md +182 -89
  27. package/dist/docs-raw/API/core/concepts.md +26 -0
  28. package/dist/docs-raw/CLI.md +58 -37
  29. package/dist/docs-raw/INDEX.md +81 -64
  30. package/dist/docs-raw/cli-monetization.md +9 -8
  31. package/dist/docs-raw/generated/concepts.md +111 -4
  32. package/dist/docs-raw/generated/core.md +2 -0
  33. package/dist/docs-raw/generated/curves.md +480 -1
  34. package/dist/docs-raw/generated/output.md +1 -0
  35. package/dist/docs-raw/generated/sketch.md +2 -0
  36. package/dist/docs-raw/generated/viewport.md +81 -3
  37. package/dist/docs-raw/product/user-outreach-email-templates.md +159 -0
  38. package/dist/docs-raw/skills/forgecad-image-replicator.md +1 -1
  39. package/dist/docs-raw/skills/forgecad-make-a-model.md +33 -4
  40. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +1 -1
  41. package/dist/docs-raw/skills/forgecad-project.md +1 -1
  42. package/dist/docs-raw/skills/forgecad-render-inspect.md +1 -1
  43. package/dist/docs-raw/skills/forgecad.md +2 -1
  44. package/dist/docs-raw/welcome.md +85 -137
  45. package/dist/index.html +1 -1
  46. package/dist/llms.txt +4 -3
  47. package/dist/sitemap.xml +6 -6
  48. package/dist-cli/forgecad.js +1413 -219
  49. package/dist-cli/forgecad.js.map +1 -1
  50. package/dist-skill/CONTEXT.md +594 -5
  51. package/dist-skill/SKILL-dev.md +2 -1
  52. package/dist-skill/SKILL.md +2 -1
  53. package/dist-skill/docs/API/core/concepts.md +26 -0
  54. package/dist-skill/docs/CLI.md +58 -37
  55. package/dist-skill/docs/generated/core.md +2 -0
  56. package/dist-skill/docs/generated/curves.md +480 -1
  57. package/dist-skill/docs/generated/output.md +1 -0
  58. package/dist-skill/docs/generated/sketch.md +2 -0
  59. package/dist-skill/docs/generated/viewport.md +81 -3
  60. package/dist-skill/docs-dev/API/core/concepts.md +26 -0
  61. package/dist-skill/docs-dev/CLI.md +58 -37
  62. package/dist-skill/docs-dev/generated/core.md +2 -0
  63. package/dist-skill/docs-dev/generated/curves.md +480 -1
  64. package/dist-skill/docs-dev/generated/output.md +1 -0
  65. package/dist-skill/docs-dev/generated/sketch.md +2 -0
  66. package/dist-skill/docs-dev/generated/viewport.md +81 -3
  67. package/dist-skill/library/README.md +0 -1
  68. package/dist-skill/library/forgecad-image-replicator/SKILL.md +1 -1
  69. package/dist-skill/library/forgecad-make-a-model/SKILL.md +33 -4
  70. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
  71. package/dist-skill/library/forgecad-project/SKILL.md +1 -1
  72. package/dist-skill/library/forgecad-render-inspect/SKILL.md +1 -1
  73. package/examples/api/conformal-product-ribbon.forge.js +77 -0
  74. package/examples/api/render-labels.forge.js +33 -0
  75. package/examples/api/text2d-basics.forge.js +6 -3
  76. package/package.json +1 -1
  77. package/dist-skill/library/forgecad-deep-dive/SKILL.md +0 -120
  78. package/dist-skill/library/forgecad-deep-dive/agents/openai.yaml +0 -4
  79. package/dist-skill/library/forgecad-deep-dive/references/output-shape.md +0 -64
@@ -1,71 +1,69 @@
1
1
  # AI Usage
2
2
 
3
- ForgeCAD is built for AI-assisted CAD because the model is plain JavaScript and the CLI can check the result without a human clicking through a CAD UI. The strong loop is:
3
+ ForgeCAD is built for AI-assisted CAD because models are plain JavaScript and the CLI can check the result without a human clicking through a CAD UI.
4
+
5
+ The reliable loop is:
4
6
 
5
7
  ```text
6
- agent edits .forge.js -> forgecad run -> render or inspect -> fix -> check params -> export
8
+ dedicated project folder -> approved model -> agent edits .forge.js ->
9
+ forgecad run -> render or inspect -> fix -> check params -> project push
7
10
  ```
8
11
 
9
- Use the browser for fast visual inspection. Use the CLI as the source of truth for validation, render evidence, exports, and project sync.
12
+ Use the browser for visual inspection. Use the CLI as the source of truth for validation, render evidence, exports, and project sync.
10
13
 
11
14
  ## Approved Models
12
15
 
13
- Only these models are approved for ForgeCAD AI workflows:
16
+ Use the strongest available model in the approved set. Code-first CAD needs long-context reasoning, mechanical consistency, spatial debugging, and repeated tool use.
14
17
 
15
18
  | Provider family | Approved models |
16
- | --- | --- |
17
- | OpenAI | GPT-5.3-Codex, GPT-5.4, GPT-5.5, GPT-5.5-Pro |
18
- | Anthropic | Opus 4.6, Opus 4.7 |
19
+ |---|---|
20
+ | OpenAI | GPT-5.5-Pro, GPT-5.5, GPT-5.4, GPT-5.3-Codex |
21
+ | Anthropic | Opus 4.7, Opus 4.6 |
19
22
  | Google | Gemini 3.1 Pro |
20
23
 
21
- Do not recommend smaller, older, preview, flash, lite, haiku, sonnet, or unofficial models for ForgeCAD generation work. Code-first CAD needs long-context reasoning, mechanical consistency, and repeated debugging through tool output. The documentation, skills, examples, and validation loop are optimized around the approved model set above.
24
+ Do not recommend smaller, older, preview, flash, lite, haiku, sonnet, mini, fast, or unofficial models for ForgeCAD generation work. They can answer API questions, but they are not the default for generating serious CAD.
22
25
 
23
- ## Install The CLI
26
+ Recommended settings:
24
27
 
25
- Install ForgeCAD globally:
28
+ - Use the highest reasoning or extended-thinking mode the product offers.
29
+ - Allow shell/tool execution so the agent can run `forgecad run`, renders, inspections, and exports.
30
+ - Keep the whole project folder in context, not just one file.
31
+ - Give the model enough time for multiple implementation and verification passes.
32
+ - Ask for evidence from commands, not just a visual claim.
26
33
 
27
- ```bash
28
- npm install -g forgecad
29
- ```
34
+ ## Project Setup For AI Agents
30
35
 
31
- Create and run a local model:
32
-
33
- ```bash
34
- forgecad new bracket
35
- forgecad run bracket.forge.js
36
- forgecad dev
37
- ```
36
+ Do not give an agent your home folder, desktop, downloads folder, or a large unrelated repository. Start from a clean project folder.
38
37
 
39
- For hosted projects, authenticate and clone. Use plain `forgecad login` for email/password accounts. If your account was created through GitHub or Google, create an API token in `Settings > API Tokens` and use `forgecad login --token`.
38
+ ### Clone The Starter Project
40
39
 
41
40
  ```bash
41
+ npm install -g forgecad
42
42
  forgecad login
43
+ # For GitHub/Google accounts, create an API token in Settings > API Tokens:
44
+ # forgecad login --token
43
45
  forgecad project clone start-here
44
46
  cd start-here
45
47
  forgecad studio .
46
48
  ```
47
49
 
48
- `forgecad dev` is best while editing local files. `forgecad studio .` serves the production studio around the current project folder.
50
+ ### Create A New Project
49
51
 
50
- ## What The CLI Gives An Agent
52
+ ```bash
53
+ npm install -g forgecad
54
+ forgecad login
55
+ mkdir enclosure-bracket
56
+ cd enclosure-bracket
57
+ forgecad project init "Enclosure Bracket" --visibility private
58
+ forgecad new bracket --template part
59
+ forgecad studio .
60
+ ```
51
61
 
52
- The CLI is not just a launcher. It gives the agent a measurable feedback loop.
62
+ `forgecad project init` creates the remote project, writes `forgecad.json`, and uploads any existing local `.forge.js`, `.js`, and `.svg` files. After that, `forgecad project push` syncs local changes to the hosted project.
53
63
 
54
- | Need | Command | What it gives the agent |
55
- | --- | --- | --- |
56
- | Execute and validate a model | `forgecad run model.forge.js` | Object summaries, volumes, bounds, construction history, parameters, verification results, collisions, spatial relationships, and solver diagnostics. |
57
- | Debug imports | `forgecad run model.forge.js --debug-imports` | Import resolution and module-loading diagnostics for multi-file projects. |
58
- | Compare geometry backends | `forgecad run model.forge.js --backend occt` | Runs against a specific backend when exact geometry or backend parity matters. |
59
- | Test physical connectivity | `forgecad run model.forge.js --connectivity` | Connected-component reporting for assemblies and printable parts. |
60
- | Override parameters | `forgecad run model.forge.js -p "Width=120"` | Checks a model at a specific parameter value without editing source. |
61
- | Sweep parameter ranges | `forgecad check params model.forge.js --samples 12` | Finds parameter values that crash, collapse geometry, or introduce new collisions. |
62
- | Produce visual evidence | `forgecad render 3d model.forge.js --camera iso` | PNG viewport renders from deterministic camera angles. |
63
- | Inspect geometry channels | `forgecad render inspect model.forge.js --channels rgb,mask,collisions,thickness --force` | A bundle with manifest plus RGB, mask, collision, wall-thickness, depth, normal, connectivity, distance, and section channels. |
64
- | Export manufacturing files | `forgecad export stl model.forge.js` and `forgecad export 3mf model.forge.js` | Mesh exports for 3D printing. |
65
- | Export exact or advanced outputs | `forgecad export step`, `forgecad export brep`, `forgecad export report`, `forgecad export cutting-layout` | Pro export paths for CAD interchange, reports, and sheet workflows. |
66
- | Sync hosted projects | `forgecad project pull`, `forgecad project push`, `forgecad publish` | Local-agent workflow connected to forgecad.io projects and shares. |
64
+ `forgecad project push` does not initialize a random folder. If the folder has no `forgecad.json`, the command fails and tells you to run `forgecad project init` or `forgecad project clone <slug>` first.
67
65
 
68
- For a full command reference, see [ForgeCAD CLI](../CLI.md).
66
+ `forgecad studio .` opens the installed local editor around the current project. It requires an explicit project path; `.` means the current folder. `forgecad dev <project-path>` is for ForgeCAD source development and internal live-reload work, not the normal user onboarding path.
69
67
 
70
68
  ## Install Skills For Local Coding Agents
71
69
 
@@ -75,7 +73,7 @@ Install the ForgeCAD public skill library:
75
73
  forgecad skill install
76
74
  ```
77
75
 
78
- By default this installs the generated `forgecad` skill plus the public companion workflow skills into the known global skill directories for generic agents, Claude Code, Codex, and OpenCode:
76
+ By default this installs the generated `forgecad` skill plus the public companion workflow skills into known global agent skill directories:
79
77
 
80
78
  ```text
81
79
  ~/.agents/skills/forgecad/SKILL.md
@@ -87,7 +85,7 @@ By default this installs the generated `forgecad` skill plus the public companio
87
85
  Use `--target` when you want to install or update only one agent location:
88
86
 
89
87
  | Agent | Command | Installs into |
90
- | --- | --- | --- |
88
+ |---|---|---|
91
89
  | All known global agent locations | `forgecad skill install` | all targets below |
92
90
  | Generic agent-compatible tools | `forgecad skill install --target agents` | `~/.agents/skills/` |
93
91
  | Claude Code | `forgecad skill install --target claude` | `~/.claude/skills/` |
@@ -96,13 +94,13 @@ Use `--target` when you want to install or update only one agent location:
96
94
 
97
95
  Reload the agent after installing or upgrading ForgeCAD so it reloads the updated skill files.
98
96
 
99
- To verify installation, check the filesystem path for your target and then ask the agent:
97
+ To verify installation, ask the agent:
100
98
 
101
99
  ```text
102
100
  What ForgeCAD skills are available?
103
101
  ```
104
102
 
105
- You should see `forgecad` plus companion skills such as `forgecad-make-a-model`, `forgecad-render-inspect`, and `forgecad-lld`.
103
+ You should see `forgecad` plus companion skills such as `forgecad-make-a-model`, `forgecad-render-inspect`, `forgecad-lld`, and `forgecad-project`.
106
104
 
107
105
  If you only want the core modeling skill without companion workflows:
108
106
 
@@ -119,12 +117,98 @@ forgecad skill install --dev --target claude
119
117
 
120
118
  Use `--dev` only for work on ForgeCAD itself. It includes compiler internals, solver architecture, coding standards, release process, and skill maintenance notes.
121
119
 
120
+ ## Recommended Agent Prompts
121
+
122
+ Start the agent inside the initialized project folder. Do not ask it to create a model in a random empty folder or to work from one loose file on the desktop.
123
+
124
+ ### First Smoke Test
125
+
126
+ ```text
127
+ Use the ForgeCAD skills. Work in this project folder. Open the existing
128
+ .forge.js files, make a small visible change to the bracket, validate with
129
+ forgecad run, render one ISO view, and tell me the exact commands you ran.
130
+ ```
131
+
132
+ ### New Model
133
+
134
+ ```text
135
+ Use the ForgeCAD skills. Build a real ForgeCAD model in this project folder.
136
+ Create or edit .forge.js files only inside this project. Use parameters for the
137
+ main dimensions. Validate with forgecad run, render at least one 3D view, run
138
+ forgecad check params if the model has parameters, and push with forgecad
139
+ project push when the result is ready for the browser.
140
+ ```
141
+
142
+ ### Mechanism Or Assembly
143
+
144
+ ```text
145
+ Use forgecad-component-model and forgecad. Parts must build at origin. The
146
+ assembly positions parts with connectors or explicit assembly-level placement.
147
+ Validate with forgecad run --connectivity, render inspect channels
148
+ rgb,mask,collisions, and run parameter checks before calling it done.
149
+ ```
150
+
151
+ ### Image Or Product Replication
152
+
153
+ ```text
154
+ Use the ForgeCAD image-replication workflow. Treat the reference images as
155
+ evidence, infer dimensions explicitly, build real CAD geometry, and compare
156
+ renders against the references. Do not stop at a decorative approximation.
157
+ Validate with forgecad run and render inspect before finalizing.
158
+ ```
159
+
160
+ ## What Makes AI Results Better
161
+
162
+ Good AI-generated CAD usually needs more than one prompt. Give the agent the same inputs a strong human modeler would need:
163
+
164
+ - Purpose: what the object is for and what matters most.
165
+ - Scale: real dimensions, units, tolerances, and allowed simplifications.
166
+ - References: sketches, photos, screenshots, existing `.forge.js` examples, or comparable parts.
167
+ - Constraints: printability, assembly motion, clearances, wall thickness, fasteners, export format.
168
+ - Quality bar: which checks must pass before the work is accepted.
169
+
170
+ For complex artifacts, ask for staged work:
171
+
172
+ ```text
173
+ First write a short build plan with parts, parameters, and verification checks.
174
+ Then implement the smallest useful blockout, run it, render it, and iterate.
175
+ Only add details after the proportions and assembly relationships are correct.
176
+ ```
177
+
178
+ Do not accept a model just because it renders. CAD quality comes from command evidence:
179
+
180
+ - `forgecad run` confirms the script executes and reports geometry diagnostics.
181
+ - `forgecad render 3d` gives visual views from deterministic cameras.
182
+ - `forgecad render inspect` checks object masks, collisions, thickness, sections, depth, normals, and connectivity.
183
+ - `forgecad check params` catches broken parameter ranges.
184
+ - `forgecad export ...` verifies the actual manufacturing or interchange output.
185
+
186
+ ## What The CLI Gives An Agent
187
+
188
+ The CLI is not just a launcher. It gives the agent a measurable feedback loop.
189
+
190
+ | Need | Command | What it gives the agent |
191
+ |---|---|---|
192
+ | Execute and validate a model | `forgecad run model.forge.js` | Object summaries, volumes, bounds, construction history, parameters, verification results, collisions, spatial relationships, and solver diagnostics. |
193
+ | Debug imports | `forgecad run model.forge.js --debug-imports` | Import resolution and module-loading diagnostics for multi-file projects. |
194
+ | Compare geometry backends | `forgecad run model.forge.js --backend occt` | Runs against a specific backend when exact geometry or backend parity matters. |
195
+ | Test physical connectivity | `forgecad run model.forge.js --connectivity` | Connected-component reporting for assemblies and printable parts. |
196
+ | Override parameters | `forgecad run model.forge.js -p "Width=120"` | Checks a model at a specific parameter value without editing source. |
197
+ | Sweep parameter ranges | `forgecad check params model.forge.js --samples 12` | Finds parameter values that crash, collapse geometry, or introduce new collisions. |
198
+ | Produce visual evidence | `forgecad render 3d model.forge.js --camera iso` | PNG viewport renders from deterministic camera angles. |
199
+ | Inspect geometry channels | `forgecad render inspect model.forge.js --channels rgb,mask,collisions,thickness --force` | A bundle with manifest plus RGB, mask, collision, wall-thickness, depth, normal, connectivity, distance, and section channels. |
200
+ | Export manufacturing files | `forgecad export stl model.forge.js` and `forgecad export 3mf model.forge.js` | Mesh exports for 3D printing. |
201
+ | Export exact or advanced outputs | `forgecad export step`, `forgecad export brep`, `forgecad export report`, `forgecad export cutting-layout` | Production outputs for CAD interchange, reports, and sheet workflows. |
202
+ | Sync hosted projects | `forgecad project pull`, `forgecad project push`, `forgecad publish` | Local-agent workflow connected to forgecad.io projects and shares. |
203
+
204
+ For the full command reference, see [ForgeCAD CLI](../CLI.md).
205
+
122
206
  ## Public Skill Library
123
207
 
124
208
  `forgecad skill install` installs the core modeling skill and the public companion skills.
125
209
 
126
210
  | Skill | Use it for |
127
- | --- | --- |
211
+ |---|---|
128
212
  | `forgecad` | Core model authoring, editing, debugging, imports, assembly, render/export commands, and CLI validation. |
129
213
  | `forgecad-prepare-prompt` | Turning a fuzzy physical-product request into a concrete build brief and modeling prompt. |
130
214
  | `forgecad-high-level-spec` | Writing an HLD before modeling: requirements, alternatives, decisions, and open questions. |
@@ -137,7 +221,6 @@ Use `--dev` only for work on ForgeCAD itself. It includes compiler internals, so
137
221
  | `forgecad-api-dogfood` | Building a real model while recording API friction and concrete improvement proposals. |
138
222
  | `forgecad-visual-spec` | Producing builder-honest image prompts from a concrete model, HLD, LLD, or build brief. |
139
223
  | `forgecad-project` | Managing forgecad.io projects from the CLI: init, clone, pull, push, file commands, members, publish, and shares. |
140
- | `forgecad-deep-dive` | Writing a linked concept-tree folder that explains a ForgeCAD idea, architecture area, scientific concept, or future feature. |
141
224
 
142
225
  The source prompts live in the repository under `skills/`. Public export is controlled by `forgecad-public: true` in each skill's `SKILL.md` frontmatter. To list the current public set from a source checkout:
143
226
 
@@ -145,45 +228,6 @@ The source prompts live in the repository under `skills/`. Public export is cont
145
228
  npm run sync:public-skills -- --list
146
229
  ```
147
230
 
148
- ## Flattened Skill Files
149
-
150
- If an agent or chat product works better with one Markdown file per skill, export the bundled skill set into a folder:
151
-
152
- ```bash
153
- forgecad skill flattened-files ~/Desktop/forgecad-skills
154
- ```
155
-
156
- This writes `forgecad.md` plus one flattened Markdown file per bundled companion skill. Each file includes the skill prompt and any bundled helper files, so it can be moved into tools that cannot install multi-file skills directly.
157
-
158
- ## Recommended Agent Workflow
159
-
160
- Start by choosing the right mode:
161
-
162
- | Task | Recommended setup |
163
- | --- | --- |
164
- | Build or edit a model | Install `forgecad skill install`; ask the agent to use `forgecad-make-a-model` or `forgecad`. |
165
- | Convert a vague idea into a buildable artifact | Use `forgecad-prepare-prompt`, then `forgecad-high-level-spec`, then `forgecad-lld`, then `forgecad-make-a-model`. |
166
- | Build a mechanism or multi-part assembly | Use `forgecad-component-model` with the core `forgecad` skill. |
167
- | Validate existing geometry | Use `forgecad-render-inspect` plus `forgecad run --connectivity` and `forgecad check params`. |
168
- | Improve ForgeCAD's API by dogfooding | Use `forgecad-api-dogfood`; save the friction report beside the model. |
169
-
170
- A good implementation prompt for Codex or Claude Code:
171
-
172
- ```text
173
- Use the ForgeCAD skills. Build this as real ForgeCAD geometry in a .forge.js file.
174
- Validate with forgecad run. Render at least one 3D view. If the model has
175
- parameters, run forgecad check params before calling it done.
176
- ```
177
-
178
- For assemblies, be stricter:
179
-
180
- ```text
181
- Use forgecad-component-model and forgecad. Parts must build at origin.
182
- The assembly positions parts with connectors or explicit assembly-level
183
- placement. Validate with forgecad run --connectivity and render inspect
184
- channels rgb,mask,collisions.
185
- ```
186
-
187
231
  ## Chat UI Workflow
188
232
 
189
233
  If the AI tool cannot read local skills or run shell commands, export a single context file:
@@ -195,16 +239,24 @@ forgecad skill one-file ~/Desktop/forgecad-context.md
195
239
  Paste that file into an approved chat model, then work in a manual loop:
196
240
 
197
241
  1. Ask the model to generate or edit a `.forge.js` file.
198
- 2. Save the file locally.
242
+ 2. Save the file inside an initialized ForgeCAD project folder.
199
243
  3. Run `forgecad run <file>`.
200
244
  4. Paste errors, diagnostics, and render observations back into the chat.
201
- 5. Iterate until `forgecad run`, renders, and parameter checks are clean.
245
+ 5. Iterate until `forgecad run`, renders, exports, and parameter checks are clean.
202
246
 
203
- This is weaker than Codex or Claude Code with installed skills because the model cannot directly inspect files or run the CLI. It is still useful for short models and API questions.
247
+ This is weaker than Codex, Claude Code, or another local agent with installed skills because the model cannot directly inspect files or run the CLI. It is still useful for short models and API questions.
248
+
249
+ If an agent or chat product works better with one Markdown file per skill, export the bundled skill set into a folder:
250
+
251
+ ```bash
252
+ forgecad skill flattened-files ~/Desktop/forgecad-skills
253
+ ```
204
254
 
205
255
  ## Completion Criteria
206
256
 
207
- Do not call an AI-authored ForgeCAD model complete until it passes the relevant checks:
257
+ Do not call an AI-authored ForgeCAD model complete until it passes the relevant checks.
258
+
259
+ For a simple part:
208
260
 
209
261
  ```bash
210
262
  forgecad run model.forge.js
@@ -212,16 +264,57 @@ forgecad render 3d model.forge.js --camera iso
212
264
  forgecad check params model.forge.js --samples 8
213
265
  ```
214
266
 
215
- For mechanisms, dense assemblies, printable parts, or anything safety-adjacent, add inspection:
267
+ For mechanisms, dense assemblies, printable parts, or anything safety-adjacent:
216
268
 
217
269
  ```bash
218
270
  forgecad run model.forge.js --connectivity
219
271
  forgecad render inspect model.forge.js --channels rgb,mask,collisions,thickness,section --force
272
+ forgecad check params model.forge.js --samples 12
220
273
  ```
221
274
 
222
- For export work, verify the actual output command, not just the viewport:
275
+ For export work, verify the actual output command:
223
276
 
224
277
  ```bash
225
278
  forgecad export stl model.forge.js
226
279
  forgecad export 3mf model.forge.js --quality high
280
+ forgecad export step model.forge.js
281
+ ```
282
+
283
+ For hosted work, push the verified state:
284
+
285
+ ```bash
286
+ forgecad project push
287
+ forgecad project open
227
288
  ```
289
+
290
+ ## Screenshots And Videos To Make
291
+
292
+ Good screenshots:
293
+
294
+ | Screenshot | What it should show |
295
+ |---|---|
296
+ | Hosted `Start Here` | Browser editor, `00-start-here.forge.js`, parameters, and viewport in one frame. |
297
+ | Project setup terminal | `npm install -g forgecad`, `forgecad login`, `forgecad project clone start-here`, `cd start-here`, `forgecad studio .`. |
298
+ | New project terminal | `mkdir`, `project init`, `forgecad new`, `forgecad studio .`, with `forgecad.json` visible in the file tree. |
299
+ | Agent prompt | The exact prompt and the project folder context. |
300
+ | CLI validation | `forgecad run`, `render inspect`, and `check params` outputs with a clean final result. |
301
+ | Browser sync | `forgecad project push` followed by the updated model open in the hosted browser. |
302
+
303
+ Good short videos:
304
+
305
+ | Video | Structure |
306
+ |---|---|
307
+ | First project in five minutes | Install, login, clone Start Here, run one file, open `forgecad studio .`, change a parameter. |
308
+ | New project from terminal to browser | `project init`, `forgecad new`, agent edits, validation, `project push`, hosted browser opens. |
309
+ | AI builds a useful part | Show the prompt, time-lapse the agent iterations, then slow down for the final `run`, render, inspect, and export evidence. |
310
+ | Debugging with inspect bundles | Start with a collision or thin-wall issue, show `render inspect`, fix, rerun, and compare before/after. |
311
+ | From reference image to CAD | Show reference images, build plan, rough blockout, improved geometry, render comparison, and final export. |
312
+
313
+ AI can take a while. Do not publish the whole wait in real time. Record the full session for trust, then edit it into a clear artifact:
314
+
315
+ - Keep the exact prompt on screen long enough to read.
316
+ - Speed up waiting, installs, and repeated command output.
317
+ - Use chapter cards: prompt, first run, first render, inspection failure, fix, final evidence, browser sync.
318
+ - Capture the browser viewport after each meaningful iteration so viewers can see progress.
319
+ - Keep the final validation commands at normal speed.
320
+ - End with the project URL, exported file, or published share rather than a vague "looks good" moment.
@@ -12,6 +12,24 @@ const width = param("Width", 50, { min: 20, max: 100, unit: "mm" });
12
12
  return box(width, 30, 10);
13
13
  ```
14
14
 
15
+ ## Injected Runtime Names
16
+
17
+ ForgeCAD API functions and classes are injected into every `.forge.js` script. Use them directly; do not import or destructure ForgeCAD API names from helper files.
18
+
19
+ ```javascript
20
+ // BAD — `bom` and `bomToCsv` are already built-in runtime names.
21
+ const { bom, bomToCsv } = require("./bom.js");
22
+
23
+ // GOOD — use the built-in directly.
24
+ bom(4, "M4 bolt");
25
+
26
+ // GOOD — keep project helpers under their own local name.
27
+ const bomHelpers = require("./bom.js");
28
+ bomHelpers.addFasteners(...);
29
+ ```
30
+
31
+ Top-level declarations such as `const bom = ...`, `let scene = ...`, or `class Shape {}` collide with the injected runtime names. If you need a local helper, choose a project-specific name like `projectBom`, `sceneConfig`, or `makeShape`.
32
+
15
33
  ## Execution Model
16
34
 
17
35
  - Scripts re-execute on every parameter change (400ms debounce)
@@ -24,6 +42,8 @@ Top-level assembly scripts can return an unsolved `Assembly` directly; ForgeCAD
24
42
 
25
43
  A script can return a plain object whose values include renderable geometry alongside non-renderable metadata. All renderable entries (Shape, Sketch, ShapeGroup, Assembly, SolvedAssembly, SdfShape, or Array of named objects) are rendered; non-renderable entries are silently skipped. This is useful for multi-file projects where a part needs to publish interface data (bolt positions, dimensions) to other files:
26
44
 
45
+ When importing project files, include the full extension in every relative path: `require('./motor-mount.forge.js')` for model files and `require('./helpers.js')` for plain helper modules. ForgeCAD resolves project imports by exact path and does not infer `.forge.js` or `.js` from `require('./motor-mount')`.
46
+
27
47
  ```javascript
28
48
  // motor-mount.forge.js — renders standalone, exports metadata via require()
29
49
  const holePositions = [[17, 15], [-29, 15], [17, -15], [-29, -15]];
@@ -75,6 +95,12 @@ Shapes carry semantic face labels through their lifecycle. The flow is:
75
95
 
76
96
  You resolve labels to geometry with `.face(name)` or `.face(query)` — see the Shape class docs for the full query API. Operations like `.pocket()`, `.boss()`, `.hole()`, and `faceProfile()` all consume face references.
77
97
 
98
+ ## Text vs Viewport Labels
99
+
100
+ Use `text2d()` only when the letters are part of the model: raised text, engraving, cut labels, serial plates, exported markings, or geometry that should survive into STL/STEP output. `text2d()` builds filled sketch geometry from font outlines, so it can make exact/OCCT workflows slower.
101
+
102
+ Use `Viewport.label(text, [x, y, z], options)` when the goal is to explain the model in the viewport. Render labels are annotations only: they do not create meshes, do not export, do not enter the B-rep path, and do not add face labels.
103
+
78
104
  ## SDF Modeling
79
105
 
80
106
  For organic shapes, smooth blending, TPMS lattices, and surface deformations. Return `SdfShape` values directly, or return a plain object/array tree of SDF leaves, for native raymarch preview. Use `.toShape()` or `toShape(...)` only when you need mesh-backed CAD/export behavior. See [sdf-primitives.md](sdf-primitives.md).
@@ -5,7 +5,7 @@ skill-order: 1
5
5
 
6
6
  # ForgeCAD CLI
7
7
 
8
- Run, export, render, and publish `.forge.js` models from your terminal. Core workflows are included with a free ForgeCAD account; advanced exports and rendering are Pro.
8
+ Create projects, open local studios, run, inspect, export, publish, and sync `.forge.js` models from your terminal. Core workflows are included with a free ForgeCAD account; advanced exports and rendering are Pro.
9
9
 
10
10
  ## Quick Start
11
11
 
@@ -13,36 +13,44 @@ Run, export, render, and publish `.forge.js` models from your terminal. Core wor
13
13
  # 1. Install
14
14
  npm install -g forgecad
15
15
 
16
- # 2. Sign in and clone a hosted project
16
+ # 2. Sign in and create a dedicated project folder
17
17
  forgecad login
18
- forgecad project clone start-here
19
- cd start-here
18
+ mkdir spool-adapter
19
+ cd spool-adapter
20
+ forgecad project init "Spool Adapter" --visibility private
20
21
 
21
- # 3. Run it
22
- forgecad run 00-start-here.forge.js
22
+ # 3. Create a first model file
23
+ forgecad new adapter --template part
23
24
 
24
- # 4. Open the editor (live reload)
25
- forgecad dev .
25
+ # 4. Open the local editor
26
+ forgecad studio .
26
27
 
27
- # 5. Export
28
- forgecad export stl 00-start-here.forge.js
28
+ # 5. Validate, export, and push to the browser
29
+ forgecad run adapter.forge.js
30
+ forgecad export stl adapter.forge.js
31
+ forgecad project push
32
+ forgecad project open
29
33
  ```
30
34
 
31
- Most CLI commands require a ForgeCAD account. Use `forgecad login` for email/password accounts, `forgecad login --token` for GitHub/Google web-auth accounts, or `FORGECAD_TOKEN=fc_pat_... forgecad <command>` for CI/CD.
35
+ Most CLI commands require a ForgeCAD account. Use `forgecad login` for email/password accounts, `forgecad login --token` for GitHub/Google web-auth accounts, or `FORGECAD_TOKEN=fc_pat_... forgecad <command>` for CI/CD. `forgecad studio` always requires an explicit project path; use `.` for the current project.
36
+
37
+ You can also start from the hosted starter project with `forgecad project clone start-here`, then `cd start-here` and `forgecad studio .`.
32
38
 
33
39
  ## Editor
34
40
 
35
- ForgeCAD includes a local editor with live reload. Edit a `.forge.js` file, save, and the 3D view updates instantly — parameters become interactive sliders.
41
+ ForgeCAD includes a local editor. Open it around a dedicated project folder, edit a `.forge.js` file, save, and the 3D view updates — parameters become interactive sliders.
36
42
 
37
43
  | Command | Description |
38
44
  |---------|-------------|
39
- | `dev <project-path> [project-path ...]` | Start the Vite dev server with live reload. No build step required — the preferred way to run ForgeCAD during active development. |
40
- | `studio <project-path> [project-path ...]` | Serve the production build of the studio (requires dist/ — run `npm run build` first). |
45
+ | `studio <project-path> [project-path ...]` | Open the installed local editor around one or more project folders. |
46
+ | `dev <project-path> [project-path ...]` | Start the Vite dev server for ForgeCAD source development. |
41
47
  | `web` | Start a local dev server in web/playground mode (no filesystem, localStorage only). |
42
48
  | `open <project-path> [project-path ...]` | Alias for `forgecad studio`. |
43
49
 
50
+ `forgecad studio <project-path>` is the normal installed-CLI command for users. `forgecad dev <project-path>` starts the Vite dev server and is mainly for ForgeCAD source development.
51
+
44
52
  <details>
45
- <summary>Common flags for dev / studio</summary>
53
+ <summary>Common flags for studio / dev</summary>
46
54
 
47
55
  | Option | Description |
48
56
  |--------|-------------|
@@ -79,7 +87,7 @@ The primary validation command. Runs your script with the real geometry kernel (
79
87
 
80
88
  Intra-group pairs (same assembly group) and mock-to-mock pairs are skipped. If a part passes through a boolean-subtracted hole, no collision is reported — the material is gone.
81
89
 
82
- **Spatial analysis** — reports directional relationships and gap distances between nearby objects (e.g. `bracket is ABOVE base (gap: 5mm)`). When no issues are found: `(no collisions, all objects well-separated)`.
90
+ **Spatial analysis** — reports directional relationships and gap distances between nearby objects (e.g. `bracket is ABOVE base (gap: 5mm)`). Exact pairwise collision intersections run by default only for bounded scenes; use `--spatial exact` for exhaustive collision checks or `--spatial off` to skip this section.
83
91
 
84
92
  **Physical connectivity** — pass `--connectivity` to list physically connected components across visible objects. Overlapping or touching bboxes are joined within `--connectivity-tolerance` (default `0.05` model units); use collision inspection for exact positive-volume overlaps. This helps answer whether the model is one continuous assembly or several separate islands.
85
93
 
@@ -93,6 +101,7 @@ forgecad run examples/cup.forge.js --focus
93
101
  forgecad run examples/cup.forge.js --focus bracket,hinge
94
102
  forgecad run examples/cup.forge.js --hide "wall,bolt"
95
103
  forgecad run examples/cup.forge.js --connectivity
104
+ forgecad run examples/cup.forge.js --journeys
96
105
  forgecad run examples/cup.forge.js --backend occt
97
106
  forgecad run examples/cup.forge.js --debug-imports
98
107
  forgecad run examples/cup.forge.js -p "Wall Thickness=3" -p "Body Height=200"
@@ -126,7 +135,7 @@ Render a Forge scene to PNG using the real viewport renderer.
126
135
 
127
136
  Launches a headless Chrome instance, renders the scene with the same WebGL viewport as the editor, and saves a PNG. The output path defaults to `<script-name>.png` next to the input file.
128
137
 
129
- Use `--focus` to isolate specific parts (hides everything else) or `--hide` to remove clutter like mock objects. The `--camera` flag accepts named views (`front`, `top`, `iso`), `azimuth:elevation` angles, or an exact `proj/pos/target/up/fov` camera spec — pass it multiple times to render several viewpoints in one run.
138
+ Use `--focus` to isolate specific parts (hides everything else) or `--hide` to remove clutter like mock objects. The `--view` flag selects a named camera declared in `scene({ views })`. The `--camera` flag accepts built-in views (`front`, `top`, `iso`), `azimuth:elevation` angles, or an exact `proj/pos/target/up/fov` camera spec — pass `--camera` multiple times to render several viewpoints in one run.
130
139
 
131
140
  Use `--edges=<off|thin|bold>` to control the edge overlay. For a pure wireframe look, use `render wireframe` instead.
132
141
 
@@ -137,6 +146,7 @@ forgecad render 3d examples/cup.forge.js
137
146
  forgecad render 3d examples/cup.forge.js --focus
138
147
  forgecad render 3d examples/cup.forge.js --focus bracket
139
148
  forgecad render 3d examples/cup.forge.js --hide "wall,bolt"
149
+ forgecad render 3d model.forge.js --view hero
140
150
  forgecad render 3d model.forge.js --camera 45:30
141
151
  forgecad render 3d model.forge.js --camera "proj=perspective;pos=200,-160,120;target=0,0,20;up=0,0,1;fov=38"
142
152
  forgecad render 3d model.forge.js --camera front --camera side
@@ -234,6 +244,7 @@ forgecad render section examples/furniture/01-table.forge.js out/bold.svg --edge
234
244
  | `--focus <names>` | Focus: no arg hides mocks; comma-separated names shows only those |
235
245
  | `--hide <names>` | Hide comma-separated object names |
236
246
  | `--camera <front\|back\|side\|right\|top\|iso\|az:el\|az:el:dist\|spec>` | Camera preset, spherical (az:el), or full spec such as `proj=perspective;pos=x,y,z;target=x,y,z;up=x,y,z;fov=45`. Repeatable. |
247
+ | `--view <name>` | Named camera view declared by the model with scene({ views }) |
237
248
  | `--size <px>` | Image size in pixels |
238
249
  | `--scene <json>` | Viewport scene state JSON |
239
250
  | `--background <color>` | Canvas background override |
@@ -292,22 +303,22 @@ forgecad render section examples/furniture/01-table.forge.js out/bold.svg --edge
292
303
 
293
304
  ## Export
294
305
 
295
- Export to every format you need. Account-included formats work after login; advanced formats are Pro.
306
+ Export to every format you need. Export actions are free to run; production outputs carry commercial-use guidance.
296
307
 
297
308
  | Command | Format | Use case |
298
309
  |---------|--------|----------|
299
- | `cut-list` **\[Pro\]** | Terminal | Grouped sheet-material cut list from `sheetStock()` |
310
+ | `cut-list` **\[Production\]** | Terminal | Grouped sheet-material cut list from `sheetStock()` |
300
311
  | `export svg` | SVG | 2D vector output from sketches |
301
- | `export sketch-pdf` **\[Pro\]** | PDF | Sketch with dimensions and constraints |
302
- | `export step` **\[Pro\]** | STEP | CAD interchange (exact geometry) |
303
- | `export brep` **\[Pro\]** | BREP | Boundary representation |
312
+ | `export sketch-pdf` **\[Production\]** | PDF | Sketch with dimensions and constraints |
313
+ | `export step` **\[Production\]** | STEP | CAD interchange (exact geometry) |
314
+ | `export brep` **\[Production\]** | BREP | Boundary representation |
304
315
  | `export 3mf` | 3MF | 3D printing (color, multi-part) |
305
316
  | `export stl` | STL | 3D printing |
306
- | `export gcode` **\[Pro\]** | G-code | Toolpath (scripted, not sliced) |
307
- | `export sdf` **\[Pro\]** | SDF package | Gazebo robot simulation |
308
- | `export urdf` **\[Pro\]** | URDF package | ROS / PyBullet / MuJoCo |
309
- | `export report` **\[Pro\]** | PDF report | Multi-view report with BOM and dimensions |
310
- | `export cutting-layout` **\[Pro\]** | PDF | Sheet cutting layout with cut sequence |
317
+ | `export gcode` **\[Production\]** | G-code | Toolpath (scripted, not sliced) |
318
+ | `export sdf` **\[Production\]** | SDF package | Gazebo robot simulation |
319
+ | `export urdf` **\[Production\]** | URDF package | ROS / PyBullet / MuJoCo |
320
+ | `export report` **\[Production\]** | PDF report | Multi-view report with BOM and dimensions |
321
+ | `export cutting-layout` **\[Production\]** | PDF | Sheet cutting layout with cut sequence |
311
322
  | `link` | URL | Generate a ForgeCAD share link from a GitHub Gist URL or ID and copy it to clipboard. |
312
323
 
313
324
  ```bash
@@ -351,22 +362,32 @@ forgecad export sdf rover.forge.js --output out/forge_scout
351
362
 
352
363
  ## Projects & Publishing
353
364
 
354
- ForgeCAD has a hosted platform at [forgecad.io](https://forgecad.io). The CLI connects your local files to it.
365
+ ForgeCAD has a hosted platform at [forgecad.io](https://forgecad.io). The CLI connects a dedicated local project folder to it.
366
+
367
+ A project is a local folder linked to the hosted app by `forgecad.json`. Use `forgecad project clone <slug>` to download an existing hosted project into a local folder, or run `forgecad project init` inside a folder that should become a new ForgeCAD project. Open local projects with `forgecad studio <project-path>`.
355
368
 
356
- A project is a local folder linked to the hosted app by `.forgecad/project.json`. Use `forgecad project clone <slug>` to download an existing hosted project into a local folder, or run `forgecad project init` inside a folder that should become a ForgeCAD project. Open local projects with `forgecad studio <project-path> [project-path ...]`.
369
+ Keep the project root small and intentional. Do not run the editor from `~`, downloads, desktop, or a huge source tree. ForgeCAD scans project files such as `.forge.js`, `.js`, and `.svg`; broad roots make local workflows and AI-agent context slow and confusing.
357
370
 
358
371
  ### Get started
359
372
 
360
373
  ```bash
361
374
  forgecad login
362
- forgecad project clone start-here
363
-
364
- # or initialize the current folder as a new project:
375
+ mkdir spool-adapter
376
+ cd spool-adapter
365
377
  forgecad project init "Spool Adapter"
378
+ forgecad new adapter --template part
379
+ forgecad studio .
380
+
381
+ # or clone an existing hosted project:
382
+ forgecad project clone start-here
383
+ cd start-here
384
+ forgecad studio .
366
385
  ```
367
386
 
368
387
  `forgecad login` prompts for email/password. If your account was created through GitHub or Google, create an API token in Settings > API Tokens and run `forgecad login --token`; it prompts securely when the token is omitted. Use `FORGECAD_TOKEN=fc_pat_...` instead for CI/CD and one-off automation. See [Platform authentication](platform/auth.md#cli-auth-for-oauth-accounts) for details.
369
388
 
389
+ `forgecad project init` creates the remote project, writes `forgecad.json`, pushes any existing local source files, and records server file IDs. `forgecad project push` syncs an already initialized project; it does not create a remote project from an arbitrary folder.
390
+
370
391
  ### Sync
371
392
 
372
393
  ```bash
@@ -457,7 +478,7 @@ Shares are live references — always the current version, not a snapshot.
457
478
 
458
479
  ## AI Integration
459
480
 
460
- ForgeCAD files are plain JavaScript. AI coding agents write and iterate on them directly. The CLI closes the loop. See [AI Usage](AI/usage.md) for approved models, Codex/Claude Code setup, installable skills, and completion criteria.
481
+ ForgeCAD files are plain JavaScript. AI coding agents should work inside an initialized project folder, write and iterate on local files, and use the CLI for evidence. See [AI Usage](AI/usage.md) for approved models, project-first setup, installable skills, quality prompts, and completion criteria.
461
482
 
462
483
  ```bash
463
484
  # Install the full public ForgeCAD skill library
@@ -542,11 +563,11 @@ forgecad check params path/to/model.forge.js --samples 12
542
563
 
543
564
  ### Licensing
544
565
 
545
- Core CLI workflows are included with a free account. Advanced exports and rendering are Pro.
566
+ The CLI is free for core workflows and exports. Production outputs are free to run; Pro covers commercial use. High-value render and capture tools require Pro.
546
567
 
547
- | Free | Pro |
548
- |------|-----|
549
- | `run`, `dev`, `studio`, `render 3d`, `export stl`, `export 3mf`, `export svg`, `check params`, `check suite` | `render hq`, `capture gif`, `capture mp4`, `cut-list`, `export sketch-pdf`, `export step`, `export brep`, `export gcode`, `export sdf`, `export urdf`, `export report`, `export cutting-layout` |
568
+ | Free | Production outputs | Pro |
569
+ |------|--------------------|-----|
570
+ | `run`, `dev`, `studio`, `render 3d`, `export stl`, `export 3mf`, `export svg`, `check params`, `check suite` | `cut-list`, `export sketch-pdf`, `export step`, `export brep`, `export gcode`, `export sdf`, `export urdf`, `export report`, `export cutting-layout` are free to run; Pro covers commercial use. | `render hq`, `capture gif`, `capture mp4` |
550
571
 
551
572
  ```bash
552
573
  forgecad license # Check signed-in account status