v0.1.0b4 — mouse auto-calibration
Pre-release
Pre-release
Beta 4 — mouse auto-calibration.
Fixes the oldest live-hardware complaint (#128): the agent clicks where the button should be and misses. kvm-pilot now measures each host's real commanded→observed mouse mapping and corrects for it transparently.
Highlights
calibrate-mouse(CLI) /calibrate_mouse(MCP). Parks the cursor, commands a 5-point grid, locates the observed cursor by frame differencing, least-squares fits a per-axis scale+offset, and verifies a held-out point within--tolerance(default 0.02 of the screen). One detail that matters: the baseline cursor's departure mark is identified from the data — the blob that recurs across every frame — never assumed to sit at the commanded park corner, because the distortion being measured decides where the parked cursor really landed. Failures are actionable, never partial stores: non-static screens, invisible cursors, implausible fits, and non-linear pointer acceleration each get named with a remedy.- Transparent application. The correction is stored per (host, capture resolution) — a resolution change makes it stale and it is never applied. Percent-space
mousemoves and clicks (MCP and CLI) route through it automatically and reportcalibrated: true/false; pixel/raw coordinates mean "exactly here" and are never adjusted. pip install 'kvm-pilot[calibrate]'brings Pillow for snapshot decoding; the command ships in base and errors actionably without it. The detection/fit math is stdlib and fully tested with synthetic frames — no hardware, no Pillow needed in CI.- Safety: pointer moves only, but gated like HID input (
KVM_PILOT_MCP_ALLOW_HID+ one approval covers the whole ~10–30s run, on a static screen).
Also
docs/cli.mdagain satisfies its "every command must appear here" contract (adds the missingkeep-awake,recover-hid,appliance,pathsrows found by the #194 review).- First release expected to publish automatically to the official MCP registry as
io.github.DustinTrap/kvm-pilot(#197) — b3's job taught us the publisher assets use Go arch names, descriptions cap at 100 chars, and the namespace + PyPImcp-name:marker are case-sensitive. All fixed here.
Install: pip install --pre kvm-pilot · Getting started · Full details in the CHANGELOG.