{
  "manifest_version": "1",
  "slug": "openshell",
  "title": "OpenShell",
  "headline": "Run NVIDIA OpenShell on a remote VM",
  "description": "Run NVIDIA OpenShell on an exe.dev VM: Claude Code and Codex in policy-locked sandboxes, models through exe.dev with no API key, and a VM around it all.",
  "category": "ai-agents",
  "tags": [
    "nvidia openshell",
    "openshell",
    "agent sandbox",
    "ai agent security",
    "claude code sandbox",
    "codex sandbox",
    "network policy",
    "landlock",
    "microvm",
    "credential brokering"
  ],
  "url": "https://exe.dev/deploy/openshell",
  "markdown_url": "https://exe-staging.dev/deploy/openshell.md",
  "upstream": {
    "website": "https://docs.nvidia.com/openshell/latest/index.html",
    "source": "https://github.com/NVIDIA/OpenShell",
    "docs": "https://docs.nvidia.com/openshell/latest/about/installation",
    "license": "Apache-2.0"
  },
  "example_vm_name": "my-openshell",
  "time": "10 minutes",
  "stack": [
    {
      "name": "OpenShell gateway",
      "detail": "openshell-gateway, a systemd user service; the control plane for sandboxes, policies, and providers",
      "port": 17670,
      "data": "~/.local/state/openshell"
    },
    {
      "name": "Sandboxes",
      "detail": "one Docker container each (or a microVM), from an image with Claude Code and Codex; no network of their own",
      "data": "/sandbox in each sandbox"
    },
    {
      "name": "LLM relay",
      "detail": "nginx on 127.0.0.1:11435, passing sandbox model calls to exe.dev's LLM integration"
    }
  ],
  "access": [
    {
      "url": "ssh my-openshell.exe.xyz",
      "who": "private",
      "what": "the `openshell` CLI and your agents' terminals"
    },
    {
      "url": "https://my-openshell.exe.xyz:8080/",
      "who": "private",
      "what": "optional, a web app running in a sandbox"
    }
  ],
  "delivers": [
    "The OpenShell gateway running as a systemd user service, back after a reboot, with `openshell status` saying `Connected`",
    "An agent image, `agents:local`, with Claude Code and Codex set up for exe.dev's LLM integration, and no API key on the VM",
    "An `exe-llm` provider that lets sandboxes reach models through a relay on the VM, and nothing else on the internet",
    "A test sandbox in which Claude Code answered, then deleted"
  ],
  "deployable": true,
  "deploy": {
    "new_vm_url": "https://exe-staging.dev/new?prompt=Set%20up%20OpenShell%20on%20this%20VM%20by%20following%20the%20exe.dev%20recipe%20at%20https%3A%2F%2Fexe-staging.dev%2Fdeploy%2Fopenshell.md%20from%20top%20to%20bottom.%0A%0AThe%20recipe%27s%20example%20VM%20name%20is%20my-openshell.%20This%20VM%27s%20name%20is%20the%20output%20of%20%60hostname%60%3A%20use%20it%20wherever%20the%20recipe%20writes%20my-openshell.%20Skip%20the%20step%20that%20creates%20the%20VM%3B%20you%20are%20on%20it.%0A%0AYou%20are%20done%20when%20all%20of%20these%20are%20true.%20Check%20each%20one%20yourself%3A%0A-%20The%20OpenShell%20gateway%20running%20as%20a%20systemd%20user%20service%2C%20back%20after%20a%20reboot%2C%20with%20%60openshell%20status%60%20saying%20%60Connected%60%0A-%20An%20agent%20image%2C%20%60agents%3Alocal%60%2C%20with%20Claude%20Code%20and%20Codex%20set%20up%20for%20exe.dev%27s%20LLM%20integration%2C%20and%20no%20API%20key%20on%20the%20VM%0A-%20An%20%60exe-llm%60%20provider%20that%20lets%20sandboxes%20reach%20models%20through%20a%20relay%20on%20the%20VM%2C%20and%20nothing%20else%20on%20the%20internet%0A-%20A%20test%20sandbox%20in%20which%20Claude%20Code%20answered%2C%20then%20deleted%0A%0ARun%20%22Set%20up%20by%20hand%22%20from%20%22On%20the%20VM%22%2C%20skipping%20VM%20creation%20and%20SSH%2C%0Aincluding%20%22Check%20it%22.%20Don%27t%20start%20interactive%20agents%20or%20keep%20any%0Asandbox.%20Finish%20by%20telling%20the%20owner%20to%20SSH%20in%20and%20run%20the%20command%20in%0A%22Start%20an%20agent%22.%0A%0AFinish%20with%20the%20URLs%20I%20should%20open.%0A",
    "terminal": "curl -fsSL https://exe-staging.dev/deploy/openshell/prompt.txt | ssh exe.dev new --prompt=/dev/stdin",
    "prompt": "Set up OpenShell on this VM by following the exe.dev recipe at https://exe-staging.dev/deploy/openshell.md from top to bottom.\n\nThe recipe's example VM name is my-openshell. This VM's name is the output of `hostname`: use it wherever the recipe writes my-openshell. Skip the step that creates the VM; you are on it.\n\nYou are done when all of these are true. Check each one yourself:\n- The OpenShell gateway running as a systemd user service, back after a reboot, with `openshell status` saying `Connected`\n- An agent image, `agents:local`, with Claude Code and Codex set up for exe.dev's LLM integration, and no API key on the VM\n- An `exe-llm` provider that lets sandboxes reach models through a relay on the VM, and nothing else on the internet\n- A test sandbox in which Claude Code answered, then deleted\n\nRun \"Set up by hand\" from \"On the VM\", skipping VM creation and SSH,\nincluding \"Check it\". Don't start interactive agents or keep any\nsandbox. Finish by telling the owner to SSH in and run the command in\n\"Start an agent\".\n\nFinish with the URLs I should open.\n",
    "prompt_url": "https://exe-staging.dev/deploy/openshell/prompt.txt"
  },
  "updated": "2026-10-31",
  "verified": "2026-10-31",
  "related": [
    "agent-secrets",
    "code-interpreter",
    "claude-code",
    "codex",
    "docker-host",
    "openclaw"
  ],
  "alternatives": [
    "E2B",
    "Daytona",
    "Docker Sandboxes"
  ],
  "files": [
    "https://exe-staging.dev/deploy/openshell/Dockerfile",
    "https://exe-staging.dev/deploy/openshell/exe-llm-relay.conf",
    "https://exe-staging.dev/deploy/openshell/exe-llm.yaml"
  ]
}
