# Install ## Support Matrix Supported today: - Linux x86_64 - Python 3.12+ - `uv` - `/dev/kvm` Optional for outbound guest networking: - `ip` - `nft` or `iptables` - privilege to create TAP devices and configure NAT Not supported today: - macOS - Windows - Linux hosts without working KVM at `/dev/kvm` If you do not already have `uv`, install it first: ```bash python -m pip install uv ``` Use these command forms consistently: - published package without install: `uvx --from pyro-mcp pyro ...` - installed package: `pyro ...` - source checkout: `uv run pyro ...` ## Fastest Evaluation Path Use the package directly without a manual install: ### 1. Check the host first ```bash uvx --from pyro-mcp pyro doctor ``` Expected success signals: ```bash Platform: linux-x86_64 Runtime: PASS KVM: exists=yes readable=yes writable=yes Environment cache: /home/you/.cache/pyro-mcp/environments Capabilities: vm_boot=yes guest_exec=yes guest_network=yes Networking: tun=yes ip_forward=yes ``` If `Runtime: FAIL`, stop here and use [troubleshooting.md](troubleshooting.md). ### 2. Inspect the catalog ```bash uvx --from pyro-mcp pyro env list ``` Expected output: ```bash Catalog version: 2.0.0 debian:12 [installed|not installed] Debian 12 environment with Git preinstalled for common agent workflows. debian:12-base [installed|not installed] Minimal Debian 12 environment for shell and core Unix tooling. debian:12-build [installed|not installed] Debian 12 environment with Git and common build tools preinstalled. ``` ### 3. Pull the default environment ```bash uvx --from pyro-mcp pyro env pull debian:12 ``` The first pull downloads an OCI environment from public Docker Hub, requires outbound HTTPS access to `registry-1.docker.io`, and needs local cache space for the guest image. See [host-requirements.md](host-requirements.md) for the full host requirements. ### 4. Run one command in a guest ```bash uvx --from pyro-mcp pyro run debian:12 -- git --version ``` Expected success signals: ```bash [run] environment=debian:12 execution_mode=guest_vsock exit_code=0 duration_ms=... git version ... ``` The guest command output and the `[run] ...` summary are written to different streams, so they may appear in either order in terminals or capture tools. Use `--json` if you need a deterministic structured result. If guest execution is unavailable, the command fails unless you explicitly pass `--allow-host-compat`. For a fuller copy-pasteable transcript, see [first-run.md](first-run.md). ## Installed CLI ```bash uv tool install pyro-mcp pyro --version pyro doctor pyro env list pyro env pull debian:12 pyro run debian:12 -- git --version ``` After the CLI path works, you can move on to: - MCP: `pyro mcp serve` - Python SDK: `from pyro_mcp import Pyro` - Demos: `pyro demo` or `pyro demo --network` ## Contributor Clone ```bash git lfs install git clone cd pyro git lfs pull make setup ```