Start the first workspace milestone toward the task-oriented product without changing the existing one-shot vm_run/pyro run contract. Add a disk-backed task registry in the manager, auto-started task workspaces rooted at /workspace, repeated non-cleaning exec, and persisted command journals exposed through task create/exec/status/logs/delete across the CLI, Python SDK, and MCP server. Update the public contract, docs, examples, and version/catalog metadata for 2.1.0, and cover the new surface with manager, CLI, SDK, and MCP tests. Validation: UV_CACHE_DIR=.uv-cache make check and UV_CACHE_DIR=.uv-cache make dist-check.
4.2 KiB
4.2 KiB
Public Contract
This document defines the supported public interface for pyro-mcp 2.x.
Package Identity
- Distribution name:
pyro-mcp - Public executable:
pyro - Public Python import:
from pyro_mcp import Pyro - Public package-level factory:
from pyro_mcp import create_server
CLI Contract
Top-level commands:
pyro env listpyro env pullpyro env inspectpyro env prunepyro mcp servepyro runpyro task createpyro task execpyro task statuspyro task logspyro task deletepyro doctorpyro demopyro demo ollama
Stable pyro run interface:
- positional environment name
--vcpu-count--mem-mib--timeout-seconds--ttl-seconds--network--allow-host-compat--json
Behavioral guarantees:
pyro run <environment> -- <command>defaults to1 vCPU / 1024 MiB.pyro runfails if guest boot or guest exec is unavailable unless--allow-host-compatis set.pyro run,pyro env list,pyro env pull,pyro env inspect,pyro env prune, andpyro doctorare human-readable by default and return structured JSON with--json.pyro demo ollamaprints log lines plus a final summary line.pyro task createauto-starts a persistent workspace.pyro task execruns in the persistent/workspacefor that task and does not auto-clean.pyro task logsreturns persisted command history for that task untilpyro task delete.
Python SDK Contract
Primary facade:
Pyro
Supported public entrypoints:
create_server()Pyro.create_server()Pyro.list_environments()Pyro.pull_environment(environment)Pyro.inspect_environment(environment)Pyro.prune_environments()Pyro.create_vm(...)Pyro.create_task(...)Pyro.start_vm(vm_id)Pyro.exec_vm(vm_id, *, command, timeout_seconds=30)Pyro.exec_task(task_id, *, command, timeout_seconds=30)Pyro.stop_vm(vm_id)Pyro.delete_vm(vm_id)Pyro.delete_task(task_id)Pyro.status_vm(vm_id)Pyro.status_task(task_id)Pyro.logs_task(task_id)Pyro.network_info_vm(vm_id)Pyro.reap_expired()Pyro.run_in_vm(...)
Stable public method names:
create_server()list_environments()pull_environment(environment)inspect_environment(environment)prune_environments()create_vm(...)create_task(...)start_vm(vm_id)exec_vm(vm_id, *, command, timeout_seconds=30)exec_task(task_id, *, command, timeout_seconds=30)stop_vm(vm_id)delete_vm(vm_id)delete_task(task_id)status_vm(vm_id)status_task(task_id)logs_task(task_id)network_info_vm(vm_id)reap_expired()run_in_vm(...)
Behavioral defaults:
Pyro.create_vm(...)andPyro.run_in_vm(...)default tovcpu_count=1andmem_mib=1024.Pyro.create_task(...)defaults tovcpu_count=1andmem_mib=1024.allow_host_compatdefaults toFalseoncreate_vm(...)andrun_in_vm(...).allow_host_compatdefaults toFalseoncreate_task(...).Pyro.exec_vm(...)runs one command and auto-cleans that VM after the exec completes.Pyro.exec_task(...)runs one command in the persistent task workspace and leaves the task alive.
MCP Contract
Primary tool:
vm_run
Advanced lifecycle tools:
vm_list_environmentsvm_createvm_startvm_execvm_stopvm_deletevm_statusvm_network_infovm_reap_expired
Task workspace tools:
task_createtask_exectask_statustask_logstask_delete
Behavioral defaults:
vm_runandvm_createdefault tovcpu_count=1andmem_mib=1024.task_createdefaults tovcpu_count=1andmem_mib=1024.vm_runandvm_createexposeallow_host_compat, which defaults tofalse.task_createexposesallow_host_compat, which defaults tofalse.vm_execruns one command and auto-cleans that VM after the exec completes.task_execruns one command in a persistent/workspaceand leaves the task alive.
Versioning Rule
pyro-mcpuses SemVer.- Environment names are stable identifiers in the shipped catalog.
- Changing a public command name, public flag, public method name, public MCP tool name, or required request field is a breaking change.