{"id":"b3b2dde1-d1b3-499d-bac2-b76d19cb2327","entityType":"agent","slug":"clawhub-lzyling-3d-print-model-splitting","name":"3d Print Model Splitting","canonicalUrl":"https://www.xpersona.co/agent/clawhub-lzyling-3d-print-model-splitting","canonicalPath":"/agent/clawhub-lzyling-3d-print-model-splitting","generatedAt":"2026-10-11T20:57:39.258Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T17:56:42.245Z","emptyReason":null},"description":"Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/m... Skill: 3d Print Model Splitting Owner: lzyling Summary: Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/m... Tags: 3d-printing:1.0.1, bambu:1.0.1, blender:1.0.1, latest:1.0.1, stl:1.0.1 Version history: v1.0.1 | 2026-05-12T11:29:11.460Z | user Add mandatory preview gates; require capped split baselines with bou","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17b20pjwm3e6gpzdhjbtfr3es84rtrw:3d-print-model-splitting","sourceUrl":"https://clawhub.ai/lzyling/3d-print-model-splitting","homepage":"https://clawhub.ai/lzyling/skills/3d-print-model-splitting","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/lzyling/3d-print-model-splitting","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/lzyling/skills/3d-print-model-splitting","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/m..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T17:56:42.245Z","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-11T17:56:42.245Z","emptyReason":null},"stars":null,"forks":null,"downloads":1014,"packageName":null,"latestVersion":"1.0.1","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T17:56:42.098Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T17:56:42.245Z","lastCrawledAt":"2026-10-11T17:56:42.098Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T17:56:42.098Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.1","createdAt":"2026-05-12T11:29:11.460Z","changelog":"Add mandatory preview gates; require capped split baselines with boundary-edge reporting; harden split_by_material so open cut surfaces fail instead of exporting raw shells.","fileCount":18,"zipByteSize":33227},{"version":"1.0.0","createdAt":"2026-05-11T17:38:50.141Z","changelog":"Initial public release: Blender material annotation workflow, clearance-aware STL splitting, 3MF validation, and assembly interference checks.","fileCount":17,"zipByteSize":29828}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17b20pjwm3e6gpzdhjbtfr3es84rtrw:3d-print-model-splitting","setupComplexity":"low","setupSteps":["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-lzyling-3d-print-model-splitting/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lzyling-3d-print-model-splitting/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lzyling-3d-print-model-splitting/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-lzyling-3d-print-model-splitting/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-lzyling-3d-print-model-splitting/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-lzyling-3d-print-model-splitting/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-11T20:57:39.257Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lzyling-3d-print-model-splitting/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lzyling-3d-print-model-splitting/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lzyling-3d-print-model-splitting/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lzyling-3d-print-model-splitting/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-11T17:56:42.245Z","emptyReason":null},"readme":"Skill: 3d Print Model Splitting\n\nOwner: lzyling\n\nSummary: Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/m...\n\nTags: 3d-printing:1.0.1, bambu:1.0.1, blender:1.0.1, latest:1.0.1, stl:1.0.1\n\nVersion history:\n\nv1.0.1 | 2026-05-12T11:29:11.460Z | user\n\nAdd mandatory preview gates; require capped split baselines with boundary-edge reporting; harden split_by_material so open cut surfaces fail instead of exporting raw shells.\n\nv1.0.0 | 2026-05-11T17:38:50.141Z | user\n\nInitial public release: Blender material annotation workflow, clearance-aware STL splitting, 3MF validation, and assembly interference checks.\n\nArchive index:\n\nArchive v1.0.1: 18 files, 33227 bytes\n\nFiles: README.md (1634b), references/blender-material-annotation.md (2279b), references/case-study-v13.md (2867b), references/clearance-lessons.md (2865b), references/sop.md (5937b), references/versioning.md (2456b), scripts/apply_interface_clearance.py (5083b), scripts/check_assembly_interference.py (8449b), scripts/check_interference_all_manifold.py (2635b), scripts/make_preview_contact_sheet.py (2653b), scripts/manifold_simplify_cleanup.py (4103b), scripts/meshfix_repair_parts.py (4568b), scripts/prepare_annotation_file.py (5017b), scripts/split_by_material.py (10456b), scripts/validate_3mf_objects.py (4459b), skill-card.md (2861b), SKILL.md (7133b), _meta.json (143b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: 3d-print-model-splitting\ndescription: Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/material annotation, Bambu Studio, MeshFix, manifold Boolean, interface clearance/allowance, 3MF object validation, or assembly interference checks. Trigger for requests about STL hand-model splitting, Bambu-ready 3MF delivery, print-fit failures, or fixing part interfaces that print but do not assemble.\n---\n\n# 3D Print Model Splitting\n\nThis skill turns a single complex sculpted STL into multiple Bambu-ready, physically assemblable parts.\n\n## Core rule\n\nDo not confuse printable with assemblable.\n\nAlso do not confuse a material-selection preview with a split part.\n\n- MeshFix/slicers can make parts watertight and printable.\n- They do not guarantee that interfaces have clearance.\n- The validated workflow succeeds because it treats part interfaces as the core problem.\n- A face-selection preview is only a semantic preview. It is not a valid part preview until every split part has its open contact boundary capped/filled.\n\n## Mandatory preview gates\n\nFor interactive demos or human-guided annotation, proactively generate previews; do not wait for the user to ask.\n\n- After preparing the annotation `.blend`: render a quick source/annotation preview so the user can confirm scale, orientation, and material slots.\n- After the user saves material-face annotation: render an annotation preview/contact sheet with clear part colors and face counts.\n- Before claiming “拆件完成” / “split complete”: generate a **capped split preview**, not just a face-selection preview.\n- In previews, label colors explicitly. If possible, show cap/interface faces in a distinct color.\n- If any part is still open at the cut/contact surface, say so clearly and call it “annotation preview only”, not “split preview”.\n\n## Split-surface capping hard rules\n\nEvery part created by material splitting must have its cut/contact surfaces filled before baseline export.\n\n- Deleting the other material groups leaves shell openings at the interface. This is expected but not acceptable as a split baseline.\n- Cap/fill all boundary loops introduced by the split before exporting baseline STLs.\n- Validate capping with boundary-edge counts per part. Target: `boundary_edges = 0` for each baseline part, unless a known intentional opening is documented.\n- If automatic hole filling leaves residual boundaries, retry with a more robust method or explicitly report the residual count; do not present it as final.\n- Lock the first accepted baseline only after it is “split + capped”; never lock a raw material-isolated shell as baseline.\n\n## Scope boundaries\n\nGood fit:\n\n- figurines, statues, toys, decorative sculpts, and similar triangle-mesh STL files;\n- human-guided semantic part boundaries;\n- glue-fit or lightly finished assemblies;\n- Bambu-ready 3MF/STL handoffs.\n\nPoor fit unless explicitly requested:\n\n- fully automatic semantic recognition;\n- precision mechanical snap-fits;\n- automatic locator pins/magnets without human-confirmed anchors;\n- CAD-grade tolerance guarantees.\n\n## Dependencies\n\nCommon tools/libraries:\n\n- Blender for STL import, face/material annotation, rendering, and optional interference checks;\n- Python packages as needed by scripts: `trimesh`, `numpy`, `manifold3d`, `pymeshfix`, `Pillow`;\n- Bambu Studio or another slicer for final slicing/print review;\n- project-local folders for generated STL/3MF/Blend/PNG outputs.\n\nDo not write generated model outputs into the skill directory.\n\n## Progressive references\n\nRead only what the task needs:\n\n- `references/sop.md` — generic workflow from STL to assemblable 3MF.\n- `references/clearance-lessons.md` — Boolean/MeshFix/clearance failure modes.\n- `references/blender-material-annotation.md` — human Blender annotation instructions.\n- `references/versioning.md` — project versioning and status conventions.\n- `references/case-study-v13.md` — optional validated example for a 5-part figurine.\n\n## Standard workflow\n\n1. **Prepare annotation file**\n   - Create a Blender `.blend` from the input STL.\n   - Add material slots for intended parts.\n   - Use a project-local output folder.\n\n2. **Human material-face annotation**\n   - Human selects triangle faces in Blender Edit Mode.\n   - Assign each face to a material slot.\n   - Material assignment is geometry metadata (`polygon.material_index`), not texture paint.\n\n3. **Split by material and lock a baseline**\n   - Use material indices to export parts.\n   - Clean tiny islands, cap open boundaries, export STL, render preview.\n   - Lock a baseline that is only “split + capped”, with no clearance/pins/experimental Boolean.\n   - Never overwrite the baseline.\n\n4. **Repair only before clearance**\n   - Use MeshFix when needed to make baseline parts watertight before clearance.\n   - Treat MeshFix as a printability repair, not an assembly solution.\n\n5. **Normalize winding before Boolean**\n   - Ensure each STL has outward / positive-volume winding.\n   - If volume is negative, invert before expanding cutters.\n   - Wrong winding can reverse the clearance direction.\n\n6. **Apply interface clearance**\n   - Decide the real remaining assembly interfaces.\n   - Define a responsibility table: which part subtracts which expanded neighbor.\n   - Use robust manifold Boolean difference for interface allowance.\n   - Choose clearance based on printer, scale, material, and finishing expectations.\n\n7. **Do not MeshFix after clearance**\n   - After clearance, use only tiny manifold simplify/sliver cleanup.\n   - Strong MeshFix can fill intentional clearance cavities and recreate interference.\n\n8. **Validate the deliverable, not only source STL**\n   - Export the final 3MF/STL set.\n   - Re-read 3MF objects and validate watertight/non-manifold properties.\n   - Run pairwise interference checks on adjacent parts.\n\n9. **Slicer and physical test**\n   - Use Bambu Studio or another slicer for import/slicing/support/print preview.\n   - Do not treat “no overlap warning” as assembly proof.\n   - Physical assembly test is the final gate.\n\n## Interface-clearance hard rules\n\n- Start from an un-clearanced baseline when changing the part plan.\n- Do not directly merge parts that already had clearance cut between them; this leaves internal cavities/seams.\n- Keep clearance work localized to real assembly interfaces.\n- If assembly is tight, create a new version and increase clearance locally; do not repair a failed branch blindly.\n\n## Deliverables checklist\n\nFor a final handoff, include:\n\n- final Bambu 3MF or slicer-ready project;\n- final STL parts;\n- preview/contact sheet;\n- version note;\n- validation summary;\n- 3MF object validation report;\n- pairwise interference report;\n- notes on failed/disallowed routes.\n\n## Script organization\n\nScripts in `scripts/` are reusable helpers with parameterized paths and part definitions. Keep new scripts project-agnostic: no user-specific absolute paths, no private names, and no hardcoded part schema unless the script clearly accepts a config/CLI override.\n\nFile v1.0.1:README.md\n\n# 3D Print Model Splitting Skill\n\nOpenClaw AgentSkill for splitting a single complex STL figurine/statue into multiple 3D-printable and physically assemblable parts.\n\nThe core lesson encoded here is:\n\n> Printable is not the same as assemblable. Mesh repair and slicer import can make parts printable, but interface clearance is what makes them fit.\n\n## What it covers\n\n- Blender face/material annotation for human-guided semantic splitting\n- STL split/cap baseline workflow\n- Pre-clearance MeshFix repair guidance\n- Manifold Boolean interface clearance using expanded cutters\n- Post-clearance simplify without filling intentional cavities\n- 3MF object validation and pairwise interference checks\n- Bambu Studio handoff guidance\n\n## Skill contents\n\n```text\nSKILL.md                 OpenClaw skill entrypoint\nreferences/             SOP, clearance lessons, versioning, case study\nscripts/                Reusable helper scripts\n.clawhubignore          Files to exclude from ClawHub packaging\n.skillignore            Legacy/local ignore mirror\n```\n\n## Dependencies\n\nDepending on which scripts you use:\n\n- Blender (`bpy`, `bmesh`, `mathutils`) for annotation, splitting, and Blender-based checks\n- Python packages: `trimesh`, `numpy`, `manifold3d`, `pymeshfix`, `Pillow`\n- Bambu Studio or another slicer for final print preparation\n\nInstall Python dependencies in your project environment, not inside the skill package.\n\n## Public release note\n\nThis repository is intended for public distribution of the skill. Generated model files (`.stl`, `.3mf`, `.blend`, preview images, caches, and virtual environments) are intentionally excluded.\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn73gt88jsjv66v89gzkwxcfrn84swtx\",\n  \"slug\": \"3d-print-model-splitting\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778585351460\n}\n\nFile v1.0.1:references/blender-material-annotation.md\n\n# Blender material-face annotation\n\n## Table of contents\n\n1. Why this workflow exists\n2. Agent setup\n3. Human annotation steps\n4. Quality checks\n5. What not to do\n\n## 1. Why this workflow exists\n\nComplex sculpted STL files rarely contain semantic part information. A model may visually contain a hat, head, torso, pants, arms, or legs, but the STL is usually just triangles.\n\nThe reliable compromise is:\n\n```text\nhuman sees semantic boundaries\nagent reads polygon material indices\n```\n\nThis avoids unreliable automatic cutter guesses while keeping downstream splitting deterministic.\n\n## 2. Agent setup\n\nPrepare a Blender file with:\n\n- the imported source STL;\n- one material slot per intended part;\n- one unassigned/base material;\n- optionally one check/uncertain material;\n- a text note inside the `.blend` explaining how to annotate.\n\nMaterial naming pattern:\n\n```text\nBASE_UNASSIGNED\nPART_01_<name>\nPART_02_<name>\nCHECK_UNCERTAIN\n```\n\nUse stable prefixes such as `PART_01_` so scripts can preserve part order.\n\n## 3. Human annotation steps\n\nIn Blender:\n\n1. Select the source mesh.\n2. Press `Tab` for Edit Mode.\n3. Press `3` for Face Select.\n4. Select triangle faces belonging to a part.\n5. In Material Properties, choose the target part material.\n6. Click `Assign`.\n7. Repeat for all parts.\n8. Save the `.blend`.\n\nUseful selection tools:\n\n- `C` Circle Select for painting broad regions;\n- `B` Box Select for rectangular areas;\n- Shift-click for incremental edits;\n- assign uncertain boundary faces to a check material if needed.\n\n## 4. Quality checks\n\nBefore running automated splitting:\n\n- every intended part has nonzero face count;\n- obvious semantic regions are not left unassigned;\n- boundary rings are visually continuous enough to cap;\n- uncertain faces have been resolved or intentionally documented;\n- tiny accidental islands are expected but should be cleaned conservatively.\n\n## 5. What not to do\n\n- Do not use Texture Paint; it creates image/color data, not reliable per-face part metadata.\n- Do not actually cut the model manually unless the workflow explicitly asks for it.\n- Do not expect the agent to infer all semantic boundaries from geometry alone.\n- Do not mix left/right naming conventions; define whether left/right means character-left or screen-left.\n\nFile v1.0.1:references/case-study-v13.md\n\n# Case study: validated 5-part figurine workflow\n\n## Table of contents\n\n1. Why this case matters\n2. Failed earlier route\n3. Final part plan\n4. Interface responsibility table\n5. Cleanup and validation\n6. Transferable lessons\n\n## 1. Why this case matters\n\nThis case closed the loop from a single complex figurine STL to parts that passed:\n\n- geometry validation;\n- 3MF object validation;\n- pairwise assembly interference checks;\n- physical print and assembly testing.\n\nThe important lesson is not the specific character or filenames. The transferable lesson is that the final version succeeded because it explicitly solved interface clearance.\n\n## 2. Failed earlier route\n\nAn earlier route did this:\n\n```text\nsplit by material\n→ cap / close parts\n→ MeshFix each part\n→ create slicer-ready 3MF\n→ print test\n```\n\nThe print could complete, but the parts could not assemble. This proved:\n\n```text\nwatertight + printable ≠ assemblable\n```\n\nThe missing step was real clearance at the part interfaces.\n\n## 3. Final part plan\n\nThe final successful version used 5 parts:\n\n```text\n01_hat_head       = hat + head\n02_body_arms      = body + left arm + right arm\n03_pants\n04_left_leg\n05_right_leg\n```\n\nA prior 7-part clearance candidate already had clearance cut between some parts. The 5-part version was **not** made by directly merging that already-clearanced version, because that would leave internal seams/cavities.\n\nCorrect approach:\n\n```text\nreturn to un-clearanced baseline\n→ rebuild merged parts\n→ apply clearance only to remaining real assembly interfaces\n```\n\n## 4. Interface responsibility table\n\nThe successful responsibility table was:\n\n```text\nbody_arms subtract expanded hat_head\nbody_arms subtract expanded pants\npants subtract expanded left_leg\npants subtract expanded right_leg\n```\n\nMeaning:\n\n- `body_arms` makes room for `hat_head` and `pants`;\n- `pants` makes room for the legs;\n- cutters are expanded versions of the neighboring parts;\n- expansion depends on correct outward winding.\n\nThe target clearance in this case was 0.5 mm.\n\n## 5. Cleanup and validation\n\nFinal cleanup used manifold simplify, not MeshFix-after-clearance.\n\nValidation gates:\n\n```text\n3MF object validation: PASS\npairwise interference: no meaningful intersections\nphysical print/assembly: PASS\n```\n\n3MF object checks included:\n\n```text\nboundary_edges = 0\nedges_more_than_2_faces = 0\nnon_2_face_edges = 0\nwatertight = true\nwinding_consistent = true\n```\n\n## 6. Transferable lessons\n\n- If the part plan changes, rebuild from baseline before cutting clearance.\n- Do not merge parts that have already had clearance cut between them.\n- MeshFix is useful before clearance, dangerous after clearance.\n- Slicer overlap warnings are not assembly validation.\n- The deliverable 3MF must be re-read and validated object by object.\n- Physical assembly remains the final acceptance gate.\n\nFile v1.0.1:references/clearance-lessons.md\n\n# Clearance and Boolean lessons\n\n## Table of contents\n\n1. Slicer Boolean is not assembly validation\n2. MeshFix timing\n3. Winding and volume sign\n4. Manifold Boolean workflow\n5. Changing part plans\n6. Version hygiene\n\n## 1. Slicer Boolean is not assembly validation\n\nComplex sculpted STL geometry often contains:\n\n- coplanar triangles;\n- tiny slivers;\n- self-touching regions;\n- near-zero-area faces;\n- dense triangle soup with no CAD intent.\n\nBlender or slicer Boolean tools may fail, silently alter geometry, or report no overlap while physical parts still collide. Use slicers for slicing decisions, not as the sole source of truth for assembly clearance.\n\n## 2. MeshFix timing\n\nMeshFix is excellent for printability repair:\n\n- closing boundaries;\n- resolving non-manifold edges;\n- producing watertight meshes.\n\nBut MeshFix does not know which cavities are intentional assembly clearance.\n\nDangerous sequence:\n\n```text\ncut clearance cavity\n→ run strong MeshFix\n→ MeshFix fills cavity\n→ part prints but no longer fits\n```\n\nSafe default:\n\n```text\nMeshFix before clearance: allowed when needed\nMeshFix after clearance: avoid; use tiny simplify/sliver cleanup instead\n```\n\n## 3. Winding and volume sign\n\nA watertight STL can still have negative volume because its normals are inverted.\n\nIf cutter expansion uses vertex normals and the mesh is inverted, expansion can go inward, reversing the intended clearance.\n\nBefore Boolean:\n\n1. load STL;\n2. remove unreferenced vertices;\n3. if `mesh.volume < 0`, invert;\n4. only then expand cutter normals.\n\n## 4. Manifold Boolean workflow\n\nReliable clearance workflow:\n\n```text\nclean un-clearanced baseline\n→ optional pre-clearance MeshFix\n→ normalize outward winding\n→ expand neighbor cutter by clearance distance\n→ manifold Boolean difference\n→ manifold simplify with tiny tolerance\n→ 3MF object validation\n→ pairwise interference validation\n```\n\nThe simplify tolerance must be much smaller than the intended clearance. For example, if clearance is 0.5 mm, a 0.001 mm cleanup is numerical cleanup, not geometry redesign.\n\n## 5. Changing part plans\n\nIf the part plan changes, do not merge parts that already had clearance cut between them.\n\nBad:\n\n```text\n7-part clearance version\n→ directly merge two already-clearanced neighboring parts\n→ internal seam/cavity remains\n```\n\nGood:\n\n```text\nun-clearanced baseline\n→ rebuild merged parts\n→ cut clearance only at remaining external assembly interfaces\n```\n\n## 6. Version hygiene\n\nKeep failed and successful branches understandable:\n\n- mark “printed but did not assemble” as `failed-print`;\n- do not keep patching a failed branch blindly;\n- return to the last clean baseline when interface logic is wrong;\n- retain reports for traceability, but make final deliverables obvious;\n- final acceptance requires physical assembly, not just watertight STL.\n\nFile v1.0.1:references/sop.md\n\n# Generic SOP: complex STL to printable, assemblable parts\n\n## Table of contents\n\n1. Inputs and assumptions\n2. Workspace layout\n3. Human face/material annotation\n4. Split and lock baseline\n5. Pre-clearance repair\n6. Interface clearance\n7. Validation\n8. Bambu / slicer handoff\n9. Failure handling\n\n## 1. Inputs and assumptions\n\nUse this SOP when the source is a sculpted STL with no useful CAD feature tree, part hierarchy, or semantic labels.\n\nRequired human input:\n\n- target part plan;\n- approximate visual boundaries between parts;\n- acceptance of glue, sanding, or light manual finishing if the object is a figurine rather than a precision mechanism.\n\nDo not promise fully automatic semantic splitting. Complex STL geometry does not know what is a hat, head, sleeve, belt, or hair strand.\n\n## 2. Workspace layout\n\nUse a project-local layout rather than hardcoded machine paths:\n\n```text\n<project-root>/\n├── source/\n│   └── input.stl\n├── annotation/\n│   └── annotation.blend\n├── versions/\n│   ├── v01-annotation-test/\n│   ├── v02-split-baseline/\n│   └── vNN-clearance-.../\n└── reports/\n```\n\nKeep generated STL/3MF/PNG/Blend files out of the skill directory. The skill directory should contain only reusable instructions and scripts.\n\n## 3. Human face/material annotation\n\nPreferred workflow:\n\n1. Prepare a Blender `.blend` from the source STL.\n2. Add one material slot per intended part, plus an unassigned/check material.\n3. Human opens Blender, selects triangle faces in Edit Mode, and assigns them to part materials.\n4. Save the `.blend`.\n\nWhy material assignment:\n\n- it writes per-polygon material indices;\n- scripts can read it deterministically;\n- boundaries stay on triangle edges;\n- it avoids unreliable automatic semantic guessing.\n\nSee `blender-material-annotation.md` for detailed human instructions.\n\nPreview gate:\n\n- After creating the annotation file, render a quick preview so the human can check scale/orientation before spending time selecting faces.\n- After the human saves annotation, render a material-color preview/contact sheet and report face counts per material.\n- Call this an **annotation preview** only. It may still be an open shell after isolation.\n\n## 4. Split and lock baseline\n\nAfter annotation:\n\n1. Read the marked mesh.\n2. Group faces by material.\n3. Remove tiny accidental islands conservatively.\n4. Cap open boundaries.\n5. Export one STL per part.\n6. Render a preview/contact sheet.\n7. Ask for human review.\n\nHard requirements for step 4:\n\n- Material-isolated parts are usually open at the contact/cut surface.\n- Fill those contact boundaries before baseline export; otherwise the preview will show hollow parts and the STLs are not a valid split baseline.\n- Use a distinct cap/interface material in the preview when possible, so the human can verify where the generated contact surfaces are.\n- Report per-part `boundary_edges` after capping. Target `0`; if non-zero, document the count and treat the result as needing more repair.\n\nOnce accepted, lock this as the **split baseline**:\n\n```text\nsplit + capped + no clearance + no pins + no experimental Boolean\n```\n\nNever overwrite the baseline. All later experiments must copy forward into versioned directories.\n\n## 5. Pre-clearance repair\n\nUse repair tools only for the correct purpose.\n\nMeshFix is useful before clearance for:\n\n- watertightness;\n- open boundaries;\n- non-manifold edges;\n- slicer import stability.\n\nMeshFix does not solve assembly clearance.\n\nHard rule:\n\n```text\nMeshFix before clearance: allowed when needed\nMeshFix after clearance: avoid / treat as dangerous\n```\n\n## 6. Interface clearance\n\nThis is the critical step that turns printable parts into assemblable parts.\n\nProcedure:\n\n1. Start from an un-clearanced baseline.\n2. If the part plan changes, rebuild merged parts from baseline; do not merge already-clearanced parts.\n3. Normalize each STL to outward / positive-volume winding.\n4. Define the real assembly interfaces.\n5. Write a responsibility table: which part subtracts which neighbor.\n6. Expand the neighbor cutter outward by the requested clearance.\n7. Use robust manifold Boolean difference.\n8. After Boolean, only use tiny simplify/sliver cleanup.\n\nExample responsibility table shape:\n\n```text\nreceiver_part subtract expanded neighbor_part\npart_a subtract expanded part_b\npart_c subtract expanded part_d\n```\n\nThe receiver is the part that should make room for the neighbor.\n\nTypical figurine clearance starts around 0.5 mm, but choose tolerance based on printer, material, scale, and finishing expectations.\n\n## 7. Validation\n\nValidate the actual deliverable, not just intermediate STL files.\n\nFor every final 3MF object, check:\n\n```text\nwatertight = true\nboundary_edges = 0\nedges_more_than_2_faces = 0\nnon_2_face_edges = 0\nwinding_consistent = true\n```\n\nThen check pairwise intersections on real neighboring interfaces. Tiny coplanar/numerical residue can be acceptable; meaningful volume intersection is not.\n\nRecommended reports:\n\n```text\nvalidate_3mf_objects.json\npairwise_interference.json\nassembly_interference_report.txt\n```\n\n## 8. Bambu / slicer handoff\n\nUse Bambu Studio or another slicer for:\n\n- object import review;\n- orientation;\n- support;\n- slicing preview;\n- printer/profile-specific decisions.\n\nDo not use the slicer as the only assembly verifier. “No overlap warning” is not proof that physical parts will fit.\n\n## 9. Failure handling\n\nIf the print succeeds but parts cannot assemble:\n\n1. Mark the version as failed-print.\n2. Do not keep repairing that branch blindly.\n3. Return to the last clean baseline or the last validated pre-clearance stage.\n4. Increase clearance locally or revise the responsibility table.\n5. Re-run 3MF object and pairwise interference validation.\n\nIf a merged part contains internal seams/cavities, it was probably merged after clearance had already been cut. Rebuild from the un-clearanced baseline.\n\nFile v1.0.1:references/versioning.md\n\n# Versioning convention for STL splitting projects\n\n## Table of contents\n\n1. Directory shape\n2. Version naming\n3. Status values\n4. Required version notes\n5. Baseline and rollback rules\n\n## 1. Directory shape\n\nUse a project-local `versions/` folder:\n\n```text\n<project-root>/versions/\n├── v01-annotation-test/\n├── v02-split-baseline/\n├── v03-meshfix-print-test/\n├── v04-clearance-0p5/\n└── v05-final-candidate/\n```\n\nDo not write generated models into the skill package. Keep all model outputs in the current project folder.\n\n## 2. Version naming\n\nUse:\n\n```text\nvNN-short-name\n```\n\nRules:\n\n- `vNN` is two digits and strictly increasing.\n- `short-name` is 2–4 lowercase words.\n- Put details in `VERSION.md`, not in the directory name.\n- Do not rename failed versions; mark their status and reason.\n\nExamples:\n\n```text\nv02-split-baseline\nv03-meshfix-print-test\nv04-clearance-0p5\nv05-5part-clearance\n```\n\n## 3. Status values\n\nRecommended statuses:\n\n```text\nplanned          planned but not generated\nrunning          currently being generated\nreview           waiting for human/slicer/print review\nbaseline         clean rollback point; do not overwrite\npassed-geometry  watertight/non-manifold/interference checks pass\nprint-candidate  ready for slicer/print test\nfinal-pass       physical print/assembly passed\nfailed           failed before printing\nfailed-print     printed but physical result failed\narchived         kept for history only\n```\n\n## 4. Required version notes\n\nEach version should include `VERSION.md`:\n\n```markdown\n# vNN-short-name\n\n## Status\nstatus-value\n\n## Goal\nWhat this version is testing.\n\n## Input\nWhich baseline/version/files it came from.\n\n## Operations\n- split/cap?\n- MeshFix before clearance?\n- union/merge?\n- clearance responsibility table?\n- cleanup method?\n- 3MF export?\n\n## Outputs\nMain STL/3MF/preview/report paths.\n\n## Validation\n- STL checks\n- 3MF object checks\n- pairwise interference checks\n- slicer review\n- physical print result\n\n## Result\nDecision and why.\n\n## Rollback\nWhere to return if this fails.\n```\n\n## 5. Baseline and rollback rules\n\n- A baseline is a clean rollback point, not an active experiment folder.\n- Never overwrite a human-approved baseline.\n- If a print is physically unassemblable, mark it `failed-print` and return to the last clean pre-clearance version.\n- If changing the part plan, rebuild from an un-clearanced baseline instead of merging already-clearanced parts.\n\nFile v1.0.1:skill-card.md\n\n## Description:\n\nUse when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/material annotation, Bambu Studio, MeshFix, manifold Boolean, interface clearance/allowance, 3MF object validation, or assembly interference checks.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[lzyling](https://clawhub.ai/user/lzyling)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, makers, and 3D-print workflow operators use this skill to turn complex sculpted STL models into split, capped, clearance-adjusted, slicer-ready parts with validation reports for physical assembly.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Path-like part names or filenames may cause helper scripts to write outside the intended project folders.\n\nMitigation: Review all helper script arguments before execution, use simple slug-style part names, and reject absolute paths or path separators in part and output filenames.\n\nRisk: Generated model, preview, and report files may overwrite existing project artifacts when reused in the same output directory.\n\nMitigation: Run the workflow in a disposable project folder with versioned output directories and keep accepted baselines read-only or copied forward before experimentation.\n\nRisk: Automated mesh repair or slicer acceptance can make parts printable without proving they physically assemble.\n\nMitigation: Require capped split previews, boundary-edge reporting, 3MF validation, pairwise interference checks, and a physical assembly test before final acceptance.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/lzyling/skills/3d-print-model-splitting)\n- [Generic SOP: complex STL to printable, assemblable parts](references/sop.md)\n- [Blender material-face annotation](references/blender-material-annotation.md)\n- [Clearance and Boolean lessons](references/clearance-lessons.md)\n- [Versioning and status conventions](references/versioning.md)\n- [Validated 5-part figurine case study](references/case-study-v13.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with command examples, project-local helper scripts, and validation report formats.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May guide generation of STL, 3MF, Blend, PNG preview, and JSON/text validation artifacts in a project workspace.]\n\n## Skill Version(s):\n\n1.0.1 (source: server release evidence)\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: 17 files, 29828 bytes\n\nFiles: README.md (1634b), references/blender-material-annotation.md (2279b), references/case-study-v13.md (2867b), references/clearance-lessons.md (2865b), references/sop.md (5047b), references/versioning.md (2456b), scripts/apply_interface_clearance.py (5083b), scripts/check_assembly_interference.py (8449b), scripts/check_interference_all_manifold.py (2635b), scripts/make_preview_contact_sheet.py (2653b), scripts/manifold_simplify_cleanup.py (4103b), scripts/meshfix_repair_parts.py (4568b), scripts/prepare_annotation_file.py (5017b), scripts/split_by_material.py (7604b), scripts/validate_3mf_objects.py (4459b), SKILL.md (5306b), _meta.json (143b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: 3d-print-model-splitting\ndescription: Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/material annotation, Bambu Studio, MeshFix, manifold Boolean, interface clearance/allowance, 3MF object validation, or assembly interference checks. Trigger for requests about STL hand-model splitting, Bambu-ready 3MF delivery, print-fit failures, or fixing part interfaces that print but do not assemble.\n---\n\n# 3D Print Model Splitting\n\nThis skill turns a single complex sculpted STL into multiple Bambu-ready, physically assemblable parts.\n\n## Core rule\n\nDo not confuse printable with assemblable.\n\n- MeshFix/slicers can make parts watertight and printable.\n- They do not guarantee that interfaces have clearance.\n- The validated workflow succeeds because it treats part interfaces as the core problem.\n\n## Scope boundaries\n\nGood fit:\n\n- figurines, statues, toys, decorative sculpts, and similar triangle-mesh STL files;\n- human-guided semantic part boundaries;\n- glue-fit or lightly finished assemblies;\n- Bambu-ready 3MF/STL handoffs.\n\nPoor fit unless explicitly requested:\n\n- fully automatic semantic recognition;\n- precision mechanical snap-fits;\n- automatic locator pins/magnets without human-confirmed anchors;\n- CAD-grade tolerance guarantees.\n\n## Dependencies\n\nCommon tools/libraries:\n\n- Blender for STL import, face/material annotation, rendering, and optional interference checks;\n- Python packages as needed by scripts: `trimesh`, `numpy`, `manifold3d`, `pymeshfix`, `Pillow`;\n- Bambu Studio or another slicer for final slicing/print review;\n- project-local folders for generated STL/3MF/Blend/PNG outputs.\n\nDo not write generated model outputs into the skill directory.\n\n## Progressive references\n\nRead only what the task needs:\n\n- `references/sop.md` — generic workflow from STL to assemblable 3MF.\n- `references/clearance-lessons.md` — Boolean/MeshFix/clearance failure modes.\n- `references/blender-material-annotation.md` — human Blender annotation instructions.\n- `references/versioning.md` — project versioning and status conventions.\n- `references/case-study-v13.md` — optional validated example for a 5-part figurine.\n\n## Standard workflow\n\n1. **Prepare annotation file**\n   - Create a Blender `.blend` from the input STL.\n   - Add material slots for intended parts.\n   - Use a project-local output folder.\n\n2. **Human material-face annotation**\n   - Human selects triangle faces in Blender Edit Mode.\n   - Assign each face to a material slot.\n   - Material assignment is geometry metadata (`polygon.material_index`), not texture paint.\n\n3. **Split by material and lock a baseline**\n   - Use material indices to export parts.\n   - Clean tiny islands, cap open boundaries, export STL, render preview.\n   - Lock a baseline that is only “split + capped”, with no clearance/pins/experimental Boolean.\n   - Never overwrite the baseline.\n\n4. **Repair only before clearance**\n   - Use MeshFix when needed to make baseline parts watertight before clearance.\n   - Treat MeshFix as a printability repair, not an assembly solution.\n\n5. **Normalize winding before Boolean**\n   - Ensure each STL has outward / positive-volume winding.\n   - If volume is negative, invert before expanding cutters.\n   - Wrong winding can reverse the clearance direction.\n\n6. **Apply interface clearance**\n   - Decide the real remaining assembly interfaces.\n   - Define a responsibility table: which part subtracts which expanded neighbor.\n   - Use robust manifold Boolean difference for interface allowance.\n   - Choose clearance based on printer, scale, material, and finishing expectations.\n\n7. **Do not MeshFix after clearance**\n   - After clearance, use only tiny manifold simplify/sliver cleanup.\n   - Strong MeshFix can fill intentional clearance cavities and recreate interference.\n\n8. **Validate the deliverable, not only source STL**\n   - Export the final 3MF/STL set.\n   - Re-read 3MF objects and validate watertight/non-manifold properties.\n   - Run pairwise interference checks on adjacent parts.\n\n9. **Slicer and physical test**\n   - Use Bambu Studio or another slicer for import/slicing/support/print preview.\n   - Do not treat “no overlap warning” as assembly proof.\n   - Physical assembly test is the final gate.\n\n## Interface-clearance hard rules\n\n- Start from an un-clearanced baseline when changing the part plan.\n- Do not directly merge parts that already had clearance cut between them; this leaves internal cavities/seams.\n- Keep clearance work localized to real assembly interfaces.\n- If assembly is tight, create a new version and increase clearance locally; do not repair a failed branch blindly.\n\n## Deliverables checklist\n\nFor a final handoff, include:\n\n- final Bambu 3MF or slicer-ready project;\n- final STL parts;\n- preview/contact sheet;\n- version note;\n- validation summary;\n- 3MF object validation report;\n- pairwise interference report;\n- notes on failed/disallowed routes.\n\n## Script organization\n\nScripts in `scripts/` are reusable helpers with parameterized paths and part definitions. Keep new scripts project-agnostic: no user-specific absolute paths, no private names, and no hardcoded part schema unless the script clearly accepts a config/CLI override.\n\nFile v1.0.0:README.md\n\n# 3D Print Model Splitting Skill\n\nOpenClaw AgentSkill for splitting a single complex STL figurine/statue into multiple 3D-printable and physically assemblable parts.\n\nThe core lesson encoded here is:\n\n> Printable is not the same as assemblable. Mesh repair and slicer import can make parts printable, but interface clearance is what makes them fit.\n\n## What it covers\n\n- Blender face/material annotation for human-guided semantic splitting\n- STL split/cap baseline workflow\n- Pre-clearance MeshFix repair guidance\n- Manifold Boolean interface clearance using expanded cutters\n- Post-clearance simplify without filling intentional cavities\n- 3MF object validation and pairwise interference checks\n- Bambu Studio handoff guidance\n\n## Skill contents\n\n```text\nSKILL.md                 OpenClaw skill entrypoint\nreferences/             SOP, clearance lessons, versioning, case study\nscripts/                Reusable helper scripts\n.clawhubignore          Files to exclude from ClawHub packaging\n.skillignore            Legacy/local ignore mirror\n```\n\n## Dependencies\n\nDepending on which scripts you use:\n\n- Blender (`bpy`, `bmesh`, `mathutils`) for annotation, splitting, and Blender-based checks\n- Python packages: `trimesh`, `numpy`, `manifold3d`, `pymeshfix`, `Pillow`\n- Bambu Studio or another slicer for final print preparation\n\nInstall Python dependencies in your project environment, not inside the skill package.\n\n## Public release note\n\nThis repository is intended for public distribution of the skill. Generated model files (`.stl`, `.3mf`, `.blend`, preview images, caches, and virtual environments) are intentionally excluded.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn73gt88jsjv66v89gzkwxcfrn84swtx\",\n  \"slug\": \"3d-print-model-splitting\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778521130141\n}\n\nFile v1.0.0:references/blender-material-annotation.md\n\n# Blender material-face annotation\n\n## Table of contents\n\n1. Why this workflow exists\n2. Agent setup\n3. Human annotation steps\n4. Quality checks\n5. What not to do\n\n## 1. Why this workflow exists\n\nComplex sculpted STL files rarely contain semantic part information. A model may visually contain a hat, head, torso, pants, arms, or legs, but the STL is usually just triangles.\n\nThe reliable compromise is:\n\n```text\nhuman sees semantic boundaries\nagent reads polygon material indices\n```\n\nThis avoids unreliable automatic cutter guesses while keeping downstream splitting deterministic.\n\n## 2. Agent setup\n\nPrepare a Blender file with:\n\n- the imported source STL;\n- one material slot per intended part;\n- one unassigned/base material;\n- optionally one check/uncertain material;\n- a text note inside the `.blend` explaining how to annotate.\n\nMaterial naming pattern:\n\n```text\nBASE_UNASSIGNED\nPART_01_<name>\nPART_02_<name>\nCHECK_UNCERTAIN\n```\n\nUse stable prefixes such as `PART_01_` so scripts can preserve part order.\n\n## 3. Human annotation steps\n\nIn Blender:\n\n1. Select the source mesh.\n2. Press `Tab` for Edit Mode.\n3. Press `3` for Face Select.\n4. Select triangle faces belonging to a part.\n5. In Material Properties, choose the target part material.\n6. Click `Assign`.\n7. Repeat for all parts.\n8. Save the `.blend`.\n\nUseful selection tools:\n\n- `C` Circle Select for painting broad regions;\n- `B` Box Select for rectangular areas;\n- Shift-click for incremental edits;\n- assign uncertain boundary faces to a check material if needed.\n\n## 4. Quality checks\n\nBefore running automated splitting:\n\n- every intended part has nonzero face count;\n- obvious semantic regions are not left unassigned;\n- boundary rings are visually continuous enough to cap;\n- uncertain faces have been resolved or intentionally documented;\n- tiny accidental islands are expected but should be cleaned conservatively.\n\n## 5. What not to do\n\n- Do not use Texture Paint; it creates image/color data, not reliable per-face part metadata.\n- Do not actually cut the model manually unless the workflow explicitly asks for it.\n- Do not expect the agent to infer all semantic boundaries from geometry alone.\n- Do not mix left/right naming conventions; define whether left/right means character-left or screen-left.\n\nFile v1.0.0:references/case-study-v13.md\n\n# Case study: validated 5-part figurine workflow\n\n## Table of contents\n\n1. Why this case matters\n2. Failed earlier route\n3. Final part plan\n4. Interface responsibility table\n5. Cleanup and validation\n6. Transferable lessons\n\n## 1. Why this case matters\n\nThis case closed the loop from a single complex figurine STL to parts that passed:\n\n- geometry validation;\n- 3MF object validation;\n- pairwise assembly interference checks;\n- physical print and assembly testing.\n\nThe important lesson is not the specific character or filenames. The transferable lesson is that the final version succeeded because it explicitly solved interface clearance.\n\n## 2. Failed earlier route\n\nAn earlier route did this:\n\n```text\nsplit by material\n→ cap / close parts\n→ MeshFix each part\n→ create slicer-ready 3MF\n→ print test\n```\n\nThe print could complete, but the parts could not assemble. This proved:\n\n```text\nwatertight + printable ≠ assemblable\n```\n\nThe missing step was real clearance at the part interfaces.\n\n## 3. Final part plan\n\nThe final successful version used 5 parts:\n\n```text\n01_hat_head       = hat + head\n02_body_arms      = body + left arm + right arm\n03_pants\n04_left_leg\n05_right_leg\n```\n\nA prior 7-part clearance candidate already had clearance cut between some parts. The 5-part version was **not** made by directly merging that already-clearanced version, because that would leave internal seams/cavities.\n\nCorrect approach:\n\n```text\nreturn to un-clearanced baseline\n→ rebuild merged parts\n→ apply clearance only to remaining real assembly interfaces\n```\n\n## 4. Interface responsibility table\n\nThe successful responsibility table was:\n\n```text\nbody_arms subtract expanded hat_head\nbody_arms subtract expanded pants\npants subtract expanded left_leg\npants subtract expanded right_leg\n```\n\nMeaning:\n\n- `body_arms` makes room for `hat_head` and `pants`;\n- `pants` makes room for the legs;\n- cutters are expanded versions of the neighboring parts;\n- expansion depends on correct outward winding.\n\nThe target clearance in this case was 0.5 mm.\n\n## 5. Cleanup and validation\n\nFinal cleanup used manifold simplify, not MeshFix-after-clearance.\n\nValidation gates:\n\n```text\n3MF object validation: PASS\npairwise interference: no meaningful intersections\nphysical print/assembly: PASS\n```\n\n3MF object checks included:\n\n```text\nboundary_edges = 0\nedges_more_than_2_faces = 0\nnon_2_face_edges = 0\nwatertight = true\nwinding_consistent = true\n```\n\n## 6. Transferable lessons\n\n- If the part plan changes, rebuild from baseline before cutting clearance.\n- Do not merge parts that have already had clearance cut between them.\n- MeshFix is useful before clearance, dangerous after clearance.\n- Slicer overlap warnings are not assembly validation.\n- The deliverable 3MF must be re-read and validated object by object.\n- Physical assembly remains the final acceptance gate.\n\nFile v1.0.0:references/clearance-lessons.md\n\n# Clearance and Boolean lessons\n\n## Table of contents\n\n1. Slicer Boolean is not assembly validation\n2. MeshFix timing\n3. Winding and volume sign\n4. Manifold Boolean workflow\n5. Changing part plans\n6. Version hygiene\n\n## 1. Slicer Boolean is not assembly validation\n\nComplex sculpted STL geometry often contains:\n\n- coplanar triangles;\n- tiny slivers;\n- self-touching regions;\n- near-zero-area faces;\n- dense triangle soup with no CAD intent.\n\nBlender or slicer Boolean tools may fail, silently alter geometry, or report no overlap while physical parts still collide. Use slicers for slicing decisions, not as the sole source of truth for assembly clearance.\n\n## 2. MeshFix timing\n\nMeshFix is excellent for printability repair:\n\n- closing boundaries;\n- resolving non-manifold edges;\n- producing watertight meshes.\n\nBut MeshFix does not know which cavities are intentional assembly clearance.\n\nDangerous sequence:\n\n```text\ncut clearance cavity\n→ run strong MeshFix\n→ MeshFix fills cavity\n→ part prints but no longer fits\n```\n\nSafe default:\n\n```text\nMeshFix before clearance: allowed when needed\nMeshFix after clearance: avoid; use tiny simplify/sliver cleanup instead\n```\n\n## 3. Winding and volume sign\n\nA watertight STL can still have negative volume because its normals are inverted.\n\nIf cutter expansion uses vertex normals and the mesh is inverted, expansion can go inward, reversing the intended clearance.\n\nBefore Boolean:\n\n1. load STL;\n2. remove unreferenced vertices;\n3. if `mesh.volume < 0`, invert;\n4. only then expand cutter normals.\n\n## 4. Manifold Boolean workflow\n\nReliable clearance workflow:\n\n```text\nclean un-clearanced baseline\n→ optional pre-clearance MeshFix\n→ normalize outward winding\n→ expand neighbor cutter by clearance distance\n→ manifold Boolean difference\n→ manifold simplify with tiny tolerance\n→ 3MF object validation\n→ pairwise interference validation\n```\n\nThe simplify tolerance must be much smaller than the intended clearance. For example, if clearance is 0.5 mm, a 0.001 mm cleanup is numerical cleanup, not geometry redesign.\n\n## 5. Changing part plans\n\nIf the part plan changes, do not merge parts that already had clearance cut between them.\n\nBad:\n\n```text\n7-part clearance version\n→ directly merge two already-clearanced neighboring parts\n→ internal seam/cavity remains\n```\n\nGood:\n\n```text\nun-clearanced baseline\n→ rebuild merged parts\n→ cut clearance only at remaining external assembly interfaces\n```\n\n## 6. Version hygiene\n\nKeep failed and successful branches understandable:\n\n- mark “printed but did not assemble” as `failed-print`;\n- do not keep patching a failed branch blindly;\n- return to the last clean baseline when interface logic is wrong;\n- retain reports for traceability, but make final deliverables obvious;\n- final acceptance requires physical assembly, not just watertight STL.\n\nFile v1.0.0:references/sop.md\n\n# Generic SOP: complex STL to printable, assemblable parts\n\n## Table of contents\n\n1. Inputs and assumptions\n2. Workspace layout\n3. Human face/material annotation\n4. Split and lock baseline\n5. Pre-clearance repair\n6. Interface clearance\n7. Validation\n8. Bambu / slicer handoff\n9. Failure handling\n\n## 1. Inputs and assumptions\n\nUse this SOP when the source is a sculpted STL with no useful CAD feature tree, part hierarchy, or semantic labels.\n\nRequired human input:\n\n- target part plan;\n- approximate visual boundaries between parts;\n- acceptance of glue, sanding, or light manual finishing if the object is a figurine rather than a precision mechanism.\n\nDo not promise fully automatic semantic splitting. Complex STL geometry does not know what is a hat, head, sleeve, belt, or hair strand.\n\n## 2. Workspace layout\n\nUse a project-local layout rather than hardcoded machine paths:\n\n```text\n<project-root>/\n├── source/\n│   └── input.stl\n├── annotation/\n│   └── annotation.blend\n├── versions/\n│   ├── v01-annotation-test/\n│   ├── v02-split-baseline/\n│   └── vNN-clearance-.../\n└── reports/\n```\n\nKeep generated STL/3MF/PNG/Blend files out of the skill directory. The skill directory should contain only reusable instructions and scripts.\n\n## 3. Human face/material annotation\n\nPreferred workflow:\n\n1. Prepare a Blender `.blend` from the source STL.\n2. Add one material slot per intended part, plus an unassigned/check material.\n3. Human opens Blender, selects triangle faces in Edit Mode, and assigns them to part materials.\n4. Save the `.blend`.\n\nWhy material assignment:\n\n- it writes per-polygon material indices;\n- scripts can read it deterministically;\n- boundaries stay on triangle edges;\n- it avoids unreliable automatic semantic guessing.\n\nSee `blender-material-annotation.md` for detailed human instructions.\n\n## 4. Split and lock baseline\n\nAfter annotation:\n\n1. Read the marked mesh.\n2. Group faces by material.\n3. Remove tiny accidental islands conservatively.\n4. Cap open boundaries.\n5. Export one STL per part.\n6. Render a preview/contact sheet.\n7. Ask for human review.\n\nOnce accepted, lock this as the **split baseline**:\n\n```text\nsplit + capped + no clearance + no pins + no experimental Boolean\n```\n\nNever overwrite the baseline. All later experiments must copy forward into versioned directories.\n\n## 5. Pre-clearance repair\n\nUse repair tools only for the correct purpose.\n\nMeshFix is useful before clearance for:\n\n- watertightness;\n- open boundaries;\n- non-manifold edges;\n- slicer import stability.\n\nMeshFix does not solve assembly clearance.\n\nHard rule:\n\n```text\nMeshFix before clearance: allowed when needed\nMeshFix after clearance: avoid / treat as dangerous\n```\n\n## 6. Interface clearance\n\nThis is the critical step that turns printable parts into assemblable parts.\n\nProcedure:\n\n1. Start from an un-clearanced baseline.\n2. If the part plan changes, rebuild merged parts from baseline; do not merge already-clearanced parts.\n3. Normalize each STL to outward / positive-volume winding.\n4. Define the real assembly interfaces.\n5. Write a responsibility table: which part subtracts which neighbor.\n6. Expand the neighbor cutter outward by the requested clearance.\n7. Use robust manifold Boolean difference.\n8. After Boolean, only use tiny simplify/sliver cleanup.\n\nExample responsibility table shape:\n\n```text\nreceiver_part subtract expanded neighbor_part\npart_a subtract expanded part_b\npart_c subtract expanded part_d\n```\n\nThe receiver is the part that should make room for the neighbor.\n\nTypical figurine clearance starts around 0.5 mm, but choose tolerance based on printer, material, scale, and finishing expectations.\n\n## 7. Validation\n\nValidate the actual deliverable, not just intermediate STL files.\n\nFor every final 3MF object, check:\n\n```text\nwatertight = true\nboundary_edges = 0\nedges_more_than_2_faces = 0\nnon_2_face_edges = 0\nwinding_consistent = true\n```\n\nThen check pairwise intersections on real neighboring interfaces. Tiny coplanar/numerical residue can be acceptable; meaningful volume intersection is not.\n\nRecommended reports:\n\n```text\nvalidate_3mf_objects.json\npairwise_interference.json\nassembly_interference_report.txt\n```\n\n## 8. Bambu / slicer handoff\n\nUse Bambu Studio or another slicer for:\n\n- object import review;\n- orientation;\n- support;\n- slicing preview;\n- printer/profile-specific decisions.\n\nDo not use the slicer as the only assembly verifier. “No overlap warning” is not proof that physical parts will fit.\n\n## 9. Failure handling\n\nIf the print succeeds but parts cannot assemble:\n\n1. Mark the version as failed-print.\n2. Do not keep repairing that branch blindly.\n3. Return to the last clean baseline or the last validated pre-clearance stage.\n4. Increase clearance locally or revise the responsibility table.\n5. Re-run 3MF object and pairwise interference validation.\n\nIf a merged part contains internal seams/cavities, it was probably merged after clearance had already been cut. Rebuild from the un-clearanced baseline.\n\nFile v1.0.0:references/versioning.md\n\n# Versioning convention for STL splitting projects\n\n## Table of contents\n\n1. Directory shape\n2. Version naming\n3. Status values\n4. Required version notes\n5. Baseline and rollback rules\n\n## 1. Directory shape\n\nUse a project-local `versions/` folder:\n\n```text\n<project-root>/versions/\n├── v01-annotation-test/\n├── v02-split-baseline/\n├── v03-meshfix-print-test/\n├── v04-clearance-0p5/\n└── v05-final-candidate/\n```\n\nDo not write generated models into the skill package. Keep all model outputs in the current project folder.\n\n## 2. Version naming\n\nUse:\n\n```text\nvNN-short-name\n```\n\nRules:\n\n- `vNN` is two digits and strictly increasing.\n- `short-name` is 2–4 lowercase words.\n- Put details in `VERSION.md`, not in the directory name.\n- Do not rename failed versions; mark their status and reason.\n\nExamples:\n\n```text\nv02-split-baseline\nv03-meshfix-print-test\nv04-clearance-0p5\nv05-5part-clearance\n```\n\n## 3. Status values\n\nRecommended statuses:\n\n```text\nplanned          planned but not generated\nrunning          currently being generated\nreview           waiting for human/slicer/print review\nbaseline         clean rollback point; do not overwrite\npassed-geometry  watertight/non-manifold/interference checks pass\nprint-candidate  ready for slicer/print test\nfinal-pass       physical print/assembly passed\nfailed           failed before printing\nfailed-print     printed but physical result failed\narchived         kept for history only\n```\n\n## 4. Required version notes\n\nEach version should include `VERSION.md`:\n\n```markdown\n# vNN-short-name\n\n## Status\nstatus-value\n\n## Goal\nWhat this version is testing.\n\n## Input\nWhich baseline/version/files it came from.\n\n## Operations\n- split/cap?\n- MeshFix before clearance?\n- union/merge?\n- clearance responsibility table?\n- cleanup method?\n- 3MF export?\n\n## Outputs\nMain STL/3MF/preview/report paths.\n\n## Validation\n- STL checks\n- 3MF object checks\n- pairwise interference checks\n- slicer review\n- physical print result\n\n## Result\nDecision and why.\n\n## Rollback\nWhere to return if this fails.\n```\n\n## 5. Baseline and rollback rules\n\n- A baseline is a clean rollback point, not an active experiment folder.\n- Never overwrite a human-approved baseline.\n- If a print is physically unassemblable, mark it `failed-print` and return to the last clean pre-clearance version.\n- If changing the part plan, rebuild from an un-clearanced baseline instead of merging already-clearanced parts.","readmeExcerpt":"Skill: 3d Print Model Splitting Owner: lzyling Summary: Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/m... Tags: 3d-printing:1.0.1, bambu:1.0.1, blender:1.0.1, latest:1.0.1, stl:1.0.1 Version history: v1.0.1 | 2026-05-12T11:29:11.460Z | user Add mandatory preview gates; require capped split baselines with bou","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"SKILL.md                 OpenClaw skill entrypoint\nreferences/             SOP, clearance lessons, versioning, case study\nscripts/                Reusable helper scripts\n.clawhubignore          Files to exclude from ClawHub packaging\n.skillignore            Legacy/local ignore mirror"},{"language":"text","snippet":"human sees semantic boundaries\nagent reads polygon material indices"},{"language":"text","snippet":"BASE_UNASSIGNED\nPART_01_<name>\nPART_02_<name>\nCHECK_UNCERTAIN"},{"language":"text","snippet":"split by material\n→ cap / close parts\n→ MeshFix each part\n→ create slicer-ready 3MF\n→ print test"},{"language":"text","snippet":"watertight + printable ≠ assemblable"},{"language":"text","snippet":"01_hat_head       = hat + head\n02_body_arms      = body + left arm + right arm\n03_pants\n04_left_leg\n05_right_leg"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: 3d-print-model-splitting\ndescription: Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/material annotation, Bambu Studio, MeshFix, manifold Boolean, interface clearance/allowance, 3MF object validation, or assembly interference checks. Trigger for requests about STL hand-model splitting, Bambu-ready 3MF delivery, print-fit failures, or fixing part interfaces that print but do not assemble.\n---\n\n# 3D Print Model Splitting\n\nThis skill turns a single complex sculpted STL into multiple Bambu-ready, physically assemblable parts.\n\n## Core rule\n\nDo not confuse printable with assemblable.\n\nAlso do not confuse a material-selection preview with a split part.\n\n- MeshFix/slicers can make parts watertight and printable.\n- They do not guarantee that interfaces have clearance.\n- The validated workflow succeeds because it treats part interfaces as the core problem.\n- A face-selection preview is only a semantic preview. It is not a valid part preview until every split part has its open contact boundary capped/filled.\n\n## Mandatory preview gates\n\nFor interactive demos or human-guided annotation, proactively generate previews; do not wait for the user to ask.\n\n- After preparing the annotation `.blend`: render a quick source/annotation preview so the user can confirm scale, orientation, and material slots.\n- After the user saves material-face annotation: render an annotation preview/contact sheet with clear part colors and face counts.\n- Before claiming “拆件完成” / “split complete”: generate a **capped split preview**, not just a face-selection preview.\n- In previews, label colors explicitly. If possible, show cap/interface faces in a distinct color.\n- If any part is still open at the cut/contact surface, say so clearly and call it “annotation preview only”, not “split preview”.\n\n## Split-surface capping hard rules\n\nEvery part created by material splitting must have its cut/contact surfaces filled before baseline export.\n\n- Deleting the other material groups leaves shell openings at the interface. This is expected but not acceptable as a split baseline.\n- Cap/fill all boundary loops introduced by the split before exporting baseline STLs.\n- Validate capping with boundary-edge counts per part. Target: `boundary_edges = 0` for each baseline part, unless a known intentional opening is documented.\n- If automatic hole filling leaves residual boundaries, retry with a more robust method or explicitly report the residual count; do not present it as final.\n- Lock the first accepted baseline only after it is “split + capped”; never lock a raw material-isolated shell as baseline.\n\n## Scope boundaries\n\nGood fit:\n\n- figurines, statues, toys, decorative sculpts, and similar triangle-mesh STL files;\n- human-guided semantic part boundaries;\n- glue-fit or lightly finished assemblies;\n- Bambu-ready 3MF/STL handoffs.\n\nPoor fit unless explicitly requested:\n\n- fully automatic"},{"path":"README.md","content":"# 3D Print Model Splitting Skill\n\nOpenClaw AgentSkill for splitting a single complex STL figurine/statue into multiple 3D-printable and physically assemblable parts.\n\nThe core lesson encoded here is:\n\n> Printable is not the same as assemblable. Mesh repair and slicer import can make parts printable, but interface clearance is what makes them fit.\n\n## What it covers\n\n- Blender face/material annotation for human-guided semantic splitting\n- STL split/cap baseline workflow\n- Pre-clearance MeshFix repair guidance\n- Manifold Boolean interface clearance using expanded cutters\n- Post-clearance simplify without filling intentional cavities\n- 3MF object validation and pairwise interference checks\n- Bambu Studio handoff guidance\n\n## Skill contents\n\n```text\nSKILL.md                 OpenClaw skill entrypoint\nreferences/             SOP, clearance lessons, versioning, case study\nscripts/                Reusable helper scripts\n.clawhubignore          Files to exclude from ClawHub packaging\n.skillignore            Legacy/local ignore mirror\n```\n\n## Dependencies\n\nDepending on which scripts you use:\n\n- Blender (`bpy`, `bmesh`, `mathutils`) for annotation, splitting, and Blender-based checks\n- Python packages: `trimesh`, `numpy`, `manifold3d`, `pymeshfix`, `Pillow`\n- Bambu Studio or another slicer for final print preparation\n\nInstall Python dependencies in your project environment, not inside the skill package.\n\n## Public release note\n\nThis repository is intended for public distribution of the skill. Generated model files (`.stl`, `.3mf`, `.blend`, preview images, caches, and virtual environments) are intentionally excluded."},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn73gt88jsjv66v89gzkwxcfrn84swtx\",\n  \"slug\": \"3d-print-model-splitting\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778585351460\n}"},{"path":"references/blender-material-annotation.md","content":"# Blender material-face annotation\n\n## Table of contents\n\n1. Why this workflow exists\n2. Agent setup\n3. Human annotation steps\n4. Quality checks\n5. What not to do\n\n## 1. Why this workflow exists\n\nComplex sculpted STL files rarely contain semantic part information. A model may visually contain a hat, head, torso, pants, arms, or legs, but the STL is usually just triangles.\n\nThe reliable compromise is:\n\n```text\nhuman sees semantic boundaries\nagent reads polygon material indices\n```\n\nThis avoids unreliable automatic cutter guesses while keeping downstream splitting deterministic.\n\n## 2. Agent setup\n\nPrepare a Blender file with:\n\n- the imported source STL;\n- one material slot per intended part;\n- one unassigned/base material;\n- optionally one check/uncertain material;\n- a text note inside the `.blend` explaining how to annotate.\n\nMaterial naming pattern:\n\n```text\nBASE_UNASSIGNED\nPART_01_<name>\nPART_02_<name>\nCHECK_UNCERTAIN\n```\n\nUse stable prefixes such as `PART_01_` so scripts can preserve part order.\n\n## 3. Human annotation steps\n\nIn Blender:\n\n1. Select the source mesh.\n2. Press `Tab` for Edit Mode.\n3. Press `3` for Face Select.\n4. Select triangle faces belonging to a part.\n5. In Material Properties, choose the target part material.\n6. Click `Assign`.\n7. Repeat for all parts.\n8. Save the `.blend`.\n\nUseful selection tools:\n\n- `C` Circle Select for painting broad regions;\n- `B` Box Select for rectangular areas;\n- Shift-click for incremental edits;\n- assign uncertain boundary faces to a check material if needed.\n\n## 4. Quality checks\n\nBefore running automated splitting:\n\n- every intended part has nonzero face count;\n- obvious semantic regions are not left unassigned;\n- boundary rings are visually continuous enough to cap;\n- uncertain faces have been resolved or intentionally documented;\n- tiny accidental islands are expected but should be cleaned conservatively.\n\n## 5. What not to do\n\n- Do not use Texture Paint; it creates image/color data, not reliable per-face part metadata.\n- Do not actually cut the model manually unless the workflow explicitly asks for it.\n- Do not expect the agent to infer all semantic boundaries from geometry alone.\n- Do not mix left/right naming conventions; define whether left/right means character-left or screen-left."},{"path":"references/case-study-v13.md","content":"# Case study: validated 5-part figurine workflow\n\n## Table of contents\n\n1. Why this case matters\n2. Failed earlier route\n3. Final part plan\n4. Interface responsibility table\n5. Cleanup and validation\n6. Transferable lessons\n\n## 1. Why this case matters\n\nThis case closed the loop from a single complex figurine STL to parts that passed:\n\n- geometry validation;\n- 3MF object validation;\n- pairwise assembly interference checks;\n- physical print and assembly testing.\n\nThe important lesson is not the specific character or filenames. The transferable lesson is that the final version succeeded because it explicitly solved interface clearance.\n\n## 2. Failed earlier route\n\nAn earlier route did this:\n\n```text\nsplit by material\n→ cap / close parts\n→ MeshFix each part\n→ create slicer-ready 3MF\n→ print test\n```\n\nThe print could complete, but the parts could not assemble. This proved:\n\n```text\nwatertight + printable ≠ assemblable\n```\n\nThe missing step was real clearance at the part interfaces.\n\n## 3. Final part plan\n\nThe final successful version used 5 parts:\n\n```text\n01_hat_head       = hat + head\n02_body_arms      = body + left arm + right arm\n03_pants\n04_left_leg\n05_right_leg\n```\n\nA prior 7-part clearance candidate already had clearance cut between some parts. The 5-part version was **not** made by directly merging that already-clearanced version, because that would leave internal seams/cavities.\n\nCorrect approach:\n\n```text\nreturn to un-clearanced baseline\n→ rebuild merged parts\n→ apply clearance only to remaining real assembly interfaces\n```\n\n## 4. Interface responsibility table\n\nThe successful responsibility table was:\n\n```text\nbody_arms subtract expanded hat_head\nbody_arms subtract expanded pants\npants subtract expanded left_leg\npants subtract expanded right_leg\n```\n\nMeaning:\n\n- `body_arms` makes room for `hat_head` and `pants`;\n- `pants` makes room for the legs;\n- cutters are expanded versions of the neighboring parts;\n- expansion depends on correct outward winding.\n\nThe target clearance in this case was 0.5 mm.\n\n## 5. Cleanup and validation\n\nFinal cleanup used manifold simplify, not MeshFix-after-clearance.\n\nValidation gates:\n\n```text\n3MF object validation: PASS\npairwise interference: no meaningful intersections\nphysical print/assembly: PASS\n```\n\n3MF object checks included:\n\n```text\nboundary_edges = 0\nedges_more_than_2_faces = 0\nnon_2_face_edges = 0\nwatertight = true\nwinding_consistent = true\n```\n\n## 6. Transferable lessons\n\n- If the part plan changes, rebuild from baseline before cutting clearance.\n- Do not merge parts that have already had clearance cut between them.\n- MeshFix is useful before clearance, dangerous after clearance.\n- Slicer overlap warnings are not assembly validation.\n- The deliverable 3MF must be re-read and validated object by object.\n- Physical assembly remains the final acceptance gate."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/m... Skill: 3d Print Model Splitting Owner: lzyling Summary: Use when splitting a single complex STL / figurine / statue model into multiple 3D-printable and physically assemblable parts, especially with Blender face/m... Tags: 3d-printing:1.0.1, bambu:1.0.1, blender:1.0.1, latest:1.0.1, stl:1.0.1 Version history: v1.0.1 | 2026-05-12T11:29:11.460Z | user Add mandatory preview gates; require capped split baselines with bou","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1632,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T17:56:42.245Z","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-11T17:56:42.245Z","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-11T20:57:39.258Z","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"}]}}}