Skip to content

v0.1.0b4 — mouse auto-calibration

Pre-release
Pre-release

Choose a tag to compare

@DustinTrap DustinTrap released this 13 Jul 20:02
3231906

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 mouse moves and clicks (MCP and CLI) route through it automatically and report calibrated: 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.md again satisfies its "every command must appear here" contract (adds the missing keep-awake, recover-hid, appliance, paths rows 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 + PyPI mcp-name: marker are case-sensitive. All fixed here.

Install: pip install --pre kvm-pilot · Getting started · Full details in the CHANGELOG.