Marlin printer tools
All 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.
Security & safety
- Start with
discoverand use the stable/dev/serial/by-id/...path it returns. Never guess/dev/ttyUSB0or pass the whole/devtree. discover,inspect,sd-filesandrecordonly read printer state. Use them freely.home,sendandsd-print-monitorchange 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-riskflags are an execution gate, not a substitute for that approval.homeandsd-print-monitoralso need--confirm-supervised: the user must be at the printer with the power switch in reach.- Serial telemetry cannot judge nozzle clearance, extrusion, adhesion, smoke or collisions. Never report physical safety from it.
- On firmware that reports
Cap:EMERGENCY_PARSER:0, serialM524cannot interrupt a blockingM190,M109or homing command. The user's physical stop is the only fast stop. - The tool never sends movement, heating, leveling, pin control, emergency stop, EEPROM load or reset, firmware update or arbitrary G-code.
sendaccepts onlyM92,M201,M203,M204,M205,M206,M301andM304.
When to use
- Find a printer's serial path and identify its Marlin firmware and capabilities.
- Back up active settings (
M503) or read temperatures, position and endstops. - Record temperatures, position, endstops and SD status as JSONL while the user works.
- List the exact SD card filenames Marlin sees.
- Home once under supervision, apply one measured calibration value, or run the supervised first-layer test.
When NOT to use
- Klipper or Moonraker printers, or a printer that should be driven through OctoPrint's network API.
- Guessing calibration values, running arbitrary G-code, flashing firmware, factory resets, or changing a printer mid-print.
Read the printer
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.
Home
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.
Change one setting
-
Run
inspectand 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
inspectagain and compare the relevant line. -
Only after a second, separate approval, persist it. This adds
M500once 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.
Supervised first-layer test
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.
Completion
- Inspection: every requested command returned a response or an explicit firmware error. Report unresolved access or unsupported commands; never fill in a guessed value.
- Temporary change: Marlin acknowledged the command and a follow-up
inspectshows the expected value. - Persistent change: a second approval, an acknowledged
M500, and before-and-after reports kept. - First-layer test: motion was detected and
M524,M104 S0,M140 S0andM155 S0were all acknowledged. If cleanup is not confirmed, say which command failed and tell the user to make the printer safe by hand.
