Create and edit sketches in Fusion 360 using the fusion-sketch CLI. Use when the user asks to sketch, draw geometry, create profiles, add constraints, dimensions, patterns, or work with 2D geometry in Fusion 360.
Install
npx skillscat add peytoncasper/modeling/fusion-sketch Install via the SkillsCat registry.
Fusion 360 Sketching
Control Fusion 360 sketches via tools/fusion-sketch. All coords are mm. Output is JSON.
Orient yourself first
Before drawing anything, understand where you are:
tools/fusion-sketch state # what's focused, selected, timeline position
tools/fusion-sketch list # all sketches in the design
tools/fusion-sketch info --sketch S1 # curves, points, constraints detail
tools/fusion-sketch graph --sketch S1 # topology of a specific sketchCore workflow
# 1. Create sketch on a plane
tools/fusion-sketch create --plane xz --name SidePanel
# 2. Draw geometry (sketch coords — read the plane rules below)
tools/fusion-sketch rect --sketch SidePanel --c1 0,-50 --c2 100,0
# 3. Add constraints to lock geometry
tools/fusion-sketch constrain --sketch SidePanel --type horizontal --e1 SidePanel_curve_0
# 4. Add dimensions to make it parametric
tools/fusion-sketch add-dim --sketch SidePanel --type distance --e1 SidePanel_curve_0 --value 100
# 5. Verify profiles formed
tools/fusion-sketch finish --sketch SidePanel
# 6. If gaps exist, diagnose and fix
tools/fusion-sketch gaps --sketch SidePanel
tools/fusion-sketch close-gaps --sketch SidePanelPlane coordinate rules — MEMORIZE THESE
The sketch 2D coordinate system depends on which plane you drew on:
| Plane | Sketch X → | Sketch Y → | Gotcha |
|---|---|---|---|
| XY | World +X | World +Y | None — direct mapping |
| XZ | World +X | World -Z | Y is inverted! For +Z geometry, use negative sketch Y |
| YZ | World -Z | World +Y | X is inverted! For +Z geometry, use negative sketch X |
The rule: to place geometry at positive World Z, negate the corresponding sketch axis.
Example: panel from Z=0 to Z=50 on XZ plane
# sketch Y = -50 → world Z = +50
# sketch Y = 0 → world Z = 0
tools/fusion-sketch rect --sketch S1 --c1 0,-50 --c2 100,0Bypass: use world coordinates directly
# rect3d auto-converts world coords to sketch coords for you
tools/fusion-sketch rect3d --sketch S1 --wc1 0,0,0 --wc2 100,50,0Prefer rect3d when placing geometry at known world positions. Use rect only when you're thinking in sketch-local terms.
Verify coordinates before trusting them
# Convert sketch 2D → world 3D to check your math
tools/fusion-sketch coords --sketch S1 --points 0,0 100,-50
# Get suggested sketch coords for world 3D targets
tools/fusion-sketch suggest --plane xz --wmin 0,0,0 --wmax 100,50,100Complete command reference
Lifecycle
| Command | What it does |
|---|---|
create --plane P [--name N] [--component C] |
New sketch on plane xy/xz/yz/custom |
create-on-face --body B --face F [--name N] |
New sketch on a body face |
finish --sketch S |
Validate: returns profile count + open curves |
delete --sketch S [--component C] |
Delete a sketch |
list |
All sketches with plane info + coordinate mappings |
Drawing primitives
| Command | What it does |
|---|---|
line --sketch S --start x,y --end x,y [--construction] |
Line segment (optionally construction) |
arc --sketch S --center x,y --radius R --start-angle D --sweep D |
Arc by center+radius+angles |
arc3 --sketch S --start x,y --mid x,y --end x,y |
Arc through 3 points |
circle --sketch S --center x,y --radius R |
Circle |
rect --sketch S --c1 x,y --c2 x,y |
Rectangle in sketch coords |
rect3d --sketch S --wc1 x,y,z --wc2 x,y,z |
Rectangle in world coords (auto-converts) |
spline --sketch S --points x,y x,y ... [--closed] |
Spline through points |
polygon --sketch S --center x,y --radius R [--sides N] [--rotation D] |
Regular polygon (default 6 sides) |
slot --sketch S --c1 x,y --c2 x,y --radius R |
Slot (oblong) shape |
centerline --sketch S --start x,y --end x,y |
Construction line |
point --sketch S --pos x,y |
Sketch point |
Modifications
| Command | What it does |
|---|---|
fillet --sketch S --c1 CURVE_ID --c2 CURVE_ID --radius R |
Fillet between two curves |
trim --sketch S --curve CURVE_ID --point x,y |
Trim curve at point |
extend --sketch S --curve CURVE_ID --point x,y [--from-start] |
Extend curve toward point |
offset --sketch S --curves ID ... --dist D --dir x,y |
Offset curves by distance |
mirror --sketch S --curves ID ... --line LINE_ID |
Mirror curves about a line |
pattern-rect --sketch S --curves ID ... [--xn N --yn N --xs D --ys D] |
Rectangular pattern |
pattern-circ --sketch S --curves ID ... --center x,y [--count N --angle D] |
Circular pattern |
Constraints
| Command | What it does |
|---|---|
constrain --sketch S --type TYPE --e1 ID [--e2 ID] |
Add geometric constraint |
coincident --sketch S [--tolerance T] |
Auto-apply coincident constraints at close endpoints |
list-constraints --sketch S |
List all constraints |
Constraint types: coincident, horizontal, vertical, perpendicular, parallel, tangent, equal, concentric, midpoint, fix, collinear
Single-entity types (no --e2): horizontal, vertical, fix
Dimensions
| Command | What it does |
|---|---|
dims --sketch S |
List all dimensions with values + expressions |
dim-edit --sketch S --dim INDEX [--value V] [--expr E] |
Edit dimension value or expression |
add-dim --sketch S --type TYPE --e1 ID [--e2 ID] [--value V] [--pos x,y] |
Add dimension |
Dimension types: distance, diameter, radius, angular
Analysis & repair
| Command | What it does |
|---|---|
gaps --sketch S [--tolerance T] |
Find unclosed gaps between curves |
close-gaps --sketch S [--tolerance T] [--max-gap M] [--dry-run] |
Auto-close small gaps |
recreate --sketch S [--new-name N] [--delete-orig] |
Recreate as proper closed polygon |
Query & coordinate helpers
| Command | What it does |
|---|---|
profiles --sketch S |
Profile list with areas and world bounds |
info --sketch S |
Detailed sketch: all curves, points, constraints |
coords --sketch S --points x,y ... |
Sketch 2D → world 3D conversion |
suggest --plane P --wmin x,y,z --wmax x,y,z |
World 3D → sketch 2D suggestion |
graph [--sketch S] |
Topology graph (LOCAL_GRAPH) |
state [--compact] |
Navigation state snapshot |
Import & text
| Command | What it does |
|---|---|
import-svg --path FILE [--plane P] [--body B] [--name N] [--scale S] |
Import SVG into sketch |
text --text T [--sketch S] [--plane P] [--font F] [--height H] [--pos x,y] |
Add text to sketch |
Entity ID format
Curves and points use a predictable naming scheme:
SketchName_curve_0,SketchName_curve_1, ... (index-based)SketchName_point_0,SketchName_point_1, ...SketchName_dim_0,SketchName_dim_1, ...
Use info --sketch S to see all entity IDs.
Reading the output
Every command returns JSON. Key fields to watch:
finish — the most important check:
{"success": true, "is_valid": true, "profile_count": 1, "open_curves": 0}is_valid: falsemeans no closed profiles → can't extrudeopen_curves > 0means geometry doesn't close → rungaps
profiles — what you'll extrude:
{"profiles": [{"profile_index": 0, "area_mm2": 5000, "sketch_bounds": {...}}]}profile_indexis what you pass to extrude later
info — full detail for planning:
{"curves": [{"curve_id": "S_curve_0", "type": "SketchLine", "start": [0,0], "end": [100,0], "length_mm": 100}]}Common mistakes
Forgetting the Y inversion on XZ plane. Geometry ends up at -Z. Use
rect3dto avoid this entirely.Drawing open geometry then trying to extrude. Always
finishand checkprofile_count > 0before moving on.Sketch coords in mm but thinking in inches. Everything is mm. A 1" panel is 25.4mm.
Not naming sketches. Always use
--nameon create. Unnamed sketches get auto-names that are hard to reference later.Drawing on the wrong plane. XY = horizontal (floor). XZ = vertical front-facing. YZ = vertical side-facing.
Not adding constraints. Unconstrained sketches drift when you edit dimensions. Use
constrainto lock geometry relationships, thenadd-dimto make it parametric.
Decision guide: which plane?
| I want to make... | Plane | Extrude direction |
|---|---|---|
| A horizontal panel (floor/shelf) | XY | +Z (up) or -Z (down) |
| A vertical front panel | XZ | +Y (into model) or -Y (toward viewer) |
| A vertical side panel | YZ | +X (right) or -X (left) |
| A panel at an offset | Create offset plane first, then sketch on it | |
| A shape on an existing body face | Use create-on-face instead of a plane |