← text-to-cadCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to text-to-cad
Snapshot Oct 6, 2026 · 00:02 UTC · version 0.7.10
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "URDF robot description authoring and validation. Use when creating, editing, inspecting, validating, or debugging `.urdf` files, robot links, joints, limits, inertials, visual/collision geometry, mesh references, frame conventions, or robot-description artifacts. Use the SRDF skill for MoveIt2 semantic groups and IK/path-planning semantics; use the CAD skill for STEP/STL/3MF/DXF/GLB outputs. Open and visually review existing URDF files in CAD Viewer.",
"included_files": [
{
"relative_path": "LICENSE",
"size_in_bytes": 1074
},
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 285
},
{
"relative_path": "references/authoring-contract.md",
"size_in_bytes": 6743
},
{
"relative_path": "references/design-ledger.md",
"size_in_bytes": 5398
},
{
"relative_path": "references/frame-semantics.md",
"size_in_bytes": 3596
},
{
"relative_path": "references/inertials.md",
"size_in_bytes": 5016
},
{
"relative_path": "references/meshes.md",
"size_in_bytes": 3905
},
{
"relative_path": "references/urdf-workflow.md",
"size_in_bytes": 5779
},
{
"relative_path": "references/validation.md",
"size_in_bytes": 4833
},
{
"relative_path": "requirements.txt",
"size_in_bytes": 25
}
],
"name": "urdf",
"skill_md_contents": "---\nname: urdf\ndescription: URDF robot description authoring and validation. Use when creating, editing, inspecting, validating, or debugging `.urdf` files, robot links, joints, limits, inertials, visual/collision geometry, mesh references, frame conventions, or robot-description artifacts. Use the SRDF skill for MoveIt2 semantic groups and IK/path-planning semantics; use the CAD skill for STEP/STL/3MF/DXF/GLB outputs. Open and visually review existing URDF files in CAD Viewer.\nlicense: MIT\n---\n\n# URDF\n\nProvenance: maintained in [earthtojake/text-to-cad](https://github.com/earthtojake/text-to-cad).\nUse the installed local skill files as the runtime source of truth; the\nrepository link is only for provenance and release review.\n\nUse this skill for URDF robot-description outputs. Treat URDF work as constrained kinematic modeling, not just XML writing. The main correctness risks are frame placement, joint-axis semantics, unit consistency, mesh scale, and inertial data.\n\n## Setup\n\nThis skill's commands are thin entrypoints over the `cadgen` distribution, which\ncarries the Python build runtime and the JavaScript it executes. Install it once:\n\n```bash\npython -m pip install -r requirements.txt\n```\n\nSnapshots additionally need a browser, which pip cannot supply:\n\n```bash\npython -m playwright install chromium\n```\n\n## Core Rules\n\n1. The `.urdf` file is the source of truth. Author and edit URDF XML directly; do not build a Python generation pipeline for it. There is no `gen_urdf()` contract.\n2. Before writing or changing URDF XML, establish the robot's frame, joint, geometry, unit, and assumption ledger and embed it as a comment block at the top of the `.urdf` file. See `references/design-ledger.md`.\n3. Use URDF frame semantics exactly. Joint origins, link frames, joint axes, and visual/collision/inertial origins use different reference frames. See `references/frame-semantics.md`.\n4. Do not infer spatial transforms, mesh units, handedness, axes, or joint signs from vague prose. Use CAD transforms, dimensioned drawings, measured values, existing source data, or explicit documented assumptions.\n5. Never freehand numeric values that are the result of computation — inertia tensors, centers of mass, unit conversions across many links, mirrored transforms. Compute them: closed-form formulas for primitives, or a throwaway helper script for mesh-derived values. See `references/inertials.md`.\n6. For physical links, model `inertial`, `visual`, and `collision` separately when the target consumer needs them. Frame-only links may intentionally omit mass and geometry.\n7. Validate every created or modified `.urdf` with `cadgen urdf validate` before reporting completion. See `references/validation.md`.\n8. Helper scripts are allowed and encouraged for computation, but they are scaffolding, not the artifact's source of truth. For complex or genuinely parametric models it is reasonable to keep a model-local helper script on disk next to related source code (for example STEP generator sources) and note it in the ledger; this is optional, and the checked-in `.urdf` remains canonical.\n\n## Show the model\n\nShow the user each file you create or change, and any they ask to see. Snapshots and\nvalidation don't replace this.\n\n- If your tools include `cad_show` (your host may prefix it), use it, and follow its\n description for when to call it again. `cad_view` reads what the user selected;\n `cad_screenshot` shows you what they see. Neither is a review of your own work.\n- Otherwise run the CAD Viewer from the models directory (usually `models/`, not an\n artifact's output folder):\n\n ```bash\n cd /absolute/path/to/model-workspace && cadgen viewer --host 127.0.0.1 --json --detach\n ```\n\n `--detach` returns once the viewer answers requests and leaves it running in the\n background: always pass it, since a foreground viewer never exits (and piping its\n output through `tail` can hide the URL for good). It starts or reuses the viewer.\n Read `url` from its one JSON line (never guess the port); for each file under that\n directory return `url?file=<URL-encoded relative path>`, or `url` alone to review the\n directory. If it fails to launch, say so.\n\nReview mesh scale and placement, then sweep every movable joint against the\ndesign ledger. A link alone does not complete the [viewer sweep](references/validation.md);\nreport any checks you could not perform.\n\n## Workflow\n\n1. Identify the target `.urdf` file and its consumers: RViz, robot_state_publisher, Gazebo/Ignition, MoveIt, a real robot driver, or another simulator.\n2. Read or create the design ledger before editing frames, origins, axes, mesh scale, limits, or inertials. Keep the ledger as a comment block in the `.urdf` itself.\n3. Prepare mesh assets first when links reference meshes: one mesh per link, exported in that link's frame by the owning CAD/mesh workflow. See `references/meshes.md`.\n4. Author or edit the URDF XML directly, following `references/authoring-contract.md` for structure, ordering, and naming.\n5. Compute — never guess — inertials and other derived numbers. See `references/inertials.md`.\n6. Validate with `cadgen urdf validate`; fix findings and re-validate until clean.\n7. Run the verification recipe in `references/validation.md`: external tools when available (`check_urdf`), then a viewer review sweeping every joint.\n8. Report remaining assumptions, unchecked spatial data, and validation gaps.\n\n## Commands\n\nRun `cadgen` from the Python environment this skill's `requirements.txt` was installed into (`python -m cadgen.cli <verb>` with that interpreter is the PATH-independent equivalent). `cadgen doctor <skill-dir>` verifies the installed cadgen matches this skill's pin — docs drift silently on a mismatched install. Validation itself needs nothing beyond the Python standard library; only snapshots need the browser. Use `cadgen <verb> --help` for the complete current interface.\n\nThe validator shape is:\n\n```bash\ncadgen urdf validate path/to/robot.urdf\ncadgen urdf validate path/to/robot.urdf --strict\ncadgen urdf validate path/to/robot.urdf --json\ncadgen urdf validate path/to/robot.urdf --packages robot_description=/path/to/pkg\ncadgen urdf snapshot path/to/robot.urdf review.png\n```\n\nThe validator collects all findings in one pass (severity, code, XML path) across XML structure, tree topology, joint semantics (limits, mimic, dynamics), geometry, mesh references, materials, inertial physics, and misspelled elements, and prints a summary. One run validates ONE file: `--strict` treats warnings as failures; `--json` prints one line of `{\"ok\", \"path\", \"issues\": [{\"severity\", \"code\", \"message\", \"element\", \"hint\"}], \"summary\"}`, where `element` is the XML path; `--packages NAME=PATH` resolves `package://` mesh URIs and repeats for several roots. It exits nonzero if the target fails. Relative targets resolve from the current working directory; run from the workspace that owns the files.\n\nValidation is a guardrail, not spatial proof: a URDF can pass every structural check while placing a joint in the wrong spot. The ledger and viewer sweep exist for that reason.\n\n## Snapshot Tool\n\n`cadgen urdf snapshot` renders the robot to a PNG still, using the same shared\nCLI and headless browser runtime every rendering skill uses — so a snapshot matches what\nthe CAD Viewer shows.\n\n```bash\ncadgen urdf snapshot path/to/robot.urdf review.png\n```\n\nIt accepts `.urdf` only. Pose the robot with `--joint-values` — `{joint: degrees}` JSON,\njoints you do not name staying at their defaults, where the CAD Viewer opens the robot (the\n`\"jointValues\"` job field is the same thing in a packet). The snapshot draws the robot with the\nviewer's own scene, so it shows what the viewer shows, and a link mesh that cannot be loaded\nfails it rather than leaving the link out. Robots are authored in metres and are framed on the\nrobot scene scale automatically.\n\nA normal snapshot uses the Solid preset and Light appearance; omitted groups inherit preset defaults.\nPass `--display render` for the shared photographic scene. Inline display JSON and\nJSON files use grouped settings such as `lighting`, `background`, and `floor`;\n`appearance` is `light` (default) or `dark`. Projection and focal length belong\nin `display.camera`. Top-level `--camera` and `--joint-values` remain active in every display\nmode. The display modes are `solid` and `render`: `edges`, `clip`, `exploded`, the\n`xray`, `hidden-line` and `wireframe` modes and the `hidden`/`off` surface styles\ndescribe a STEP model's CAD edges, parts and solids, and are refused by name here.\n\nLink meshes are resolved relative to the description, so they must be present: an\nunhydrated Git LFS pointer fails as \"No link mesh loaded for robot\". Run\n`git lfs checkout <mesh dir>` first.\n\nThe grammar is `cadgen urdf snapshot TARGET [OUT] [flags]`, the same one every\nformat door uses. Use `cadgen urdf snapshot --help` for the complete current\ninterface — the flags a robot cannot act on are absent from it, not refused by it.\n\n## References\n\n- Authoring contract (structure, ordering, golden skeleton): `references/authoring-contract.md`\n- Design ledger: `references/design-ledger.md`\n- Frame semantics: `references/frame-semantics.md`\n- Mesh preparation and references: `references/meshes.md`\n- Inertials (formulas, scripts, sanity gates): `references/inertials.md`\n- URDF edit workflow: `references/urdf-workflow.md`\n- Validation and verification recipe: `references/validation.md`\n"
}SHA-256 of public snapshot: 5711ea38bfe9777fabc72c4ea6c8366804a5c2e58b4704fa8fb91a6000cd8892