# Printable 3D Models

Creates or changes printable 3D models and keeps their editable source files.

- Repository: https://github.com/amagine-ai/Amagine3D (6288 stars)
- Category: Design
- License: Apache-2.0
- Last updated: 2026-10-22
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add amagine-ai/Amagine3D --skill a3d-text -g -a claude-code -y`
Codex: `npx skills add amagine-ai/Amagine3D --skill a3d-text -g -a codex -y`
Cursor: `npx skills add amagine-ai/Amagine3D --skill a3d-text -g -a cursor -y`
Gemini CLI: `npx skills add amagine-ai/Amagine3D --skill a3d-text -g -a gemini-cli -y`

## Description

Create or modify printable 3D models and their editable sources.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# a3d-text

Read exactly `$AMAGINE3D_SKILL_DIR/SKILL.md` once; never substitute a cwd or global namesake.
Examples live in `$AMAGINE3D_SKILL_DIR/examples/`; references in `$AMAGINE3D_RUNTIME_DIR/references/`.
On continuation/compaction use `a3d agent context` and its nextInspect/nextDesignRead; reuse known contracts until capabilityVersion changes.
Keep editable designs or build123d BRep source and STEP masters in the workspace. Intent owns requirements; source owns controls.
Unless tolerances/fits override them, exterior dimensions use nominal ±0.1 mm and checks 0.01 mm precision. Never relax QA targets.

<!-- a3d-workflow:v2 classify > functional-draft > feedback > contract > compile > evidence-repair -->

## Draft and review

Prefer DSL, including for enclosures; name unsupported geometry/binding before Python fallback.
Batch only needed contracts: `a3d agent capabilities '{"designOps":["open_box","hole"]}'` (Python: symbols).
Results page by output size. Follow page.nextRequest with `a3d agent inspect`; do not preload contracts or references.
Starter: configurable cube; full: `$AMAGINE3D_SKILL_DIR/examples/open_box.a3d.json`; edit: `$AMAGINE3D_RUNTIME_DIR/references/parametric-design.md`:

Use useful independent controls with bilingual labels/ranges, shared IDs for related geometry, and expressions for derived dimensions. Preserve frozen intent/QA; a range is not a manufacturing guarantee.

```json
{"action":"apply","design":"model.a3d.json","baseRevision":null,"changes":[{"kind":"add","target":"params.size","value":{"type":"length","value":80,"range":[50,100],"label":{"en":"Overall size","zh":"整体尺寸"}}},{"kind":"add","target":"params.wall","value":{"type":"length","value":2,"range":[1,4],"label":{"en":"Wall thickness","zh":"壁厚"}}},{"kind":"add","target":"parts.body","value":{"result":"@body.shell"}},{"kind":"add","target":"body.shell","value":{"op":"open_box","size":["=size","=size","=size"],"wall":"=wall","floor":"=wall"}}]}
```

The rest: https://github.com/amagine-ai/Amagine3D/blob/HEAD/skills/a3d-text/SKILL.md
