PluginBench
Skill
Pass
Audit score 90

cad

earthtojake/text-to-cad

Generate parametric CAD models from Python, export to STEP/STL/3MF/GLB, and inspect geometry.

What is cad?

Create and edit 3D CAD models using Python-decorated functions with build123d, organize multi-model projects, and export to standard formats. Use this when you need to generate parametric parts, assemblies, or inspect existing CAD geometry.

  • Create parametric CAD models with Python scripts using build123d geometry kernel
  • Export to STEP, STL, 3MF, and GLB formats with optional mesh decorators
  • Organize multi-model CAD projects with source layouts and model catalogs
  • Resolve and inspect geometry references from saved STEP documents
  • Measure geometry and validate dimensions using native build123d operations
  • Generate snapshots and review CAD models visually

How to install cad

npx skills add https://github.com/earthtojake/text-to-cad --skill cad
Prerequisites
  • Python interpreter with pip
  • Install skill requirements: python -m pip install -r /path/to/installed/cad/requirements.txt
  • Chromium for rendering: python -m playwright install chromium
  • cadgen doctor <skill-dir> to verify CAD kernel and package pins
Claude Code
Cursor
Windsurf
Cline

How to use cad

  1. 1.Create a Python script with a parameterless function decorated with @step, @stl, @threemf, or @glb that returns a build123d shape
  2. 2.Edit dimensions and geometry in the script, keeping meaningful values explicit and using millimeters by default
  3. 3.Run the script to generate STEP and mesh outputs: python src/model.py
  4. 4.For assemblies, call child models inside the parent and position results with .moved() or Location * shape
  5. 5.Use read_scene() to inspect saved STEP files and resolve references for measurement or validation
  6. 6.Export one-off formats with cadgen stl/3mf/glb build commands if not using decorators

Use cases

Good for
  • Generate a parametric bracket or enclosure by editing Python source and running it to rebuild outputs
  • Export a STEP assembly to STL for 3D printing or GLB for web visualization
  • Inspect specific faces or edges in a saved STEP file using reference syntax like assembly.step#o1.2.f7
  • Validate clearances and dimensions between parts in an assembly before manufacturing
  • Create a multi-part project with organized src/, STEP/, and export folders
Who it's for
  • Mechanical engineers and CAD designers
  • Product developers building parametric parts
  • Anyone generating 3D models programmatically
  • Manufacturing and fabrication teams

cad FAQ

What is the difference between @step and @stl/@threemf/@glb decorators?

@step generates a STEP file (the primary CAD format); @stl, @threemf, and @glb generate mesh exports. Stack multiple decorators on one model to maintain all outputs on every run. Use CLI commands for one-off exports from existing STEP files.

How do I organize a multi-part project?

Use a src/ folder for model scripts, format output folders (STEP/, STL/, 3MF/, GLB/), and a model catalog. Call child models inside the assembly model and position their results with .moved() or Location * shape. Rerun the parent to incorporate changes.

How do I measure or validate geometry?

Write a Python check using native build123d geometry and cadgen.geometry. Use read_scene() to open a saved STEP file, resolve references with scene.resolve(ref), and call methods like .area or .length on the returned geometry.

Can I import vendor parts or external STEP files?

Yes, use cadgen.read_step() to import vendor STEP files; it records the file as a build input. Search $step-parts for named purchasable parts before creating placeholders. Never read a model's own output as its input.

What should I do if I get a version migration message?

Run the migration immediately; unmigrated models silently lose kinematics, materials, and animation. See the version migration reference for migration steps.

Full instructions (SKILL.md)

Source of truth, from earthtojake/text-to-cad.


name: cad description: Create/edit parametric CAD models, organize CAD projects, export STEP/STL/3MF/GLB files, resolve prompt references, and measure geometry with cadgen.

CAD modeling and inspection

Provenance: maintained in earthtojake/text-to-cad. Use the installed local skill files for the current interface.

Start with the task

Read only the references needed for the request.

TaskFirst actionReference
Create or edit a part or assemblyFind the existing Python model, or create a decorated model below; edit source and run python <model>.py.Model contract, shape construction; positioning for assemblies
Organize a CAD projectFollow its existing layout; for a new multi-model project use src/, format output folders, and a model catalog.Project layout, minimal starters
Export STL, 3MF or GLBAdd a mesh decorator for a maintained output, or run the format's build INPUT.step OUT command for a one-off export.Mesh exports
Resolve a reference from a promptIdentify its saved STEP/STP document, open it with read_scene, and call scene.resolve(ref) as shown below.Reference syntax and inspection
Measure or check geometryWrite a Python check using native build123d geometry and, where useful, cadgen.geometry.Inspection and validation
Model from an image or drawingExtract the specified dimensions and record meaningful assumptions.Interpreting the request
Review appearance or motionSnapshot the saved document; use declared kinematics or animation for poses and clips.Snapshots, kinematics
Diagnose a failureRead the error and check the relevant model, geometry or command contract.Repair loop, version migration
A message says to migrateDo the migration now; an unmigrated model silently loses kinematics, materials and animation.Version migration

For 2D DXF drawings use $dxf; this skill owns any 3D part the drawing projects. Use the corresponding robot-description skill for URDF, SRDF or SDF.

Setup and paths

Install this skill's requirements.txt with the active project interpreter. Rendering also needs Chromium:

python -m pip install -r /path/to/installed/cad/requirements.txt
python -m playwright install chromium

Treat python in examples as the active interpreter. cadgen doctor <skill-dir> checks the skill's package pin and CAD kernel; use it for installation or OCP load errors. python -m cadgen.cli is the PATH-independent equivalent of cadgen. Use the relevant subcommand's --help for additional flags.

Run project commands from the CAD project root. CLI input/output paths and read_scene/read_step paths are working-directory-relative; decorator out= paths are relative to the model script. Anchor file inputs on __file__ when the model must run from any directory.

Create or edit a model

A model is a plain Python script with a parameterless decorated function returning a build123d shape. Use one model per entrypoint, with the script and its declared outputs sharing a filename stem. For example, src/bracket.py:

from cadgen import build123d as bd
from cadgen import step

WIDTH = 40.0


@step(out="../STEP/bracket.step")
def bracket():
    body = bd.Box(WIDTH, 20, 6)
    body.label = "bracket"
    return body


if __name__ == "__main__":
    bracket()
python src/bracket.py
  • Edit the model source when it exists, then run it to regenerate its outputs. Document export and snapshot commands take saved files and never run source.
  • Keep meaningful dimensions explicit. Use millimeters and XY/+Z unless the task or project specifies another convention; choose a useful functional datum. Prefer closed, positive-volume solids for physical parts, while honoring requests for surfaces or construction geometry.
  • Put parameterized geometry in ordinary factory functions; a decorated model selects a configuration. Keep module bodies cheap: create geometry and read CAD inputs inside the model or its helpers. Use the lazy bd import above; use postponed annotations when annotations mention bd types.
  • Call child models inside the assembly model. Place their results with .moved() or Location * shape to preserve shared geometry. Use meaningful occurrence labels and source-defined placements. Rerun the parent assembly to incorporate a changed child.
  • Read vendor STEP inputs with cadgen.read_step; it records the file as a build input. Declare other data inputs with cadgen.declare_input. Never read a model's own output as its input. Geometry must not depend on untracked time, random values, environment variables or the working directory.
  • When named purchasable parts are needed, search $step-parts before making placeholders. Record an unsuccessful search and any placeholder assumptions.

For unfamiliar dimensions or interfaces, record the assumptions needed to model and verify them. Ask for missing information when it materially affects the requested result. Inspection and export requests do not need a modeling brief.

Mesh exports

Stack @stl, @threemf or @glb on the model for outputs that should be maintained on every run. A model may declare only meshes; STEP is optional. For a one-off export from an existing generated or imported STEP:

cadgen stl build STEP/bracket.step STL/bracket.stl
cadgen 3mf build STEP/bracket.step 3MF/bracket.3mf
cadgen glb build STEP/bracket.step GLB/bracket.glb

Omitting OUT writes one sibling file with the requested extension. It does not discover declared model variants. See mesh exports for decorator examples, mesh tolerances and animated GLB.

Prompt references and inspection

A reference such as assembly.step#o1.2.f7 identifies geometry in a particular saved document. Use the prompt's file context to select that document:

from cadgen import read_scene

scene = read_scene("STEP/assembly.step")
selection = scene.resolve("assembly.step#o1.2.f7")
face = selection.shape()  # owned native geometry, in document world coordinates
print(selection.ref, face.area)

For a bare #o1.2.f7, use the identified target file. For a model-script prefix, find its declared STEP output and resolve the #... portion there. Do not guess between ambiguous files or labels. Numeric refs belong to that saved revision; reopen and reselect after rebuilding. The inspection reference covers label aliases, enumeration, measurements and small reusable operations.

There is no inspect CLI. Put exploratory checks in the project's ignored tmp/ (or system /tmp/); retain reusable checks in checks/ or its existing test directory. Keep them outside model-source and raw-output folders.

Verify and hand off

Choose checks from the requested dimensions, clearances and topology. For STEP outputs, check the saved artifact with read_scene or read_step. For mesh-only models, check the model's returned native geometry and review the mesh output; do not add a STEP solely to satisfy the workflow. Report units, thresholds, selected geometry and untested requirements. A failed computation is not a pass.

After creating or visibly changing geometry, generate and review at least one snapshot of the resulting STEP or mesh. Choose additional views to expose the features under review; see snapshot policy and options.

cadgen step snapshot STEP/bracket.step tmp/review.png
cadgen stl snapshot STL/bracket.stl tmp/mesh.png

Repair failures in the source and rerun the affected checks. Use geometry and images for CAD comparisons; path-targeted git status is bookkeeping, not geometric evidence. cadgen store why <model>.py explains unexpected rebuilds; python <model>.py --force forces one model, and cadgen daemon status shows build progress. More diagnostics are in the model contract.

For created or modified STEP/STP, STL, 3MF and GLB files, hand their explicit paths to $cad-viewer when installed and include its returned live links. If unavailable or startup fails, report that and use geometry checks and snapshots. Include output files, reviewed PNGs, checks actually run, and material assumptions or limitations in the final response. Explain any snapshot skip or failure using the cases in the snapshot reference.