text-to-cad is a collection of agent workflows for creating, examining, finding, preparing, and transferring CAD, engineering, manufacturing, and robot-description files. It is for agents working with mechanical design, fabrication, simulation, and robotics projects. Catalogue skills, instructions, and a plugin implement these workflows.
Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add earthtojake/text-to-cad --skill engineering-drawinggit clone --depth 1 https://github.com/earthtojake/text-to-cadWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/earthtojake/text-to-cad/engineering-drawing)<a href="https://agentmods.dev/skills/earthtojake/text-to-cad/engineering-drawing"><img src="https://agentmods.dev/badge/skills/earthtojake/text-to-cad/engineering-drawing/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/earthtojake/text-to-cad/engineering-drawing"><img src="https://agentmods.dev/badge/skills/earthtojake/text-to-cad/engineering-drawing.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- Socket pass
- Snyk pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00086 | $0.01942 |
| Opus 5.5 | $0.00034 | $0.00777 |
| Sonnet 5.5 | $0.00017 | $0.00388 |
| Haiku 4.5 | $0.00009 | $0.00194 |
Grade A, and why
engineering-drawing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 133 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Engineering drawing
Provenance: maintained in earthtojake/text-to-cad. Use the installed local skill files as the runtime source of truth.
An engineering drawing is a DOCUMENT derived from a part. cadgen.eng_drawing
projects views from the part's geometry, places dimensions between points ON
that geometry, finds centre marks on it, and lays the result out on an ISO
sheet with a frame and a title block. Change the model, rerun the drawing
script, and the views, hidden lines and measured values move with it. Nothing
on the sheet is drawn by hand, and nothing on it is a number you typed unless
you chose to override a value.
The output is one PDF. That is what a shop receives and what every
operating system opens. No DXF is written, nothing is paired or linked, and
there is no CLI: the script is the interface. $dxf makes cut layouts and flat
patterns, which are toolpaths, not documents; the two are different jobs.
Setup
Run cadgen through uv, so this skill's commands share one installation, and its warm build daemon, with the CAD app's server:
cadgenbelow meansuvx --no-config --managed-python --python 3.13 --from cadgen==0.7.21 cadgenpythonbelow meansuvx --no-config --managed-python --python 3.13 --from cadgen==0.7.21 python
The first run downloads that installation; later runs reuse it.
Workflow
- Get the part.
cadgen.read_step(Path(__file__).parent / "../STEP/part.step")reads the artifact a@stepmodel wrote (runpython <model>.pyfirst); a live build123d shape works just as well. The drawing documents geometry, it does not build it. - Write
<name>_drawing.pybeside the model, from the template. Import the model facts the dimensions reference (hole pitch, overall size, wall) from the model module rather than retyping them, so moving a feature moves its dimension. - Place views with
sheet.three_views(part, iso=True), which returns FOUR views: top, front and right in third angle with room for two rows of dimensions, plus an isometric in the free corner.sheet.three_views(part)returns three. Usesheet.view(part, name, at=(x, y))(sheet millimetres from the bottom-left corner; A3 is 420 × 297, A4 is 297 × 210) only for a custom layout. - Dimension what a maker needs, in MODEL coordinates: overall size per view
(
view.overall()), feature positions and sizes (view.dim, withtol=orfit=where the design requires one), holes as callouts (view.hole: thru, depth, counterbore, countersink, thread), and notes with leaders (view.note). Leavetextunset so the dimension is measured; give a value only where the model does not define it. Leaveoffsetunset too and the dimension takes the next free row outside the view; pass one only to place a dimension deliberately, and remember it is measured from the dimension's own points, not the view's edge. Keep notes few and short; one wider than the sheet's note column is refused, andnotes=takes a LIST (notes="BREAK EDGES"is a sequence of eleven characters, so it is refused too). - Run
python <name>_drawing.py. It prints the PDF it wrote, and anything it noticed while drawing — read those first:- "measures blank paper": the dimension's model points do not land on the view's geometry. Almost always the part was built from a corner and the script assumed it was centred. Check the part's bounding box.
- "annotation overlaps": two callouts print on top of each other, usually
one view's outermost dimension against the label of the view above it.
Pass a bigger
three_views(gap=...)or place one withoffset=. The text is measured as the renderer draws it, glyph by glyph, so this fires on ink and not on markup: a chain of toleranced dimensions is silent when the values clear each other.
What ships with it
3 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago Changed cf1b2fe1fc14
- 5d ago Changed aa01e074cdc6
- 6d ago Changed 403f0ffb6783
- 7d ago Changed 7e0cb809c9b5
- 9d ago Changed 7b6cf05641e5
- 10d ago Changed · +10 lines a0fec37b96e7
- 12d ago Changed · +1 lines 4a1c700921ea
- 24d ago First seen · 122 lines · 86 tokens per session scan A 06dfddcada69
engineering-drawing is a skill published in the GitHub repository earthtojake/text-to-cad (20,702 stars, last pushed today), licensed MIT. It adds 86 tokens to every session and 1,942 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-22.
Other skills, from other repositories
foundry-hosted-agent-validation
Step-by-step process for validating a Python Foundry hosted agent sample (under python/samples/04-hosting/foundry-hosted-agents/) end to end — running it locally (native runtime and azd ai agent run) and after deploying it to an Azure AI Foundry project with azd. Use this when asked to validate a hosted agent sample.
pdf-processing
Extract text from PDFs, fill forms, and merge documents.
azure-ai-document-intelligence-ts
Extract text, tables, and structured data from documents using Azure Document Intelligence (@azure-rest/ai-document-intelligence). Use when processing invoices, receipts, IDs, forms, or building custom document models.
pandoc
Convert documents between formats (Markdown, DOCX, HTML, PDF, RST, EPUB, LaTeX) via the pandoc CLI. Use to transform a document from one format to another.
Manipulate PDF files — merge, split, extract pages/text, PDF↔images, OCR, info — via the qpdf / poppler / ocrmypdf CLIs. Use to combine, slice, convert, or OCR PDFs.
pdf-processing
Process and extract information from PDF documents. Use this skill when the user asks to read, analyze, or extract data from PDF files.