solidcraft-mechanisms
Skill15k starsChanged 18 days agoApache-2.0View on GitHub
Use when building, driving or animating an assembly or mechanism in SolidCraft through its MCP server - components, grounding, joints and joint origins, rigid groups, motion links, closed loops such as an actuator on a hinged panel or a linkage, contact sets, motion studies, degrees of freedom - or when a drive moves nothing, stops early or a part jumps when it is joined. To model the parts themselves, use solidcraft-modeling.
2 other projects use a version of this, 1 of them edited.
Adopted by
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Most recently taken up by
- bherbruck/solidcraftword for word, first seen Nov 8, 2026
- randomonkey05/SolidCraft-Agent-Skillsedited, first seen Nov 1, 2026
Who's talking about tangency-labs/solidcraft
- Der Druckt Schon Wieder“SolidCraft bekommt einen neuen Kernel – und Fusion-Teile kommen per Prompt rüber”YouTube · Nov 4, 2026 · 59k views
- Optimal Printing Solutions 3D“SolidCraft: A FREE Fusion 360 Rival? Hands-On First Look”YouTube · Oct 19, 2026 · 14k views
- Evolution with AI“SolidCraft: Free Fusion 360 Alternative, Open-Source CAD in Your Browser”YouTube · Oct 19, 2026 · 11k views
- Sorovisk“TESTE O CLONE DO SOLIDWORKS”YouTube · Oct 17, 2026 · 10k views
- Elite Engineers“SolidCraft – First Touch! 🚀”YouTube · Oct 23, 2026 · 5.9k views
The biggest 5 of 84 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 84
Talked about on GitHub, YouTube and Bluesky (84 times).
On GitHub · 50
- Oct 13, 2026solidcraft: init at 0.30.1 — NixOS/nixpkgs3 reactions · 12 comments
- Oct 29, 2026Bug: SolidCraft 0.26.1 has no download for MacOS — storytold/craft-launcher2 reactions · 2 comments
- Oct 21, 2026[Feature Request] [App Launcher] Allow external repositories to be added and monitored — storytold/craft-launcher1 reaction · 2 comments
- Oct 20, 2026[Feature] Allow adding apps from different sources (non-storytold) — storytold/craft-launcher1 reaction · 2 comments
- Nov 10, 2026Add SolidCraft CAD guide to Guides & Learning — syntaxslicer/3d-print-toolbox0 reactions
45 more on GitHub
- Nov 9, 2026● relit: tangency-labs/solidcraft — Packaging lint — fitzyracing1/darks0 reactions · 1 comment
- Nov 8, 2026feat(desktop): recommend SolidCraft 0.40.0-rc.3 — PartBuddy/partbuddy0 reactions
- Nov 8, 2026Fetch SolidCraft through the API when downloads fail, and cache it — dutchman-cad/dutchman0 reactions
- Nov 7, 2026fix: four #483 status sites take the fork's soft failure by default; retire their flags (#2009) — tangency-labs/solidcore0 reactions · 1 comment
- Nov 6, 2026SolidBOM: show the engineering, manufacturing and cost review panel — kaeli-byte/solidcraft0 reactions · 1 comment
- Nov 6, 2026SolidBOM: keep imported geometry read-only while it is reviewed — kaeli-byte/solidcraft0 reactions · 1 comment
- Nov 6, 2026fix: a circular round's section is the ball's exact circle by default; retire fillet_exact_arc_sections and fillet_exact_arc_spans (WR-708, WR-711, #2330) — tangency-labs/solidcore0 reactions · 6 comments
- Nov 5, 2026Report SolidCraft refusals as their own category — dutchman-cad/dutchman0 reactions · 1 comment
- Nov 5, 2026● relit: tangency-labs/solidcraft — Kernel rig — fitzyracing1/darks0 reactions · 2 comments
- Nov 5, 2026Add Solidcraft? — olafkfreund/nix-craftapps0 reactions
- Nov 4, 2026Kernel-case replay mutates retained inputs of copied offset operations (#2722) — tangency-labs/solidcore0 reactions
- Nov 2, 2026agent-skills.github.tangency-labs.solidcraft: 0.30.0 → 0.30.1 — sudosubin/agents.nix0 reactions
- Nov 2, 2026chore: update `solidcraft` from `0.30.0` to `0.30.1` — Glatzel/demon-forge0 reactions
- Nov 2, 2026Solidcore-only blend fix: keep features sweeps a boss's walls in a body of their own (fillet_keep_features, WR-703) — tangency-labs/solidcore0 reactions · 1 comment
- Nov 2, 2026Boolean: joining two tubes with a 1e-6 or 1e-7 gap gives edges whose trim interval doesn't match when WR-575 is on — tangency-labs/solidcore0 reactions · 2 comments
- Nov 2, 2026Boolean: with WR-79 (sphere_small_circle_not_touching) on, a sphere poking a hair through a box face gives volume 0 or an open body — tangency-labs/solidcore0 reactions · 2 comments
- Nov 2, 2026agent-skills.github.tangency-labs.solidcraft: 0.29.0 → 0.30.0 — sudosubin/agents.nix0 reactions
- Nov 2, 2026chore: update `solidcraft` from `0.29.0` to `0.30.0` — Glatzel/demon-forge0 reactions
- Nov 1, 2026agent-skills.github.tangency-labs.solidcraft: init at 0.29.0 — sudosubin/agents.nix0 reactions
- Nov 1, 2026chore: update `solidcraft` from `0.28.0` to `0.29.0` — Glatzel/demon-forge0 reactions
- Oct 31, 2026chore: update `solidcraft` from `0.27.1` to `0.28.0` — Glatzel/demon-forge0 reactions
- Oct 30, 2026Investigation: SolidCraft + FieldCraft — Open-Source CAD and Engineering Simulation on Linux (source : Chatgpt on 10-30-2026) — stellardreams/asi.surge.sh0 reactions · 3 comments
- Oct 30, 2026Studio: replace the GUI with a native research workbench, Eqi editor and equation explorer — eqiora/eqiora0 reactions
- Oct 30, 2026chore: update `solidcraft` from `0.26.1` to `0.27.1` — Glatzel/demon-forge0 reactions
- Oct 29, 2026Sketch: hide constraint glyphs when zoomed out (#8980) — ReDead/solidcraft0 reactions · 1 comment
- Oct 29, 2026chore: update `solidcraft` from `0.26.0` to `0.26.1` — Glatzel/demon-forge0 reactions
- Oct 29, 2026Feature: send selected parts directly to a local slicer — rvdende/cadrs0 reactions · 5 comments
- Oct 29, 2026Sketch: diameter box appears for a second concentric circle (#8899) — ReDead/solidcraft0 reactions · 1 comment
- Oct 29, 2026● relit: tangency-labs/solidcraft — External corpus — fitzyracing1/darks0 reactions · 9 comments
- Oct 29, 2026chore: update `solidcraft` from `0.25.1` to `0.26.0` — Glatzel/demon-forge0 reactions
- Oct 28, 2026Fusion assemblies: arrive with the timeline grouped into folders per design — dutchman-cad/dutchman0 reactions
- Oct 28, 2026[PATCH 1/2] truck-geometry: keep seam points on the hinted side of a revolved surface's period — ricosjp/truck0 reactions
- Oct 28, 2026Growth leads — 2026-10-28 — pahadiji/star-catcher0 reactions · 1 comment
- Oct 28, 2026chore: update `solidcraft` from `0.25.0` to `0.25.1` — Glatzel/demon-forge0 reactions
- Oct 27, 2026chore: update `solidcraft` from `0.24.1` to `0.25.0` — Glatzel/demon-forge0 reactions
- Oct 27, 2026chore: update `solidcraft` from `0.24.0` to `0.24.1` — Glatzel/demon-forge0 reactions
- Oct 27, 2026[ Proposal ] Porting more apps to Android — MostafaXS1/artcraft-android0 reactions · 6 comments
- Oct 27, 2026chore: update `solidcraft` from `0.23.1` to `0.24.0` — Glatzel/demon-forge0 reactions
- Oct 27, 2026nix flake build as in solidcraft — tangency-labs/fieldcraft0 reactions
- Oct 27, 2026SolidCraft-Werkzeugsymbole und Umbau nach SolidCraft-Vorbild — Kai46419/Pencil-CAD0 reactions
- Oct 26, 2026chore: update `solidcraft` from `0.23.0` to `0.23.1` — Glatzel/demon-forge0 reactions
- Oct 26, 2026chore: update `solidcraft` from `0.22.1` to `0.23.0` — Glatzel/demon-forge0 reactions
- Oct 25, 2026chore: update `solidcraft` from `0.22.0` to `0.22.1` — Glatzel/demon-forge0 reactions
- Oct 25, 2026chore: update `solidcraft` from `0.21.0` to `0.22.0` — Glatzel/demon-forge0 reactions
- Oct 24, 2026Homepage Download button opens the download section on GitHub — tangency-labs/website0 reactions · 1 comment
On YouTube · 25
- Nov 4, 2026SolidCraft bekommt einen neuen Kernel – und Fusion-Teile kommen per Prompt rüber — Der Druckt Schon Wieder59k views · 188 comments
- Oct 19, 2026SolidCraft: A FREE Fusion 360 Rival? Hands-On First Look — Optimal Printing Solutions 3D14k views · 9 comments
- Oct 19, 2026SolidCraft: Free Fusion 360 Alternative, Open-Source CAD in Your Browser — Evolution with AI11k views · 6 comments
- Oct 17, 2026TESTE O CLONE DO SOLIDWORKS — Sorovisk10k views · 12 comments
- Oct 23, 2026SolidCraft – First Touch! 🚀 — Elite Engineers5.9k views · 6 comments
20 more on YouTube
- Oct 24, 2026SolidCraft CAD – Kick Off! 🔥 — Elite Engineers5.2k views · 5 comments
- Oct 17, 2026SolidCraft: Open Source Parametric CAD in Rust — Tech Lead Corner5.2k views
- Oct 18, 2026SolidCraft: parametric CAD in Rust, with an MCP server — SkipCI4.4k views
- Oct 19, 2026SolidCraft — Free Fusion 360 Alternative, Runs in Your Browser — Evolution with AI3.7k views · 2 comments
- Nov 2, 2026無料の3D CAD「SolidCraft」と Fusion 360 を比べてみた|共通点と違い・どこまで追いついた? — タクのロボット実験室2.4k views · 7 comments
- Oct 20, 2026SolidCraft: Free Open-Source Fusion 360 Alternative (Runs in Your Browser!) — The Daily Commit2.3k views
- Nov 7, 2026𝗙𝗿𝗲𝗶𝗲𝘀 𝗖𝗔𝗗 𝗮𝘂𝗰𝗵 𝗶𝗺 𝗕𝗿𝗼𝘄𝘀𝗲𝗿 – 𝗛𝗜𝗭𝟲𝟮𝟬 — Heinz Schmitz1.6k views · 2 comments
- Oct 18, 2026solidcraft - free open source tool — RepoDrop1k views
- Oct 19, 2026SolidCraft(v0.16.2)と Fusion 360 を比べてみた|共通点と違いをやさしく解説【3D CAD】 — タクのロボット実験室900 views · 2 comments
- Oct 31, 2026SolidCraft: parametric 3D CAD built in pure Rust — Prosper Flow IO632 views
- Nov 8, 2026I Replaced Fusion 360 With SolidCraft - No Subscription, Runs in a Browser — SelfHost Pilot522 views
- Nov 8, 2026How to Install SolidCraft on Windows tutorial (Free 3D CAD) — Dexter Tutorials521 views
- Nov 5, 2026SolidCraft GitHub Overview: How AI Agents Work with Parametric CAD — Alex Hitt515 views
- Oct 24, 2026solidcraft is trending on GitHub #Shorts — codeExplainedBadly349 views
- Oct 28, 2026solidcraft: SolidCraft: an open-source parametric 3D CAD application built in pure Rust. Deskto — Best Saturday Night Songs334 views
- Nov 2, 202613K ⭐ Your AI Agent Can Design a 3D Part | SolidCraft Open Source CAD — Github God Eng293 views · 1 comment
- Oct 20, 2026A free 3D CAD that rebuilds itself — TERABIOTECH283 views · 1 comment
- Oct 25, 2026A Free Rust CAD App That Agents Can Drive: SolidCraft Deep Dive — Github Trending Repos245 views
- Oct 21, 2026【SolidCraft】アセンブリの方法|部品を組み立てて動かす(コンポーネント・空間固定・ジョイント)無料の3D CAD v0.16.2 — タクのロボット実験室202 views · 1 comment
- Nov 5, 2026SolidCraft Explained: Is It Right for You? (Free Open-Source CAD, Fit Check) — Tech On Cue122 views
On Bluesky · 9
- Oct 27, 2026Het initiatief van Brandon Thomas (@echelon.bsky.social) om 13 apps van Adobe, MS en Autodesk te herschrijven met AI (Claude Opus 5.5) in… — @stevenrogge.bsky.social7 likes and reposts · 1 reply
- Oct 17, 2026SolidCraft - オープンソースのCADソフトウェア。コーディングエージェントの進化で何を作ればいいかはっきりしているものはものすごいスピードで実現できるようになりました。Rustで実装、Windows/Linux/Macのマルチプラットフォームで動く、というのが今の流行… — @gakuueda.bsky.social7 likes and reposts · 1 reply
- Oct 17, 2026😍 github.com/tangency-lab... — @dwbmb.wsocial.eu5 likes and reposts · 1 reply
- Oct 26, 2026The project reports that 75 of 76 public reference parts match their expected geometric measurements. It’s still early, but this is a… — @vicky-grok.bsky.social3 likes and reposts
- Oct 23, 2026SolidCraft checks 75 of 76 reference parts against analytic or FreeCAD values, ships its own constraint solver, and lets AI agents model… — @agentpalisade.bsky.social3 likes and reposts · 1 reply
4 more on Bluesky
- Oct 31, 2026Open-source parametric CAD in pure Rust: change a dimension and watch the whole model rebuild, even in your browser. 🔗… — @prosperflowio.bsky.social2 likes and reposts
- Oct 17, 2026NOW INSTALLING: github.com/tangency-lab... — @normalguy.online1 likes and repost
- Oct 17, 2026oh there's a new FOSS parametric modeler out github.com/tangency-lab... — @barredspirals.comint.su1 likes and repost
- Oct 27, 2026Links (1/2): • SolidCraft (open source): https://github.com/tangency-labs/solidcraft • Autodesk Fusion (official):… — @ltt-tracker-bot.bsky.social0 likes and reposts · 1 reply
Other versions2 projects use a version of this.
Word for word · 1
- bherbruck/solidcraft★ 15k100% same
Edited · 1
- randomonkey05/SolidCraft-Agent-Skills★ 1299% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
- AGENTS.mdAGENTS.md
- assets/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- solidcraft-agent-toolsSkill
- solidcraft-checkingSkill
- solidcraft-commandsSkill
- solidcraft-contributingSkill
- solidcraft-crash-safetySkill
- solidcraft-editingSkill
- solidcraft-file-formatsSkill
- solidcraft-ground-rulesSkill
- solidcraft-modelingSkill
- solidcraft-packagingSkill
- solidcraft-performanceSkill
- solidcraft-preferencesSkill
- solidcraft-reportingSkill
- solidcraft-testsSkill
- solidcraft-uiSkill
- solidcraft-ui-textSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 0 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 15
Open: if the design is not open yet, run open {path}.
- Very specific: line 16
Map it: run inspect_design {"measure":false,"sketches":false}, then execute joint.list.
- Very specific: line 30
Open-chain joints in one batch: Read occurrence.properties of each moving occurrence before the batch and after it.
- Very specific: line 37
Pass
flip: true: when both origins are the same world point and axis, which is the case when you join parts where they sit. - Very specific: line 71
Look: when the server is bridged, screenshot after motion.play shows the app window at that step.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
SolidCraft mechanisms
Overview
An assembly is components placed by joints. Work the mechanism out as world points and axes first: every pin, slide and hinge, which part each one joins, and the value you expect at each pose. Then give every joint origin by those coordinates, and check each step against a number you computed yourself. A drive that reports success can still have moved nothing. Command shapes, a worked example, the traps and reply sizes are in reference.md next to this file. To build the parts themselves, use solidcraft-modeling.
Written against SolidCraft main after 0.11.1, which counts the degrees of freedom of closed loops, carries motion links through chains made in any order, and answers drives in degrees with moved (and a reason when nothing could move).
Before the first call
- In SolidCraft's own chat or any MCP client, call
skill_reference {"skill":"solidcraft-mechanisms"}. Elsewhere, readreference.md. - Open: if the design is not open yet, run
open {path}. When the server is bridged to the app and the current design isdirty, ask before opening anything. - Map it: run
inspect_design {"measure":false,"sketches":false}, thenexecute joint.list.joint.listshowsfixed(the grounded occurrences, always with the root, 0),dofper occurrence,conflicts, the joints, links and named origins, at about 0.5 KB per joint.execute motion.listlists the motion studies. - Existing design: take
edit.checkpointin its own call before you move bodies into components.edit.restore_checkpoint {checkpoint}goes back exactly, once: restoring uses the checkpoint up, so take a new one to go back again. - Write the plan:
- the components, and which one is grounded
- each joint: type, the two occurrences, its world point and axis, limits
- each motion link and its ratio
- for each loop, the relation you will check, such as actuator stroke against hinge angle, and where it should stop
- the pose to return to before saving
Build, in stages
- Components and grounding.
- Bodies made in the root go into components with
component.create {"name":..., "parent":"root", "activate":false}, thencomponent.move_bodies {"bodies":[...], "component":...}. - A part that moves in two pieces, such as an actuator's barrel and rod, becomes two components.
- Ground the base:
occurrence.ground {"occurrence":"Frame:1", "grounded":true}. The design's first top-level part is grounded when it is made; checkjoint.listfixed, and unground it ("grounded":false) if it is not the base. A grounded part refusesoccurrence.move. Occurrences are named<component>:<n>. Joint commands also take a component name (its first occurrence);occurrence.grounddoes not.
- Bodies made in the root go into components with
- Open-chain joints in one batch. Read
occurrence.propertiesof each moving occurrence before the batch and after it. If something moved, split the batch to find the joint. - Each joint that closes a loop, in a call of its own. Then check
conflictsin its reply. - Motion links.
- Contact sets and the motion study.
Joints
- Origins by world coordinates:
{"occurrence":..., "point":[x,y,z], "z":[ax,ay,az]}. Always giveoccurrence; without it the nearest body is used. Use the same form on both sides;frame,face,circleand named origins are inreference.md. - Pass
flip: truewhen both origins are the same world point and axis, which is the case when you join parts where they sit. Without it, b's z mates against a's and part b turns 180 degrees. - Parts already in place:
joint.as_built {"type":..., "a":..., "b":..., "at":{origin}, "name":..., "limits":[[min,max]]}keeps them where they are. - Values and limits are degrees for angles and mm for distances. An angle turns right-handed about the joint's z. A drive past a joint's own limits is clamped to them, which is not a failure. A new joint starts at its
values(default 0); one outside the limits starts at the nearer limit, so the part turns there as it is joined, and the reply'swarningssay so.valuedrives a joint's first value andvaluesthe ones it lists; the others keep theirs. - Every chain must reach something grounded. A part that is neither grounded nor joined to a grounded part is never placed. A drive on a joint in that chain moves nothing and answers
moved: false, with areasonand the part joined to nothing asunconnected.joint.listlists such chains underfloating, and their occurrences havedof: 6. Fix it withjoint.rigid_group {"occurrences":["Frame:1", ...]}, or with a joint to the grounded structure.
Linked and closed motion
- Motion links:
joint.motion_link {"a":..., "b":..., "ratio":r, "offset":o}sets b = r·a + o, clamped to b's own limits.ratiois b's units per a's: a pinion that moves its rack 0.5 mm per degree takesratio: 0.5.offsetis in b's units: degrees for an angle, mm for a distance, or an expression. A mirrored part takesratio: -1, and limits mirrored too. Chains (a drives b, b drives c) work in any order of creation. Drive only the head of a chain. - Gears, racks and screws: links whose ratio comes from radii or a pitch, kept up to date when they change.
joint.gear {"a":..., "b":..., "ra":r1, "rb":r2}turns b r1/r2 as far as a, the other way (internal: true: the same way).joint.rack_pinion {"a":pinion, "b":rack, "radius":r}moves the rack r·θ.joint.screw {"joint":cylindrical, "pitch":p}(ora,bfor a revolute and a slider) advances p per turn. A size is mm, an expression ("m*z1/2"), or a round face{"occurrence":..., "circle":[x,y,z]}whose radius is read again after every edit.reverse: trueturns b the other way (a left-hand thread). The driven joint keeps where it is. Drive a, never b. - Cams:
joint.cam {"a":camJoint, "b":follower, "profile":{"sketch":"CamSketch"}}(or{"edges":[[x,y,z]]}on the cam's body) makes a slider or revolute follower ride the cam's outline.follower:knife(default),rollerwithradius(mm, an expression or the roller's round face),flat. A revolute follower needstip(its knife's point or roller's centre). The table is worked out again after every edit; the follower keeps where it is, so model it touching. Drive the cam, never the follower. Closed loops: an actuator between a frame and a hinged panel takes three joints besides the hinge:
- a revolute root pin (frame and barrel)
- a slider (barrel and rod), with z along the actuator from root to tip on both origins, both at the root pin, and the stroke as its limits
- a revolute tip pin (rod and panel), which closes the loop
A four-bar or a slider-crank follows the same pattern. Drive the hinge; the pins and the slider follow.
- Stops: at the end of the stroke the drive stops, with
stopped_by_loop: {joint, fraction}naming the joint that could not follow. A loop that cannot close at all is listed underconflicts, and nothing in it moves. - dof counts the loop: here the panel, barrel and rod report 1 each, also at a pose where the actuator lies along its tip pin's path.
Contact and motion studies
- Contact:
contact.create {"occurrences":[...], "name":...}andcontact.enable_sets {}. A drive then stops where two bodies of one set would pass through each other, withstopped_by_contact: {a, b, fraction}.contact.check {}lists the pairs that overlap now. - Motion study:
motion.study {"name":..., "steps":N, "keys":[{"joint":..., "points":[[step, value], ...]}]}. Values are degrees or mm, linear between points. Key only the driving joints; linked joints and loops follow. - Play:
motion.play {"study":..., "step":s}sets the joints there, which changes the design, and answers every occurrence's pose (about 0.2 KB per occurrence).motion.export {"study":..., "samples":n}gives the poses at every step without changing the design. - Trace:
motion.trace {"occurrence":..., "point":[x,y,z], "joint":..., "from":0, "to":360}(or"study":...instead of joint, from and to) answers the world path of a point of a part, such as a coupler curve, without changing the design. It ends atstopped_atwhere a loop or contact stops the motion.motion.trace.keepwith the same params keeps it as a 3D sketch spline. - Plot:
motion.plot {"study":..., "joints":[...], "duration":seconds}answers each joint value'svalue,velocityandaccelerationper sample (finite differences; per step, or per second with a duration), and with"occurrence"and"point"a point'sposition,velocity,acceleration,speed. Check a follower's rate against the analytic one this way, without changing the design. - Collisions:
motion.interference {"study":..., "occurrences":[...], "against":[...]}plays the study (contact sets don't stop it) and lists each colliding pair withfirst_stepandstepsranges;clear: truewhen none and every step was checked (never whiletruncated: then it stopped atchecked_to; give a gear train or other detailed parts more time withbudget_s). It takes at most 256 bodies: on a big design list the moving part asoccurrencesand what it must miss asagainst. Parts joined at a knuckle often overlap by design and show up at every step. - Sweep until contact:
joint.sweep {"joint":..., "from":0, "to":120, "occurrences":[...], "against":[...], "report_gaps":true}answers how far a hinge, door or linkage opens:stopped_at(last clear value, bisected torefinemm, default 0.01),stopped_by{a, b, at}(or"loop","limit"), per-samplemin_gap_mmand the nearest each part came (min_gap). It runs on a copy;"apply":trueleaves the design at the stop. Pairs touching atfrom(touching_at_start) stop it only once they pass into each other. - Find limits:
joint.find_limits {"joint":...}sweeps each value both ways from where it is (its own limits ignored, on a copy) and answers per valuemin,max,min_by/max_by({a, b, at},"loop","limit","turn": nothing met within a turn,"range": a distance meets nothing,nullvalue). Set the joint's limits from it withjoint.limits. A full turn of curved parts resting in each other can take a few seconds.
Verify
- Each joint:
execute occurrence.properties {"occurrence":"Wing:1"}(about 2 KB) gives the world bbox, centre of mass and inertia of one occurrence. Joining must not move them. - Each drive: compute the expected value of every follower, and read it back from
joint.list(degrees and mm, withunit). For an actuator from root R to tip T on a panel hinged at H:L(θ) = |T(θ) - R|, whereT(θ)is T turned by θ about the hinge axis through H, and the stroke isL(θ) - L(0). A closed loop matches to 1e-6 mm. - Each stop: solve for where the limit is reached, and compare with the value the drive stopped at. Stops are found by bisection, so they land within about 0.01 degrees.
- Links: b must equal r·a + o exactly, unless that is outside b's limits; then b sits at the limit and the mirror stops following.
- The whole motion:
motion.playat a few steps, or onemotion.export, and compare the poses with the values you planned. - Look: when the server is bridged,
screenshotaftermotion.playshows the app window at that step.motion.export_animation {"study":..., "path":"tour.gif"}(orjoint,from,to) writes the whole motion as an animated GIF without changing the design.
Save
- Drive the joints back to the pose you planned to keep (
motion.playat step 0, orjoint.drive), thensave {path}. - An
.urdfexport leaves out each joint that closes a loop, because URDF is a tree.
Red flags
| Thought | Do instead |
"The origins are at the same point, so flip doesn't matter" | Pass flip: true, or the part turns 180 degrees. |
| "The drive answered values, so it moved" | Read moved; a chain joined to nothing grounded answers moved: false and a reason. |
| "Drive the arm joint by joint until the gripper gets there" | joint.reach {"occurrence":..., "at":..., "point":...} solves every joint on its chain at once; read reached and error_mm. |
| "Key every joint of the loop in the study" | Key the driving joint only; the loop follows. |
"Check the pose with component.list" | occurrence.properties on the one occurrence. component.list is 140 KB on a 36-part assembly. |
"Open the design with file.open" | The open tool, or doc.open; there is no file.open. |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

