{
  "manifest_version": "1",
  "slug": "zcode",
  "title": "ZCode",
  "headline": "Run ZCode on a remote server",
  "description": "Z.ai's open-source ZCode agent on your own exe.dev VM: GLM-5.3 with no API key, a terminal UI that keeps working after you disconnect, and desktop SSH.",
  "category": "ai-agents",
  "tags": [
    "zcode",
    "z.ai",
    "zai",
    "zhipu",
    "glm",
    "glm-5.3",
    "zcode cli",
    "zcode remote development",
    "ai coding agent",
    "tmux"
  ],
  "url": "https://exe.dev/deploy/zcode",
  "markdown_url": "https://exe-staging.dev/deploy/zcode.md",
  "upstream": {
    "website": "https://zcode.z.ai/",
    "source": "https://github.com/zai-org/ZCode",
    "docs": "https://zcode.z.ai/en/docs",
    "license": "Apache-2.0"
  },
  "example_vm_name": "my-zcode",
  "time": "20 minutes",
  "stack": [
    {
      "name": "ZCode 3.17.1",
      "detail": "the `zcode` command, built from Z.ai's tagged source, on Node.js 24",
      "data": "~/.zcode"
    },
    {
      "name": "exe.dev LLM integration",
      "detail": "GLM-5.3 and GLM-5.3 Flash, served by Fireworks, with no key on the VM"
    },
    {
      "name": "Your project",
      "data": "~/project"
    },
    {
      "name": "tmux",
      "detail": "keeps ZCode running when you disconnect"
    }
  ],
  "access": [
    {
      "url": "ssh my-zcode.exe.xyz",
      "who": "private",
      "what": "ZCode's terminal UI, in tmux"
    },
    {
      "url": "exedev@my-zcode.exe.xyz, port 22",
      "who": "private",
      "what": "ZCode desktop's Remote Development, with your exe.dev SSH key"
    }
  ],
  "delivers": [
    "`zcode` 3.17.1 on the VM, built from the v3.17.1 tag",
    "ZCode set to GLM-5.3 through exe.dev's LLM integration, with no Z.ai key on the VM",
    "A project folder at `~/project` on persistent disk",
    "A `zcode` tmux session that survives disconnects"
  ],
  "deployable": true,
  "deploy": {
    "new_vm_url": "https://exe-staging.dev/new?prompt=Set%20up%20ZCode%20on%20this%20VM%20by%20following%20the%20exe.dev%20recipe%20at%20https%3A%2F%2Fexe-staging.dev%2Fdeploy%2Fzcode.md%20from%20top%20to%20bottom.%0A%0AThe%20recipe%27s%20example%20VM%20name%20is%20my-zcode.%20This%20VM%27s%20name%20is%20the%20output%20of%20%60hostname%60%3A%20use%20it%20wherever%20the%20recipe%20writes%20my-zcode.%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-%20%60zcode%60%203.17.1%20on%20the%20VM%2C%20built%20from%20the%20v3.17.1%20tag%0A-%20ZCode%20set%20to%20GLM-5.3%20through%20exe.dev%27s%20LLM%20integration%2C%20with%20no%20Z.ai%20key%20on%20the%20VM%0A-%20A%20project%20folder%20at%20%60~%2Fproject%60%20on%20persistent%20disk%0A-%20A%20%60zcode%60%20tmux%20session%20that%20survives%20disconnects%0A%0ARun%20%22Install%20ZCode%20by%20hand%22%2C%20skipping%20VM%20creation%20and%20SSH.%20The%20build%0Atakes%20several%20minutes%3A%20run%20long%20steps%20in%20tmux%20or%20in%20the%20background%20and%0Await%20for%20them%3B%20don%27t%20cut%20them%20short.%20If%0A%60~%2F.zcode%2Fv2%2Fprovider_config.json%60%20already%20exists%2C%20keep%20a%20copy%20as%0A%60provider_config.json.bak%60%20before%20writing%20the%20new%20one%2C%20and%20tell%20the%0Aowner.%20Create%20the%20tmux%20session%20detached%20%28%60tmux%20new%20-d%20-s%20zcode%20-c%0A~%2Fproject%60%29%20rather%20than%20attaching%2C%20and%20reuse%20it%20if%20it%20exists.%20Don%27t%20start%0Ainteractive%20%60zcode%60%20and%20don%27t%20run%20%60zcode%20--web%60.%20Verify%20with%20the%0A%60zcode%20-p%60%20command%20in%20that%20section%2C%20expecting%20%60OK%60%2C%20and%20with%0A%60tmux%20has-session%20-t%20zcode%60.%20Finish%20with%20the%20SSH%20command%20from%20%22Take%20a%0Abreak%22%2C%20using%20this%20VM%27s%20name%2C%20and%20tell%20the%20owner%20to%20run%20%60zcode%60%20inside%0Athe%20tmux%20session.%0A%0AFinish%20with%20the%20URLs%20I%20should%20open.%0A",
    "terminal": "curl -fsSL https://exe-staging.dev/deploy/zcode/prompt.txt | ssh exe.dev new --prompt=/dev/stdin",
    "prompt": "Set up ZCode on this VM by following the exe.dev recipe at https://exe-staging.dev/deploy/zcode.md from top to bottom.\n\nThe recipe's example VM name is my-zcode. This VM's name is the output of `hostname`: use it wherever the recipe writes my-zcode. 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- `zcode` 3.17.1 on the VM, built from the v3.17.1 tag\n- ZCode set to GLM-5.3 through exe.dev's LLM integration, with no Z.ai key on the VM\n- A project folder at `~/project` on persistent disk\n- A `zcode` tmux session that survives disconnects\n\nRun \"Install ZCode by hand\", skipping VM creation and SSH. The build\ntakes several minutes: run long steps in tmux or in the background and\nwait for them; don't cut them short. If\n`~/.zcode/v2/provider_config.json` already exists, keep a copy as\n`provider_config.json.bak` before writing the new one, and tell the\nowner. Create the tmux session detached (`tmux new -d -s zcode -c\n~/project`) rather than attaching, and reuse it if it exists. Don't start\ninteractive `zcode` and don't run `zcode --web`. Verify with the\n`zcode -p` command in that section, expecting `OK`, and with\n`tmux has-session -t zcode`. Finish with the SSH command from \"Take a\nbreak\", using this VM's name, and tell the owner to run `zcode` inside\nthe tmux session.\n\nFinish with the URLs I should open.\n",
    "prompt_url": "https://exe-staging.dev/deploy/zcode/prompt.txt"
  },
  "updated": "2026-11-02",
  "verified": "2026-11-02",
  "related": [
    "opencode",
    "codex-remote-control",
    "claude-code",
    "agents",
    "openclaw",
    "codex"
  ]
}
