solidcraft-editing
Skill12 starsChanged 17 days agoApache-2.0View on GitHub
Use when changing, fixing or extending an existing SolidCraft design through its MCP server - a .solidcraft file or the design open in the app. Typical requests: resize it, move a cut, change a hole or standoff, add a fillet or chamfer, make a fixed value parametric, or a feature shows an error after a change or after the app crashed.
2 other projects use a version of this, 2 of them edited.
Adopted by
Most recently taken up by
- bherbruck/solidcraftedited, first seen Nov 8, 2026
- tangency-labs/solidcraftedited, first seen Nov 8, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 2
- bherbruck/solidcraft★ 15k92% same
- tangency-labs/solidcraft★ 15k92% 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.
- solidcraft-3d-print-dfmSkill
- solidcraft-assembliesSkill
- solidcraft-checkingSkill
- solidcraft-delivery-gateSkill
- solidcraft-dfm-reviewSkill
- solidcraft-drawing-and-tutorial-readingSkill
- solidcraft-engineering-drawingSkill
- solidcraft-hole-fastener-rulesSkill
- solidcraft-mechanismsSkill
- solidcraft-modelingSkill
- solidcraft-requirements-and-sanitySkill
- solidcraft-robust-build-orderSkill
- solidcraft-sheet-metal-flatpackSkill
- solidcraft-sheet-metalSkill
- solidcraft-shell-and-tangent-arcsSkill
- solidcraft-speed-modeling-lessonsSkill
- solidcraft-step-partsSkill
- solidcraft-sweep-and-boolean-hangsSkill
- solidcraft-tutorial-recipesSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 4 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Open: if the design is not open yet, run open {path}.
- Very specific: line 17
If that is ambiguous, sketch.inspect {sketch} that one sketch, which also shows its points in world coordinates.
- Very specific: line 28
To make a fixed value parametric: add a user parameter first (parameters.add standoff_d), then set each input to an expression of it …
- Distinctive: line 43
Keep the design's intent, which is the relative reading.
- Very specific: line 55
A batch is all or nothing: if one step fails, sketch.edit and sketch.finish in the same batch are undone too, and the sketch is left as it …
- Distinctive: line 62
If it matches to about 0.01%, you are done.
- Distinctive: line 63
If not, restore the checkpoint, then apply the changes one at a time, measuring after each.
- Very specific: line 65
Timeline health: run inspect_design {"measure":false,"sketches":false}.
- Very specific: line 67
Still parametric: if the user wants it kept parametric, change one driving size, measure, then set it back.
- Very specific: line 70
A feature has an
errorafter opening: read it with timeline.inspect, fix the input or definition, and recompute. - Distinctive: line 74
Never retry the crashing command unchanged.
≈ “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 editing
Overview
Edit an existing design through its parameters instead of rebuilding it. Every sketch dimension and feature input is already a parameter (d1, d2, ...), so most edits are a parameters.change each, sent together in one batch. Map the design with a few compact calls rather than walking the timeline one feature at a time. For command shapes and traps, in SolidCraft's own chat or any MCP client, call skill_reference {"skill":"solidcraft-modeling"}. Elsewhere, use reference.md from the solidcraft-modeling skill.
Map the design (3-4 calls)
- 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.openof a path that is already open and changed keeps the changed design (tested on 0.29.0: volume and sketches were not reloaded). To get back to the saved file, copy it to a new name and open the copy.
- Overview:
inspect_design {"measure":false,"sketches":false}lists the user parameters, the sketch dimensions (d1,d2, ... with their expressions), the features in order, and their errors. - Feature inputs:
execute parameters.list {"filter":"feature"}gives every feature input as an object such as{"name":"d9","expression":"(6) / 2","feature":"Cylinder1","input":"Radius"}.inspect_designleaves these out.- Match sketch dimensions by expression.
- If that is ambiguous,
sketch.inspect {sketch}that one sketch, which also shows its points in world coordinates.
- Baseline:
measure {}, so you can predict every change against it.
timeline.inspect {feature} is only for two cases:
- changing more than a number: profiles, direction, operation or edges
- checking whether a position follows a parameter, for example a cylinder
basewritten aswidth/2 - wall - 6
Inspect one feature of each kind, not every copy.
Change
- A number:
parameters.change {"name":"d9","expression":"..."}.- To make a fixed value parametric: add a user parameter first (
parameters.add standoff_d), then set each input to an expression of it (standoff_d/2). - Several changes: one
batch. (Release 0.28 says several parameter changes can be applied together as one rebuild and one undo step: only from the video, not tested here.batchwithcoalesce_parametersis the documented way.)
- To make a fixed value parametric: add a user parameter first (
- A user parameter:
set_parameterorparameters.change. Every expression that uses it follows. - Structure:
timeline.edit {"feature":..., "set":{...}}, with the field shapestimeline.inspectshows. A new feature goes at the end of the timeline. To place it earlier:
timeline.roll_to {"position":N}. A position is safer than a name, since a sketch and a feature can share one.- Add the feature.
timeline.roll_to {}to return to the end.
Everything after the insert recomputes, and a feature that worked can now fail. Seen: a corner fillet after an inserted chamfer.
- Seen on 0.29.0: a cut failed with "boolean Cut: the operation failed: no result" once a joined plate was inserted before it, because a vertex of the plate and the edge where a chamfer begins fell exactly on the cut tool's wall and top face. Distances up to 19.9 mm worked, 20 mm or more failed. Moving the cut sketch 0.002 mm (
sketch.move {entities,translate:[0,-0.002]}) made it pass, with a volume change far below tolerance. Tell the user about such a nudge.
- Adding a fillet to an edited design: the pick snaps to the nearest edge and fails with "no edge at [x,y,z]: nearest edge is N mm away" when an earlier fillet moved the edge (tested on 0.29.0: after three corner fillets the edge midpoint [300,20,40] had moved to [305,20,40]). Re-pick from
body_topology(edgemid) after every fillet or chamfer. Several edges meeting at one vertex can go in one call or one by one; the result is the same. - Risky or multi-step edits: take
edit.checkpointin its own call first.edit.restore_checkpoint {checkpoint}goes back exactly. Abatchrolls itself back; separateexecutecalls do not. - Deleting:
timeline.dependents {feature}first. It lists what is deleted with it and what would fail. - Ambiguous wording: "2 mm higher" on a value written as
wall + 6can be relative (wall + 8) or absolute.- Keep the design's intent, which is the relative reading.
- Tell the user which reading you used. This matters most when the same request also changes
wall, because then the two readings give different heights.
- New constants such as a chamfer size go in user parameters, so the user can change them later.
Constraining sketches of an existing design (tested on 0.29.0)
Sketches drawn with sketch.line or sketch.rectangle come out at dof 4 to 16 and can move when a parameter changes. Close them with sketch.edit {sketch} ... sketch.finish {}. Check dof per sketch with inspect_design {"measure":false,"sketches":false}.
- Anchor to the model:
sketch.project {refs:[{edge:[x,y,z]}]}or{vertex:[x,y,z]}adds fixed points and lines that follow the model. Then constrain to them:sketch.constraint.parallel {a,b},perpendicular {a,b},coincident {a:"p1", b:"l4"}(a point on a line), andsketch.dimension {entities:["l1.start","l5"], type:"distance", value:"..."}for a point-to-line distance. - Positions from the origin:
sketch.dimension {entities:["origin","p1"], type:"distance_x"|"distance_y", value:N}. The value is an unsigned distance, so a point at x = -1 takes1. - Parameters on the way:
value:"name = expression"(for example"larg_aba = sqrt(60^2 + 30^2)") creates the user parameter and dimensions with it. A later dimension can reuse the name asvalue:"larg_aba". - Command shapes that failed once:
sketch.constraint.horizontal_verticaltakesline:(one id per call),sketch.constructiontakescurves:,sketch.deletetakesentities:(curves, points or constraints). - Wrong end, flipped sketch: a point-on-line constraint on the wrong end (the point at the far end of a projected edge) makes the solver mirror the whole rectangle. Check the projected points' coordinates with
sketch.inspectfirst (which ofp1/p2is which end), and send the dimensions before the position constraint. "the new values would flip the sketch over" means a dimension was given a value that reverses the sketch (for example0.002where29.998was meant). - Do not delete and redraw the lines of a sketch that later features use. Edge names come from the curve ids (
F27:side:l2). New curves get new ids (l6...l9), so later sketches and fillets report "projected reference lost: edge ... no longer exists; last geometry retained" and "edge ... no longer exists; using the edge at the picked point", and the volume changes with no error. Constrain the lines that are there. After any sketch edit, compare the volume with the baseline. - A batch is all or nothing: if one step fails,
sketch.editandsketch.finishin the same batch are undone too, and the sketch is left as it was. - A call that times out (the bridge answers after 60 s) may still have run. Read the state with
sketch.inspectorinspect_designbefore sending it again.
Verify
- Predict, then measure once. Send the independent changes in one batch, predict the total volume change, then run
measureonce.- A move does not change the volume. To confirm a moved sketch, read its points' world coordinates with
sketch.inspect. You can also predict the COM shift,Δcom = V_moved · Δz / V_body, but only when nothing else in that batch changes the volume. - If it matches to about 0.01%, you are done.
- If not, restore the checkpoint, then apply the changes one at a time, measuring after each.
- A cut or chamfer that leaves the volume unchanged has missed.
- A move does not change the volume. To confirm a moved sketch, read its points' world coordinates with
- Timeline health: run
inspect_design {"measure":false,"sketches":false}. Everyerrorandwarningmust be null. If something broke, restore orundobefore you try anything else. - Interior features: take one top-view screenshot,
{"source":"model","view":"top","width":480,"height":320}. When the server is bridged,viewalso turns the user's camera. The iso view hides standoffs behind the walls. - Still parametric: if the user wants it kept parametric, change one driving size,
measure, then set it back.
When something is already broken
- A feature has an
errorafter opening: read it withtimeline.inspect, fix the input or definition, and recompute. - The app crashed:
crash_reportslists the reports, andcrash_reports {id}gives the command that crashed.execute doc.recovery_listand thendoc.recover {id}reopen the autosaved design.- Never retry the crashing command unchanged.
Save
save {"path":"...-v2.solidcraft"} writes a copy. save {} overwrites the opened file; do that only when the user asked for it.
File format and older versions. SolidCraft 0.29.0 saves solidcraft/46 (seen in a saved design on 0.29.0). The release videos say 0.28 and earlier cannot open it, and that each release from 0.25 changed the native format (41 in 0.25, 43 in 0.26, 44 in 0.27: only from the videos). Keep the original and save the upgraded design as a new name such as -v2; a STEP export keeps solids but not sketches or feature history.
Red flags
| Thought | Do instead |
| "timeline.inspect each feature to understand it" | parameters.list {"filter":"feature"} shows every input in one call. |
| "Delete and remodel the feature" | Change its dN input, or use timeline.edit. History and downstream picks stay intact. |
| "The insert worked, done" | Check the errors of every later feature. |
| "Edge points with expressions, so the chamfer follows the size" | They are rejected, and stored picks already follow size changes. |
| "Pick all 8 rim edges" | One pick on a tangent chain fillets or chamfers the whole chain. |
| "Reuse the old edge point for the next fillet" | After a fillet the edge moved ("no edge at ...: nearest edge is 5 mm away"). Take the new midpoint from body_topology. |
| "Delete the sketch lines and draw them again so they constrain cleanly" | Later features reference the curve ids. Constrain the existing lines; a redraw gives "projected reference lost" warnings and a wrong volume. |
| "open the file again to discard my changes" | A changed design that is already open is not reloaded. Copy the file to a new name and open that. |
| "The cut fails, so the model is wrong" | A cut whose tool face, wall or vertex coincides with a vertex or edge of the body can fail ("no result"). Change the distance by 0.1 to see, then nudge the sketch 0.002 mm. |
| "Measure after every edit" | One batch, one measure against the summed prediction. Split only when it misses. |
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.

