earthtojake/text-to-cad

cad

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

Zobacz źródło
Oryginalny dokument Skill

Treść z repozytorium z zachowaniem nagłówków, przykładów, kodu, tabel, linków i obrazów.

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
Open an existing STEP/STP, STL, 3MF or GLBShow it to the user.Show the model
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

Run cadgen through uv, so this skill's commands share one installation, and its warm build daemon, with the CAD app's server:

  • cadgen below means uvx --no-config --managed-python --python 3.13 --from cadgen==0.7.21 cadgen
  • python below means uvx --no-config --managed-python --python 3.13 --from cadgen==0.7.21 python

The first run downloads that installation and the first snapshot its headless browser; later runs reuse both.

cadgen doctor <skill-dir> reports the installation in use and checks that it is the one this skill pins, and that the CAD kernel loads; use it for installation or kernel load errors. 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:

python
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()
bash
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. Every file a build opens is

an input on its own, whatever reads it (json.load, np.load, bd.import_step, a project font): nothing is declared. 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:

bash
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 /work/robot/STEP/assembly.step#o1.2.f7 identifies geometry in a particular saved document. Its file part is the document's absolute path as the CAD viewer copied it, with the file's real name and extension (in quotes when it holds a space or #). Open that path with read_scene, and pass the whole reference to resolve():

python
from cadgen import read_scene

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

A note from the viewer's Quick Edit reads: what the person wants, then File: (the document it is about), References: (one per line, as above) and, when they sketched on the view, Sketch: <path>: a PNG of the view with their markup (or the image itself, attached). Look at the sketch before changing the model.

For a bare #o1.2.f7, use the identified target file. 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. Snapshots are your own review: always render and read them yourself, never rely on the viewer for it. Choose additional views to expose the features under review; see snapshot policy and options.

bash
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.

Include output files, checks actually run, and material assumptions or limitations in the final response. The user sees the model in the viewer (Show the model), so don't attach snapshots unless they ask for an image. Explain any snapshot skip or failure using the cases in the snapshot reference.

Show the model

Show the user each file you create or change, and any they ask to see. Snapshots and validation don't replace this.

  • If your tools include cad_show (your host may prefix it), use it with the file's

absolute path, and follow its description for when to call it again. cad_view reads what the user selected; cad_screenshot shows you what they see. Neither is a review of your own work.

  • Otherwise run the CAD Viewer, from any folder:
bash
  cadgen viewer --host 127.0.0.1 --json --detach

--detach returns once the viewer answers requests and leaves it running in the background: always pass it, since a foreground viewer never exits (and piping its output through tail can hide the URL for good). It starts this machine's one viewer, or reuses it. Read url from its one JSON line (never guess the port), and for each file return url?file=<its URL-encoded absolute path>. If it fails to launch, say so.

Generate changed artifacts first: the viewer never runs model scripts. Existing STEP files compile on open when needed. Topology selection and measurement require STEP; meshes support visual review.

z tego samego repozytorium

Więcej Skills

Wszystkie Skills
earthtojake
Społeczność

dfam-check

Measure mesh files against Design for Additive Manufacturing (DfAM) rules and report printability findings per process (FDM, SLS, SLA/DLP, metal PBF, MJF). Use when the user asks whether a part is printable, wants overhang/wall-thickness/support analysis of an .stl, .obj, .ply, or .3mf mesh, wants a build-orientation recommendation, or wants DfAM redesign guidance before slicing with $gcode or regenerating geometry with $cad.

instalacje
3
GitHub Stars
19,3 tys.
Aktualizacja
12 paź
earthtojake
Społeczność

dxf

Generate, regenerate, and validate 2D DXF drawings from Python build123d sources. Use for DXF files, .py drawing scripts, @dxf models, 2D profiles, outlines, templates, gaskets, panels, flat patterns, laser/plasma/waterjet cut layouts, and 2D drawing exports of CAD geometry. Open and visually review existing DXF files in CAD Viewer.

instalacje
3
GitHub Stars
19,3 tys.
Aktualizacja
12 paź
earthtojake
Społeczność

step-parts

Find, evaluate, and download common purchasable CAD parts from step.parts, including named off-the-shelf actuators, servos, motors, electronics boards, connectors, screws, bolts, nuts, washers, bearings, standoffs, and other catalog components. Use when Codex needs to search the hosted step.parts catalog before creating simplified placeholder geometry, resolve fuzzy part names, standards, aliases, or dimensions, choose a matching part, fetch a canonical .step file, verify checksums, or use the s

instalacje
3
GitHub Stars
19,3 tys.
Aktualizacja
12 paź
earthtojake
Społeczność

bambu-labs

Send prints to Bambu Lab printers through Bambu Connect, Bambu Lab's official app for printing from other software, or Bambu Studio. Use when the user wants to print a sliced .gcode.3mf, a Bambu .gcode or an unsliced model on a Bambu Lab printer, over Bambu Cloud or LAN. The agent opens the file in the app; the user picks the printer and starts the print there.

instalacje
2
GitHub Stars
19,2 tys.
Aktualizacja
11 paź