single binary · zero dependencies · MIT

Remote debugging sidekick for VMs & machines

UTM Monitor (utmm) lets you — and your AI agents — check processes, read logs, run commands and transfer files on any Linux, macOS or Windows box. One Zig binary, no SSH daemon, no runtime dependencies.

8 cross-compile targets 7 MCP tools over HTTP 1 port for everything (:2121) 0 runtime deps
host — utmm
$ utmm --status
ROLE HOSTNAME TARGET VERSION STATUS SHELL CONPTY
host hostvm aarch64-macos 0.18.80 serving pty n/a
guest linuxvm aarch64-linux 0.18.80 serving pty n/a
guest macvm aarch64-macos 0.18.80 serving pty n/a
guest windowsvm aarch64-windows 0.18.80 serving pipe yes

$ utmm --exec linuxvm "uname -a"
Linux linuxvm 6.6.x #1 SMP aarch64 GNU/Linux
exit code: 0

$ utmm --mcp
MCP endpoint: http://127.0.0.1:2121/

01 Core capabilities

Everything a debugging session needs, packed into one static binary that installs itself and supervises itself.

⌨

Streaming exec

Per-command pty on the target, output streamed back in real time. Exit code embedded as a marker — no timeout, no truncation.

📁

File transfer

Upload & download over direct TCP streaming with end-to-end SHA256 verification and atomic rename on write.

🌐

SOCKS5 mesh

Host is the central proxy on :2121. Reach any Guest's services from the Host — no SSH tunnels, no port mapping.

🔑

Built-in sshpass

Non-interactive SSH password auth, 100% CLI-compatible with standalone sshpass. POSIX PTY + Windows ConPTY.

📡

Zero-config discovery

Guests auto-discover the Host via LSA broadcast over UDP and keep /etc/hosts in sync automatically.

🤖

MCP over HTTP

AI agents drive machines via JSON-RPC POST to :2121. First-byte dispatch shares one port with SOCKS5.

📦

Self-copy install

--install is a single atomic operation: stop → kill → copy to canonical path → install service → start.

⚡

utmmd supervisor

A lightweight daemon manages utmm's lifecycle via shared memory: heartbeats, crash recovery with backoff, atomic upgrades.

02 MCP tools for AI agents

utmm --mcp prints the HTTP endpoint and ensures the Host daemon is running. Every response carries both human-readable content[0].text and machine-readable structuredContent — agents parse JSON, not markdown.

ToolWhat it doesstructuredContent
status List all nodes: hostname, role, IP, OS/arch, MAC, version, status, shell, ConPTY guests[], counts{total, serving, offline}
exec Execute a shell command on any Guest via per-command pty vm, command, exit_code
ping Ping a Guest over the mesh network and measure RTT vm, reachable, mac, rtt_ms
upload Upload file Host → Guest (TCP/SOCKS5, SHA256 verified) vm, local_path, remote_path, success
download Download file Guest → Host (TCP/SOCKS5, SHA256 verified) vm, remote_path, local_path, bytes, success
sshpass Non-interactive SSH password auth — direct shell access to any machine host, user, exit_code
manual Return the full reference manual (embedded at compile time) —

Things your agent can now handle: "linuxvm just crashed — grab the system logs and core dump, find the root cause" · "push the new build to all machines and run the test suite" · "this binary works on Linux but panics on Windows — run it on both and compare". Full protocol reference in the Manual.

03 Quick start

Download utmm.zip from Releases, pick your platform's binary, and install. That's the whole setup.

# POSIX (Linux / macOS)
unzip utmm.zip
sudo ./utmm-<target>-<version> --install --hostname <name>

# Windows (PowerShell as Administrator)
Expand-Archive utmm.zip
C:\opt\utmm\utmm-<target>-<version>.exe --install --hostname <name>
# Exec on any machine
utmm --exec linuxvm "ps aux | grep myapp"
utmm --exec windowsvm "tasklist | findstr myapp"

# Files & upgrades
utmm --upload build.zip linuxvm
utmm --deploy  # build + push to all guests

# Reach a Guest's service through the SOCKS5 mesh
curl --socks5 localhost:2121 http://linuxvm:8080

04 Architecture

Hub-and-spoke: one Host, many Guests, everything on port 2121. TCP handles SOCKS5 + frame protocol + HTTP MCP (first-byte dispatch); UDP handles LSA mesh discovery.

                         ┌── HTTP MCP ← AI Agent (POST to :2121)
Guest (macvm)    ──TCP──┐
Guest (linuxvm)  ──TCP──┤──→ Host TCP :2121 ──┼── CLI (IPC)
Guest (windows)  ──TCP──┘   (SOCKS5 + HTTP MCP
                         │    via first-byte)
Guest ←── LSA broadcast (UDP :2121) ──┘  (auto-discovery + topology)

Every node's TCP :2121 is a SOCKS5 endpoint. Guests route through the Host
(gateway:2121); the Host chain-forwards between Guests. Third-party tools use
any node as a proxy to reach any other node.

05 One codebase, eight targets

Every release ships all eight binaries, cross-compiled with zig build cross and packaged as utmm.zip.

aarch64-linux-musl x86_64-linux-musl x86-linux-musl aarch64-macos x86_64-macos aarch64-windows x86_64-windows x86-windows