{"id":"ef12b57c-0ecb-4493-99b7-fcfc442d3cde","entityType":"agent","slug":"clawhub-antoniosilveira-openclaw-3d-printing-skill","name":"OpenClaw 3D Printing Skill","canonicalUrl":"https://www.xpersona.co/agent/clawhub-antoniosilveira-openclaw-3d-printing-skill","canonicalPath":"/agent/clawhub-antoniosilveira-openclaw-3d-printing-skill","generatedAt":"2026-10-11T10:52:14.412Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T07:45:46.447Z","emptyReason":null},"description":"Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and print... Skill: OpenClaw 3D Printing Skill Owner: antoniosilveira Summary: Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and print... Tags: 3d-printing:1.0.1, 3mf:1.0.1, cadquery:1.0.1, latest:1.0.1, stl:1.0.1 Version history: v1.0.1 | 2026-04-25T16:04:47.388Z | user Improve listing copy, add ClawHub install guidance, and pol","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1713rj5j2rce81vp56fz6cy3x85hah2:openclaw-3d-printing-skill","sourceUrl":"https://clawhub.ai/antoniosilveira/openclaw-3d-printing-skill","homepage":"https://clawhub.ai/antoniosilveira/skills/openclaw-3d-printing-skill","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/antoniosilveira/openclaw-3d-printing-skill","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/antoniosilveira/skills/openclaw-3d-printing-skill","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and print..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:45:46.447Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:45:46.447Z","emptyReason":null},"stars":null,"forks":null,"downloads":1121,"packageName":null,"latestVersion":"1.0.1","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:45:46.435Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T07:45:46.447Z","lastCrawledAt":"2026-10-11T07:45:46.435Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T07:45:46.435Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.1","createdAt":"2026-04-25T16:04:47.388Z","changelog":"Improve listing copy, add ClawHub install guidance, and polish discovery.","fileCount":14,"zipByteSize":18564},{"version":"1.0.0","createdAt":"2026-04-25T16:02:34.945Z","changelog":"Initial public release","fileCount":13,"zipByteSize":17184}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1713rj5j2rce81vp56fz6cy3x85hah2:openclaw-3d-printing-skill","setupComplexity":"medium","setupSteps":["Python environment detected. Create a strict virtual environment (`python -m venv .venv`) before installing dependencies to prevent system-level package conflicts.","Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T10:52:14.411Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-antoniosilveira-openclaw-3d-printing-skill/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T07:45:46.447Z","emptyReason":null},"readme":"Skill: OpenClaw 3D Printing Skill\n\nOwner: antoniosilveira\n\nSummary: Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and print...\n\nTags: 3d-printing:1.0.1, 3mf:1.0.1, cadquery:1.0.1, latest:1.0.1, stl:1.0.1\n\nVersion history:\n\nv1.0.1 | 2026-04-25T16:04:47.388Z | user\n\nImprove listing copy, add ClawHub install guidance, and polish discovery.\n\nv1.0.0 | 2026-04-25T16:02:34.945Z | user\n\nInitial public release\n\nArchive index:\n\nArchive v1.0.1: 14 files, 18564 bytes\n\nFiles: docs/plans/2026-04-24-openclaw-3d-printing-skill-design.md (3662b), docs/plans/2026-04-24-openclaw-3d-printing-skill-implementation.md (10513b), examples/enclosure-brief.md (568b), examples/simple-bracket.md (455b), README.md (8492b), references/design-review.md (1585b), references/requirements.txt (325b), scripts/mesh_io.py (773b), scripts/preview.py (4468b), scripts/run_cadquery_model.py (4898b), scripts/stl_to_3mf.py (1363b), skill-card.md (2263b), SKILL.md (4291b), _meta.json (145b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: parametric-3d-printing\ndescription: Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and printability. Use when the user wants a printable physical object such as a bracket, mount, enclosure, case, adapter, lid, organizer, fixture, or mechanical part; when they mention 3D printing, STL, 3MF, CadQuery, OpenSCAD, snap-fits, wall thickness, tolerances, screw bosses, or printer-specific constraints. Do not use for game assets, animation, sculpting, artistic rendering, photogrammetry, or editing an existing mesh without rebuilding it parametrically.\n---\n\n# Parametric 3D Printing\n\nDesign brackets, clips, cable guides, holders, mounts, adapters, enclosures, fixtures, and other functional 3D-printable parts with CadQuery. Generate clean STL or 3MF outputs, review fit and printability, and iterate quickly.\n\nUse CadQuery as the default modeling path. Keep models parametric, dimensioned in millimeters, and easy to revise.\n\n## Workflow\n\n1. Clarify the object, the must-fit dimensions, and the attachment method.\n2. Research exact dimensions for any real-world device or connector before modeling.\n3. Build in phases:\n   - base shape\n   - functional features\n   - finishing details\n4. After each meaningful phase, export an STL, render a preview, and review it before moving on.\n5. Deliver the final model with a short slicer recommendation.\n\nDo not jump straight to a finished complex model unless the part is trivial.\n\n## Gather requirements conversationally\n\nAsk only what is needed to unblock the design. Prefer this order:\n\n- what the part does\n- critical dimensions\n- how it mounts or mates\n- printer, material, and nozzle assumptions\n- any special constraints such as airflow, cable access, outdoor use, or weight\n\nUse reasonable defaults when the user does not care:\n- 0.4 mm nozzle\n- PLA\n- 0.2 mm layer height\n- 0.3 mm fit clearance for typical FDM parts unless tighter or looser fit is needed\n\n## Model rules\n\n- Use millimeters only.\n- Put editable dimensions at the top under a `PARAMETERS` section.\n- Keep the build script readable and grouped by feature.\n- Prefer bottom-on-bed geometry with `Z=0` at the print surface.\n- Add clearances deliberately. Do not model nominal press fits with zero tolerance.\n- For enclosures, shell inward when possible so outside dimensions stay stable.\n- Apply large fillets and chamfers last.\n- For parts with cavities, prefer direct 3MF export from CadQuery instead of STL-to-3MF conversion.\n\n## Dimension research\n\nWhen the part interfaces with a real product, search for exact dimensions first. Cross-check at least two sources when precision matters. Put sourced dimensions in comments near the parameters.\n\nExamples:\n- PCB size and hole spacing\n- USB-C opening size\n- charger puck diameter and thickness\n- screw sizes and hole patterns\n- cable bend clearance\n\n## Preview and validation loop\n\nUse the bundled scripts when present:\n\n- `scripts/run_cadquery_model.py model.py --preview --strict`\n- `scripts/preview.py model.stl preview.png --views multi`\n- `scripts/stl_to_3mf.py model.stl`\n\nRead `references/design-review.md` before final delivery or when a preview looks suspicious.\n\nAlways check:\n- overall proportions\n- flat printable base\n- overhang risk\n- thin walls or fragile features\n- whether holes, cutouts, and bosses are where you expect\n- watertight mesh status for exported STL files\n\n## Suggested script shape\n\n```python\nimport cadquery as cq\n\n# PARAMETERS\nwidth = 80.0\nheight = 30.0\ndepth = 20.0\nwall = 2.0\nclearance = 0.3\n\n# MODEL\nresult = (\n    cq.Workplane(\"XY\")\n    .box(width, depth, height, centered=(True, True, False))\n)\n\n# EXPORT\ncq.exporters.export(result, \"part.stl\", tolerance=0.01, angularTolerance=0.1)\n```\n\nIf the part has enclosed cavities and the environment supports it, also export `part.3mf` directly from CadQuery.\n\n## Delivery format\n\nReturn:\n- the main model file path\n- preview image path if generated\n- key dimensions\n- one short print recipe\n- any fit or support warnings\n\nKeep print advice short. Example:\n\n`Print settings: PLA, 0.2 mm layer, 3 walls, 20% gyroid, no supports. Orientation: flat back on the bed. Why: strongest layer direction for the bracket arms and no severe overhangs.`\n\nFile v1.0.1:README.md\n\n# OpenClaw 3D Printing Skill\n\nAn OpenClaw-native skill for designing **parametric 3D-printable parts** with **CadQuery**.\n\nIt helps an agent gather requirements, model physical parts parametrically, export STL or 3MF files, render previews, and iterate on fit, tolerances, and printability.\n\n## Quick start\n\n1. Install the skill from ClawHub or clone the repo into your OpenClaw skills directory.\n2. Use **Python 3.10 to 3.12** only.\n3. Install CadQuery using the platform guidance below.\n4. Verify `import cadquery as cq` works before trying previews or exports.\n\n## Install from ClawHub\n\n```bash\nopenclaw skills install openclaw-3d-printing-skill\n```\n\nOr with the ClawHub CLI:\n\n```bash\nclawhub install openclaw-3d-printing-skill\n```\n\n## 5-minute setup\n\n### macOS\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\nbrew install python@3.12\n/opt/homebrew/bin/python3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\n### Linux x86_64\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\npython3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\n### Linux arm64 / Raspberry Pi\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd /tmp\ncurl -L micro.mamba.pm/install.sh | bash\nsource ~/.bashrc\nmicromamba create -n cadquery312 -c conda-forge python=3.12 cadquery -y\nmicromamba activate cadquery312\npython -m pip install -r ~/.openclaw/workspace/skills/openclaw-3d-printing-skill/references/requirements.txt\n```\n\n## Install matrix\n\n| Platform | Recommended Python | Recommended CadQuery install path |\n|---|---|---|\n| macOS | 3.12 | Homebrew Python + `venv` + `pip install -r references/requirements.txt` |\n| Linux x86_64 | 3.12 | `venv` + `pip install -r references/requirements.txt` |\n| Linux arm64 / Raspberry Pi | 3.12 | `micromamba` + `conda-forge` for CadQuery, then `pip install -r references/requirements.txt` |\n\n## What it includes\n\n- `SKILL.md` with trigger and workflow guidance\n- `scripts/run_cadquery_model.py` for structured model execution and validation\n- `scripts/preview.py` for preview rendering\n- `scripts/mesh_io.py` for safe mesh loading\n- `scripts/stl_to_3mf.py` for STL to 3MF conversion\n- `references/design-review.md` for final review guidance\n- `references/requirements.txt` for Python dependency expectations\n- `examples/` for small prompt briefs\n\n## Install in OpenClaw\n\nClone or copy this repository into your OpenClaw skills directory so the repo root itself is the skill folder.\n\nExample:\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\n```\n\nOpenClaw should then discover the root `SKILL.md` automatically.\n\n## Python and CadQuery requirements\n\nUse **Python 3.10 to 3.12**. Python 3.13+ is not recommended for this skill yet because CadQuery wheel support is less reliable there.\n\nThis repo expects:\n- a working CadQuery install\n- the preview/export helper dependencies from `references/requirements.txt`\n- an isolated environment instead of system Python\n\nBefore doing anything else, verify CadQuery imports cleanly in the environment you plan to use.\n\n### Recommended install paths\n\n- **macOS**: use Python 3.12 and a local `venv`\n- **Linux x86_64**: try Python 3.12 and a local `venv` first\n- **Linux arm64 / Raspberry Pi**: prefer **micromamba + conda-forge** for CadQuery\n\n### macOS setup\n\nInstall Python 3.12 with Homebrew:\n\n```bash\nbrew install python@3.12\n```\n\nCreate a project-local environment and install dependencies:\n\n```bash\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\n/opt/homebrew/bin/python3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\nVerify:\n\n```bash\npython - <<'PY'\nimport cadquery as cq\nprint(\"CadQuery OK\", cq.__version__)\nPY\n```\n\n### Linux setup (x86_64)\n\nInstall Python 3.12 using your distro package manager if available, then:\n\n```bash\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\npython3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\nVerify:\n\n```bash\npython - <<'PY'\nimport cadquery as cq\nprint(\"CadQuery OK\", cq.__version__)\nPY\n```\n\n### Linux setup (arm64 / Raspberry Pi)\n\nCadQuery installation is usually more reliable through conda-forge than plain `pip` on arm64.\n\nInstall micromamba:\n\n```bash\ncd /tmp\ncurl -L micro.mamba.pm/install.sh | bash\nsource ~/.bashrc\n```\n\nCreate the environment:\n\n```bash\nmicromamba create -n cadquery312 -c conda-forge python=3.12 cadquery -y\nmicromamba activate cadquery312\npython -m pip install -r ~/.openclaw/workspace/skills/openclaw-3d-printing-skill/references/requirements.txt\n```\n\nVerify:\n\n```bash\npython - <<'PY'\nimport cadquery as cq\nprint(\"CadQuery OK\", cq.__version__)\nPY\n```\n\n## First successful test\n\nRun this after setup in the same environment you plan to use for the skill:\n\n```bash\npython - <<'PY'\nimport cadquery as cq\nbox = cq.Workplane(\"XY\").box(10, 20, 5)\ncq.exporters.export(box, \"test_box.stl\")\nprint(\"CadQuery OK\", cq.__version__)\nprint(\"STL export OK\")\nPY\n```\n\nIf that works, your CadQuery environment is ready for the skill.\n\n## Troubleshooting\n\n| Symptom | Likely cause | Fix |\n|---|---|---|\n| `ModuleNotFoundError: No module named 'cadquery'` | CadQuery is not installed in the active environment | Activate the right `venv` or `micromamba` env and reinstall |\n| `freecad_impl` or `No module named 'FreeCAD'` | You installed the legacy CadQuery 1.x package | Do not use plain `pip install cadquery`; use the recommended setup above |\n| `ModuleNotFoundError: trimesh` | Preview/export helper dependencies are missing | Run `python -m pip install -r references/requirements.txt` |\n| `python3.12: command not found` | Python 3.12 is not installed or not on PATH | Install Python 3.12 first, then recreate the environment |\n| `micromamba: command not found` | Micromamba is not installed or shell is not initialized | Install micromamba, then `source ~/.bashrc` or initialize the shell hook |\n| `micromamba activate ...` does not work | Shell hook is not loaded | Run `eval \"$($HOME/.local/bin/micromamba shell hook --shell bash)\"` |\n| CadQuery installs on Linux arm64 but import still fails | Wheel/solver mismatch or wrong environment | Recreate the env with `micromamba create -n cadquery312 -c conda-forge python=3.12 cadquery -y` |\n\n## Packaging the skill\n\nYou can validate and package the skill directly from the repo root:\n\n```bash\npython3 /path/to/openclaw/skills/skill-creator/scripts/package_skill.py . ./dist\n```\n\nThat should produce a `.skill` artifact in `dist/`.\n\n## Publish on ClawHub\n\nRecommended publish metadata for this repo:\n\n- **slug**: `openclaw-3d-printing-skill`\n- **name**: `OpenClaw 3D Printing Skill`\n- **version**: use semver like `1.0.0`, `1.0.1`, `1.1.0`\n- **tags**: keep `latest`\n\nLogin first:\n\n```bash\nclawhub login\nclawhub whoami\n```\n\nThen publish from the repo root:\n\n```bash\nclawhub skill publish . \\\n  --slug openclaw-3d-printing-skill \\\n  --name \"OpenClaw 3D Printing Skill\" \\\n  --version 1.0.0 \\\n  --tags latest \\\n  --changelog \"Initial public release\"\n```\n\nFor later updates, bump the version and changelog:\n\n```bash\nclawhub skill publish . \\\n  --slug openclaw-3d-printing-skill \\\n  --name \"OpenClaw 3D Printing Skill\" \\\n  --version 1.0.1 \\\n  --tags latest \\\n  --changelog \"Docs and install improvements\"\n```\n\n## Example usage\n\nSee `examples/` for short briefs you can adapt:\n\n- `examples/simple-bracket.md`\n- `examples/enclosure-brief.md`\n\n## Attribution\n\n**Inspired by** the original Claude-oriented CAD skill from Flowful:\n\n- [flowful-ai/cad-skill](https://github.com/flowful-ai/cad-skill)\n\nThis repository is an **OpenClaw-native adaptation** with its own packaging, layout, and workflow. It is **not an official fork** and is not affiliated with the original project.\n\n## License\n\nMIT. See `LICENSE`.\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn74dgmjrt0qvzvy6qcmh2g2pd821jx9\",\n  \"slug\": \"openclaw-3d-printing-skill\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1777133087388\n}\n\nFile v1.0.1:references/design-review.md\n\n# Design Review\n\nUse this checklist before sharing a final STL or 3MF.\n\n## Visual review\n\n- Does the overall shape match the request?\n- Are all requested holes, cutouts, slots, and bosses present?\n- Is there a stable print surface on the bed-facing side?\n- Are there obvious overhangs above roughly 45 degrees?\n- Do thin sections look printable for the chosen nozzle and material?\n- Are fillets and chamfers on the intended edges?\n- Does the part look proportionally correct next to the stated dimensions?\n\n## Dimensional review\n\nCheck the CadQuery bounding box before export:\n\n```python\nbb = result.val().BoundingBox()\nprint(bb.xlen, bb.ylen, bb.zlen)\n```\n\nVerify:\n- outer dimensions\n- hole spacing\n- internal clearance\n- lip and wall thickness\n- screw boss diameter and pilot size\n\n## Mesh review\n\nRun strict validation when possible:\n\n```bash\npython3 scripts/run_cadquery_model.py model.py --preview --strict\n```\n\nWarnings to pay attention to:\n- non-watertight mesh\n- zero or tiny volume\n- missing STL output\n- preview render failure\n\n## Printability heuristics\n\n- Standard structural FDM wall thickness: at least 1.2 mm\n- Snap fits usually need extra clearance and generous root fillets\n- Long cantilevers may need thicker sections or a different print orientation\n- Outdoor or warm-environment parts usually want PETG or ASA instead of PLA\n- Tall narrow parts may need a brim\n\n## Delivery reminder\n\nInclude:\n- final file path\n- preview path if available\n- critical dimensions\n- orientation recommendation\n- support requirement or no-support confirmation\n- one short slicer recipe\n\nFile v1.0.1:references/requirements.txt\n\n# Use Python 3.10-3.12 for the best CadQuery wheel support.\n# On Linux arm64 / Raspberry Pi, prefer micromamba + conda-forge for CadQuery itself.\n# After CadQuery works, install the rest of this file into the same environment.\ncadquery>=2.6.1,<3\ntrimesh>=4,<5\npyrender>=0.1.45,<0.2\nPillow>=10,<13\nnumpy>=1.24,<3\nlxml>=4.9,<7\n\nFile v1.0.1:docs/plans/2026-04-24-openclaw-3d-printing-skill-design.md\n\n# OpenClaw 3D Printing Skill — Design\n\nDate: 2026-04-24\nRepo: `antoniosilveira/openclaw-3d-printing-skill`\nIssue: #1\n\n## 1. Goal\n\nPublish the local `parametric-3d-printing` skill as a clean standalone open source project on Antonio's personal GitHub.\n\nThe project should be immediately usable by another OpenClaw user, easy to understand, and easy to package and share.\n\n## 2. Design choice\n\nApproved repo shape: **Option C**\n\nThis means:\n- installable skill files at repo root\n- `examples/` for practical usage examples\n- `docs/` for planning and future lightweight project docs\n\n## 3. Repository structure\n\n```text\nopenclaw-3d-printing-skill/\n├── SKILL.md\n├── README.md\n├── LICENSE\n├── .gitignore\n├── scripts/\n│   ├── mesh_io.py\n│   ├── preview.py\n│   ├── run_cadquery_model.py\n│   └── stl_to_3mf.py\n├── references/\n│   ├── design-review.md\n│   └── requirements.txt\n├── examples/\n│   ├── simple-bracket.md\n│   └── enclosure-brief.md\n└── docs/\n    └── plans/\n        └── 2026-04-24-openclaw-3d-printing-skill-design.md\n```\n\n## 4. Content strategy\n\n### Root level\n- `SKILL.md` stays installable directly from the repository root.\n- `README.md` explains what the skill does, how to install it into OpenClaw, the CadQuery dependency expectations, and how to package/test it.\n- `LICENSE` will be MIT.\n- `.gitignore` stays minimal and Python-oriented.\n\n### `scripts/`\nKeep the current runtime helpers as first-class project assets:\n- model runner\n- preview renderer\n- STL loader/validation helper\n- STL to 3MF converter\n\nThese stay small, readable, and usable outside the skill itself.\n\n### `references/`\nKeep detailed review and dependency guidance out of `SKILL.md` so the skill remains lean.\n\n### `examples/`\nUse examples as practical prompt inputs and expected usage patterns, not as long essays.\n\nPlanned v1 examples:\n- `simple-bracket.md`\n- `enclosure-brief.md`\n\n### `docs/`\nKeep docs intentionally light in v1.\n\nUse `docs/` for:\n- planning records\n- later contributor notes if needed\n- future release notes if the project grows\n\nDo not bloat the repo with excessive documentation in v1.\n\n## 5. Credit and attribution\n\nThe README should include a short explicit credit section:\n\n- mention that this project was **inspired by** `flowful-ai/cad-skill`\n- link to `https://github.com/flowful-ai/cad-skill`\n- clarify that this repository is an **OpenClaw-native adaptation**, not an official fork or affiliated project\n\nThis keeps the inspiration visible without overstating equivalence.\n\n## 6. Licensing\n\nUse **MIT** for this repository, as requested.\n\nNote: because the original inspiration project uses a different license posture, the README should be careful in wording:\n- credit the inspiration\n- avoid claiming code provenance unless we are intentionally copying exact code\n- position this repo as a fresh OpenClaw-focused implementation inspired by the original approach\n\n## 7. Initial implementation plan shape\n\nThe initial public release should include:\n- root skill files and scripts\n- MIT license\n- README with install and usage instructions\n- 2 small example briefs\n- packaging validation\n\nNot in v1:\n- CI\n- ClawHub publishing\n- advanced test harness\n- automatic CadQuery environment bootstrap\n\n## 8. Demo requirement\n\nBefore calling the initial release complete, show:\n- repository tree\n- packaged `.skill` artifact generation\n- README and attribution section\n\n## 9. Recommendation\n\nProceed with this structure exactly as written.\n\nIt is simple, OpenClaw-native, and gives the project room to grow without feeling overbuilt.\n\nFile v1.0.1:docs/plans/2026-04-24-openclaw-3d-printing-skill-implementation.md\n\n# OpenClaw 3D Printing Skill Implementation Plan\n\n> **For implementer:** Use TDD throughout. Write failing test first. Watch it fail. Then implement.\n\n**Goal:** Publish the local parametric 3D printing skill as a clean standalone open source GitHub project with docs, examples, MIT licensing, packaging validation, and explicit inspiration credit.\n\n**Architecture:** Keep the installable skill at repo root so the repository itself can be used directly as an OpenClaw skill. Add lightweight `examples/` and `docs/` folders around it, then verify the public project by packaging the skill and showing the resulting artifact plus repo tree.\n\n**Tech Stack:** Markdown, Python helper scripts, git, GitHub CLI, OpenClaw skill packaging script.\n\n---\n\n### Task 1: Establish repository metadata and ignore rules\n\n**Files:**\n- Create: `.gitignore`\n- Create: `LICENSE`\n- Modify: `docs/plans/2026-04-24-openclaw-3d-printing-skill-design.md`\n- Test: repo root file presence check\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nrequired = [Path('.gitignore'), Path('LICENSE')]\nmissing = [str(p) for p in required if not p.exists()]\nassert not missing, f\"Missing files: {missing}\"\nPY\n```\nExpected: FAIL because `.gitignore` and `LICENSE` do not exist yet.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nrequired = [Path('.gitignore'), Path('LICENSE')]\nmissing = [str(p) for p in required if not p.exists()]\nassert not missing, f\"Missing files: {missing}\"\nPY\n```\nExpected: FAIL with missing file paths.\n\n**Step 3: Write minimal implementation**\n- Add a minimal Python-friendly `.gitignore`\n- Add MIT license text with Antonio as copyright holder\n- Keep the design doc unchanged except for any tiny consistency fix if needed\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nrequired = [Path('.gitignore'), Path('LICENSE')]\nmissing = [str(p) for p in required if not p.exists()]\nassert not missing, f\"Missing files: {missing}\"\nprint('ok')\nPY\n```\nExpected: PASS and print `ok`.\n\n**Step 5: Commit**\n```bash\ngit add .gitignore LICENSE docs/plans/2026-04-24-openclaw-3d-printing-skill-design.md\ngit commit -m \"chore: add repo metadata for open source release (issue #1)\ndemo: verified root metadata files exist\"\n```\n\n### Task 2: Move the skill into the repository root structure\n\n**Files:**\n- Create: `SKILL.md`\n- Create: `scripts/mesh_io.py`\n- Create: `scripts/preview.py`\n- Create: `scripts/run_cadquery_model.py`\n- Create: `scripts/stl_to_3mf.py`\n- Create: `references/design-review.md`\n- Create: `references/requirements.txt`\n- Test: Python syntax compile for scripts\n\n**Step 1: Write the failing test**\nCommand:\n```bash\nbash -lc 'python3 -m py_compile scripts/*.py'\n```\nExpected: FAIL because the files do not exist yet.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\nbash -lc 'python3 -m py_compile scripts/*.py'\n```\nExpected: FAIL with missing file errors.\n\n**Step 3: Write minimal implementation**\n- Copy the working local skill contents into root-level `SKILL.md`, `scripts/`, and `references/`\n- Keep wording OpenClaw-native\n- Preserve lightweight helper scripts and references\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\nbash -lc 'python3 -m py_compile scripts/*.py'\n```\nExpected: PASS with no output.\n\n**Step 5: Commit**\n```bash\ngit add SKILL.md scripts references\ngit commit -m \"feat: add installable root skill files (issue #1)\ndemo: py_compile passed for all helper scripts\"\n```\n\n### Task 3: Add public README with attribution and install guidance\n\n**Files:**\n- Create: `README.md`\n- Test: README content assertions\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\ntext = Path('README.md').read_text()\nneedles = [\n    'Inspired by',\n    'https://github.com/flowful-ai/cad-skill',\n    'MIT',\n    'SKILL.md',\n    'CadQuery',\n]\nmissing = [n for n in needles if n not in text]\nassert not missing, f\"Missing README content: {missing}\"\nPY\n```\nExpected: FAIL because `README.md` does not exist yet.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\ntext = Path('README.md').read_text()\nneedles = [\n    'Inspired by',\n    'https://github.com/flowful-ai/cad-skill',\n    'MIT',\n    'SKILL.md',\n    'CadQuery',\n]\nmissing = [n for n in needles if n not in text]\nassert not missing, f\"Missing README content: {missing}\"\nPY\n```\nExpected: FAIL with file not found.\n\n**Step 3: Write minimal implementation**\nREADME sections:\n- project overview\n- what the skill does\n- install into OpenClaw\n- Python and CadQuery dependency expectations\n- packaging/validation instructions\n- inspiration credit with link to Flowful repo\n- explicit note that this is an OpenClaw-native adaptation, not an official fork\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\ntext = Path('README.md').read_text()\nneedles = [\n    'Inspired by',\n    'https://github.com/flowful-ai/cad-skill',\n    'MIT',\n    'SKILL.md',\n    'CadQuery',\n]\nmissing = [n for n in needles if n not in text]\nassert not missing, f\"Missing README content: {missing}\"\nprint('ok')\nPY\n```\nExpected: PASS and print `ok`.\n\n**Step 5: Commit**\n```bash\ngit add README.md\ngit commit -m \"docs: add public README with attribution (issue #1)\ndemo: verified README includes install and credit sections\"\n```\n\n### Task 4: Add examples and lightweight docs structure\n\n**Files:**\n- Create: `examples/simple-bracket.md`\n- Create: `examples/enclosure-brief.md`\n- Modify: `README.md`\n- Test: examples existence and README references\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nchecks = {\n    'examples/simple-bracket.md': Path('examples/simple-bracket.md').exists(),\n    'examples/enclosure-brief.md': Path('examples/enclosure-brief.md').exists(),\n}\nmissing = [name for name, ok in checks.items() if not ok]\nreadme = Path('README.md').read_text() if Path('README.md').exists() else ''\nassert not missing, f\"Missing example files: {missing}\"\nassert 'examples/' in readme, 'README does not mention examples/'\nPY\n```\nExpected: FAIL because the examples do not exist yet.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nchecks = {\n    'examples/simple-bracket.md': Path('examples/simple-bracket.md').exists(),\n    'examples/enclosure-brief.md': Path('examples/enclosure-brief.md').exists(),\n}\nmissing = [name for name, ok in checks.items() if not ok]\nreadme = Path('README.md').read_text() if Path('README.md').exists() else ''\nassert not missing, f\"Missing example files: {missing}\"\nassert 'examples/' in readme, 'README does not mention examples/'\nPY\n```\nExpected: FAIL.\n\n**Step 3: Write minimal implementation**\n- Add two short example prompt briefs\n- Update README to point readers to the examples folder\n- Keep examples concise and practical\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nchecks = {\n    'examples/simple-bracket.md': Path('examples/simple-bracket.md').exists(),\n    'examples/enclosure-brief.md': Path('examples/enclosure-brief.md').exists(),\n}\nmissing = [name for name, ok in checks.items() if not ok]\nreadme = Path('README.md').read_text()\nassert not missing, f\"Missing example files: {missing}\"\nassert 'examples/' in readme, 'README does not mention examples/'\nprint('ok')\nPY\n```\nExpected: PASS and print `ok`.\n\n**Step 5: Commit**\n```bash\ngit add examples README.md\ngit commit -m \"docs: add usage examples for the skill (issue #1)\ndemo: verified example files and README references\"\n```\n\n### Task 5: Validate packaging and repo shape for public release\n\n**Files:**\n- Modify: `README.md` if validation reveals a mismatch\n- Test: skill packaging command\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 /home/berry/.nvm/versions/node/v24.13.0/lib/node_modules/openclaw/skills/skill-creator/scripts/package_skill.py . ./dist\n```\nExpected: FAIL initially if any root layout or metadata issue remains.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 /home/berry/.nvm/versions/node/v24.13.0/lib/node_modules/openclaw/skills/skill-creator/scripts/package_skill.py . ./dist\n```\nExpected: either FAIL and reveal the last packaging mismatch, or PASS immediately if prior tasks already satisfied it.\n\n**Step 3: Write minimal implementation**\n- Fix any packaging issues only if validation finds them\n- Keep changes minimal\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 /home/berry/.nvm/versions/node/v24.13.0/lib/node_modules/openclaw/skills/skill-creator/scripts/package_skill.py . ./dist\n```\nExpected: PASS and emit a `.skill` artifact in `dist/`.\n\n**Step 5: Commit**\n```bash\ngit add .\ngit commit -m \"chore: validate package for initial release (issue #1)\ndemo: packaged root skill successfully\"\n```\n\n### Task 6: Demo the initial release and push the branch\n\n**Files:**\n- Modify: none unless demo reveals a final issue\n- Test: repo tree plus packaging artifact demonstration\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nassert Path('dist').exists(), 'dist directory missing'\nartifacts = list(Path('dist').glob('*.skill'))\nassert artifacts, 'No packaged skill artifact found'\nprint(artifacts[0])\nPY\n```\nExpected: FAIL until packaging has succeeded.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nassert Path('dist').exists(), 'dist directory missing'\nartifacts = list(Path('dist').glob('*.skill'))\nassert artifacts, 'No packaged skill artifact found'\nprint(artifacts[0])\nPY\n```\nExpected: FAIL if the packaging artifact is missing.\n\n**Step 3: Write minimal implementation**\n- Ensure packaging output exists\n- Capture repo tree, README attribution, and artifact path for demo\n- Push commits to GitHub after the demo is approved\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nassert Path('dist').exists(), 'dist directory missing'\nartifacts = list(Path('dist').glob('*.skill'))\nassert artifacts, 'No packaged skill artifact found'\nprint(artifacts[0])\nPY\n```\nExpected: PASS and print the packaged artifact path.\n\n**Step 5: Commit**\n```bash\ngit add .\ngit commit -m \"release: prepare initial public skill release (issue #1)\ndemo: showed repo tree, attribution, and packaged artifact\"\n```\n\nFile v1.0.1:examples/enclosure-brief.md\n\n# Enclosure brief example\n\nPrompt brief:\n\nCreate a two-piece enclosure for a small PCB and cable exit.\n\nRequirements:\n- internal cavity: 72 mm x 45 mm x 18 mm\n- wall thickness: 2 mm\n- removable lid with four screw posts\n- USB-C cable exit on one short side\n- clearance for a status LED window\n- printable on a Bambu Lab printer with PLA or PETG\n\nAsk for:\n- exact PCB hole spacing\n- USB-C opening dimensions\n- desired screw size\n- whether heat-set inserts are preferred\n\nDeliver:\n- phased previews during iteration\n- final STL or 3MF\n- orientation and support guidance\n\nFile v1.0.1:examples/simple-bracket.md\n\n# Simple bracket example\n\nPrompt brief:\n\nDesign a printable right-angle wall bracket for a lightweight sensor.\n\nRequirements:\n- vertical plate: 60 mm x 40 mm x 4 mm\n- horizontal shelf: 50 mm deep x 30 mm wide x 4 mm\n- two wall mounting holes for M4 screws, 40 mm apart vertically\n- generous fillets at the inside corner\n- optimized for PLA on a 0.4 mm nozzle\n- no supports if possible\n\nDeliver:\n- STL\n- preview image\n- short print settings recommendation\n\nFile v1.0.1:skill-card.md\n\n## Description:\n\nCreate parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and printability.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[antoniosilveira](https://clawhub.ai/user/antoniosilveira)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and makers use this skill to guide agents through requirement gathering, parametric CadQuery modeling, STL or 3MF export, preview rendering, and printability review for functional 3D-printed parts such as brackets, mounts, adapters, and enclosures.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Install instructions include a micromamba bootstrap flow that may fetch and execute remote installation code.\n\nMitigation: Review and replace the micromamba install path with a verified package-manager or checksum-validated installation flow before deployment.\n\nRisk: CadQuery model files are executable Python and can run arbitrary code when passed to the model runner.\n\nMitigation: Run only generated or trusted model scripts, preferably inside a disposable virtual environment or container without secrets or broad filesystem access.\n\n## Reference(s):\n\n- [Design Review](references/design-review.md)\n- [Python Requirements](references/requirements.txt)\n- [OpenClaw 3D Printing Skill on ClawHub](https://clawhub.ai/antoniosilveira/skills/openclaw-3d-printing-skill)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, Code, Shell commands, Configuration instructions, Files, Guidance]\n\n**Output Format:** [Markdown with inline Python and shell code blocks plus generated STL, 3MF, and PNG file paths when helper scripts are used]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses millimeters for model dimensions and returns concise print settings, fit warnings, and support or orientation guidance.]\n\n## Skill Version(s):\n\n1.0.1 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.0: 13 files, 17184 bytes\n\nFiles: docs/plans/2026-04-24-openclaw-3d-printing-skill-design.md (3662b), docs/plans/2026-04-24-openclaw-3d-printing-skill-implementation.md (10513b), examples/enclosure-brief.md (568b), examples/simple-bracket.md (455b), README.md (8290b), references/design-review.md (1585b), references/requirements.txt (325b), scripts/mesh_io.py (773b), scripts/preview.py (4468b), scripts/run_cadquery_model.py (4898b), scripts/stl_to_3mf.py (1363b), SKILL.md (4063b), _meta.json (145b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: parametric-3d-printing\ndescription: Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and printability. Use when the user wants a printable physical object such as a bracket, mount, enclosure, case, adapter, lid, organizer, fixture, or mechanical part; when they mention 3D printing, STL, 3MF, CadQuery, OpenSCAD, snap-fits, wall thickness, tolerances, screw bosses, or printer-specific constraints. Do not use for game assets, animation, sculpting, artistic rendering, photogrammetry, or editing an existing mesh without rebuilding it parametrically.\n---\n\n# Parametric 3D Printing\n\nUse CadQuery as the default modeling path. Keep models parametric, dimensioned in millimeters, and easy to revise.\n\n## Workflow\n\n1. Clarify the object, the must-fit dimensions, and the attachment method.\n2. Research exact dimensions for any real-world device or connector before modeling.\n3. Build in phases:\n   - base shape\n   - functional features\n   - finishing details\n4. After each meaningful phase, export an STL, render a preview, and review it before moving on.\n5. Deliver the final model with a short slicer recommendation.\n\nDo not jump straight to a finished complex model unless the part is trivial.\n\n## Gather requirements conversationally\n\nAsk only what is needed to unblock the design. Prefer this order:\n\n- what the part does\n- critical dimensions\n- how it mounts or mates\n- printer, material, and nozzle assumptions\n- any special constraints such as airflow, cable access, outdoor use, or weight\n\nUse reasonable defaults when the user does not care:\n- 0.4 mm nozzle\n- PLA\n- 0.2 mm layer height\n- 0.3 mm fit clearance for typical FDM parts unless tighter or looser fit is needed\n\n## Model rules\n\n- Use millimeters only.\n- Put editable dimensions at the top under a `PARAMETERS` section.\n- Keep the build script readable and grouped by feature.\n- Prefer bottom-on-bed geometry with `Z=0` at the print surface.\n- Add clearances deliberately. Do not model nominal press fits with zero tolerance.\n- For enclosures, shell inward when possible so outside dimensions stay stable.\n- Apply large fillets and chamfers last.\n- For parts with cavities, prefer direct 3MF export from CadQuery instead of STL-to-3MF conversion.\n\n## Dimension research\n\nWhen the part interfaces with a real product, search for exact dimensions first. Cross-check at least two sources when precision matters. Put sourced dimensions in comments near the parameters.\n\nExamples:\n- PCB size and hole spacing\n- USB-C opening size\n- charger puck diameter and thickness\n- screw sizes and hole patterns\n- cable bend clearance\n\n## Preview and validation loop\n\nUse the bundled scripts when present:\n\n- `scripts/run_cadquery_model.py model.py --preview --strict`\n- `scripts/preview.py model.stl preview.png --views multi`\n- `scripts/stl_to_3mf.py model.stl`\n\nRead `references/design-review.md` before final delivery or when a preview looks suspicious.\n\nAlways check:\n- overall proportions\n- flat printable base\n- overhang risk\n- thin walls or fragile features\n- whether holes, cutouts, and bosses are where you expect\n- watertight mesh status for exported STL files\n\n## Suggested script shape\n\n```python\nimport cadquery as cq\n\n# PARAMETERS\nwidth = 80.0\nheight = 30.0\ndepth = 20.0\nwall = 2.0\nclearance = 0.3\n\n# MODEL\nresult = (\n    cq.Workplane(\"XY\")\n    .box(width, depth, height, centered=(True, True, False))\n)\n\n# EXPORT\ncq.exporters.export(result, \"part.stl\", tolerance=0.01, angularTolerance=0.1)\n```\n\nIf the part has enclosed cavities and the environment supports it, also export `part.3mf` directly from CadQuery.\n\n## Delivery format\n\nReturn:\n- the main model file path\n- preview image path if generated\n- key dimensions\n- one short print recipe\n- any fit or support warnings\n\nKeep print advice short. Example:\n\n`Print settings: PLA, 0.2 mm layer, 3 walls, 20% gyroid, no supports. Orientation: flat back on the bed. Why: strongest layer direction for the bracket arms and no severe overhangs.`\n\nFile v1.0.0:README.md\n\n# OpenClaw 3D Printing Skill\n\nAn OpenClaw-native skill for designing **parametric 3D-printable parts** with **CadQuery**.\n\nIt helps an agent gather requirements, model physical parts parametrically, export STL or 3MF files, render previews, and iterate on fit, tolerances, and printability.\n\n## Quick start\n\n1. Install the skill into your OpenClaw skills directory.\n2. Use **Python 3.10 to 3.12** only.\n3. Install CadQuery using the platform guidance below.\n4. Verify `import cadquery as cq` works before trying previews or exports.\n\n## 5-minute setup\n\n### macOS\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\nbrew install python@3.12\n/opt/homebrew/bin/python3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\n### Linux x86_64\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\npython3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\n### Linux arm64 / Raspberry Pi\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd /tmp\ncurl -L micro.mamba.pm/install.sh | bash\nsource ~/.bashrc\nmicromamba create -n cadquery312 -c conda-forge python=3.12 cadquery -y\nmicromamba activate cadquery312\npython -m pip install -r ~/.openclaw/workspace/skills/openclaw-3d-printing-skill/references/requirements.txt\n```\n\n## Install matrix\n\n| Platform | Recommended Python | Recommended CadQuery install path |\n|---|---|---|\n| macOS | 3.12 | Homebrew Python + `venv` + `pip install -r references/requirements.txt` |\n| Linux x86_64 | 3.12 | `venv` + `pip install -r references/requirements.txt` |\n| Linux arm64 / Raspberry Pi | 3.12 | `micromamba` + `conda-forge` for CadQuery, then `pip install -r references/requirements.txt` |\n\n## What it includes\n\n- `SKILL.md` with trigger and workflow guidance\n- `scripts/run_cadquery_model.py` for structured model execution and validation\n- `scripts/preview.py` for preview rendering\n- `scripts/mesh_io.py` for safe mesh loading\n- `scripts/stl_to_3mf.py` for STL to 3MF conversion\n- `references/design-review.md` for final review guidance\n- `references/requirements.txt` for Python dependency expectations\n- `examples/` for small prompt briefs\n\n## Install in OpenClaw\n\nClone or copy this repository into your OpenClaw skills directory so the repo root itself is the skill folder.\n\nExample:\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\n```\n\nOpenClaw should then discover the root `SKILL.md` automatically.\n\n## Python and CadQuery requirements\n\nUse **Python 3.10 to 3.12**. Python 3.13+ is not recommended for this skill yet because CadQuery wheel support is less reliable there.\n\nThis repo expects:\n- a working CadQuery install\n- the preview/export helper dependencies from `references/requirements.txt`\n- an isolated environment instead of system Python\n\nBefore doing anything else, verify CadQuery imports cleanly in the environment you plan to use.\n\n### Recommended install paths\n\n- **macOS**: use Python 3.12 and a local `venv`\n- **Linux x86_64**: try Python 3.12 and a local `venv` first\n- **Linux arm64 / Raspberry Pi**: prefer **micromamba + conda-forge** for CadQuery\n\n### macOS setup\n\nInstall Python 3.12 with Homebrew:\n\n```bash\nbrew install python@3.12\n```\n\nCreate a project-local environment and install dependencies:\n\n```bash\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\n/opt/homebrew/bin/python3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\nVerify:\n\n```bash\npython - <<'PY'\nimport cadquery as cq\nprint(\"CadQuery OK\", cq.__version__)\nPY\n```\n\n### Linux setup (x86_64)\n\nInstall Python 3.12 using your distro package manager if available, then:\n\n```bash\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\npython3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\nVerify:\n\n```bash\npython - <<'PY'\nimport cadquery as cq\nprint(\"CadQuery OK\", cq.__version__)\nPY\n```\n\n### Linux setup (arm64 / Raspberry Pi)\n\nCadQuery installation is usually more reliable through conda-forge than plain `pip` on arm64.\n\nInstall micromamba:\n\n```bash\ncd /tmp\ncurl -L micro.mamba.pm/install.sh | bash\nsource ~/.bashrc\n```\n\nCreate the environment:\n\n```bash\nmicromamba create -n cadquery312 -c conda-forge python=3.12 cadquery -y\nmicromamba activate cadquery312\npython -m pip install -r ~/.openclaw/workspace/skills/openclaw-3d-printing-skill/references/requirements.txt\n```\n\nVerify:\n\n```bash\npython - <<'PY'\nimport cadquery as cq\nprint(\"CadQuery OK\", cq.__version__)\nPY\n```\n\n## First successful test\n\nRun this after setup in the same environment you plan to use for the skill:\n\n```bash\npython - <<'PY'\nimport cadquery as cq\nbox = cq.Workplane(\"XY\").box(10, 20, 5)\ncq.exporters.export(box, \"test_box.stl\")\nprint(\"CadQuery OK\", cq.__version__)\nprint(\"STL export OK\")\nPY\n```\n\nIf that works, your CadQuery environment is ready for the skill.\n\n## Troubleshooting\n\n| Symptom | Likely cause | Fix |\n|---|---|---|\n| `ModuleNotFoundError: No module named 'cadquery'` | CadQuery is not installed in the active environment | Activate the right `venv` or `micromamba` env and reinstall |\n| `freecad_impl` or `No module named 'FreeCAD'` | You installed the legacy CadQuery 1.x package | Do not use plain `pip install cadquery`; use the recommended setup above |\n| `ModuleNotFoundError: trimesh` | Preview/export helper dependencies are missing | Run `python -m pip install -r references/requirements.txt` |\n| `python3.12: command not found` | Python 3.12 is not installed or not on PATH | Install Python 3.12 first, then recreate the environment |\n| `micromamba: command not found` | Micromamba is not installed or shell is not initialized | Install micromamba, then `source ~/.bashrc` or initialize the shell hook |\n| `micromamba activate ...` does not work | Shell hook is not loaded | Run `eval \"$($HOME/.local/bin/micromamba shell hook --shell bash)\"` |\n| CadQuery installs on Linux arm64 but import still fails | Wheel/solver mismatch or wrong environment | Recreate the env with `micromamba create -n cadquery312 -c conda-forge python=3.12 cadquery -y` |\n\n## Packaging the skill\n\nYou can validate and package the skill directly from the repo root:\n\n```bash\npython3 /path/to/openclaw/skills/skill-creator/scripts/package_skill.py . ./dist\n```\n\nThat should produce a `.skill` artifact in `dist/`.\n\n## Publish on ClawHub\n\nRecommended publish metadata for this repo:\n\n- **slug**: `openclaw-3d-printing-skill`\n- **name**: `OpenClaw 3D Printing Skill`\n- **version**: use semver like `1.0.0`, `1.0.1`, `1.1.0`\n- **tags**: keep `latest`\n\nLogin first:\n\n```bash\nclawhub login\nclawhub whoami\n```\n\nThen publish from the repo root:\n\n```bash\nclawhub skill publish . \\\n  --slug openclaw-3d-printing-skill \\\n  --name \"OpenClaw 3D Printing Skill\" \\\n  --version 1.0.0 \\\n  --tags latest \\\n  --changelog \"Initial public release\"\n```\n\nFor later updates, bump the version and changelog:\n\n```bash\nclawhub skill publish . \\\n  --slug openclaw-3d-printing-skill \\\n  --name \"OpenClaw 3D Printing Skill\" \\\n  --version 1.0.1 \\\n  --tags latest \\\n  --changelog \"Docs and install improvements\"\n```\n\n## Example usage\n\nSee `examples/` for short briefs you can adapt:\n\n- `examples/simple-bracket.md`\n- `examples/enclosure-brief.md`\n\n## Attribution\n\n**Inspired by** the original Claude-oriented CAD skill from Flowful:\n\n- [flowful-ai/cad-skill](https://github.com/flowful-ai/cad-skill)\n\nThis repository is an **OpenClaw-native adaptation** with its own packaging, layout, and workflow. It is **not an official fork** and is not affiliated with the original project.\n\n## License\n\nMIT. See `LICENSE`.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn74dgmjrt0qvzvy6qcmh2g2pd821jx9\",\n  \"slug\": \"openclaw-3d-printing-skill\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1777132954945\n}\n\nFile v1.0.0:references/design-review.md\n\n# Design Review\n\nUse this checklist before sharing a final STL or 3MF.\n\n## Visual review\n\n- Does the overall shape match the request?\n- Are all requested holes, cutouts, slots, and bosses present?\n- Is there a stable print surface on the bed-facing side?\n- Are there obvious overhangs above roughly 45 degrees?\n- Do thin sections look printable for the chosen nozzle and material?\n- Are fillets and chamfers on the intended edges?\n- Does the part look proportionally correct next to the stated dimensions?\n\n## Dimensional review\n\nCheck the CadQuery bounding box before export:\n\n```python\nbb = result.val().BoundingBox()\nprint(bb.xlen, bb.ylen, bb.zlen)\n```\n\nVerify:\n- outer dimensions\n- hole spacing\n- internal clearance\n- lip and wall thickness\n- screw boss diameter and pilot size\n\n## Mesh review\n\nRun strict validation when possible:\n\n```bash\npython3 scripts/run_cadquery_model.py model.py --preview --strict\n```\n\nWarnings to pay attention to:\n- non-watertight mesh\n- zero or tiny volume\n- missing STL output\n- preview render failure\n\n## Printability heuristics\n\n- Standard structural FDM wall thickness: at least 1.2 mm\n- Snap fits usually need extra clearance and generous root fillets\n- Long cantilevers may need thicker sections or a different print orientation\n- Outdoor or warm-environment parts usually want PETG or ASA instead of PLA\n- Tall narrow parts may need a brim\n\n## Delivery reminder\n\nInclude:\n- final file path\n- preview path if available\n- critical dimensions\n- orientation recommendation\n- support requirement or no-support confirmation\n- one short slicer recipe\n\nFile v1.0.0:references/requirements.txt\n\n# Use Python 3.10-3.12 for the best CadQuery wheel support.\n# On Linux arm64 / Raspberry Pi, prefer micromamba + conda-forge for CadQuery itself.\n# After CadQuery works, install the rest of this file into the same environment.\ncadquery>=2.6.1,<3\ntrimesh>=4,<5\npyrender>=0.1.45,<0.2\nPillow>=10,<13\nnumpy>=1.24,<3\nlxml>=4.9,<7\n\nFile v1.0.0:docs/plans/2026-04-24-openclaw-3d-printing-skill-design.md\n\n# OpenClaw 3D Printing Skill — Design\n\nDate: 2026-04-24\nRepo: `antoniosilveira/openclaw-3d-printing-skill`\nIssue: #1\n\n## 1. Goal\n\nPublish the local `parametric-3d-printing` skill as a clean standalone open source project on Antonio's personal GitHub.\n\nThe project should be immediately usable by another OpenClaw user, easy to understand, and easy to package and share.\n\n## 2. Design choice\n\nApproved repo shape: **Option C**\n\nThis means:\n- installable skill files at repo root\n- `examples/` for practical usage examples\n- `docs/` for planning and future lightweight project docs\n\n## 3. Repository structure\n\n```text\nopenclaw-3d-printing-skill/\n├── SKILL.md\n├── README.md\n├── LICENSE\n├── .gitignore\n├── scripts/\n│   ├── mesh_io.py\n│   ├── preview.py\n│   ├── run_cadquery_model.py\n│   └── stl_to_3mf.py\n├── references/\n│   ├── design-review.md\n│   └── requirements.txt\n├── examples/\n│   ├── simple-bracket.md\n│   └── enclosure-brief.md\n└── docs/\n    └── plans/\n        └── 2026-04-24-openclaw-3d-printing-skill-design.md\n```\n\n## 4. Content strategy\n\n### Root level\n- `SKILL.md` stays installable directly from the repository root.\n- `README.md` explains what the skill does, how to install it into OpenClaw, the CadQuery dependency expectations, and how to package/test it.\n- `LICENSE` will be MIT.\n- `.gitignore` stays minimal and Python-oriented.\n\n### `scripts/`\nKeep the current runtime helpers as first-class project assets:\n- model runner\n- preview renderer\n- STL loader/validation helper\n- STL to 3MF converter\n\nThese stay small, readable, and usable outside the skill itself.\n\n### `references/`\nKeep detailed review and dependency guidance out of `SKILL.md` so the skill remains lean.\n\n### `examples/`\nUse examples as practical prompt inputs and expected usage patterns, not as long essays.\n\nPlanned v1 examples:\n- `simple-bracket.md`\n- `enclosure-brief.md`\n\n### `docs/`\nKeep docs intentionally light in v1.\n\nUse `docs/` for:\n- planning records\n- later contributor notes if needed\n- future release notes if the project grows\n\nDo not bloat the repo with excessive documentation in v1.\n\n## 5. Credit and attribution\n\nThe README should include a short explicit credit section:\n\n- mention that this project was **inspired by** `flowful-ai/cad-skill`\n- link to `https://github.com/flowful-ai/cad-skill`\n- clarify that this repository is an **OpenClaw-native adaptation**, not an official fork or affiliated project\n\nThis keeps the inspiration visible without overstating equivalence.\n\n## 6. Licensing\n\nUse **MIT** for this repository, as requested.\n\nNote: because the original inspiration project uses a different license posture, the README should be careful in wording:\n- credit the inspiration\n- avoid claiming code provenance unless we are intentionally copying exact code\n- position this repo as a fresh OpenClaw-focused implementation inspired by the original approach\n\n## 7. Initial implementation plan shape\n\nThe initial public release should include:\n- root skill files and scripts\n- MIT license\n- README with install and usage instructions\n- 2 small example briefs\n- packaging validation\n\nNot in v1:\n- CI\n- ClawHub publishing\n- advanced test harness\n- automatic CadQuery environment bootstrap\n\n## 8. Demo requirement\n\nBefore calling the initial release complete, show:\n- repository tree\n- packaged `.skill` artifact generation\n- README and attribution section\n\n## 9. Recommendation\n\nProceed with this structure exactly as written.\n\nIt is simple, OpenClaw-native, and gives the project room to grow without feeling overbuilt.\n\nFile v1.0.0:docs/plans/2026-04-24-openclaw-3d-printing-skill-implementation.md\n\n# OpenClaw 3D Printing Skill Implementation Plan\n\n> **For implementer:** Use TDD throughout. Write failing test first. Watch it fail. Then implement.\n\n**Goal:** Publish the local parametric 3D printing skill as a clean standalone open source GitHub project with docs, examples, MIT licensing, packaging validation, and explicit inspiration credit.\n\n**Architecture:** Keep the installable skill at repo root so the repository itself can be used directly as an OpenClaw skill. Add lightweight `examples/` and `docs/` folders around it, then verify the public project by packaging the skill and showing the resulting artifact plus repo tree.\n\n**Tech Stack:** Markdown, Python helper scripts, git, GitHub CLI, OpenClaw skill packaging script.\n\n---\n\n### Task 1: Establish repository metadata and ignore rules\n\n**Files:**\n- Create: `.gitignore`\n- Create: `LICENSE`\n- Modify: `docs/plans/2026-04-24-openclaw-3d-printing-skill-design.md`\n- Test: repo root file presence check\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nrequired = [Path('.gitignore'), Path('LICENSE')]\nmissing = [str(p) for p in required if not p.exists()]\nassert not missing, f\"Missing files: {missing}\"\nPY\n```\nExpected: FAIL because `.gitignore` and `LICENSE` do not exist yet.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nrequired = [Path('.gitignore'), Path('LICENSE')]\nmissing = [str(p) for p in required if not p.exists()]\nassert not missing, f\"Missing files: {missing}\"\nPY\n```\nExpected: FAIL with missing file paths.\n\n**Step 3: Write minimal implementation**\n- Add a minimal Python-friendly `.gitignore`\n- Add MIT license text with Antonio as copyright holder\n- Keep the design doc unchanged except for any tiny consistency fix if needed\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nrequired = [Path('.gitignore'), Path('LICENSE')]\nmissing = [str(p) for p in required if not p.exists()]\nassert not missing, f\"Missing files: {missing}\"\nprint('ok')\nPY\n```\nExpected: PASS and print `ok`.\n\n**Step 5: Commit**\n```bash\ngit add .gitignore LICENSE docs/plans/2026-04-24-openclaw-3d-printing-skill-design.md\ngit commit -m \"chore: add repo metadata for open source release (issue #1)\ndemo: verified root metadata files exist\"\n```\n\n### Task 2: Move the skill into the repository root structure\n\n**Files:**\n- Create: `SKILL.md`\n- Create: `scripts/mesh_io.py`\n- Create: `scripts/preview.py`\n- Create: `scripts/run_cadquery_model.py`\n- Create: `scripts/stl_to_3mf.py`\n- Create: `references/design-review.md`\n- Create: `references/requirements.txt`\n- Test: Python syntax compile for scripts\n\n**Step 1: Write the failing test**\nCommand:\n```bash\nbash -lc 'python3 -m py_compile scripts/*.py'\n```\nExpected: FAIL because the files do not exist yet.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\nbash -lc 'python3 -m py_compile scripts/*.py'\n```\nExpected: FAIL with missing file errors.\n\n**Step 3: Write minimal implementation**\n- Copy the working local skill contents into root-level `SKILL.md`, `scripts/`, and `references/`\n- Keep wording OpenClaw-native\n- Preserve lightweight helper scripts and references\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\nbash -lc 'python3 -m py_compile scripts/*.py'\n```\nExpected: PASS with no output.\n\n**Step 5: Commit**\n```bash\ngit add SKILL.md scripts references\ngit commit -m \"feat: add installable root skill files (issue #1)\ndemo: py_compile passed for all helper scripts\"\n```\n\n### Task 3: Add public README with attribution and install guidance\n\n**Files:**\n- Create: `README.md`\n- Test: README content assertions\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\ntext = Path('README.md').read_text()\nneedles = [\n    'Inspired by',\n    'https://github.com/flowful-ai/cad-skill',\n    'MIT',\n    'SKILL.md',\n    'CadQuery',\n]\nmissing = [n for n in needles if n not in text]\nassert not missing, f\"Missing README content: {missing}\"\nPY\n```\nExpected: FAIL because `README.md` does not exist yet.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\ntext = Path('README.md').read_text()\nneedles = [\n    'Inspired by',\n    'https://github.com/flowful-ai/cad-skill',\n    'MIT',\n    'SKILL.md',\n    'CadQuery',\n]\nmissing = [n for n in needles if n not in text]\nassert not missing, f\"Missing README content: {missing}\"\nPY\n```\nExpected: FAIL with file not found.\n\n**Step 3: Write minimal implementation**\nREADME sections:\n- project overview\n- what the skill does\n- install into OpenClaw\n- Python and CadQuery dependency expectations\n- packaging/validation instructions\n- inspiration credit with link to Flowful repo\n- explicit note that this is an OpenClaw-native adaptation, not an official fork\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\ntext = Path('README.md').read_text()\nneedles = [\n    'Inspired by',\n    'https://github.com/flowful-ai/cad-skill',\n    'MIT',\n    'SKILL.md',\n    'CadQuery',\n]\nmissing = [n for n in needles if n not in text]\nassert not missing, f\"Missing README content: {missing}\"\nprint('ok')\nPY\n```\nExpected: PASS and print `ok`.\n\n**Step 5: Commit**\n```bash\ngit add README.md\ngit commit -m \"docs: add public README with attribution (issue #1)\ndemo: verified README includes install and credit sections\"\n```\n\n### Task 4: Add examples and lightweight docs structure\n\n**Files:**\n- Create: `examples/simple-bracket.md`\n- Create: `examples/enclosure-brief.md`\n- Modify: `README.md`\n- Test: examples existence and README references\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nchecks = {\n    'examples/simple-bracket.md': Path('examples/simple-bracket.md').exists(),\n    'examples/enclosure-brief.md': Path('examples/enclosure-brief.md').exists(),\n}\nmissing = [name for name, ok in checks.items() if not ok]\nreadme = Path('README.md').read_text() if Path('README.md').exists() else ''\nassert not missing, f\"Missing example files: {missing}\"\nassert 'examples/' in readme, 'README does not mention examples/'\nPY\n```\nExpected: FAIL because the examples do not exist yet.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nchecks = {\n    'examples/simple-bracket.md': Path('examples/simple-bracket.md').exists(),\n    'examples/enclosure-brief.md': Path('examples/enclosure-brief.md').exists(),\n}\nmissing = [name for name, ok in checks.items() if not ok]\nreadme = Path('README.md').read_text() if Path('README.md').exists() else ''\nassert not missing, f\"Missing example files: {missing}\"\nassert 'examples/' in readme, 'README does not mention examples/'\nPY\n```\nExpected: FAIL.\n\n**Step 3: Write minimal implementation**\n- Add two short example prompt briefs\n- Update README to point readers to the examples folder\n- Keep examples concise and practical\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nchecks = {\n    'examples/simple-bracket.md': Path('examples/simple-bracket.md').exists(),\n    'examples/enclosure-brief.md': Path('examples/enclosure-brief.md').exists(),\n}\nmissing = [name for name, ok in checks.items() if not ok]\nreadme = Path('README.md').read_text()\nassert not missing, f\"Missing example files: {missing}\"\nassert 'examples/' in readme, 'README does not mention examples/'\nprint('ok')\nPY\n```\nExpected: PASS and print `ok`.\n\n**Step 5: Commit**\n```bash\ngit add examples README.md\ngit commit -m \"docs: add usage examples for the skill (issue #1)\ndemo: verified example files and README references\"\n```\n\n### Task 5: Validate packaging and repo shape for public release\n\n**Files:**\n- Modify: `README.md` if validation reveals a mismatch\n- Test: skill packaging command\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 /home/berry/.nvm/versions/node/v24.13.0/lib/node_modules/openclaw/skills/skill-creator/scripts/package_skill.py . ./dist\n```\nExpected: FAIL initially if any root layout or metadata issue remains.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 /home/berry/.nvm/versions/node/v24.13.0/lib/node_modules/openclaw/skills/skill-creator/scripts/package_skill.py . ./dist\n```\nExpected: either FAIL and reveal the last packaging mismatch, or PASS immediately if prior tasks already satisfied it.\n\n**Step 3: Write minimal implementation**\n- Fix any packaging issues only if validation finds them\n- Keep changes minimal\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 /home/berry/.nvm/versions/node/v24.13.0/lib/node_modules/openclaw/skills/skill-creator/scripts/package_skill.py . ./dist\n```\nExpected: PASS and emit a `.skill` artifact in `dist/`.\n\n**Step 5: Commit**\n```bash\ngit add .\ngit commit -m \"chore: validate package for initial release (issue #1)\ndemo: packaged root skill successfully\"\n```\n\n### Task 6: Demo the initial release and push the branch\n\n**Files:**\n- Modify: none unless demo reveals a final issue\n- Test: repo tree plus packaging artifact demonstration\n\n**Step 1: Write the failing test**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nassert Path('dist').exists(), 'dist directory missing'\nartifacts = list(Path('dist').glob('*.skill'))\nassert artifacts, 'No packaged skill artifact found'\nprint(artifacts[0])\nPY\n```\nExpected: FAIL until packaging has succeeded.\n\n**Step 2: Run test — confirm it fails**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nassert Path('dist').exists(), 'dist directory missing'\nartifacts = list(Path('dist').glob('*.skill'))\nassert artifacts, 'No packaged skill artifact found'\nprint(artifacts[0])\nPY\n```\nExpected: FAIL if the packaging artifact is missing.\n\n**Step 3: Write minimal implementation**\n- Ensure packaging output exists\n- Capture repo tree, README attribution, and artifact path for demo\n- Push commits to GitHub after the demo is approved\n\n**Step 4: Run test — confirm it passes**\nCommand:\n```bash\npython3 - <<'PY'\nfrom pathlib import Path\nassert Path('dist').exists(), 'dist directory missing'\nartifacts = list(Path('dist').glob('*.skill'))\nassert artifacts, 'No packaged skill artifact found'\nprint(artifacts[0])\nPY\n```\nExpected: PASS and print the packaged artifact path.\n\n**Step 5: Commit**\n```bash\ngit add .\ngit commit -m \"release: prepare initial public skill release (issue #1)\ndemo: showed repo tree, attribution, and packaged artifact\"\n```\n\nFile v1.0.0:examples/enclosure-brief.md\n\n# Enclosure brief example\n\nPrompt brief:\n\nCreate a two-piece enclosure for a small PCB and cable exit.\n\nRequirements:\n- internal cavity: 72 mm x 45 mm x 18 mm\n- wall thickness: 2 mm\n- removable lid with four screw posts\n- USB-C cable exit on one short side\n- clearance for a status LED window\n- printable on a Bambu Lab printer with PLA or PETG\n\nAsk for:\n- exact PCB hole spacing\n- USB-C opening dimensions\n- desired screw size\n- whether heat-set inserts are preferred\n\nDeliver:\n- phased previews during iteration\n- final STL or 3MF\n- orientation and support guidance\n\nFile v1.0.0:examples/simple-bracket.md\n\n# Simple bracket example\n\nPrompt brief:\n\nDesign a printable right-angle wall bracket for a lightweight sensor.\n\nRequirements:\n- vertical plate: 60 mm x 40 mm x 4 mm\n- horizontal shelf: 50 mm deep x 30 mm wide x 4 mm\n- two wall mounting holes for M4 screws, 40 mm apart vertically\n- generous fillets at the inside corner\n- optimized for PLA on a 0.4 mm nozzle\n- no supports if possible\n\nDeliver:\n- STL\n- preview image\n- short print settings recommendation","readmeExcerpt":"Skill: OpenClaw 3D Printing Skill Owner: antoniosilveira Summary: Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and print... Tags: 3d-printing:1.0.1, 3mf:1.0.1, cadquery:1.0.1, latest:1.0.1, stl:1.0.1 Version history: v1.0.1 | 2026-04-25T16:04:47.388Z | user Improve listing copy, add ClawHub install guidance, and pol","codeSnippets":[],"executableExamples":[{"language":"python","snippet":"import cadquery as cq\n\n# PARAMETERS\nwidth = 80.0\nheight = 30.0\ndepth = 20.0\nwall = 2.0\nclearance = 0.3\n\n# MODEL\nresult = (\n    cq.Workplane(\"XY\")\n    .box(width, depth, height, centered=(True, True, False))\n)\n\n# EXPORT\ncq.exporters.export(result, \"part.stl\", tolerance=0.01, angularTolerance=0.1)"},{"language":"bash","snippet":"openclaw skills install openclaw-3d-printing-skill"},{"language":"bash","snippet":"clawhub install openclaw-3d-printing-skill"},{"language":"bash","snippet":"git clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\nbrew install python@3.12\n/opt/homebrew/bin/python3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt"},{"language":"bash","snippet":"git clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\npython3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt"},{"language":"bash","snippet":"curl -L micro.mamba.pm/install.sh | bash"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: parametric-3d-printing\ndescription: Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and printability. Use when the user wants a printable physical object such as a bracket, mount, enclosure, case, adapter, lid, organizer, fixture, or mechanical part; when they mention 3D printing, STL, 3MF, CadQuery, OpenSCAD, snap-fits, wall thickness, tolerances, screw bosses, or printer-specific constraints. Do not use for game assets, animation, sculpting, artistic rendering, photogrammetry, or editing an existing mesh without rebuilding it parametrically.\n---\n\n# Parametric 3D Printing\n\nDesign brackets, clips, cable guides, holders, mounts, adapters, enclosures, fixtures, and other functional 3D-printable parts with CadQuery. Generate clean STL or 3MF outputs, review fit and printability, and iterate quickly.\n\nUse CadQuery as the default modeling path. Keep models parametric, dimensioned in millimeters, and easy to revise.\n\n## Workflow\n\n1. Clarify the object, the must-fit dimensions, and the attachment method.\n2. Research exact dimensions for any real-world device or connector before modeling.\n3. Build in phases:\n   - base shape\n   - functional features\n   - finishing details\n4. After each meaningful phase, export an STL, render a preview, and review it before moving on.\n5. Deliver the final model with a short slicer recommendation.\n\nDo not jump straight to a finished complex model unless the part is trivial.\n\n## Gather requirements conversationally\n\nAsk only what is needed to unblock the design. Prefer this order:\n\n- what the part does\n- critical dimensions\n- how it mounts or mates\n- printer, material, and nozzle assumptions\n- any special constraints such as airflow, cable access, outdoor use, or weight\n\nUse reasonable defaults when the user does not care:\n- 0.4 mm nozzle\n- PLA\n- 0.2 mm layer height\n- 0.3 mm fit clearance for typical FDM parts unless tighter or looser fit is needed\n\n## Model rules\n\n- Use millimeters only.\n- Put editable dimensions at the top under a `PARAMETERS` section.\n- Keep the build script readable and grouped by feature.\n- Prefer bottom-on-bed geometry with `Z=0` at the print surface.\n- Add clearances deliberately. Do not model nominal press fits with zero tolerance.\n- For enclosures, shell inward when possible so outside dimensions stay stable.\n- Apply large fillets and chamfers last.\n- For parts with cavities, prefer direct 3MF export from CadQuery instead of STL-to-3MF conversion.\n\n## Dimension research\n\nWhen the part interfaces with a real product, search for exact dimensions first. Cross-check at least two sources when precision matters. Put sourced dimensions in comments near the parameters.\n\nExamples:\n- PCB size and hole spacing\n- USB-C opening size\n- charger puck diameter and thickness\n- screw sizes and hole patterns\n- cable bend clearance\n\n## Preview and validation loop\n\nUse the bundled scripts when present:\n\n- `script"},{"path":"README.md","content":"# OpenClaw 3D Printing Skill\n\nAn OpenClaw-native skill for designing **parametric 3D-printable parts** with **CadQuery**.\n\nIt helps an agent gather requirements, model physical parts parametrically, export STL or 3MF files, render previews, and iterate on fit, tolerances, and printability.\n\n## Quick start\n\n1. Install the skill from ClawHub or clone the repo into your OpenClaw skills directory.\n2. Use **Python 3.10 to 3.12** only.\n3. Install CadQuery using the platform guidance below.\n4. Verify `import cadquery as cq` works before trying previews or exports.\n\n## Install from ClawHub\n\n```bash\nopenclaw skills install openclaw-3d-printing-skill\n```\n\nOr with the ClawHub CLI:\n\n```bash\nclawhub install openclaw-3d-printing-skill\n```\n\n## 5-minute setup\n\n### macOS\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\nbrew install python@3.12\n/opt/homebrew/bin/python3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\n### Linux x86_64\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\npython3.12 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip setuptools wheel\npython -m pip install -r references/requirements.txt\n```\n\n### Linux arm64 / Raspberry Pi\n\n```bash\ngit clone https://github.com/antoniosilveira/openclaw-3d-printing-skill.git ~/.openclaw/workspace/skills/openclaw-3d-printing-skill\ncd /tmp\ncurl -L micro.mamba.pm/install.sh | bash\nsource ~/.bashrc\nmicromamba create -n cadquery312 -c conda-forge python=3.12 cadquery -y\nmicromamba activate cadquery312\npython -m pip install -r ~/.openclaw/workspace/skills/openclaw-3d-printing-skill/references/requirements.txt\n```\n\n## Install matrix\n\n| Platform | Recommended Python | Recommended CadQuery install path |\n|---|---|---|\n| macOS | 3.12 | Homebrew Python + `venv` + `pip install -r references/requirements.txt` |\n| Linux x86_64 | 3.12 | `venv` + `pip install -r references/requirements.txt` |\n| Linux arm64 / Raspberry Pi | 3.12 | `micromamba` + `conda-forge` for CadQuery, then `pip install -r references/requirements.txt` |\n\n## What it includes\n\n- `SKILL.md` with trigger and workflow guidance\n- `scripts/run_cadquery_model.py` for structured model execution and validation\n- `scripts/preview.py` for preview rendering\n- `scripts/mesh_io.py` for safe mesh loading\n- `scripts/stl_to_3mf.py` for STL to 3MF conversion\n- `references/design-review.md` for final review guidance\n- `references/requirements.txt` for Python dependency expectations\n- `examples/` for small prompt briefs\n\n## Install in OpenClaw\n\nClone or copy this repository into your OpenClaw skills directory so the repo root itself is the skill folde"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn74dgmjrt0qvzvy6qcmh2g2pd821jx9\",\n  \"slug\": \"openclaw-3d-printing-skill\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1777133087388\n}"},{"path":"references/design-review.md","content":"# Design Review\n\nUse this checklist before sharing a final STL or 3MF.\n\n## Visual review\n\n- Does the overall shape match the request?\n- Are all requested holes, cutouts, slots, and bosses present?\n- Is there a stable print surface on the bed-facing side?\n- Are there obvious overhangs above roughly 45 degrees?\n- Do thin sections look printable for the chosen nozzle and material?\n- Are fillets and chamfers on the intended edges?\n- Does the part look proportionally correct next to the stated dimensions?\n\n## Dimensional review\n\nCheck the CadQuery bounding box before export:\n\n```python\nbb = result.val().BoundingBox()\nprint(bb.xlen, bb.ylen, bb.zlen)\n```\n\nVerify:\n- outer dimensions\n- hole spacing\n- internal clearance\n- lip and wall thickness\n- screw boss diameter and pilot size\n\n## Mesh review\n\nRun strict validation when possible:\n\n```bash\npython3 scripts/run_cadquery_model.py model.py --preview --strict\n```\n\nWarnings to pay attention to:\n- non-watertight mesh\n- zero or tiny volume\n- missing STL output\n- preview render failure\n\n## Printability heuristics\n\n- Standard structural FDM wall thickness: at least 1.2 mm\n- Snap fits usually need extra clearance and generous root fillets\n- Long cantilevers may need thicker sections or a different print orientation\n- Outdoor or warm-environment parts usually want PETG or ASA instead of PLA\n- Tall narrow parts may need a brim\n\n## Delivery reminder\n\nInclude:\n- final file path\n- preview path if available\n- critical dimensions\n- orientation recommendation\n- support requirement or no-support confirmation\n- one short slicer recipe"},{"path":"references/requirements.txt","content":"# Use Python 3.10-3.12 for the best CadQuery wheel support.\n# On Linux arm64 / Raspberry Pi, prefer micromamba + conda-forge for CadQuery itself.\n# After CadQuery works, install the rest of this file into the same environment.\ncadquery>=2.6.1,<3\ntrimesh>=4,<5\npyrender>=0.1.45,<0.2\nPillow>=10,<13\nnumpy>=1.24,<3\nlxml>=4.9,<7"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and print... Skill: OpenClaw 3D Printing Skill Owner: antoniosilveira Summary: Create parametric 3D-printable parts and enclosures with CadQuery, export STL or 3MF files, render review previews, and iterate on fit, tolerances, and print... Tags: 3d-printing:1.0.1, 3mf:1.0.1, cadquery:1.0.1, latest:1.0.1, stl:1.0.1 Version history: v1.0.1 | 2026-04-25T16:04:47.388Z | user Improve listing copy, add ClawHub install guidance, and pol","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1350,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T07:45:46.447Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T07:45:46.447Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T10:52:14.412Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}