cad-viewer

Generated source view for the actual executable engineering/cad-viewer skill. The durable routing article is Security and Review Skills. Source: skills/engineering/cad-viewer/SKILL.md

Runtime Source

Field Value
Category engineering
Origin external
Slug cad-viewer
Source slug cad-viewer
Family Security and Review Skills
Source skills/engineering/cad-viewer/SKILL.md

Bundled Resources

These files are part of the executable skill folder and must be preserved with the skill source.

File Role
LICENSE Bundled resource
agents/openai.yaml Agent UI metadata
references/moveit2-server.md Progressive reference
references/viewer-features.md Progressive reference
requirements.txt Bundled resource
scripts/viewer/.gitignore Executable helper
scripts/viewer/dist/assets/BufferGeometryUtils-xu92ooFc.js Executable helper
scripts/viewer/dist/assets/GLTFLoader-B3ztFMBW.js Executable helper
scripts/viewer/dist/assets/STLLoader-C7hGonJR.js Executable helper
scripts/viewer/dist/assets/favicon-C-31TkWB.ico Executable helper
scripts/viewer/dist/assets/glbMeshWorker-BiseG5-w.js Executable helper
scripts/viewer/dist/assets/index-BAf9AUFV.css Executable helper
scripts/viewer/dist/assets/index-BhvgqhHI.js Executable helper
scripts/viewer/dist/assets/index-DHvoFMtA.js Executable helper
scripts/viewer/dist/assets/index-DtrvzEgX.js Executable helper
scripts/viewer/dist/assets/parseSdf-DViMt5z4.js Executable helper
scripts/viewer/dist/assets/parseSrdf-op4wxM2U.js Executable helper
scripts/viewer/dist/assets/parseUrdf-DQzGLZi1.js Executable helper
scripts/viewer/dist/assets/stlMeshWorker-B6n9DT_S.js Executable helper
scripts/viewer/dist/assets/three.module-BB51Dq4E.js Executable helper
scripts/viewer/dist/assets/three.module-DJHaYUcg.js Executable helper
scripts/viewer/dist/assets/vendor-icons-BnaPp1EU.js Executable helper
scripts/viewer/dist/assets/vendor-react-7jnMmQ9s.js Executable helper
scripts/viewer/dist/assets/vendor-three-D3ixFK8V.js Executable helper
scripts/viewer/dist/assets/vendor-ui-KJd670JQ.js Executable helper
scripts/viewer/dist/index.html Executable helper
scripts/viewer/moveit2_server/__init__.py Executable helper
scripts/viewer/moveit2_server/check-moveit2-server.sh Executable helper
scripts/viewer/moveit2_server/conda-common.sh Executable helper
scripts/viewer/moveit2_server/environment.yml Executable helper
scripts/viewer/moveit2_server/moveit2_server/__init__.py Executable helper
scripts/viewer/moveit2_server/moveit2_server/context.py Executable helper
scripts/viewer/moveit2_server/moveit2_server/dispatcher.py Executable helper
scripts/viewer/moveit2_server/moveit2_server/joint_state_seed.py Executable helper
scripts/viewer/moveit2_server/moveit2_server/moveit_py.py Executable helper
scripts/viewer/moveit2_server/moveit2_server/protocol.py Executable helper
scripts/viewer/moveit2_server/moveit2_server/server.py Executable helper
scripts/viewer/moveit2_server/moveit2_server/srdf_source.py Executable helper
scripts/viewer/moveit2_server/pyproject.toml Executable helper
scripts/viewer/moveit2_server/run-moveit2-server.sh Executable helper
scripts/viewer/moveit2_server/setup.sh Executable helper
scripts/viewer/package.json Executable helper
scripts/viewer/packages/cadgen/LICENSE Executable helper
scripts/viewer/packages/cadgen/pyproject.toml Executable helper
scripts/viewer/packages/cadgen/src/cadgen/__init__.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/__init__.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/assembly_spec.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/cli_errors.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/cli_locking.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/component_package.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/drawing_package.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/file_metadata.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/generation.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/glb.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/glb_mesh_payload.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/glb_topology.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/implicit_package.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/node_resolve_hooks.mjs Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/node_resolve_register.mjs Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/node_runtime.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/package_freshness.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/source_hash.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/step_hash.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/step_metadata.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/step_scene.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/stl.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/threemf.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/_internal/validators.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/analysis.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/api.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/assembly.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/cad_ref_syntax.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/catalog.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/cli_logging.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/cli_progress.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/color.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/coordination/__init__.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/coordination/kinds.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/coordination/lock.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/coordination/paths.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/coordination/phases.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/coordination/record.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/drawing_checks.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/drawing_render.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/dxf_artifact.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/flatten.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/generation.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/implicit_artifact.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/implicit_export.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/instances.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/interference.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/lookup.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/metadata.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/progress.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/py.typed Executable helper
scripts/viewer/packages/cadgen/src/cadgen/render.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/reporting.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/selector_types.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/snapshot_cli.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/snapshot_core.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/sources.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/step_artifact.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/step_artifacts.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/step_export.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/step_export_target.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/step_scene.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/step_targets.py Executable helper
scripts/viewer/packages/cadgen/src/cadgen/validity.py Executable helper
scripts/viewer/packages/cadjs/bench/composePackageBench.mjs Executable helper
scripts/viewer/packages/cadjs/bin/dxf-artifact.mjs Executable helper
scripts/viewer/packages/cadjs/bin/implicit-artifact.mjs Executable helper
scripts/viewer/packages/cadjs/bin/implicitClosure.mjs Executable helper
scripts/viewer/packages/cadjs/bin/implicitClosureHooks.mjs Executable helper
scripts/viewer/packages/cadjs/package-lock.json Executable helper
scripts/viewer/packages/cadjs/package.json Executable helper
scripts/viewer/packages/cadjs/scripts/run-tests.mjs Executable helper
scripts/viewer/packages/cadjs/src/common/cadScene.js Executable helper
scripts/viewer/packages/cadjs/src/common/camera.js Executable helper
scripts/viewer/packages/cadjs/src/common/displayRecordTransform.js Executable helper
scripts/viewer/packages/cadjs/src/common/displaySettings.js Executable helper
scripts/viewer/packages/cadjs/src/common/headlessJobKind.js Executable helper
scripts/viewer/packages/cadjs/src/common/headlessOrbitFrames.js Executable helper
scripts/viewer/packages/cadjs/src/common/headlessRenderEntry.js Executable helper
scripts/viewer/packages/cadjs/src/common/render.html Executable helper
scripts/viewer/packages/cadjs/src/common/renderEdges.js Executable helper
scripts/viewer/packages/cadjs/src/common/renderMeshScene.js Executable helper
scripts/viewer/packages/cadjs/src/common/renderModel.js Executable helper
scripts/viewer/packages/cadjs/src/common/renderOptions.js Executable helper
scripts/viewer/packages/cadjs/src/common/source.js Executable helper
scripts/viewer/packages/cadjs/src/common/stepModule.js Executable helper
scripts/viewer/packages/cadjs/src/common/stepModuleEffects.js Executable helper
scripts/viewer/packages/cadjs/src/common/stepParameters.js Executable helper
scripts/viewer/packages/cadjs/src/common/stepTopology.mjs Executable helper
scripts/viewer/packages/cadjs/src/common/themeSettings.js Executable helper
scripts/viewer/packages/cadjs/src/common/topologyDisplayEdgeRuntime.js Executable helper
scripts/viewer/packages/cadjs/src/common/topologyDisplayEdges.js Executable helper
scripts/viewer/packages/cadjs/src/common/webglRenderer.js Executable helper
scripts/viewer/packages/cadjs/src/glb/writeGlb.js Executable helper
scripts/viewer/packages/cadjs/src/implicit/export.js Executable helper
scripts/viewer/packages/cadjs/src/implicit/exportModel.js Executable helper
scripts/viewer/packages/cadjs/src/implicit/graphicsSettings.js Executable helper
scripts/viewer/packages/cadjs/src/implicit/loader.js Executable helper
scripts/viewer/packages/cadjs/src/implicit/model.js Executable helper
scripts/viewer/packages/cadjs/src/implicit/parameters.js Executable helper
scripts/viewer/packages/cadjs/src/implicit/render.js Executable helper
scripts/viewer/packages/cadjs/src/index.js Executable helper
scripts/viewer/packages/cadjs/src/lib/assembly/meshData.js Executable helper
scripts/viewer/packages/cadjs/src/lib/async/concurrency.js Executable helper
scripts/viewer/packages/cadjs/src/lib/cadRefs.js Executable helper
scripts/viewer/packages/cadjs/src/lib/displaySettings.js Executable helper
scripts/viewer/packages/cadjs/src/lib/dxf/buildPreviewMesh.js Executable helper
scripts/viewer/packages/cadjs/src/lib/dxf/foldPreview.js Executable helper
scripts/viewer/packages/cadjs/src/lib/dxf/parseDxf.js Executable helper
scripts/viewer/packages/cadjs/src/lib/dxf/previewGlb.js Executable helper
scripts/viewer/packages/cadjs/src/lib/entryAssets.js Executable helper
scripts/viewer/packages/cadjs/src/lib/fileFormats.js Executable helper
scripts/viewer/packages/cadjs/src/lib/pathUtils.mjs Executable helper
scripts/viewer/packages/cadjs/src/lib/perspective.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/glbMeshData.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/glbMeshWorker.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/glbMeshWorkerClient.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/meshCost.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/meshLoaders.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/meshTransfer.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/stlMeshData.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/stlMeshWorker.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/stlMeshWorkerClient.js Executable helper
scripts/viewer/packages/cadjs/src/lib/render/threeMfMeshData.js Executable helper
scripts/viewer/packages/cadjs/src/lib/renderAssetClient.js Executable helper
scripts/viewer/packages/cadjs/src/lib/renderAssetSourceScope.js Executable helper
scripts/viewer/packages/cadjs/src/lib/renderCapabilities.js Executable helper
scripts/viewer/packages/cadjs/src/lib/selectors/runtime.js Executable helper
scripts/viewer/packages/cadjs/src/lib/step/stepModule.js Executable helper
scripts/viewer/packages/cadjs/src/lib/step/stepTree.js Executable helper
scripts/viewer/packages/cadjs/src/lib/stepRenderAssetClient.js Executable helper
scripts/viewer/packages/cadjs/src/lib/themeSettings.js Executable helper
scripts/viewer/packages/cadjs/src/lib/urdf/jointAnimation.js Executable helper
scripts/viewer/packages/cadjs/src/lib/urdf/kinematics.js Executable helper
scripts/viewer/packages/cadjs/src/lib/urdf/loadRobot.js Executable helper
scripts/viewer/packages/cadjs/src/lib/urdf/motion.js Executable helper
scripts/viewer/packages/cadjs/src/lib/urdf/moveit2ServerClient.js Executable helper
scripts/viewer/packages/cadjs/src/lib/urdf/parseSdf.js Executable helper
scripts/viewer/packages/cadjs/src/lib/urdf/parseSrdf.js Executable helper
scripts/viewer/packages/cadjs/src/lib/urdf/parseUrdf.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/autoZoom.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/clipPlane.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/constants.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/displayEdgePolicy.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/drawingCanvas.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/drawingGeometry.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/drawingTools.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/explodedView.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/modelRuntime.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/partHighlight.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/partVisualState.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/pickingThresholds.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/raycastBvh.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/referenceGeometry.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/renderQuality.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/sceneScale.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/screenshotCapture.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/selectorPickGroups.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/stageGrid.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/stageTheme.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/surfaceLineGeometry.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/surfaceMaterials.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/topologyDisplayEdgeLine.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/urdfPosePicker.js Executable helper
scripts/viewer/packages/cadjs/src/lib/viewer/webglSupport.js Executable helper
scripts/viewer/packages/implicitjs/package-lock.json Executable helper
scripts/viewer/packages/implicitjs/package.json Executable helper
scripts/viewer/packages/implicitjs/scripts/export.mjs Executable helper
scripts/viewer/packages/implicitjs/scripts/run-tests.mjs Executable helper
scripts/viewer/packages/implicitjs/scripts/verify-implicit-cad-exports.mjs Executable helper
scripts/viewer/packages/implicitjs/src/browser.js Executable helper
scripts/viewer/packages/implicitjs/src/common/camera.js Executable helper
scripts/viewer/packages/implicitjs/src/common/implicitHeadlessOrbitFrames.js Executable helper
scripts/viewer/packages/implicitjs/src/common/implicitHeadlessRenderEntry.js Executable helper
scripts/viewer/packages/implicitjs/src/common/parameters.js Executable helper
scripts/viewer/packages/implicitjs/src/common/renderOptions.js Executable helper
scripts/viewer/packages/implicitjs/src/common/themeSettings.js Executable helper
scripts/viewer/packages/implicitjs/src/index.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/glb/assertWriteLock.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/glb/bytes.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/glb/progressStream.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/glb/writeGlb.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/__baselines__/sdfEquality.json Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/animation.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/export.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/exportModel.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/exporters.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/graphicsSettings.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/loader.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/mesh.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/meshQuality.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/meshWorkerEntry.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/meshWorkers.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/model.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/render.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/renderGlb.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/schema.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/sdfCompiler.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/sdfEvaluator.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/sdfFieldReference.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/implicitCad/snapshot.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/viewer/stageTheme.js Executable helper
scripts/viewer/packages/implicitjs/src/lib/viewer/surfaceMaterials.js Executable helper
scripts/viewer/requirements.txt Executable helper
scripts/viewer/server_py/__init__.py Executable helper
scripts/viewer/server_py/artifact.py Executable helper
scripts/viewer/server_py/backend.py Executable helper
scripts/viewer/server_py/cadgen_bridge.py Executable helper
scripts/viewer/server_py/content_types.py Executable helper
scripts/viewer/server_py/encoding.py Executable helper
scripts/viewer/server_py/natural_sort.py Executable helper
scripts/viewer/server_py/paths.py Executable helper
scripts/viewer/server_py/save_dialog.py Executable helper
scripts/viewer/server_py/scanner.py Executable helper
scripts/viewer/server_py/server.py Executable helper
scripts/viewer/server_py/server_info.py Executable helper
scripts/viewer/server_py/start_viewer.py Executable helper
scripts/viewer/server_py/urls.py Executable helper
scripts/viewer/server_py/worker.py Executable helper
scripts/viewer/server_py/worker_client.py Executable helper

Description

Start CAD Viewer and return review links for explicit CAD, implicit CAD, and robot-description files. Use when visually reviewing .step, .stp, .implicit.js, .implicit.mjs, .glb, .stl, .3mf, .dxf, .urdf, .srdf, or .sdf files, especially when handed off from CAD, implicit-cad, URDF, SRDF, or SDF generation skills.

Skill Source

---
name: cad-viewer
description: Start CAD Viewer and return review links for explicit CAD, implicit CAD, and robot-description files. Use when visually reviewing `.step`, `.stp`, `.implicit.js`, `.implicit.mjs`, `.glb`, `.stl`, `.3mf`, `.dxf`, `.urdf`, `.srdf`, or `.sdf` files, especially when handed off from CAD, implicit-cad, URDF, SRDF, or SDF generation skills.
origin: external
source_slug: cad-viewer
---

# CAD Viewer

Provenance: maintained in [earthtojake/text-to-cad](https://github.com/earthtojake/text-to-cad).
Use the installed local skill files as the runtime source of truth; the
repository link is only for provenance and release review. If the user asks to
modify, debug, or iterate on CAD Viewer source itself, clone that repository and
work there — this installed skill runtime runs the Viewer, it is not where you
edit it.

Use this skill to open existing or newly generated CAD, implicit CAD,
robot-description, or DXF files in CAD Viewer and hand back live review links. The expected input is one or more explicit file paths.

## Start Viewer

Start one local CAD Viewer with `npm run start`. It serves the prebuilt Viewer
bundle plus the CAD API on a single fixed port (`3245`). It is NOT started
against a directory — a URL names the directory, so one Viewer serves any folder.

> The default port `3245` is `0xCAD` — "CAD" in hexadecimal.

Run from this skill directory:

```bash
npm --prefix scripts/viewer run start -- --host 127.0.0.1
```

## URL shape

A Viewer URL's **path is the absolute directory**, exactly as in a `file://` URL,
and `file=` selects one artifact inside it:

```text
http://127.0.0.1:3245/absolute/project/models?file=mechanisms/lift_table.step.py
```

**Always build the path from an absolute directory.** The Viewer runs from an
arbitrary working directory — usually wherever the skill happens to be installed,
not the model directory — so a relative path resolves against the wrong place.
The `file=` value is relative to that directory.

**On Windows the drive goes in the path, after the URL's leading slash**, with
forward slashes: `D:\project\models` is `http://127.0.0.1:3245/D:/project/models`.
The launcher prints this form already; build it the same way by hand.

**The path is the workspace, not the file's folder.** The Viewer scans it
recursively, so the file browser lists every model beneath it and the user can
switch files without a new link. Pick the directory the user thinks of as their
model workspace — typically the project's `models/` directory, or the nearest
common parent of the files you were asked to review — and put the rest of the
path in `file=`. Naming the artifact's own deep folder
(`.../models/step/mechanisms?file=lift_table.step.py`) opens the same model but hides
the rest of the project, which is almost never what the user wants.

If port `3245` is already in use, the launcher exits with an error rather than
rolling to another port; rerun with an explicit free port, `--port <n>`, and use
the URL it prints. In sandboxed agent environments, local binding failures such
as `EPERM`/`EACCES` can be expected; rerun with the needed permission/escalation.

Add `--json` to also print a machine-readable result as the last stdout line
beginning with `{` (`{"url": ..., "port": ..., "action": "start"}`). The printed
URL points at the launch directory; replace its path to review any other folder.

## Links

- Before returning any link, resolve `<directory>/<file>` and confirm it
  exists. For a **generated** model pass the generator source (`<name>.step.py`)
  — that is what the catalog itself lists, the backend resolves it directly and
  builds the render artifacts on demand, and no `.step` file needs to exist. It
  is also the only form that carries a `params` sidecar, because a same-stem
  `<name>.step.py` shadows `<name>.step` anyway. For an **imported** STEP with no
  generator, pass the `.step`/`.stp` itself. If the resolved path is missing, do
  not return the link; report the problem and point to the correct path.
- Return one Viewer URL per requested file.
- Start the Viewer once and pick one workspace root for the session. Every link
  is that same absolute root plus `?file=<path relative to it>`, so all of them
  share one browsable catalog. Only use a second root for an artifact that lives
  outside the first.
- For directory-only review links, return the directory URL without `?file=`.
- Do not stop an existing Viewer server unless the user asks.
- If Viewer startup fails, report the failure and continue with the owning skill's non-GUI validation or artifacts.

## References

- Read `references/viewer-features.md` when you need supported file types, Viewer controls, or file-specific feature details.
- Read `references/moveit2-server.md` only when the user specifically needs optional SRDF MoveIt2 IK or path-planning controls.

Timeline

1 page links here