Install
openclaw skills install @psyb0t/marlinfw-toolsInspects and carefully controls a USB-connected Marlin 3D printer (Creality Ender 3 and similar) through a locked-down Docker container: discovers stable serial paths, reads firmware, M503 settings, temperatures, position and endstops, records JSONL telemetry, lists SD card files, homes under supervision, applies one audited calibration setting, and runs a supervised first-layer SD test. Use when the user wants to read, calibrate, home or monitor a Marlin printer over serial.
openclaw skills install @psyb0t/marlinfw-toolsAll operations go through scripts/marlinfw-tools.sh, relative to this skill's directory. It runs the psyb0t/marlinfw-tools:latest image with --network=none, a read-only root, all capabilities dropped, and only the one serial device you name. Set MARLINFW_TOOLS_IMAGE to use a different image, for example marlinfw-tools:dev after make build in a checkout of the repository.
discover and use the stable /dev/serial/by-id/... path it returns. Never guess /dev/ttyUSB0 or pass the whole /dev tree.discover, inspect, sd-files and record only read printer state. Use them freely.home, send and sd-print-monitor change physical printer state. Before each one, get the user's approval in the current turn for the exact printer path, command and expected physical effect, and whether it should survive a reboot. Never infer permission from an earlier request to inspect or calibrate. The --apply --confirm-risk flags are an execution gate, not a substitute for that approval.home and sd-print-monitor also need --confirm-supervised: the user must be at the printer with the power switch in reach.Cap:EMERGENCY_PARSER:0, serial M524 cannot interrupt a blocking M190, M109 or homing command. The user's physical stop is the only fast stop.send accepts only M92, M201, M203, M204, M205, M206, M301 and M304.M503) or read temperatures, position and endstops.scripts/marlinfw-tools.sh discover
scripts/marlinfw-tools.sh inspect \
--port /dev/serial/by-id/replace-with-printer-path \
| tee printer-inspect.json
inspect sends M115, M503, M105, M114 and M119. Keep printer-inspect.json: it is the rollback baseline for any later change. See Marlin reports for what each section means and device access when the device is missing or busy.
scripts/marlinfw-tools.sh sd-files --port /dev/serial/by-id/replace-with-printer-path
scripts/marlinfw-tools.sh record --port /dev/serial/by-id/replace-with-printer-path \
| tee printer-events.jsonl
record runs until Ctrl+C, or pass --duration 300 for five minutes. It never starts, pauses or stops a print.
After approval and with the user at the machine, the bed and toolhead path clear and no print active:
scripts/marlinfw-tools.sh home --port /dev/serial/by-id/replace-with-printer-path \
--apply --confirm-risk --confirm-supervised
It sends exactly G28, M114 and M119. Run it once and report the returned position and endstops.
Run inspect and keep the JSON as the baseline.
Get the user's physical measurement and the parameter it calibrates. Never derive a value from a guess.
Calculate one command and show the exact port, command and expected effect.
After approval, apply it for this power cycle only:
scripts/marlinfw-tools.sh send --port /dev/serial/by-id/replace-with-printer-path \
--command 'M92 E<measured-value>' --apply --confirm-risk
Run inspect again and compare the relevant line.
Only after a second, separate approval, persist it. This adds M500 once the setting is acknowledged:
scripts/marlinfw-tools.sh send --port /dev/serial/by-id/replace-with-printer-path \
--command 'M92 E<measured-value>' --apply --confirm-risk --save --confirm-persist
Read setting writes before any --save, and Creality Ender 3 before changing anything on an Ender 3 family printer.
Starts one exact SD file, waits through heating and homing, records the first-layer motion, then aborts the job and turns both heaters off:
scripts/marlinfw-tools.sh sd-print-monitor --port /dev/serial/by-id/replace-with-printer-path \
--file REPLACE.GCO --observe-seconds 60 \
--apply --confirm-risk --confirm-supervised \
| tee first-layer-events.jsonl
Use a filename exactly as sd-files reported it.
inspect shows the expected value.M500, and before-and-after reports kept.M524, M104 S0, M140 S0 and M155 S0 were all acknowledged. If cleanup is not confirmed, say which command failed and tell the user to make the printer safe by hand.