{
  "markdown": "<!-- mcp-name: io.github.DustinTrap/kvm-pilot -->\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/DustinTrap/kvm-pilot/main/docs/assets/logo.svg\" alt=\"kvm-pilot\" width=\"460\">\n</p>\n\n<p align=\"center\">\n  <a href=\"https://pypi.org/project/kvm-pilot/\"><img src=\"https://img.shields.io/pypi/v/kvm-pilot?color=534ab7\" alt=\"PyPI version\"></a>\n  <a href=\"https://pypi.org/project/kvm-pilot/\"><img src=\"https://img.shields.io/pypi/pyversions/kvm-pilot\" alt=\"Python versions\"></a>\n  <a href=\"https://github.com/DustinTrap/kvm-pilot/actions/workflows/ci.yml\"><img src=\"https://github.com/DustinTrap/kvm-pilot/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"https://github.com/DustinTrap/kvm-pilot/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/license-Apache--2.0-blue\" alt=\"License: Apache-2.0\"></a>\n  <a href=\"https://registry.modelcontextprotocol.io/v0/servers?search=kvm-pilot\"><img src=\"https://img.shields.io/badge/MCP_registry-io.github.DustinTrap%2Fkvm--pilot-534ab7\" alt=\"MCP registry\"></a>\n</p>\n\n# kvm-pilot\n\n**Smart hands for your AI agents.** A write-capable, multi-plane\n(KVM + BMC + SSH) MCP server for controlling physical machines —\n**gated, verified, audited.**\n\n`kvm-pilot` lets an agent drive a headless box through POST, firmware, the\nbootloader, and an OS install **with no agent on the target**: it works at the\npixel level through an IP-KVM (PiKVM, the GL.iNet GLKVM fork GL-RM1 /\nGL-RM1PE, BliKVM), at the structured-state level through a BMC (Redfish on\niDRAC/iLO/OpenBMC, IPMI on BMCs that predate Redfish), at the firmware level\nthrough **Intel AMT/vPro** (a BIOS/POST/GRUB screenshot + power + SOL on a\nbusiness laptop an HDMI-capture KVM can't see boot on), and over SSH once an OS\nis up. A pluggable vision subsystem reads a KVM screenshot and tells you what\nboot phase the machine is in — `bios_menu`, `grub_menu`, `installer_progress`,\n`login_prompt`, `crash_screen`, and so on — and a safety layer gates every\ndestructive operation behind operator opt-ins and per-call approvals.\n\nVision runs on Claude **or** any local OpenAI-compatible VLM (LM Studio,\nOllama, vLLM, llama.cpp). Point it at a model on your own GPU and the\nscreenshots never leave your network and cost nothing per frame.\n\n## How it works\n\n`kvm-pilot` runs a **see → decide → act** loop, and the screen is its only sensor:\nit pulls a screenshot from the KVM, a vision model classifies the boot phase, and\n`kvm-pilot` acts back through the KVM's keyboard and power. Because it works at the\npixel level, there is **no agent on the target** — the same loop drives POST,\nfirmware, the bootloader, and an OS install.\n\n![kvm-pilot reads a screenshot from the KVM, a vision backend (Claude or a local VLM) classifies the boot phase, and kvm-pilot drives keyboard and power back through the KVM — a closed loop with no agent on the target machine.](https://raw.githubusercontent.com/DustinTrap/kvm-pilot/main/docs/how-it-works.svg)\n\nA real, unedited run against a GLKVM on the home fleet — an honest preflight,\na headless snapshot (watch it wake the on-demand encoder), a **gated** dry-run\npower-cycle, and the boot console the agent actually saw:\n\n![Live terminal demo: kvm-pilot snapshot runs an honest preflight (worst: CRITICAL, no out-of-band recovery path), wakes the GL on-demand encoder over WebSocket, and saves screen.jpg; kvm-pilot power-cycle --dry-run logs and skips both destructive ATX operations; the final frames show the captured Linux boot console.](https://raw.githubusercontent.com/DustinTrap/kvm-pilot/main/docs/assets/demo.gif)\n\n## Quickstart\n\nOne install gives you the whole product — the **`kvm-pilot` CLI**, the\n**`kvm-pilot-mcp` MCP server**, and the bundled **Claude skill** — nothing to\nclone. The current release line is a **pre-release**: install it with `--pre`,\nwhich is explicit and keeps selecting the beta line once a stable release ships\n(`0.1.0a1` is yanked and much older than this README — don't pin it).\n\n```bash\npip install --pre kvm-pilot                    # CLI + skill + MCP server + WebSocket events\npip install --pre \"kvm-pilot[totp]\"            # + 2FA / TOTP support (pyotp)\nkvm-pilot install-skill                        # optional: put the bundled skill where Claude Code loads it\n```\n\n### Driving a KVM from an AI agent (MCP)\n\n```bash\nclaude mcp add kvm-pilot -s user \\\n    -e KVM_PILOT_PROFILE=mykvm -e KVM_PILOT_MCP_READ_ONLY=1 -- \\\n    kvm-pilot-mcp\n```\n\n`KVM_PILOT_MCP_READ_ONLY=1` is the recommended first rung of the trust ladder\n— the agent can see everything and touch nothing until your hardware is\nverified. The [Getting started guide](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/getting-started.md)\ncovers credentials, Claude Desktop JSON config, sample prompts, and climbing\nthe ladder. The server is published to the official\n[MCP registry](https://registry.modelcontextprotocol.io/v0/servers?search=kvm-pilot)\nas **`io.github.DustinTrap/kvm-pilot`**, so registry-aware hosts can discover\nand install it by name. Agents: the repo root carries an\n[`llms.txt`](https://github.com/DustinTrap/kvm-pilot/blob/main/llms.txt) doc map.\n\n### Scripting from Python\n\n```python\nfrom kvm_pilot import KVMClient\nfrom kvm_pilot.vision import ScreenAnalyzer, make_backend\n\nkvm = KVMClient(\"192.168.8.1\", \"admin\", \"secret\")\n\n# Classify the current screen with Claude (model auto-resolved at runtime)\nanalyzer = ScreenAnalyzer(kvm, make_backend(\"anthropic\"))\nprint(analyzer.classify().phase)\n\n# Or run entirely on a local VLM — nothing leaves your network\nlocal = make_backend(\"local\", base_url=\"http://127.0.0.1:1234/v1\", model=\"qwen2.5-vl-7b\")\nanalyzer = ScreenAnalyzer(kvm, local)\n\n# Block until the box reaches the GRUB menu, then pick the first entry\nanalyzer.wait_for_state(\"grub_menu\", timeout=120)\nkvm.press_key(\"Enter\")\n```\n\nFor the latest unreleased tree:\n\n```bash\npip install \"kvm-pilot[totp,ws] @ git+https://github.com/DustinTrap/kvm-pilot\"\n```\n\n### CLI\n\n```bash\nkvm-pilot info     --host 192.168.8.1 --user admin --ask-passwd   # prompt (no echo)\nkvm-pilot capabilities --profile homelab                 # what this driver supports\nkvm-pilot snapshot screen.jpg --profile homelab\nkvm-pilot --timeout 60 power-cycle --profile homelab --dry-run   # log, don't send\nkvm-pilot eject --profile homelab                        # detach virtual media\nkvm-pilot events --profile homelab --count 5             # stream device events\nkvm-pilot watch grub_menu --profile homelab \\\n    --backend local --vision-url http://127.0.0.1:1234/v1 --vision-model qwen2.5-vl-7b\n```\n\nThe CLI prompts for confirmation before any destructive action (power, virtual\nmedia — including uploads — keyboard/mouse injection, GPIO). Use `--yes` to\nskip prompts in automation, or `--dry-run` to log intended actions without\nsending them — dry-run short-circuits *before* the prompt, so it never blocks\nwaiting for input. `--timeout` (HTTP per-request timeout) is a global flag and\ngoes *before* the subcommand; `watch` keeps its own `--timeout` for the vision\nwait deadline.\n\nProfiles like `homelab` live in `~/.config/kvm-pilot/config.toml`. See\n[docs/cli.md](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/cli.md) for the full command table (every subcommand, the\ncapability it needs, and its gating), and\n[docs/configuration.md](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/configuration.md) for the config-file format,\nevery `KVM_PILOT_*` environment variable, and the precedence between flags,\nenv, and profiles.\n\n> **GLKVM setup note:** on GL.iNet firmware the PiKVM REST API is **disabled by\n> default** (every `/api/*` call 404s, surfaced as a clear `ApiDisabledError`),\n> and a firmware upgrade can re-disable it. Enable it in\n> `/etc/kvmd/nginx-kvmd.conf` and pin the driver with `--driver glkvm` /\n> `driver = \"glkvm\"` — full steps in the\n> [troubleshooting guide](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/troubleshooting.md#every-api-call-returns-404-glkvm).\n\n## The tool surface, by plane\n\nThe same capability protocols span three actuation planes, so one agent\nworkflow can mix pixels, structured BMC state, and shell access — with every\ndestructive effect gated per class:\n\n| Plane | Read | Act (operator-gated) |\n|---|---|---|\n| **KVM — pixels & HID** (PiKVM · GLKVM · BliKVM) | `snapshot` · `classify_screen` · `wait_for_state` · `power_state` · `logs` · `list_virtual_media` | `power` · `type_text` / `press_key` / `send_shortcut` / `mouse` · `calibrate_mouse` · `mount_iso` / `eject` |\n| **BMC — structured state** (Redfish · IPMI) | `info` · `boot_options` · `logs` (SEL) · sensors (CLI) | `power` · `set_boot_device` · SOL console (CLI `console`) |\n| **Firmware — Intel AMT/vPro** (spans both planes) | `info` · `snapshot` (firmware BIOS/POST/GRUB) · `boot_options` · `power_state` | `power` · `set_boot_device` · `type`/`mouse` · SOL (`console`) · `amt_enable` (open SOL/KVM listeners) |\n| **SSH — in-band & appliance** | `ssh_reachable` · `appliance_status` · `access_paths` | `ssh_exec` · `wake` (WoL) · `appliance_reboot` |\n| **Meta — evidence & intake** | `capabilities` · `support_matrix` · `healthcheck` | `file_firmware_report` |\n\nThe canonical per-tool reference — annotations, effect gates, approval\nlifecycle — is the [MCP server README](https://github.com/DustinTrap/kvm-pilot/blob/main/src/kvm_pilot/mcp/README.md);\nthe CLI covers the full surface in [docs/cli.md](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/cli.md).\n\n## Status & maturity\n\n> **Status: release candidate.** GA is gated on validation breadth, not code:\n> three of the six device drivers (`redfish`, `pikvm`, `blikvm`) have never run\n> against real hardware, only emulators. See the\n> [Hardware-Compatibility list](https://github.com/DustinTrap/kvm-pilot/wiki/Hardware-Compatibility)\n> for what has actually been exercised — and please add to it. (The exact version lives in the\n> [CHANGELOG](https://github.com/DustinTrap/kvm-pilot/blob/main/CHANGELOG.md);\n> install with `pip install --pre kvm-pilot`.) The core paths have graduated\n> from mocked-only to live-verified: a fleet of GL-RM1PE units has exercised\n> `snapshot`/`healthcheck`/`logs`/`power_state`/`virtual_media`/`info` across\n> two firmware lines — on V1.9.1 those capabilities sit at **beta** maturity in\n> the run ledger that ships in the wheel, derived from real runs, never\n> hand-edited — and a Dell iDRAC6 has exercised the IPMI driver live end-to-end\n> (power, boot-device, sensors, event log, SOL serial console). The paths that\n> can hurt are hardened: transports never re-fire a destructive request, MCP\n> approvals are signed single-use receipts with an audit trail, and every\n> destructive effect — power, HID, media, boot-config, appliance, SSH,\n> external writes — has its own operator opt-in gate. Recent betas added\n> remote boot-device control (Redfish, IPMI, and in-band `efibootmgr`),\n> Wake-on-LAN, an IPMI driver for BMCs that predate Redfish, a serial (SOL)\n> console, mouse auto-calibration, and headless native-resolution GLKVM\n> snapshots; `kvm-pilot test-report` turns contributing evidence into one\n> command, and the firmware registry feeds itself (`firmware-check` auto-files\n> registry updates).\n> **Now we need your hardware.** PiKVM, BliKVM, other GLKVM models, and\n> Redfish BMCs (iDRAC/iLO/OpenBMC) are the combos the matrix needs most —\n> success *or* failure, a\n> [hardware report](https://github.com/DustinTrap/kvm-pilot/issues/new?template=hardware-report.yml)\n> takes two minutes and the hourly ingest does the rest. Anything the\n> [Hardware-Compatibility list](https://github.com/DustinTrap/kvm-pilot/wiki/Hardware-Compatibility)\n> doesn't show as exercised is still unverified: expect some API movement before\n> 1.0, note the remote firmware-flash no-op on GL-RM1PE\n> ([#94](https://github.com/DustinTrap/kvm-pilot/issues/94)/[#95](https://github.com/DustinTrap/kvm-pilot/issues/95)),\n> and don't point destructive ops at a machine you can't afford to have\n> power-cycled unexpectedly. See [Compatibility](#compatibility).\n\n![Evidence in, maturity out: live fleet runs, the one-command test-report, and community hardware-report issues feed the run ledger shipped inside the wheel; aggregation per device × firmware × capability with a minimum-sample gate derives the alpha → beta → rc → ga ladder. A failure is a first-class ledger row.](https://raw.githubusercontent.com/DustinTrap/kvm-pilot/main/docs/maturity-ledger.svg)\n\n## Boot-phase detection\n\nThe vision classifier maps each screenshot to a **phase** — `bios_menu`,\n`grub_menu`, `installer_progress`, `login_prompt`, `crash_screen`, and so on.\n`wait_for_state()` polls the screen and blocks until the phase you asked for\nappears (or a timeout fires), so an unattended install becomes a few waits with\nactions wired between them:\n\n![Timeline of boot phases — POST, bios_menu, grub_menu, installer_progress, installer_complete, login_prompt — with the unattended-install example wiring mount_iso and hard_cycle at the start, wait_for_state on grub_menu then Enter, and wait_for_state on installer_complete; any phase can branch to crash_screen.](https://raw.githubusercontent.com/DustinTrap/kvm-pilot/main/docs/boot-phases.svg)\n\n## Sensing model\n\nVision is the most expensive way to read a screen — a model call per frame — and\nmost of what it infers (power state, boot phase, liveness, a crash) is also\navailable as a **field, an event, or a line of text**. The direction of\n`kvm-pilot` is to treat classification as a hierarchy: answer from the cheapest\nsignal the device exposes, and fall through to OCR and finally a vision model\nonly when nothing cheaper can.\n\n![Sensing hierarchy: structured signals (events, power and LED state, video signal and resolution, Redfish BootProgress, sensors, logs) and serial-console text are preferred; local frame-diff, OCR, and a vision model are the escalating last resort. Colour encodes cost — vision is the only expensive tier.](https://raw.githubusercontent.com/DustinTrap/kvm-pilot/main/docs/sensing-hierarchy.svg)\n\nThe PiKVM/GLKVM client already exposes the cheap end — ATX and HID LEDs,\nvideo-signal and resolution, on-device OCR (`?ocr=true`), logs, Prometheus\nmetrics, and a WebSocket event stream. The [capability protocols](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/architecture.md)\nadd `Logs`, `BootProgress`, `Sensors`, `SerialConsole`, `Watchdog`, and\n`BootConfig` as the seam for BMC drivers (Redfish/IPMI), where the boot phase\nis a structured enum (`BootProgress.LastState`) and the console is a serial\ntext stream rather than pixels. Different device classes are nearly\ncomplementary: capture devices are strong on pixels, BMCs on structured state\nand serial text.\n\n## Safety model\n\nPower-offs, hard resets, virtual-media connect/disconnect and image uploads,\nkeyboard/mouse injection (`type_text`, `press_key`, shortcuts, clicks), GPIO,\nboot-config changes, and Redfish/IPMI resets are classified as **destructive**\nand pass through a safety layer:\n\n- **dry-run** short-circuits *first*: it logs the intended call and skips it\n  entirely — the confirm callback is never invoked, so dry runs never prompt\n  or block.\n- **confirmation** — a callback that can veto any destructive call that would\n  really be sent. The library default allows everything (so plain scripts\n  work); the CLI installs an interactive `y/N` prompt unless you pass `--yes`.\n\n![Decision flow for a destructive call: if the op is not in DESTRUCTIVE_OPS it executes directly; if it is, dry-run logs and skips it, otherwise a confirm callback can veto it, and only an allowed call is sent to the device.](https://raw.githubusercontent.com/DustinTrap/kvm-pilot/main/docs/safety.svg)\n\nThe destructive set is defined explicitly in `kvm_pilot.safety.DESTRUCTIVE_OPS`\nso it is auditable rather than guessed. A vision classification can never\ntrigger a destructive action on its own — you wire that yourself, and the\nsafety layer still applies. On the MCP side each destructive *effect class*\nadditionally needs an operator opt-in env gate plus a per-call approval backed\nby a signed single-use receipt — the **trust ladder**\n(`READ_ONLY` → `DRY_RUN` → per-effect `ALLOW_*`) is drawn in the\n[MCP server README](https://github.com/DustinTrap/kvm-pilot/blob/main/src/kvm_pilot/mcp/README.md).\n\nThis software controls real hardware and can power-cycle or interrupt a running\nmachine. Read [SECURITY.md](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/SECURITY.md) before exposing a KVM to the internet.\n\n## No hard-coded model version\n\nThere is no model version string anywhere in the code. The Anthropic backend\nresolves the newest vision-capable model at runtime via the Models API and\ncaches it; set `KVM_PILOT_VISION_MODEL` or pass `model=` to pin one. The local\nbackend uses whatever model you loaded on your server. Bring your own backend,\nendpoint, and model.\n\n## How this differs from other clients\n\n[`pikvm-lib`](https://github.com/guanana/pikvm-lib) is a fine general-purpose\nPiKVM client. `kvm-pilot` is aimed at a different job:\n\n- **Vision-based boot-phase detection** — classify BIOS/GRUB/installer/crash\n  states from screenshots, with blocking `wait_for_state` loops. This is the\n  core feature and `pikvm-lib` has no equivalent.\n- **Pluggable local or cloud VLM** — run inference on your own GPU at zero\n  per-frame cost, or on Claude.\n- **A safety layer** around destructive operations (dry-run + confirmation).\n- **GLKVM-fork awareness** — documents the API-enable prerequisite and GL\n  hardware quirks that bite GL-RM1PE users.\n- **Stdlib-only client core** — the driver/vision code imports only the standard\n  library (the bundled MCP server pulls the `mcp` SDK; feature extras are opt-in).\n\nIf you just want to script power and HID against a stock PiKVM and don't need\nthe vision layer, `pikvm-lib` may be the simpler choice.\n\nOn the BMC side, [sushy](https://opendev.org/openstack/sushy), DMTF's\n[python-redfish-library](https://github.com/DMTF/python-redfish-library), and\n[pyghmi](https://opendev.org/x/pyghmi) (IPMI) are mature, far more complete BMC\nmanagement SDKs — if you need account/firmware/network configuration,\nEventService subscriptions, or hardware-proven maturity, use them. `kvm-pilot`\ntrades that completeness for one uniform capability surface across device\nclasses (IP-KVMs and BMCs behind the same protocols), the same safety layer\ngating every destructive call, and the vision loop on devices that have pixels.\n\n## Compatibility\n\n| Device | Status |\n|--------|--------|\n| GL-RM1PE (Comet PoE) | Primary target — **exercised live**: read/`healthcheck`/`logs` verified on firmware V1.5.1 release2 & V1.9.1 release1; `snapshot` verified on V1.9.1 (on V1.5.1 it fails with a clear error — undecodable H.264 frame, [#107](https://github.com/DustinTrap/kvm-pilot/issues/107)/[#151](https://github.com/DustinTrap/kvm-pilot/issues/151)); remote flash a no-op ([#94](https://github.com/DustinTrap/kvm-pilot/issues/94)/[#95](https://github.com/DustinTrap/kvm-pilot/issues/95)); encoder wedges >1080p ([#107](https://github.com/DustinTrap/kvm-pilot/issues/107)) |\n| Dell iDRAC6 — IPMI (PowerEdge R710) | **Exercised live**: power / boot-device / sensors / event log (SEL) / SOL serial console all verified over `ipmitool` lanplus (fw 1.95) |\n| Dell Latitude 5411 — Intel AMT/vPro | **Exercised live** (AMT 14.1.67): WS-Man power / info / single-use boot, remote SOL + KVM enablement, and a **1920×1080 BIOS/POST screenshot over KVM redirection** — the firmware screen an HDMI-capture KVM can't see on a laptop. Captures graphical screens only (not legacy VGA text mode) |\n| GL-RM1 (Comet) | Expected to work (same firmware family); untested |\n| PiKVM v3 / v4 | Expected to work (upstream API); untested |\n| BliKVM | Expected to work (PiKVM-compatible API); untested |\n| Redfish BMCs (iDRAC7+, iLO, OpenBMC) | Emulator-verified (in-repo emulator + DMTF sushy-tools in CI); live-BMC validation pending ([#29](https://github.com/DustinTrap/kvm-pilot/issues/29)) |\n\nThe GL-RM1PE (read/snapshot paths), a Dell iDRAC6 over IPMI, and a Dell Latitude\n5411 over Intel AMT are the combos run live so far — everything else is \"expected\nto work\" pending validation. The\n[Hardware-Compatibility list](https://github.com/DustinTrap/kvm-pilot/wiki/Hardware-Compatibility)\nis the authoritative, per-capability record. ATX power control needs the\nATX adapter wired to the target's front-panel header: on the GL Comet family\n(GL-RM1 / GL-RM1PE) that is GL.iNet's separately sold ATX board (GL-ATXPC),\nwhile PiKVM v3/v4 kits include the ATX adapter in the box and BliKVM bundles\nvary by model — check yours. Without ATX wiring, ATX calls return errors from\nthe device. Reports of success or failure on *any* hardware are exactly what\nthis beta needs — please open a\n[hardware report](https://github.com/DustinTrap/kvm-pilot/issues/new?template=hardware-report.yml).\n\n## Architecture\n\n`kvm-pilot` is built on a modular, **driver-plugin** architecture so support can\nexpand to many KVM/BMC devices (PiKVM family, Redfish BMCs, IPMI BMCs, JetKVM, …).\nEach device implements only the capability protocols its hardware supports; the\nCLI, safety layer, and vision subsystem stay device-agnostic. A `make_driver(kind)`\nregistry (mirroring `make_backend`) builds drivers by name, and a hardware-free\n`FakeDriver` lets you exercise the whole loop — capabilities, safety gating, the\nanalyzer — with no device (`kvm-pilot capabilities --driver fake`). See\n[docs/architecture.md](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/architecture.md) for the design and diagram.\n\nA **`RedfishDriver`** (`make_driver(\"redfish\")`) speaks the DMTF Redfish API to\nserver BMCs — Dell iDRAC, HPE iLO, Supermicro, Lenovo XCC, OpenBMC — in one\nstdlib-only client. It shows why capabilities are segmented: a BMC's set is\n*complementary* to a PiKVM's (strong on structured state — power, boot phase,\nsensors, logs, virtual media — with no keyboard/mouse/screenshot), and the driver\nstays portable by following Redfish hypermedia rather than hard-coding vendor ids:\n\n```python\nfrom kvm_pilot.drivers import make_driver\n\nbmc = make_driver(\"redfish\", host=\"idrac.lan\", user=\"root\", passwd=\"…\")\nbmc.get_boot_progress()        # 'os_running'  — structured, no screenshot\nbmc.read_sensors()[\"temperatures\"]\nbmc.power_off(wait=True)       # mapped to the target's actual ResetType, gated\n```\n\nAn **`IpmiDriver`** (`make_driver(\"ipmi\")`) covers BMCs that predate Redfish\n(e.g. Dell iDRAC6) over the system `ipmitool`: power, boot-device control,\nsensors, the SEL event log, and an SOL serial console (`kvm-pilot console`).\nBoth are on the CLI too — `kvm-pilot info --driver redfish --host idrac.lan …`.\nCapability-specific subcommands a BMC can't serve (`type`, `snapshot`, `events`)\nfail cleanly rather than crashing. Add `--redfish-auth basic` for an endpoint\nwithout a SessionService (emulators, or a BMC with session auth disabled).\n\nAn **`AmtDriver`** (`make_driver(\"amt\")`) manages Intel AMT/vPro laptops and\ndesktops out-of-band over AMT's three native protocols — WS-Man (power / info /\nsingle-use boot), SOL (`kvm-pilot console`), and **KVM redirection** — all\npure-stdlib. It is the **first non-PiKVM driver with `Video` + `HID`**: `snapshot`\nreturns a real firmware-level **BIOS/POST/GRUB screenshot** on a machine whose\nHDMI a capture-KVM can't see boot on a laptop. SOL and KVM listeners are opened\nremotely over WS-Man (`kvm-pilot amt enable-sol` / `enable-kvm`), no MEBx trip.\n\n## Help shape it — this is where you come in\n\n`kvm-pilot` is built in the open, and the thing standing between it and 1.0 is\n**not code — it's breadth of real hardware**. Three of the six drivers\n(`redfish`, `pikvm`, `blikvm`) have never run against a physical device, only\nemulators. Every rating you see is derived from a run ledger that ships inside\nthe wheel, never hand-set, so the matrix only grows when someone runs it on real\nmetal. That someone could be you.\n\n**The single most valuable thing you can send:** a\n[hardware report](https://github.com/DustinTrap/kvm-pilot/issues/new?template=hardware-report.yml).\n`kvm-pilot test-report --profile <name>` turns it into one command, it is\nread-only by default, and an hourly job folds the result into the published\ncompatibility matrix. **Failures are as welcome as successes** — a driver that\nreturns a confident wrong answer on your BMC is a more useful report than one\nthat works, and it will be treated as a first-class finding, not swept up.\n\nAlso genuinely wanted:\n\n- ⭐ **[Star the repo](https://github.com/DustinTrap/kvm-pilot)** if the idea is\n  useful to you. It is the cheapest signal that this problem is worth solving,\n  and it is what brings in the operators whose hardware the matrix still needs.\n- 🐛 **[Open an issue](https://github.com/DustinTrap/kvm-pilot/issues/new/choose)**\n  for anything: a bug, a device that misbehaves, a confusing error, a doc that\n  lied to you. This repo is *issue-per-finding* — an issue is the unit of record,\n  and \"the error message didn't tell me what to do\" is a legitimate report.\n- 💬 **Tell us what it got wrong.** Review the safety model, the approval flow,\n  the tool surface. Push back on the defaults. If an agent did something with\n  your machine that surprised you, that is exactly the feedback that makes this\n  safe for everyone else.\n- 🔌 **Ask for your device.** Missing driver, unsupported BMC, a KVM we've never\n  heard of? Open a driver request — the plugin architecture exists precisely so\n  that adding one doesn't mean forking the project, and\n  [`docs/plugin-development.md`](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/plugin-development.md)\n  is the contract.\n- 🛠️ **Send a PR.** [`docs/CONTRIBUTING.md`](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/CONTRIBUTING.md)\n  has the full pre-PR checklist; good first issues are\n  [labelled](https://github.com/DustinTrap/kvm-pilot/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).\n\nNothing here phones home. The project has no telemetry that reports itself —\nevery row in the compatibility matrix is there because a human chose to send it.\nThat's the deal, and it's why your report actually matters.\n\n## Documentation\n\nFull user and developer docs live in [`docs/`](https://github.com/DustinTrap/kvm-pilot/tree/main/docs/) (architecture, design\ndecisions, the Redfish reference, the\n[troubleshooting & FAQ](https://github.com/DustinTrap/kvm-pilot/blob/main/docs/troubleshooting.md),\ncontributing, and the security policy). The\n[project wiki](https://github.com/DustinTrap/kvm-pilot/wiki) is an\nauto-generated, nicely formatted mirror of that folder, and the repo root\ncarries an [`llms.txt`](https://github.com/DustinTrap/kvm-pilot/blob/main/llms.txt)\ndoc map for AI agents.\n\n## License\n\nApache License 2.0 — see [LICENSE](https://github.com/DustinTrap/kvm-pilot/blob/main/LICENSE) and [NOTICE](https://github.com/DustinTrap/kvm-pilot/blob/main/NOTICE). `kvm-pilot` is\nindependent and not affiliated with or endorsed by the PiKVM project, GL.iNet,\nor Anthropic; those names are used only for compatibility description.\n",
  "bytes": 27110,
  "sha": "3c815e2313b08b08db07683350a8cf791295d8684ad6fb092f93694389e3b566",
  "repo_slug": "dustintrap/kvm-pilot",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_dustintrap_kvm_pilot_a45201de/readme"
}