Docs

Reference for hardform-cli, the HardForm command line program. Tutorials are on the way (see the end of this page).

hardform-cli

hardform-cli is HardForm without the window. It ships next to the hardform program and is the same engine: every feature of the GUI is also available from the command line, and a test in the build keeps it that way. Model with sketches, features and components, query and measure, make drawings, set up appearances, scenes and animations, run CAM, mesh, export STEP, render. It is built for scripts and for AI agents doing whole jobs without a screen.

hardform-cli --help lists the commands and hardform-cli COMMAND --help lists every flag of one. 3D Scan Buddy has no commands of its own; its tools are the commands below (mesh-import, mesh-edit, construct, mesh, step export).

Conventions

A short script:

sketch new --plane XY --name "Base outline"
sketch add "Base outline" --rect -3.5,-3.5,88.5,59.5
extrude "Base outline" --distance 26 --name "Base block" --body-name Base
fillet --body-edges Base --along Z --size 3 --name "Base corner fillet"
sketch new --plane "face:Base block:end" --name "Cavity sketch"
sketch add "Cavity sketch" --world --rect -1.5,-1.5,26,86.5,57.5,26
extrude "Cavity sketch" --op cut --symmetric --distance 48 --name Cavity
query bodies
render -o base.png

Run with hardform-cli run base.fcs base.fcad.

Command groups

172 command forms. Descriptions are shortened; hardform-cli COMMAND --help is the full reference. DOC is left out in scripts. Brackets are optional, | separates alternatives.

Documents and edits

Create documents, run scripts, apply Edit JSON, undo.

Command and arguments Description
new -o DOC [--force] [--json] An empty document (refuses to overwrite without --force)
run FILE [DOC] [-o OUT] [--json] [--continue] [--stats] Run a script: one command per line, without the document argument, in one process
apply DOC (--edit JSON | --edits-file FILE|-) [-o OUT] [--dry-run] [--strict] [--json] Edit JSON: validate and apply edits (one or an array) in order, all or nothing
edits DOC [--json] [--full] [--truncate N [-o OUT]] The edit log (index, kind, target; --full each edit's JSON); --truncate N keeps the first N edits (undo)
list DOC [--json] The features with status and the bodies (JSON: features, bodies, replay_issues)
ids [N] [--json] N fresh UUIDs (for Edit JSON)
options DOC [--auto-project on|off] [--json] Document options (SetOptions); no option: print them

Sketches

Sketch geometry, constraints and dimensions.

Command and arguments Description
sketch new DOC (PLANE | --plane PLANE) [--name N] [--project-outline] [--component C] New empty sketch on XY, XZ, YZ, a planar face or a datum plane; prints the frame
sketch add DOC SKETCH SHAPES... [--construction] [--world] Add geometry; prints each shape's entity ids and the region count
sketch constrain DOC SKETCH KIND IDS... Constrain: horizontal, vertical, parallel, perpendicular, collinear, tangent, equal, concentric, coincident, point-on, midpoint, symmetric, fix, fix-all
sketch dimension DOC SKETCH (--distance A [B] | --horizontal A [B] | --vertical A [B] | --angle A B | --radius C | --diameter C) [--value EXPR] [--label X,Y] [--reference] A driving dimension (default value: as drawn); --set ID --value EXPR changes one (SetDimension)
sketch delete DOC SKETCH [--entities IDS] [--constraints IDS] Remove entities (with what depends on them) and constraints
sketch project DOC SKETCH [--edge REF] [--outline FACE] [--face-outline FACE] [--point vertex@...] [--section] Linked geometry from the model (GUI PROJECT > Project / Intersect)
sketch trim DOC SKETCH ID --at X,Y Remove the piece of a line, arc or circle around X,Y between its intersections with the other curves (the whole curve when it has none; a circle becomes an arc)
sketch extend DOC SKETCH ID --end start|end Move that end of a line or arc to the nearest intersection ahead with another curve (a line along its direction, an arc along its circle), tied there
sketch fillet DOC SKETCH ID1 ID2 --radius R [--near X,Y] Fillet the corner of two lines / arcs
sketch offset DOC SKETCH IDS... --distance D [--construction] Offset a connected chain of lines and arcs (or a circle) by a distance
sketch text DOC SKETCH ID --set KEY=VALUE... Change a sketch text (string, font, size, angle, anchor, alignment, spacing, corner radii)
sketch explode DOC SKETCH ID Turn a text into ordinary lines and arcs (one edit); JSON adds entities, removed, dropped
sketch break-link DOC SKETCH IDS Unlink projected entities
sketch show DOC SKETCH [--json] Listed under Sketches, Drawings, Scene and Output

Features

Solid features, construction geometry, parameters.

Command and arguments Description
extrude DOC SKETCH (--distance D | --to-face PLANE [--offset O] | --to-object BODY|FACE [--offset O] [--cut-all | --no-cut-all] | --through-all) [--symmetric | --two-sided] [--direction +|-] [--op new|join|cut] [--body B] [--regions R...] [--draft DEG] [--name N] [--body-name N] [--edit FEATURE] [--component C] Extrude; join / cut target the component's only body unless --body
revolve DOC SKETCH --axis AXIS [--angle DEG] [--flip] [--op ...] [--body B] [--regions R...] [--name] [--body-name] [--edit F] Revolve about X Y Z, datum:NAME, sketchline:SKETCH:ID or a cylinder face; angle 0 < a <= 360
helical DOC SKETCH --axis AXIS --pitch P (--turns N | --height H) [--left] [--taper DEG] [--flip] [--op new|join|cut] [--body B] [--regions R...] [--name] [--body-name] [--edit F] Sweep a profile along a helix: threads, springs, conical screws
sweep DOC PROFILE --path SKETCH:ID [--regions R...] [--op new|join|cut] [--body B] [--flip] [--name] [--body-name] [--edit F] Sweep a profile along a path of lines and arcs: pipes, rails, grooves
hole DOC (--face FACE (--at X,Y,Z | --uv U,V)... | --sketch S [--points IDS]) --diameter D (--depth D | --through-all) [--counterbore DIA,DEPTH | --countersink DIA,ANGLE] [--drill-point] [--flip] [--body B] [--name] [--edit F] Holes: simple, counterbore, countersink; blind or through
fillet DOC EDGES --size R [--name] [--edit F]chamfer DOC EDGES --size D ... Round (fillet) or bevel (chamfer) edges chosen by reference, face, body, chain or direction
shell DOC BODY --thickness T [--open FACE...] [--name] [--edit F] Hollow a body, open at the faces
mirror DOC (--bodies B... | --features F...) --plane PLANE [--new-body] [--name] [--edit F] Mirror bodies (joined, or a new body) or features' tools
split DOC --body B (--plane PLANE | --sketch-line SKETCH ID | --region SKETCH [REGIONS...] [--regions R...]) [--flip] [--keep both|a|b] [--name NEW] [--feature-name N] [--edit F] Split a body in two by a plane, a sketch line or closed sketch regions
combine DOC --target B --tools B... [--op join|cut|intersect|exclude] [--keep-target] [--keep-tools] [--new-name N]... [--name F] [--edit F] Body booleans: join, cut, intersect, exclude
pattern rect DOC (--bodies | --features) ... --dir D --count N --spacing S [--symmetric] [--dir2 D --count2 N --spacing2 S [--symmetric2]] Rectangular pattern; D X Y Z (-X reverses), a planar face (its normal), datum:, sketchline:
pattern circular DOC (--bodies | --features) ... --axis AXIS --copies N [--angle DEG] [--centered] Circular pattern (360: evenly around)
pattern feature DOC FEATURE... (--dir D --count N --spacing S | --axis A --copies N) A pattern of features (cuts, bosses, holes)
construct plane DOC (--offset PLANE --distance D | --midplane A B | --angle PLANE --axis AXIS --degrees A | --points P1 P2 P3 | --tangent FACE [--degrees A] | --normal-to SKETCH:ID [--at start|end] | --from-fit PLANE_FIT [--distance D]) Construction plane (--from-fit: the plane of a plane fit, offset by --distance)
construct axis DOC (--points P1 P2 | --edge EDGE | --cylinder FACE | --planes A B | --normal PLANE --point P | --from-fit CYLINDER_OR_CONE_FIT | --from-fits PLANE_FIT PLANE_FIT) Construction axis (--from-fits: the intersection line of two plane fits)
construct point DOC (--vertex vertex@... | --midpoint EDGE | --sketch-point sketchpoint:S:ID | --at X,Y,Z | --plane P --axis A | --planes A B C | --from-fit SPHERE_OR_CONE_FIT | --from-fits PLANE_FIT CYLINDER_FIT | --from-fits A B C) Construction point from a vertex, midpoint, sketch point, coordinates, plane/axis or fits
feature rename DOC F NAME Rename a feature (RenameFeature; references follow)
feature delete DOC F... [--with-dependents] Delete features; without --with-dependents a deletion that breaks others is refused (exit 3) unless --keep-errors
feature update DOC F KEY=VALUE... Change fields of a feature's definition (UpdateFeature; the keys of show DOC --feature F, dots for nested ones, VALUE JSON or text)
feature distance DOC F VALUE An extrude's distance: a number (SetExtrudeDistance) or an expression (SetExtrudeDistanceExpr)
feature regions DOC F [REGIONS...] An extrude's regions (SetExtrudeRegions; none: all)
feature rollback DOC [F | N] [--end] The rollback marker: before feature F, after N features; --end rolls forward
param set DOC NAME EXPRparam delete DOC NAME [--force] Parameters (query DOC params lists them with what uses each); a used parameter is refused unless --force
param drive DOC NAME --dimension SKETCH:IDparam drive DOC NAME --feature F --field NAME A dimension's or a feature field's value becomes the parameter NAME and the place uses the name (two edits, one undo step; the GUI's Drive parameter...)
body rename DOC BODY NAME Name a body

Components

Assemblies: components and placements.

Command and arguments Description
component new DOC NAME [--parent P] [--at X,Y,Z] [--rot RX,RY,RZ] [--activate] [--from-bodies B...] A component, placed (relative to its parent) in the same step; or one made from bodies (they keep their place)
component place DOC C [--at X,Y,Z] [--rot RX,RY,RZ] [--relative] Its placement (the Move tool); absent parts keep their value; --relative moves by them
component rename DOC C NAMEcomponent delete DOC C Rename; delete an empty component
component activate DOC C New features go into C (root for the document; file header state)
component move-bodies DOC C BODY... Move bodies with their history into C
component ground DOC C [--off] The assembly solve never moves C (it stays at its placement relative to its parent); --off releases it
component capture DOC C Write C's solved placement into its seed (capture position); the model does not change

Joints

Joints and drives between components.

Command and arguments Description
joint add DOC --kind K --a COMP:ANCHOR --b COMP:ANCHOR [--flip-a|--flip-b] [--offset-a X,Y,Z] [--angle-a A] (same for b) [--angle E] [--distance E] [--x E --y E] [--pitch E --yaw E --roll E] [--limits [DOF=]MIN,MAX[,REST] ...] [--lock] [--name N] [--component C] Add a joint: rigid, revolute, slider, cylindrical, pin-slot, planar or ball
joint edit DOC J [the same flags] Replace the parts given (--flip-a off, --offset-a none, --lock off clear)
joint drive DOC J --angle E | --distance E | ... Set drive values (free removes one)
joint delete DOC J... Delete joints: their components go back to their seeds or to the remaining joints (destructive: an agent asks first)
joint show DOC J [--json]joint list DOC [--json] One joint's or every joint's report (as query joints)

Mesh imports

Import and repair scans and meshes, datum frames, fitted surfaces.

Command and arguments Description
mesh-import add DOC MESH [--cell C] [--surface [--thickness T]] [--op new|join|cut|intersect] [--body B] [--at X,Y,Z] [--rot RX,RY,RZ] [--flip] [--name] Import STL / OBJ / 3MF
mesh-import add DOC --step FILE [--tolerance T] [--cell C] [--op new|join|cut|intersect] [--body B] [--at X,Y,Z] [--rot RX,RY,RZ] [--name N] Import the solids of a STEP file through Gmsh as faced bodies
mesh-import tolerance DOC F T Tessellate a STEP import again from its file at chord tolerance T (the faces keep their numbers; the file must be where it was imported from)
mesh-import cell DOC F EXPRmesh-import move DOC F --at --rot Grid cell size, placement
mesh-import op DOC F (--clean | --keep-largest | --fill-holes MM | --cap-holes [--flat] | --smooth N [--smooth-method taubin|laplacian] [--lambda L] | --decimate RATIO | --decimate-count N | --transform --at --rot | --json-op OP) Mesh tools: clean, keep largest, fill holes, cap holes, smooth, decimate, transform
mesh-import op DOC F (--selected --smooth N | --selected --decimate RATIO | --delete-selected | --align-plane XY|XZ|YZ|datum:N | --align-axis X|Y|Z|datum:N [--flip] [--center] | --cap-loops [--flat]) The tools that work on the selection of mesh-edit select; one of them per command
mesh-import op add DOC F datum --primary SELECTION [--primary-target XY|XZ|YZ|datum:N] [--primary-flip] [--secondary SELECTION --secondary-kind face|edge|bore | --secondary-points X,Y,Z X,Y,Z ...] [--secondary-target X|Y|Z|datum:N] [--secondary-flip] [--secondary-center] [--tertiary bore:SELECTION|corner:SELECTION|vertex:ID|point:X,Y,Z] [--tertiary-target origin|datum:N] The datum frame (3-2-1)
mesh-import op add DOC F fit --kind plane|cylinder|cone|sphere --select SELECTION [--name N] [--extent region|U0,U1,V0,V1] A fitted surface, the reference fit:N; refused with the residuals when the region is not that kind of surface
mesh-import op edit DOC F INDEX [the same options] [--no-secondary] [--no-tertiary]mesh-import op show DOC F [INDEX] [--json] Change a datum frame or a fit (refitted, recorded again); every operation's report as it evaluates now (a fit's surface, residuals and extent)
mesh-edit select DOC [--feature F] [--triangles LIST] [--region SEED[:ANGLE[:seed|neighbor]]] [--brush X,Y,Z,R] [--loop N,...] [--all] [--add | --remove] [--grow N] [--shrink N] [--invert] [--clear] [--json] The SELECT and SELECTION tools of the Meshes workspace
mesh-import enable DOC F INDEX on|off Enable or disable a mesh operation
import-mesh MESH -o OUT [--doc BASE] ... The same as a new document (or into a copy of BASE)

Queries

Inspect a document: features, bodies, faces, edges, measurements.

Command and arguments Description
show DOC [--json] [--feature NAME] Components, bodies, features with status, parameters, appearances, drawing sheets, render settings, animation; --feature prints a feature's definition as JSON
query DOC bodies [--body REF] [--json] Per body: body:N, name, component, creating feature, volume (with its error bound), area, bounds
query DOC faces [--body REF] [--feature NAME] [--pieces] [--json] Per topological face (named by its first piece; --pieces: per provenance piece, with face_ref, the face it is part of)
query DOC edges [--body REF] [--feature NAME] [--pieces] [--json] Per topological edge run (an edge across former seams once, with its members, edges, parts, faces)
query DOC regions --feature SKETCH [--json] Regions: index, RegionRef, area, centroid (sketch and world), bounds
query DOC triangles [--feature F] [--selected] [--near X,Y,Z,R] [--limit N] [--json]query DOC loops [--feature F] [--json] A mesh import's triangles and boundary loops
query DOC components [--json]query DOC params [--json] The component tree with placements (solved, and the seed), ground, jointed components' dof
query DOC joints [--json] Per joint: kind, anchors, current values, limits, assembly DOF, solver status
query DOC fits [--json] The fitted surfaces of the mesh imports
query fonts [--search TEXT] [--json] The font families sketch text can use (bundled Open Sans first, then the installed ones) with their styles; no document needed
face-frame DOC REF [--json] The frame of a planar face, base or construction plane
measure DOC A [B] [--json] The Measure tool: one entity's properties or the relation of two (distance, axis distance, angle, interference)
list DOC Features with status, bodies
sketch show DOC SKETCHdrawing list DOCanimation show DOCview list DOC Listed under Sketches, Drawings, Scene and Output

Drawings

Drawing sheets, views, dimensions, annotations, PDF / SVG / DXF export.

Command and arguments Description
drawing sheet new DOC [--name] [--size A4..A0|ANSI-A..ANSI-E|WxH] [--orientation landscape|portrait] [--angle first|third] [--template ISO|ANSI|NAME] [--units mm|inch] [--text-height H] [--decimals N] [--field KEY=VALUE...] A sheet (default ISO A3 landscape, third angle) with title block fields (title, part, material, author, company, rev; date, sheet, scale, file are automatic)
drawing sheet set DOC SHEET [same options]drawing sheet delete DOC SHEET Change, delete
drawing view add DOC SHEET (--base front|back|top|bottom|right|left|iso|iso-back|custom:RX,RY,RZ:UX,UY,UZ | --iso | --projected VIEW --dir up|down|left|right) [--at X,Y] [--offset D] [--scale S] [--name N] [--component C...] [--body B...] [--hidden dashed|off] [--no-tangent] [--label] A view; a projected view's default --offset puts it 25 mm clear of its parent; prints its center and outline on the sheet
drawing view set DOC VIEW [--at] [--offset] [--scale] [--name] [--hidden] [--tangent on|off] [--label on|off] [--component C...]drawing view delete DOC VIEW Change, delete (with its projected views and annotations)
drawing label DOC VIEW... [--all [--sheet S]] [--off] View labels: the view's title in capitals (plus SCALE 2:1 when its scale differs from the sheet's) printed under it, in the GUI and in PDF / SVG / DXF
drawing dimension add DOC VIEW KIND [--at X,Y] [--side SIDE] [--gap MM] [--prefix T] [--suffix T] [--precision N] A dimension from model references, resolved to the view's projected curves
drawing note DOC SHEET TEXT --at X,Y [--height H] A note (\n breaks lines; {field}s allowed)
drawing leader DOC VIEW TEXT --to REF [--at X,Y] An arrow to a vertex, point, edge (its middle) or face (its centroid) of a view
drawing center-mark DOC VIEW (REF... | --all) [--extension E] Center lines on circles and arcs seen face-on
drawing annotation set DOC SHEET ID [--at X,Y] [--text T] [--prefix] [--suffix] [--precision] [--height]drawing annotation delete DOC SHEET ID... Move or change, delete annotations (ids from drawing list)
drawing template DOC [SHEET] [--field KEY=VALUE...] [--all-sheets] [--load FILE] [--use NAME] [--save FILE] [--delete NAME] Title block fields; template files (fieldcad-drawing-template JSON, as the GUI's template editor saves); no option: print the fields
drawing list DOC [--json] Sheets, views (id, title, kind, scale, center, outline on the sheet, label), annotations (id, kind, the dimension's text as measured now, or BROKEN)
drawing export DOC -o DIR [--date D] [--check] PDF (one page per sheet), SVG and DXF per sheet

Scene, appearances, animation, named views

Render settings, materials, animation keys, camera views.

Command and arguments Description
scene DOC [scene options] [--samples N] [--save-view NAME [camera options]] [--delete-view NAME] [-o OUT] [--json] The render settings (one SetRenderSettings edit)
appearance DOC [--new NAME --color RRGGBB --roughness R --metalness M --texture IMG --scale MM | --id ID] [--target REF...] [--clear --target REF...] [--delete ID] [--list] [-o OUT] Add, assign (bodies, faces), clear assignments, delete appearances
animation DOC [--duration S] [--fps F] Duration and the video frame rate (render-video's default); no option: show the animation
animation camera-key DOC --t T [camera] [--ease linear|in-out|in|out] [--delete] A camera key (replaces one at the same time); the camera is a named view or a view preset fitted to the model as exploded at that time, with overrides
animation explode-key DOC --t T --factor F [--ease] [--delete] An explode key (0 assembled .. 1 exploded)
animation joint-key DOC JOINT --t T (--angle A | --distance D | --x X | --y Y | --pitch P | --yaw W | --roll R)... [--ease] [--delete] A joint value key (degrees or mm, a number; replaces one at the same time, outside the joint's limits is refused)
animation explode DOC COMPONENT (--direction X,Y,Z|X|-Z ... [--distance D] | --auto) How a component moves when exploded (mm at factor 1)
animation preset explode-and-return DOC [--duration 8] [--explode-max 1] [--hold 0.125] [--turntable DEG] [--keep-camera] [camera] Closed, then fully exploded, then closed again, with holds and an optional turntable
animation preset turntable DOC [--degrees 360] [--duration S] [camera]animation preset orbit DOC --to VIEW [--from VIEW] [--duration S]animation preset explode DOC [--duration S] [--explode-max F] The GUI timeline's presets
animation clear DOC [--camera] [--explode] [--joints] [--components]animation show DOC [--json] Remove keys (none given: camera, explode and joint keys); print the keys (degrees, mm)
view save DOC NAME [camera]view delete DOC NAMEview list DOC [--json]view go DOC NAME [-o PNG] [--size WxH] Named views; go prints the camera and renders it (CPU)
Camera options

--named-view NAME--view iso|iso-back|top|bottom|front|back|right|left--body--component--target X,Y,Z--yaw DEG--pitch DEG--height MM--zoom F--fov DEG

CAM libraries

App-level libraries (no document): tools, materials, coatings, machines, recipes.

Command and arguments Description
tools list [--tag T ...] [--type T] [--favorites] [--search TEXT] [--json] The tool library, favorites first
tools show TOOL [--json] One tool's fields (lengths in its unit)
tools add --type T --diameter D [tool options] A new tool; everything else defaults from the type and diameter; named 6 mm flat end mill unless --name
tools edit TOOL [tool options]tools copy TOOL [tool options] Change a tool; copy one and change the copy (the normal way to add a tool)
tools delete TOOLtools favorite TOOL [--off]tools tag TOOL [--add T] [--remove T] Documents keep their snapshots
tools import FILE [--format hardform|tools-json] [--replace] [--dry-run] A HardForm tools file or a tool library (.json, zipped .tools; HSMAdvisor and vendors export it)
tools export FILE [TOOL ...] [--tag T] [--format hardform|tools-json] Export tools as a HardForm .json file or a zipped .tools library
materials list [--family F]materials show Mmaterials resolve M The families and materials; a material's own record; its full record with inheritance applied and the chain
materials add NAME (--family F | --like M) [--id ID] [material options] A material that stores what it changes (--like 6061 --speed-factor 0.8: like 6061 but 20% slower)
materials edit M [material options] [--name NEW] [--clear VALUE ...]materials delete M Change a material (or a family's values); --clear makes a value inherited again; delete is refused while another material is like it
coatings listcoatings show C The coating matrix (multiplier per family, + recommended, ! not recommended)
coatings edit C (--family F | --default) [--multiplier X] [--suitability S] [--note TEXT] [--remove] A cell of the matrix
machines listmachines show Mmachines delete M The machine library
machines add NAME --post PATH [machine options] A machine; --post is required (a .cps file, or bundled:NAME to install and use a bundled post)
machines edit M [--name NEW] [--post PATH] [machine options] Change a machine (setups keep their snapshot)
cam recipe list [--type T] [--search TEXT]cam recipe show R The cutting recipes (type, tool geometry, strategy, the number of overrides and parameters, the machine and material they were saved with); one recipe's values
cam recipe add NAME --type T (--tool TOOL | --diameter D --flutes N --flute-length L) [recipe options] A recipe: the operation type and a tool's geometry (--tool takes a library tool's; its name is not kept)
cam recipe edit R [recipe options]cam recipe copy R [recipe options] Change a recipe; copy one and change the copy (R copy)
cam recipe delete R Documents keep the values they took
cam recipe export FILE [R ...]cam recipe import FILE [--replace] [--dry-run] A HardForm recipes file ("format": "fieldcad-recipes"); importing skips a recipe already there (same id) unless --replace and makes names unique
Tool options

--name--type--unit mm|in--diameter--corner-radius--flutes--flute-length--shoulder-length--length-below-holder--stickout--overall-length--shaft-diameter--shank-diameter--holder-diameter--taper-angle--point-angle--tip-diameter--thread-pitch--cutting-material--coating--number--length-offset--diameter-offset--clockwise--coolant-supply--tag--favorite--vendor--product-id--product-link--notes--vendor-data MATERIAL:vc=300,fz=0.05,...--remove-vendor-data MATERIAL

Material options

--family--like--speed-factor--chip-load-factor--carbide-speed MIN..MAX--hss-speed MIN..MAX--chip-load percent:P,MIN,MAX--chip-load table:D=C,D=C,...--energy--heat-sensitive--work-hardening--abrasive--chip-thinning--min-chip-load-factor--coolant dry|air|mist|flood|suction--hardness "95 HB"--alias--notes

Recipe options

--name--description--type--tool TOOL--tool-type--diameter--flutes--corner-radius--flute-length--strategy conventional|hsm|suggested--pass--aggression--set NAME=VALUE--override--unset NAME--clear-override--param NAME=JSON--clear-param NAME--machine NAME|none--material M|none

Machine options

--kind mill|router|laser|plasma--spindle--power W--power-scale S--axes X:0..300,Y:0..300,Z:-100..0[,A:..]--reversed AXIS--not-reversed AXIS--spindle MIN..MAX--power--max-feed--rapid-feed--link-feed--rigidity 1..10--tool-change changer|manual|none--tool-setter true|false--home X,Y,Z|none--change-position X,Y,Z|none--work-offsets 1..6--unit--property NAME=VALUE--remove-property NAME--notes

External tools

Gmsh, used for STEP import and export.

Command and arguments Description
tools gmsh [--show] [--json] Where Gmsh is, its version (gmsh --version, at most 10 s) and where it came from
tools gmsh --locate PATH [--json] Use this executable: runs PATH --version and saves the path in settings.toml
tools gmsh --download [--json] Download the pinned official Gmsh build over HTTPS, verify its SHA-256 and unpack it into the user's app data

CAM setups and operations

Setups, operations, toolpaths, simulation, posting.

Command and arguments Description
cam setup add DOC --machine M [setup options] A setup on a library machine (a snapshot; required); named Setup1, Setup2, ..
cam setup edit DOC SETUP [--machine M] [setup options] Change a setup; --machine takes a fresh snapshot; a new machine or material recomputes the feeds and speeds of the setup's operations in the same step
cam setup list DOCcam setup show DOC SETUP Setups with machine, material, WCS, stock (and its box in the WCS), operations and status
cam setup delete DOC SETUP A setup with its operations
cam op add DOC --type T --tool TOOL [--setup S] [operation options] An operation (drill, contour, trace, face, pocket, adaptive) with a snapshot of the tool and computed feeds and speeds; --setup may be left out when there is one
cam op edit DOC OP [operation options] Change it (the type stays); the feeds and speeds are recomputed (with no options it only recomputes, and says nothing to change when the values are current)
cam op list DOC [--setup S]cam op show DOC OP Operations in machining order with tool numbers and status
cam op preview DOC OP [--json] The material an adaptive, pocket or contour operation will remove, before generating
cam op delete DOC OP Delete an operation
cam op save-recipe DOC OP NAME [--description TEXT] [--replace] [--json] Saves the operation's proven values as a cutting recipe of the library
cam op reorder DOC [--setup S] (OP ... | --move OP --to N) The setup's new order (all of its operations), or one moved to position N
cam generate DOC [--setup S | --op OP] [--force] [--json] Generate the toolpaths of every operation, a setup's or one
cam simulate DOC [--setup S] [--quality draft|normal|fine] [--estimate] [--stl OUT [--at-move N]] [--clear] [--json] Simulate the setup: stock removed, gouges and collisions, per-operation times
cam optimize DOC OP [edit options] Reorder targets or chains for the shortest rapids
cam export DOC [--setup S] -o X.fcp [--force] [--json] Write the setup's intermediate toolpath file for a post processor
cam post DOC [--setup S] -o OUT.nc [--post P] [--property NAME=VALUE ...] [--one-file-per-tool] [--name NAME] [--dump] [--force] [--ignore-travel] [--skip-unsupported] [--json] Post the setup to G-code with the machine's post processor or one you name
cam feeds --machine M --tool T --material M --op TYPE [--roughing | --finishing] [--aggression A] [--stepover F] [--stepdown F] [--override NAME=VALUE ...] [--strategy conventional|hsm|suggested] [--depth L] [--volume MM3] [--narrowest L] [--json] The feeds and speeds calculator on library items, no document
Setup options

--name--material M|none--wcs-origin model|stock:POS|REF--wcs-z REF|model--wcs-z-flip--wcs-x REF|model--wcs-x-flip--stock box|fixed|body:REF--stock-offset D--stock-offsets X-,X+,Y-,Y+,Z-,Z+--stock-size X,Y,Z--stock-origin X,Y,Z--bodies B,...|all--work-offset N

Operation options

--name--tool--update-tool--tool-number N|none--geometry REF--clear-geometry--include SKETCH:SPEC|FACE|EDGE|curve:SKETCH:ID--region--exclude ...--exclude-region--clear-regions--depth REF|Z--height NAME=REF--height-offset NAME=MM--pass roughing|finishing--aggression conservative|normal|aggressive--override NAME=VALUE--set--clear-override NAME--unset--strategy conventional|hsm|suggested--recipe NAME--cycle drill|peck|chip-break|tap|bore|spot--peck-depth--dwell--tip-through true|false|auto--break-through MM|auto--direction climb|conventional--side auto|outside|inside|on|left|right--compensation--stock-to-leave--axial-stock-to-leave--stepdown MAX[,FINISH]|auto|none--finishing-passes N,STEPOVER--lead-in RADIUS|auto,SWEEP[,LINEAR]|off--lead-out--exit-overlap--tabs count=N,width=W,height=H--ramp-angle DEG|off|auto--tab-reentry ramp|plunge--finishing-feed MM_MIN|auto--offsets auto|exact|field--tolerance MM--axial-offset--lead-in--max-tip-width MM|none--tolerance--jet true|false|laser|plasma--jet-mode through|etching|vaporize--power PERCENT--jet-feed MM_MIN--pierce-height MM--pierce-delay S--cut-height MM--stepdown--jet-feed--pattern zigzag|one-way|spiral--stepover MM|N%|auto--overlap MM|auto--angle DEG--direction climb|conventional|both--strategy suggested--entry helix[,ANGLE[,RADIUS]]|ramp[,ANGLE]|plunge--open true|false--side inside|outside--boundary REF|none--boundary-mode inside|stock--direction climb--optimal-load MM|N%|auto--stepdown MAX[,FINISH]|none|full|auto--entry--min-cutting-radius MM--rest-machining true|false--max-link-distance MM|none--min-cut-length MM|auto--spiral-entries on|off|suggested--corner-feed on|off--fast-descents on|off--side--boundary

Output

Images, video, meshes, STEP.

Command and arguments Description
render DOC -o OUT.png [--view V] [--size WxH] [--yaw --pitch --zoom] [--shading shaded|shaded-edges|wireframe|clay] [--face-colors plain|per-face|appearances] [--background white|gradient|dark|transparent|theme|RRGGBB] [--theme NAME|FILE] [--hidden-edges] [--faces] [--display 2=50%,3=hide,component:Arm=hide] [--show-origin] [--show-axes] [--show-planes] [--show-sketches|--hide-sketches|--sketches all|none|NAME,...] [--fits all|none|NAME,...] [--renderer cpu|gpu [--ssaa 1|2|4|16 | --adaptive 4|16] [--scale F] [--ssao] [--no-edges] [--depth-cap N] [--surface-search S]] [--toolpaths all|OP,... [--toolpath-moves KIND,...] [--toolpath-tool]] [--sim-stock|--sim-rest [--at-move N] [--sim-setup S] [--sim-quality Q]] [--cam-preview OP] The modeling viewport's image
render-image DOC -o OUT.png|.jpg [camera] [scene options] [--body REF ...] [--component NAME ...] [--samples N] [--ssaa N | --adaptive N] [--explode F] [--show-origin] [--show-axes] [--show-planes] [--show-sketches|--hide-sketches|--sketches all|none|NAME,...] [--fits all|none|NAME,...] [--theme NAME|FILE] [--checker OUT] [--preview] [--quiet] A finished image with the document's render settings (GPU)
render-video DOC -o OUT.mp4 [camera] [scene options] [--body ...] [--component ...] [--fps N] [--duration S] [--turntable DEG] [--explode] [--codec mp4|webm|prores|none] [--frame I] [--start-frame N] [--samples N] [--ssaa N | --adaptive N] [--preview] [--quiet] Render the animation as a PNG sequence and a movie (ffmpeg)
bench DOC [--presets [--preset low|medium|high|ultra|super-ultra,...]] [--sizes WxH,...] [--ssaa 1,2,4|none] [--adaptive 4,16|none] [--ssao off,on] [--depth-caps ...] [--surface-search auto,march,fidget-voxel,cpu] [--passes] [--cold] [--csv FILE] [--view PRESET] [--yaw DEG] [--pitch DEG] [--zoom Z] GPU renderer timings
mesh DOC -o OUT.stl|.3mf|.obj [--body REF ...] [--component NAME ...] [--split] [--local] [--preset draft|normal|ultra] [--chord MM] [--angle DEG] [--mesher face-aware|dc] [--cell-size MM] [--no-fallback] [--force] Mesh export with a validation report (exit 2 if invalid)
mesh DOC -o OUT.3mf|.stl|.obj --cleaned [MESH] [--split] [--local] [--json] The cleaned scan instead of the bodies
step export DOC -o OUT.step [--body REF ...] [--component NAME ...] [--check] [--preset draft|normal|ultra] [--keep DIR] [--timeout S] [--json] The bodies as exact solids in a STEP file (AP214, mm; one product per body, named after it), the timeline replayed in Open CASCADE through Gmsh
step export DOC -o OUT.step --fits [--as patches|solids] [--extend MM] [--with-mesh decimated[:N]|none] [--check] [--keep DIR] [--json] The fitted surfaces of the scans as exact surfaces instead of the bodies
Scene options

--style shaded|studio|clay|outline|blueprint--background white|gradient|dark|environment|transparent|RRGGBB--env--perspective--orthographic--fov DEG--key--fill--rim--rig-yaw DEG--rig-pitch DEG--shadow-softness DEG--ground-shadow [on|off]--no-ground-shadow--ground-reflection [on|off]--no-ground-reflection--view--named-view--yaw--pitch--zoom--target--size

Themes

Color themes and the contrast rules.

Command and arguments Description
theme list [--json] The built-in themes and the files of the themes folder
theme show THEME [--json] One theme (a built-in name or slug, a file of the themes folder, or a .toml path): the tokens, the overrides, the contrast table; --json adds every derived color
theme export THEME [-o FILE] [--force] The theme as a theme file (TOML: tokens and [overrides]), to standard output or FILE
theme check THEME [--json] The contrast rules (text on the panes 7:1, muted text and text on accents 4.5:1, ribbon icons and captions, the selection and the sketch line on the viewport 3:1, edges on the bodies 2:1)
theme path [--json] The themes folder (themes/ in the HardForm config directory, shared by HardForm and the scan program)
theme fields [--json] The derived colors a theme file can pin in its [overrides] table

Agents

The in-process executor, the AI agent and the MCP server.

Command and arguments Description
agent exec DOC LINE [--confirm] [-o OUT] [--json] Run a line (or a multi-line script) through the in-process executor on DOC, as the GUI's command pane and the MCP server do
agent tools [--profile full|compact] [--json] The generated tool schemas (--json: an array of {name, description, inputSchema})
agent capabilities [--json] The capability document for an agent's instructions (Markdown; --json: {text, bytes})
agent chat DOC PROMPT [--provider anthropic|openai|compatible] [--model M] [--base-url URL] [--profile auto|full|compact] [--effort low|medium|high] [--max-steps N] [--confirm-all] [--save-transcript FILE] [--json] One request to the AI agent on a document, headless
agent providers [--json] The AI providers: the configured one, its model and base URL, whether a key is present (yes / no)
agent set-key PROVIDER [--delete] [--json] Store a provider's API key in the OS keyring, read from standard input (--delete removes it)
agent models [--provider P] [--base-url URL] [--json] The models the provider serves, the default marked
agent attach [on|off] [--json] Whether the HardForm window accepts MCP clients; on / off writes the setting
mcp [--doc FILE] [--profile full|compact] [--json] The MCP server on standard input / output (--json: log every call on standard error)
mcp --attach [PATH] [--json] The bridge to the running HardForm window's MCP socket: its tools run on the document the window shows (--json: log every frame on standard error)

Tutorials

Video tutorials and written step-by-step guides are coming. Until then, questions are welcome at support@yelboworks.com.