--- name: freecad-headless-analysis description: Analyse a FreeCAD model by numbers in headless runs (freecadcmd), not by pictures. Use for measuring geometry, clearances, intersections, volumes, mesh checks, cross-sections to SVG, change checks before/after, collision checks between exported parts, and for running FreeCAD scripts quietly with the bundled fc-quiet.sh wrapper (RESULT-only output). Not for building or editing geometry (see freecad-zone-edit), not for GUI or screenshot work (see freecad-gui-macro), not for live-window work through MCP. --- # FreeCAD headless analysis by numbers Analyse a model with FreeCAD 1.1.4 built-in tools in a headless run (`freecadcmd`): `common`, `distToShape`, `slice`, `check`, mass properties, meshes. Numbers decide; images do not. A picture is for showing a result to a person and for the GUI gate (the file opens and looks right), never the way the model analyses geometry. Numbers in this skill are defaults; a project may override them. ## Do not loop If there is no fitting built-in tool, or the task is unclear without an image, do not hunt for a workaround for hours. Stop, tell the coordinator or the user what the problem is, and propose a better or faster way (including an image, if that is truly simpler). Then ask and wait for the decision. Run limits, the flexible 5-minute rule and the 30-minute stop are in `guarding-autonomous-runs`; do not restate them here. ## Running scripts - Run `scripts/fc-quiet.sh `. The path is relative to the directory of this SKILL.md; resolve it to an absolute path before running. It needs bash, `pgrep` and `mkfifo` (macOS and Linux only). It reads the launcher from `$FREECAD_LAUNCHER` (else `freecadcmd` from PATH, with a warning), drops the banner, `(NN %)` progress and empty lines, keeps the launcher's exit code, and on TERM/INT/HUP ends the launcher and its child processes. Details: [references/quiet-wrapper.md](references/quiet-wrapper.md). - `freecadcmd` treats argv as files, so pass parameters through environment variables. - A script prints one line to stdout, `RESULT {json}`, and nothing else. On failure it prints `RESULT {"error": ...}`. Read the result by that line. - **Heartbeat, not stdout:** a long script appends lines `PROGRESS /