{
  "capabilities": {
    "browser_preview_urls": {
      "features": {},
      "limitations": [
        "Private: a preview opens only through a one-time link minted for a caller who holds the account's credential.",
        "Previews share a parent domain. One preview cannot drive another, but a sandbox page's own script can set a cookie on that domain until it is on the Public Suffix List."
      ],
      "operations": [
        "create",
        "list",
        "open_link",
        "close"
      ],
      "requirements": [
        "preview_domain"
      ],
      "status": "preview_domain_required",
      "summary": "Opening a sandbox's own web interface in a browser tab needs a preview domain, which this deployment has not configured."
    },
    "credential_vault_injection": {
      "features": {},
      "limitations": [
        "Disabled on the gVisor runtime tier."
      ],
      "operations": [],
      "requirements": [
        "microvm_required"
      ],
      "status": "microvm_required",
      "summary": "Network-boundary credential injection is gated on an egress-compatible microVM runtime."
    },
    "mobile_environments": {
      "features": {},
      "limitations": [
        "No public device API, mobile billing, iOS, or physical-device service is included."
      ],
      "operations": [],
      "requirements": [
        "dedicated_kvm_workers",
        "native_device_backend",
        "feasibility_gate"
      ],
      "status": "planned",
      "summary": "Isolated programmable Android devices are a planned environment family, not an available service."
    },
    "public_http_ingress": {
      "features": {},
      "limitations": [
        "Requests authenticate with an Authorization header.",
        "Proxied request bodies are capped at 2 MB."
      ],
      "operations": [],
      "requirements": [],
      "status": "active",
      "summary": "Authenticated HTTP requests can be proxied to sandbox ports through the control plane."
    },
    "public_mcp_connector": {
      "features": {
        "compute_budgets": true,
        "payments": false,
        "separate_scopes": true,
        "tenant_isolation": true
      },
      "limitations": [
        "A connection sees and acts on only the sandboxes it created, at most three at once, each living at most two hours.",
        "Templates are limited to python, node, code-interpreter and playwright.",
        "Tool results are capped at 64 KB.",
        "No payments, secrets, environment variables or port endpoints."
      ],
      "operations": [],
      "requirements": [
        "connector_address"
      ],
      "status": "connector_address_required",
      "summary": "The public MCP connector needs its public address, which this deployment has not configured."
    },
    "public_websocket_ingress": {
      "features": {},
      "limitations": [
        "The handshake authenticates with an Authorization header, which a browser cannot send; pages served from a sandbox need browser preview URLs.",
        "Concurrent connections and message size are capped per deployment."
      ],
      "operations": [],
      "requirements": [],
      "status": "active",
      "summary": "Authenticated WebSocket connections can be relayed to sandbox ports through the control plane."
    },
    "sandbox_events": {
      "features": {},
      "limitations": [],
      "operations": [],
      "requirements": [],
      "status": "not_available",
      "summary": "Customer-facing lifecycle event history is not yet exposed by the Ovrin control plane."
    },
    "sandbox_logs": {
      "features": {},
      "limitations": [],
      "operations": [],
      "requirements": [],
      "status": "not_available",
      "summary": "Customer-facing historical sandbox logs are not yet exposed by the Ovrin control plane."
    },
    "snapshots": {
      "features": {
        "memory": false,
        "named": true,
        "restore": true,
        "retention_ttl": false,
        "snapshot_on_exit": false
      },
      "limitations": [
        "Snapshot support remains dependent on the configured OpenSandbox runtime.",
        "Retention/TTL policies and snapshot_on_exit are not exposed.",
        "Memory snapshots are not included."
      ],
      "operations": [
        "create",
        "list",
        "get",
        "delete",
        "restore"
      ],
      "requirements": [],
      "status": "active",
      "summary": "Named filesystem snapshots can be created, listed, inspected, restored, and deleted through the Ovrin API."
    }
  },
  "packages": {
    "console": "0.1.0",
    "mcp": "0.1.1",
    "platform": "0.1.0",
    "python_sdk": "0.1.1",
    "typescript_sdk": "0.1.0"
  },
  "product": {
    "environment_families": {
      "browser": "active",
      "compute": "active",
      "mobile": "planned",
      "workspace": "active"
    },
    "name": "Ovrin",
    "positioning": "Independent execution infrastructure for AI agents: programmable, isolated environments that developers can provision, control, and integrate across models and applications.",
    "release": "0.1.0"
  },
  "schema_version": 1,
  "templates": [
    {
      "auth": "",
      "category": "compute",
      "description": "Standard Python runtime for scripts and notebooks.",
      "id": "python",
      "image": "python:3.12",
      "image_delivery": "pinned_image",
      "installer": "",
      "name": "Python 3.12",
      "package": "",
      "package_version": "",
      "readiness": "available",
      "readiness_detail": "The template is defined and its current runtime path has no known ingress gate.",
      "requirements": [],
      "resource_limits": {
        "cpu": "500m",
        "memory": "512Mi"
      }
    },
    {
      "auth": "",
      "category": "compute",
      "description": "Node.js runtime for JavaScript and TypeScript workloads.",
      "id": "node",
      "image": "node:22",
      "image_delivery": "pinned_image",
      "installer": "",
      "name": "Node.js 22",
      "package": "",
      "package_version": "",
      "readiness": "available",
      "readiness_detail": "The template is defined and its current runtime path has no known ingress gate.",
      "requirements": [],
      "resource_limits": {
        "cpu": "500m",
        "memory": "512Mi"
      }
    },
    {
      "auth": "",
      "category": "compute",
      "description": "Bare Ubuntu environment with a shell.",
      "id": "ubuntu",
      "image": "ubuntu:22.04",
      "image_delivery": "pinned_image",
      "installer": "",
      "name": "Ubuntu 22.04",
      "package": "",
      "package_version": "",
      "readiness": "available",
      "readiness_detail": "The template is defined and its current runtime path has no known ingress gate.",
      "requirements": [],
      "resource_limits": {
        "cpu": "500m",
        "memory": "512Mi"
      }
    },
    {
      "auth": "",
      "category": "compute",
      "description": "Prebuilt Jupyter-style code interpreter with execd.",
      "id": "code-interpreter",
      "image": "opensandbox/code-interpreter:v1.1.0",
      "image_delivery": "pinned_image",
      "installer": "",
      "name": "Code Interpreter",
      "package": "",
      "package_version": "",
      "readiness": "available",
      "readiness_detail": "The template is defined and its current runtime path has no known ingress gate.",
      "requirements": [],
      "resource_limits": {
        "cpu": "500m",
        "memory": "512Mi"
      }
    },
    {
      "auth": "",
      "category": "browser",
      "description": "Headless browser automation with Playwright and Chromium.",
      "id": "playwright",
      "image": "opensandbox/playwright:latest",
      "image_delivery": "mutable_upstream_image",
      "installer": "",
      "name": "Playwright + Chromium",
      "package": "",
      "package_version": "",
      "readiness": "available",
      "readiness_detail": "The template is defined and its current runtime path has no known ingress gate.",
      "requirements": [],
      "resource_limits": {
        "cpu": "500m",
        "memory": "1Gi"
      }
    },
    {
      "auth": "",
      "category": "browser",
      "description": "Chromium with VNC and remote DevTools on port 9222.",
      "id": "chrome",
      "image": "opensandbox/chrome:latest",
      "image_delivery": "mutable_upstream_image",
      "installer": "",
      "name": "Chrome + VNC",
      "package": "",
      "package_version": "",
      "readiness": "degraded",
      "readiness_detail": "Chromium and VNC run, and DevTools answers inside the sandbox. This deployment serves the upstream Chrome image, which binds DevTools to loopback, so port 9222 cannot be reached through a public endpoint. Ovrin's Chrome image forwards it.",
      "requirements": [
        "devtools_loopback_only"
      ],
      "resource_limits": {
        "cpu": "500m",
        "memory": "1Gi"
      }
    },
    {
      "auth": "`ANTHROPIC_AUTH_TOKEN` or `ANTHROPIC_API_KEY`",
      "category": "agent",
      "description": "Anthropic Claude Code CLI. Auth: ANTHROPIC_AUTH_TOKEN (or ANTHROPIC_API_KEY).",
      "id": "claude-code",
      "image": "opensandbox/code-interpreter:v1.1.0",
      "image_delivery": "install_at_start",
      "installer": "npm",
      "name": "Claude Code",
      "package": "@anthropic-ai/claude-code@2.1.233",
      "package_version": "2.1.233",
      "readiness": "degraded",
      "readiness_detail": "The CLI installs when the container starts. Configure the agent image registry to use the pinned prebuilt image; registry configuration alone does not prove publication.",
      "requirements": [
        "prebuilt_image_not_configured"
      ],
      "resource_limits": {
        "cpu": "1",
        "memory": "1Gi"
      }
    },
    {
      "auth": "`OPENAI_API_KEY`; endpoint/model via `OPENAI_BASE_URL` / `OPENAI_MODEL`",
      "category": "agent",
      "description": "OpenAI Codex CLI. Auth: OPENAI_API_KEY; endpoint/model via OPENAI_BASE_URL / OPENAI_MODEL.",
      "id": "codex",
      "image": "opensandbox/code-interpreter:v1.1.0",
      "image_delivery": "install_at_start",
      "installer": "npm",
      "name": "OpenAI Codex",
      "package": "@openai/codex@0.147.0",
      "package_version": "0.147.0",
      "readiness": "degraded",
      "readiness_detail": "The CLI installs when the container starts. Configure the agent image registry to use the pinned prebuilt image; registry configuration alone does not prove publication.",
      "requirements": [
        "prebuilt_image_not_configured"
      ],
      "resource_limits": {
        "cpu": "1",
        "memory": "1Gi"
      }
    },
    {
      "auth": "`GEMINI_API_KEY`; endpoint/model via `GEMINI_BASE_URL` / `GEMINI_MODEL`",
      "category": "agent",
      "description": "Google Gemini CLI. Auth: GEMINI_API_KEY; endpoint/model via GEMINI_BASE_URL / GEMINI_MODEL.",
      "id": "gemini-cli",
      "image": "opensandbox/code-interpreter:v1.1.0",
      "image_delivery": "install_at_start",
      "installer": "npm",
      "name": "Gemini CLI",
      "package": "@google/gemini-cli@0.55.1",
      "package_version": "0.55.1",
      "readiness": "degraded",
      "readiness_detail": "The CLI installs when the container starts. Configure the agent image registry to use the pinned prebuilt image; registry configuration alone does not prove publication.",
      "requirements": [
        "prebuilt_image_not_configured"
      ],
      "resource_limits": {
        "cpu": "1",
        "memory": "1Gi"
      }
    },
    {
      "auth": "`DEEPSEEK_API_KEY`",
      "category": "agent",
      "description": "DeepSeek Harness (dsh) CLI: profile boot, plugin management, browser UI.",
      "id": "deepseek-harness",
      "image": "opensandbox/code-interpreter:v1.1.0",
      "image_delivery": "install_at_start",
      "installer": "npm",
      "name": "DeepSeek Harness",
      "package": "@deepseek-ai/dsh@0.1.0-rc.6",
      "package_version": "0.1.0-rc.6",
      "readiness": "degraded",
      "readiness_detail": "The CLI installs when the container starts. Configure the agent image registry to use the pinned prebuilt image; registry configuration alone does not prove publication.",
      "requirements": [
        "prebuilt_image_not_configured"
      ],
      "resource_limits": {
        "cpu": "1",
        "memory": "1Gi"
      }
    },
    {
      "auth": "`OPENAI_API_KEY`; endpoint/model via `OPENAI_BASE_URL` / `OPENAI_MODEL`",
      "category": "agent",
      "description": "Qwen Code CLI. Auth: OPENAI_API_KEY; endpoint/model via OPENAI_BASE_URL / OPENAI_MODEL.",
      "id": "qwen-code",
      "image": "opensandbox/code-interpreter:v1.1.0",
      "image_delivery": "install_at_start",
      "installer": "npm",
      "name": "Qwen Code",
      "package": "@qwen-code/qwen-code@0.23.3",
      "package_version": "0.23.3",
      "readiness": "degraded",
      "readiness_detail": "The CLI installs when the container starts. Configure the agent image registry to use the pinned prebuilt image; registry configuration alone does not prove publication.",
      "requirements": [
        "prebuilt_image_not_configured"
      ],
      "resource_limits": {
        "cpu": "1",
        "memory": "1Gi"
      }
    },
    {
      "auth": "`KIMI_API_KEY`; endpoint/model via `KIMI_BASE_URL` / `KIMI_MODEL_NAME`",
      "category": "agent",
      "description": "Moonshot Kimi Code CLI. Auth: KIMI_API_KEY; endpoint/model via KIMI_BASE_URL / KIMI_MODEL_NAME.",
      "id": "kimi-cli",
      "image": "opensandbox/code-interpreter:v1.1.0",
      "image_delivery": "install_at_start",
      "installer": "pip",
      "name": "Kimi CLI",
      "package": "kimi-cli==1.50.0",
      "package_version": "1.50.0",
      "readiness": "degraded",
      "readiness_detail": "The CLI installs when the container starts. Configure the agent image registry to use the pinned prebuilt image; registry configuration alone does not prove publication.",
      "requirements": [
        "prebuilt_image_not_configured"
      ],
      "resource_limits": {
        "cpu": "1",
        "memory": "1Gi"
      }
    },
    {
      "auth": "",
      "category": "desktop",
      "description": "code-server (VS Code in the browser), started on a port you choose.",
      "id": "vscode",
      "image": "opensandbox/vscode:latest",
      "image_delivery": "mutable_upstream_image",
      "installer": "",
      "name": "VS Code",
      "package": "",
      "package_version": "",
      "readiness": "requires_ingress",
      "readiness_detail": "The sandbox can be created and driven internally. Its interface is a page opened in a browser tab, and public endpoints authenticate with a request header a browser cannot send; that needs browser previews, which this deployment has not enabled.",
      "requirements": [
        "browser_preview_required"
      ],
      "resource_limits": {
        "cpu": "1",
        "memory": "2Gi"
      }
    },
    {
      "auth": "",
      "category": "desktop",
      "description": "XFCE desktop with Xvfb, x11vnc and noVNC preinstalled.",
      "id": "desktop",
      "image": "opensandbox/desktop:latest",
      "image_delivery": "mutable_upstream_image",
      "installer": "",
      "name": "Desktop + VNC",
      "package": "",
      "package_version": "",
      "readiness": "requires_ingress",
      "readiness_detail": "The sandbox can be created and driven internally. Its interface is a page opened in a browser tab, and public endpoints authenticate with a request header a browser cannot send; that needs browser previews, which this deployment has not enabled.",
      "requirements": [
        "browser_preview_required"
      ],
      "resource_limits": {
        "cpu": "1",
        "memory": "2Gi"
      }
    }
  ]
}
