(v0.3.0) Dashboard initial release
Monitor multiple GPU machines from a single web UI, without SSH-ing into each one.
What's New
Fleet Dashboard (new optional extra)
pip install env-doctor[dashboard]
env-doctor dashboard
# → Serving at http://0.0.0.0:8765A FastAPI + SQLite backend with a React frontend, bundled inside the pip package — no Node.js, no Docker, no external database required.
Fleet overview — sortable table of all machines with hostname, status (pass/warning/fail), GPU, driver version, CUDA version, PyTorch version, and last seen time.
Machine detail — click any row to see the full diagnostic breakdown for that machine, identical to what env-doctor check prints locally. Includes click-to-copy fix commands and a snapshot history timeline.
Reporting from GPU Machines
GPU machines only need the core pip install env-doctor — no [dashboard] extra required.
One-time report:
env-doctor check --report-to http://<dashboard-host>:8765Automatic reporting via cron (Linux/macOS) or Task Scheduler (Windows):
env-doctor report install --url http://<dashboard-host>:8765 --interval 2m
env-doctor report status
env-doctor report uninstallSmart change detection — the scheduled task fires every 2 minutes but only POSTs when something actually changes (driver update, new library, new issue). If nothing changes, a lightweight heartbeat is sent every 30 minutes to confirm the machine is alive. On a stable machine: ~1 POST per 30 minutes instead of 720 per day.
New CLI Commands
| Command | Description |
|---|---|
env-doctor dashboard [--host HOST] [--port PORT] |
Start the web UI (dashboard host) |
env-doctor check --report-to URL [--force] |
Send a one-time report to the dashboard |
env-doctor report install --url URL [--interval 2m] |
Set up automatic reporting on this machine |
env-doctor report status |
Show last report time and scheduler status |
env-doctor report uninstall |
Remove the scheduled task and clean up |
REST API
| Endpoint | Method | Description |
|---|---|---|
/api/report |
POST | Receive a check report from a machine |
/api/machines |
GET | List all machines with latest status |
/api/machines/{id} |
GET | Machine detail with full latest report |
/api/machines/{id}/history |
GET | Snapshot history timeline |
Other Changes
env-doctor check --jsonnow includes amachineenvelope (machine_id,hostname,platform,python_version,reported_at) in the JSON output- Machine UUID is generated once and persisted in
~/.env-doctor/machine-id. Override viaENV_DOCTOR_MACHINE_IDenv var (useful for shared NFS home directories) - CI now runs the full test suite including dashboard server tests and a frontend build check on every PR
Installation
# Core CLI (unchanged)
pip install env-doctor
# With fleet dashboard
pip install env-doctor[dashboard]