
On this page
Before you start Choose where each part runs Add one SSH node Install the exact client build Prepare and verify the project Choose the first worker Return edits from an independent checkout Follow the result On a clusterYour conversation can stay on your laptop while a worker runs tools on another machine. Register an SSH node, install the exact CLIO Coder build if needed, verify its project and model route, then choose where the first bounded task runs.
Before you start
- Noninteractive SSH access to a machine you may use for work.
- CLIO Coder on the node at exactly your client's version. For an automatic install, the node needs Node.js 22.19 or newer and npm on its noninteractive SSH PATH.
- The project at the same absolute path on the client and node, using shared storage or matching clean Git checkouts.
- A model route the worker can reach from the node.
Choose where each part runs
One remote task
Your laptop
Session
The conversation, your approvals, and the dispatch.
SSH dispatch
Fleet node
Worker
Runs at default authority in the same absolute project path.
model requests
The worker's route
Inference
A localhost address resolves on the node, not on your laptop.
Worker placement and inference are separate. A local worker calling a remote model endpoint runs tools locally. An SSH worker runs tools on the selected node. A target URL containing localhost refers to the worker's machine.
Choose a node for the compiler, filesystem, data or capacity the task needs. Declared labels such as gpu help describe it, but they do not prove observed hardware or available memory. A remote worker using a cloud target can send model input to that provider under the existing information policy.
Add one SSH node
From your project root, register an SSH alias, hostname or address:
Shell
clio-coder fleet nodes add build-node --host build-node --max-workers 1
clio-coder fleet nodes listThe implicit local node already exists. Adding a node keeps unpinned work local. The new node starts as not checked.
Use an existing SSH alias to select the user, port and identity. You can also pass --user, --port and --identity-file explicitly. --labels cpu,build adds operator declarations. Start with one slot until you know the node's workload and resource limits.
In the terminal, /settings fleet opens the Workers area; choose Add SSH node under Machines. The guided flow asks for a name and host, then offers to test and record readiness or preview an install. Open a node row to see evidence and timestamps, test it, preview an install or remove its saved entry. A test started here always records its result.

Use a LAN endpoint or optional Tailscale discovery
If the client and node share a network, prefer a LAN endpoint you have verified with SSH. Otherwise, a reachable Tailscale address or MagicDNS name can use the same worker transport.
Shell
clio-coder fleet nodes discover
clio-coder fleet nodes add travel-node --host travel-node.example-tailnet.ts.netDiscovery is opt-in. It reads tailscale status --json when the CLI is installed and signed in, lists MagicDNS names and IP addresses, and leaves the selection to you. The TUI's Discover with Tailscale lets you pick an endpoint and name the node. A discovered peer has no proven SSH access, runtime or project readiness. You can add an SSH host directly without Tailscale.
The endpoint can matter substantially. In one measurement on this project's development network, a 4 MiB SSH transfer ran at about 173 MiB/s over LAN and 1.4 MiB/s over Tailscale. SSH setup and existing connection multiplexing affect those numbers; measure your own route. CLIO Coder uses the host you configure and does not automatically switch between addresses.
Install the exact client build
If the node lacks a matching CLIO Coder runtime, preview a user-level install:
Shell
clio-coder fleet nodes install build-nodeReview the package size, digest and destination. Then execute it:
Shell
clio-coder fleet nodes install build-node --yesCLIO Coder packs the build the client actually runs, transfers it over SSH, checks its SHA-256 digest, and installs it under the node's ~/.local/share/clio-coder/workers/<digest>/. The install uses the node's existing Node.js and npm, verifies the version and updates the saved worker entry. The installer does not require sudo or modify services or shell profiles. Optional SDK dependencies are omitted.
You can also manage CLIO Coder yourself, for example with the standard installer on a cluster login node, whose private Node.js is not on PATH. The default invocation is clio-coder worker. A custom --entry that ends in worker is checked through its base command's --version; any other entry needs an explicit --version-command. The version check is never skipped.
Prepare and verify the project
Choose one supported arrangement:
| Arrangement | What CLIO Coder verifies | Available work |
|---|---|---|
| Shared storage at the same absolute path | A transient client-side file challenge is visible from the node. | Read-only and mutating workers use that storage. |
| Independent checkout at the same absolute path | Both trees are clean, have the same Git HEAD and matching root history. | Read-only work; mutations through an isolated task worktree and SSH commit return. |
CLIO Coder does not clone an arbitrary repository, map different paths, install project dependencies or stage datasets. Prepare those yourself. For independent checkouts, update both to the same clean baseline before testing.
Observe first
Shell
clio-coder fleet nodes test build-node clio-coder doctorThese commands observe the node without creating directories there or granting new dispatch eligibility. A plain test can identify a clean matching checkout; recording also permits the transient client-side challenge that proves shared storage.
Model facts distinguish network reachability, access to the model listing, model presence and runtime support. Unknown remains unknown; a catalog listing is not a successful generation or proof of a resident model.
Each registered node adds a
fleet node <id>row todoctorwith its host, remote version and project check. The recording shows the report on a fresh install, before any node or model is added; each warning names the command that clears it.
doctor --fix creates a fresh install's state; doctor then passes every check except the model target and the pane host, and names the command that adds each. Terminal · v0.8.0 Recording · 0:08 Transcript
CLIO Coder doctor on a fresh install Recorded with CLIO Coder 0.8.0. Each section is the terminal screen at that moment. == repaired OK Clio Coder version 0.8.0 OK install method npm (/opt/clio-coder/lib/node_modules/@iowarp/clio-coder; npm global; follows latest through npm; update after exit off (prefix not user-writable)) OK node version v24.20.0 OK platform linux-x64 OK engine runtime ready OK directory layout config, data, state, and cache roots are absolute, distinct, and non-nesting OK config dir /home/researcher/.config/clio-coder OK data dir /home/researcher/.local/share/clio-coder OK state dir /home/researcher/.local/state/clio-coder OK cache dir /home/researcher/.cache/clio-coder OK state dir mode tightened to 700 OK data dir mode tightened to 700 OK settings.yaml /home/researcher/.config/clio-coder/settings.yaml OK credentials 600 OK state metadata 0.8.0 (repaired 2026-11-13T00:17:01.419Z) OK lifecycle migrations 9 registered, all recorded OK session store /home/researcher/.local/state/clio-coder/sessions (no sessions recorded) INFO telemetry mode standard; research capture off; 0 workspace consents recorded OK installation files build outputs present OK local worker capacity 24 usable CPUs, 19.7 GiB available memory; 8 local workers (built-in safety cap). GPU/VRAM and model fit are not checked. OK state storage 121 B (121 bytes); largest contributor home.json at 121 B (121 bytes) OK home storage config 8.3 KB, data 0 B, cache 0 B OK interop pi version unknown (no ACP recipe) at /opt/node/bin/pi INFO external tool asciinema not found (install with `clio-coder tools install asciinema`) WARN external tool herdr pane host 0.9.5 is not installed; run `clio-coder panes install` OK external tool yazi experimental integration disabled by settings INFO external tool croc not found (install with `clio-coder tools install croc`) INFO external tool cliamp not found (install with `clio-coder tools install cliamp`) OK files pane profile disabled by settings OK pdf attachments /usr/bin/pdftotext: pdftotext version 24.02.0; pdfinfo /usr/bin/pdfinfo OK toolchain found: cc, c++, gfortran, mpicc, mpicxx, mpirun, cmake, make, python3; not on PATH: clang, nvcc, ninja, meson, sbatch INFO slurm mcp not set up: clio-kit, sbatch, and squeue are not on PATH and no mcp.yaml declares the Slurm server; see docs/guide/slurm.md OK store backend local (no selection; the default) OK store root /home/researcher/.local/share/clio-coder/store (not created yet; 420.5 GiB free at /home/researcher/.local/share/clio-coder) OK panes mode Clio's private pane host opens with bare `clio-coder`; this command is not running inside one OK panes layout off OK naming clean: immutable history, git refs, worktree markers OK validation contract none at the workspace root; rigor default normal OK shell sandbox default-autonomy shell commands run in the bwrap sandbox; writable roots: /home/researcher, /tmp, /var/tmp, /home/researcher/.cache/clio-coder/sandbox-cache; 7 secret files in the workspace and scratch roots are masked; unix sockets: a seccomp filter refuses new AF_UNIX sockets (socketpair still works) and the kernel keyring calls; yolo runs contained in the same sandbox 17 rows folded; `clio-coder doctor --verbose` prints each one ~ $ == healthy ~ $ clio-coder doctor WARN chat cannot run yet: no model target is configured; run `clio-coder configure` to choose one OK Clio Coder version 0.8.0 OK install method npm (/opt/clio-coder/lib/node_modules/@iowarp/clio-coder; npm global; follows latest through npm; update after exit off (prefix not user-writable)) OK node version v24.20.0 OK platform linux-x64 OK engine runtime ready OK directory layout config, data, state, and cache roots are absolute, distinct, and non-nesting OK config dir /home/researcher/.config/clio-coder OK data dir /home/researcher/.local/share/clio-coder OK state dir /home/researcher/.local/state/clio-coder OK cache dir /home/researcher/.cache/clio-coder OK settings.yaml /home/researcher/.config/clio-coder/settings.yaml OK credentials 600 OK state metadata 0.8.0 (repaired 2026-11-13T00:17:01.419Z) OK lifecycle migrations 9 registered, all recorded OK session store /home/researcher/.local/state/clio-coder/sessions (no sessions recorded) INFO telemetry mode standard; research capture off; 0 workspace consents recorded OK installation files build outputs present OK local worker capacity 24 usable CPUs, 19.4 GiB available memory; 8 local workers (built-in safety cap). GPU/VRAM and model fit are not checked. OK state storage 121 B (121 bytes); largest contributor home.json at 121 B (121 bytes) OK home storage config 8.3 KB, data 0 B, cache 60.3 KB OK interop pi version unknown (no ACP recipe) at /opt/node/bin/pi INFO external tool asciinema not found (install with `clio-coder tools install asciinema`) WARN external tool herdr pane host 0.9.5 is not installed; run `clio-coder panes install` OK external tool yazi experimental integration disabled by settings INFO external tool croc not found (install with `clio-coder tools install croc`) INFO external tool cliamp not found (install with `clio-coder tools install cliamp`) OK files pane profile disabled by settings OK pdf attachments /usr/bin/pdftotext: pdftotext version 24.02.0; pdfinfo /usr/bin/pdfinfo OK toolchain found: cc, c++, gfortran, mpicc, mpicxx, mpirun, cmake, make, python3; not on PATH: clang, nvcc, ninja, meson, sbatch INFO slurm mcp not set up: clio-kit, sbatch, and squeue are not on PATH and no mcp.yaml declares the Slurm server; see docs/guide/slurm.md OK store backend local (no selection; the default) OK store root /home/researcher/.local/share/clio-coder/store (not created yet; 420.5 GiB free at /home/researcher/.local/share/clio-coder) OK panes mode Clio's private pane host opens with bare `clio-coder`; this command is not running inside one OK panes layout off OK naming clean: immutable history, git refs, worktree markers OK validation contract none at the workspace root; rigor default normal OK shell sandbox default-autonomy shell commands run in the bwrap sandbox; writable roots: /home/researcher, /tmp, /var/tmp, /home/researcher/.cache/clio-coder/sandbox-cache; 7 secret files in the workspace and scratch roots are masked; unix sockets: a seccomp filter refuses new AF_UNIX sockets (socketpair still works) and the kernel keyring calls; yolo runs contained in the same sandbox 17 rows folded; `clio-coder doctor --verbose` prints each one ~ $