{
  "manifest_version": "1",
  "slug": "opencode",
  "title": "OpenCode",
  "headline": "Run OpenCode on a remote server",
  "description": "OpenCode on your own VM, wired to Claude, GPT and open models with no API keys. Code from your terminal or a private browser tab, laptop optional.",
  "category": "ai-agents",
  "tags": [
    "opencode",
    "open source",
    "remote development",
    "ai coding agent",
    "tmux",
    "claude",
    "gpt"
  ],
  "url": "https://exe.dev/deploy/opencode",
  "markdown_url": "https://exe-staging.dev/deploy/opencode.md",
  "upstream": {
    "website": "https://opencode.ai/",
    "source": "https://github.com/anomalyco/opencode",
    "docs": "https://opencode.ai/v2/docs/",
    "license": "MIT"
  },
  "example_vm_name": "my-opencode",
  "time": "5 minutes",
  "stack": [
    {
      "name": "OpenCode",
      "detail": "connected to exe.dev's LLM integration",
      "port": 4096,
      "data": "~/.local/share/opencode"
    },
    {
      "name": "Your project",
      "data": "~/project"
    },
    {
      "name": "tmux",
      "detail": "keeps your terminal session running when you disconnect"
    }
  ],
  "access": [
    {
      "url": "ssh my-opencode.exe.xyz",
      "who": "private",
      "what": "your terminal"
    },
    {
      "url": "https://my-opencode.exe.xyz:4096/",
      "who": "private",
      "what": "OpenCode in your browser, after a one-time sign-in link"
    }
  ],
  "delivers": [
    "OpenCode connected to Claude, GPT and open models, with no API key to paste",
    "A project folder at `~/project` on persistent disk",
    "An `opencode` tmux session that survives disconnects",
    "OpenCode's web app on port 4096, behind exe.dev login, and back after a reboot"
  ],
  "deployable": true,
  "deploy": {
    "new_vm_url": "https://exe-staging.dev/new?prompt=Set%20up%20OpenCode%20on%20this%20VM%20by%20following%20the%20exe.dev%20recipe%20at%20https%3A%2F%2Fexe-staging.dev%2Fdeploy%2Fopencode.md%20from%20top%20to%20bottom.%0A%0AThe%20recipe%27s%20example%20VM%20name%20is%20my-opencode.%20This%20VM%27s%20name%20is%20the%20output%20of%20%60hostname%60%3A%20use%20it%20wherever%20the%20recipe%20writes%20my-opencode.%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-%20OpenCode%20connected%20to%20Claude%2C%20GPT%20and%20open%20models%2C%20with%20no%20API%20key%20to%20paste%0A-%20A%20project%20folder%20at%20%60~%2Fproject%60%20on%20persistent%20disk%0A-%20An%20%60opencode%60%20tmux%20session%20that%20survives%20disconnects%0A-%20OpenCode%27s%20web%20app%20on%20port%204096%2C%20behind%20exe.dev%20login%2C%20and%20back%20after%20a%20reboot%0A%0ARun%20the%20VM-side%20setup%20in%20%22Start%20coding%22%20and%20%22Open%20it%20in%20your%20browser%22.%0AIf%20%60~%2F.config%2Fopencode%2Fopencode.json%60%20holds%20more%20than%20exe.dev%27s%0Aplaceholder%20%28%60%24schema%60%20and%20%60autoupdate%60%29%2C%20add%20the%20%60model%60%20and%20%60providers%60%0Asettings%20to%20it%20instead%20of%20replacing%20it.%20Create%20tmux%20detached%0A%28%60tmux%20new%20-d%20-s%20opencode%20-c%20~%2Fproject%60%29%20rather%20than%20attaching.%20Reuse%20the%0Asession%20if%20it%20already%20exists.%20Do%20not%20launch%20interactive%20OpenCode.%20Do%20not%0Acreate%20a%20pairing%20link%3B%20they%20expire%20in%20five%20minutes.%20Verify%20from%20~%2Fproject%0Awith%20%60opencode%20run%20-m%20anthropic%2Fclaude-haiku-5-5%20%22Reply%20with%20exactly%3A%20OK%22%60%2C%0Acheck%20%60tmux%20has-session%20-t%20opencode%60%2C%20and%20check%20that%20%60opencode%20service%0Astatus%60%20prints%20%60http%3A%2F%2F0.0.0.0%3A4096%60%20and%20%60systemctl%20is-enabled%20opencode%60%0Aprints%20%60enabled%60.%20Skip%20the%20later%20optional%20instructions%20and%20FAQ.%20Finish%0Awith%20the%20SSH%20command%20from%20%22Take%20a%20break%22%2C%20the%20browser%20URL%2C%20and%20the%0A%60opencode%20pair%60%20command%20from%20%22Open%20it%20in%20your%20browser%22%2C%20using%20this%20VM%27s%0Aname%2C%20and%20tell%20the%20owner%20to%20run%20%60opencode%60%20inside%20the%20tmux%20session.%0A%0AFinish%20with%20the%20URLs%20I%20should%20open.%0A",
    "terminal": "curl -fsSL https://exe-staging.dev/deploy/opencode/prompt.txt | ssh exe.dev new --prompt=/dev/stdin",
    "prompt": "Set up OpenCode on this VM by following the exe.dev recipe at https://exe-staging.dev/deploy/opencode.md from top to bottom.\n\nThe recipe's example VM name is my-opencode. This VM's name is the output of `hostname`: use it wherever the recipe writes my-opencode. 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- OpenCode connected to Claude, GPT and open models, with no API key to paste\n- A project folder at `~/project` on persistent disk\n- An `opencode` tmux session that survives disconnects\n- OpenCode's web app on port 4096, behind exe.dev login, and back after a reboot\n\nRun the VM-side setup in \"Start coding\" and \"Open it in your browser\".\nIf `~/.config/opencode/opencode.json` holds more than exe.dev's\nplaceholder (`$schema` and `autoupdate`), add the `model` and `providers`\nsettings to it instead of replacing it. Create tmux detached\n(`tmux new -d -s opencode -c ~/project`) rather than attaching. Reuse the\nsession if it already exists. Do not launch interactive OpenCode. Do not\ncreate a pairing link; they expire in five minutes. Verify from ~/project\nwith `opencode run -m anthropic/claude-haiku-5-5 \"Reply with exactly: OK\"`,\ncheck `tmux has-session -t opencode`, and check that `opencode service\nstatus` prints `http://0.0.0.0:4096` and `systemctl is-enabled opencode`\nprints `enabled`. Skip the later optional instructions and FAQ. Finish\nwith the SSH command from \"Take a break\", the browser URL, and the\n`opencode pair` command from \"Open it in your browser\", using this VM's\nname, and tell the owner to run `opencode` inside the tmux session.\n\nFinish with the URLs I should open.\n",
    "prompt_url": "https://exe-staging.dev/deploy/opencode/prompt.txt"
  },
  "updated": "2026-10-17",
  "verified": "2026-10-17",
  "related": [
    "codex",
    "claude-code",
    "code-server",
    "openclaw",
    "hermes-agent",
    "pi-durable"
  ]
}
