
Your Agents Don't Need You Watching
AI coding agents are powerful, but they're tethered to your laptop. Close the lid, lose your Wi-Fi, or just walk away from your desk, and your agent dies mid-task.
Remo fixes this. It gives you a persistent remote environment where your agents keep running no matter what happens to your local machine. SSH in, kick off an agent, disconnect. Come back hours later and pick up exactly where things left off. Your Zellij session holds the full context: terminal output, running processes, everything.
This is what "set it and forget it" looks like for development.
Where Will You Remo?
But "set it and forget it" is only half the story. The other half is checking back in — from anywhere.
Kick off a Claude Code session at your desk before lunch. Check the progress from your phone over SSH while you're waiting in line for coffee. Pick it back up on your iPad from the couch that evening. Or don't check in at all — your agent doesn't care. It's still going.
Remo decouples your development from any single device. Your agent runs on persistent infrastructure, and you connect to it on your terms — when it's convenient, from wherever you happen to be. The work doesn't stop when you step away, and it's always there when you come back.
From a standing desk. From a hammock. From a hotel lobby the night before a conference. #WhereWillYouRemo
How It Works
Install from PyPI, provision an environment, and connect:
uv tool install remo-cli
remo init
remo hetzner create # or: remo aws create / remo incus create / remo proxmox create
remo shellYou land in an interactive project menu. Pick a project, and you're in a persistent Zellij session with your DevContainer already running. Disconnect anytime — your session survives.
____ ___ _ __ ___ ___
| __// _ \ _ ` _ \ / _ \
| | | __/ | | | | | (_) |
|_| \___|_| |_| |_|\___/
[ Remote Coding Server ]
Select a project (1-9, ↑↓, Enter | c=clone, d=delete, x=exit):
my-project ● ⇡
another-project ●
cool-side-project
[Clone new repo]
[Exit to shell]
> Legend: ● changes ⇡ push ⇣ pull ⚡ activeWhat You Get
Every Remo environment comes fully loaded:
Ctrl+d, reconnect with remo shell, and resume exactly where you left off..devcontainer config auto-launch their Docker container when you select them. No manual setup.~/projects. Arrow keys, number shortcuts, or just type to filter.remo shell -L 8080 tunnels remote ports to your local machine, with auto-open in your browser. Forward multiple ports at once.remo cp moves files between your machine and any environment using simple colon notation. No separate SCP setup needed.remo <provider> snapshot create, plus list, restore and delete — the same command surface on all four providers. Take one before a risky change, roll back if it breaks. Near-instant and free on Incus and Proxmox; a few minutes and a storage bill on AWS and Hetzner.remo completion install, which writes the drop-in file and the one rc line for bash, zsh or fish.uv tool upgrade remo-cli updates the CLI. remo <platform> upgrade refreshes the dev tools on your environment, and remo <platform> resize changes its shape without rebuilding.No CLI? No Problem.
remo web runs a small home-lab Docker service that discovers every project across every registered instance and streams a real interactive terminal to any browser. No local CLI, no SSH keys on the client. It attaches to the exact same persistent Zellij and DevContainer session remo shell would — so you can start a session at your desk and pick it up in a browser tab on a Chromebook.
uv sync --extra web # FastAPI/Uvicorn extra, not part of the normal CLI
remo web check # validates registry, SSH identity, runtime dir, reachability
remo web serve --host 127.0.0.1 --port 8080Deploy it two ways. Bind-mount mode shares your existing registry and SSH key read-only. Adopted mode mounts nothing: the container generates its own SSH identity, and a single remo web push from your workstation authorizes it on every instance — your personal private key never leaves your laptop. From there remo web sync keeps both sides converged with a bi-directional three-way merge: local changes go up, console-made changes come down, deletions propagate with consent, and divergent edits surface as per-entry conflicts instead of a silent overwrite.
Click a host and you get its detail page: live load, CPU, memory, disks and temperatures. Opt in with REMO_WEB_HOST_ADMIN=enabled and you can clone a repo as a new project, rebuild a devcontainer, or open a shell on the host itself. Opt in with REMO_WEB_REGISTRY_ADMIN=enabled and the console can register and configure new hosts end-to-end — which makes Remo usable with no workstation CLI at all. Both admin surfaces are dormant unless you turn them on.
Security boundary: the console is a single-trusted-user service with no login. Anyone who can reach it can open a shell on every instance in your registry. Bind it to a trusted LAN interface, a Tailscale address, or a loopback reverse proxy — never expose it to the public internet.
Pick Your Platform
Remo deploys to four platforms. Same dev workflow, same tooling, your choice of infrastructure.
Cloud VM · ~€4/month · persistent block volume · reached by server IP · best for budget EU/US hosting
Cloud VM · ~$30/month, ~$10 on spot · EBS or root volume · SSM with no open ports, or SSH · best for enterprise and spot savings
Local container · your electricity · host mounts · reached by LAN hostname · best for local dev and homelab
Local container · your electricity · LVM / ZFS / dir · reached by LAN IP · best for an existing Proxmox cluster
…Or Anything With SSH
Already have a box you can SSH into — a VM, a bare-metal server, someone else's container — but no API token or hypervisor access? remo add NAME user@host:port registers it directly, and remo configure NAME installs the same toolchain every provisioned environment gets: Zellij, the DevContainer runtime, and the project menu. Provider sync is bulk discovery that needs provider access; add is a single registration that needs only SSH reachability.
Why Not Just Use a Cloud IDE?
Cloud IDEs lock you into a browser tab and a specific editor. Remo gives you a raw SSH environment. Use whatever editor, terminal, or workflow you want — VS Code Remote SSH, Neovim, Emacs, or a plain terminal. Your agent framework doesn't care where it runs as long as the session persists.
And because it's just a Linux box with Docker, anything that works locally works on Remo. No vendor lock-in, no proprietary APIs, no monthly seat fees.
The devcontainer runtime is swappable, too. Pass --devcontainer-runtime deacon (or set REMO_DEVCONTAINER_RUNTIME=deacon) and Remo installs Deacon — a single-binary Rust DevContainer CLI — in place of the Node.js one, and the launcher scripts call it instead. Experimental, but it takes the Node runtime out of the box entirely.
Install
uv tool install remo-cli
remo initThat's it. Requires Python 3.11+ and uv (or pip). remo init pulls in the Ansible collections that handle provisioning.
Getting Started
Set your platform credentials as environment variables, then create and connect:
# Hetzner (cheapest cloud option)
export HETZNER_API_TOKEN=your-token
remo hetzner create
remo shell
# AWS (enterprise features, spot pricing)
export AWS_ACCESS_KEY_ID=your-key
export AWS_SECRET_ACCESS_KEY=your-secret
remo aws create --spot
remo shell
# Incus (your own hardware)
remo incus bootstrap --host myserver
remo incus create --name dev1 --host myserver
remo shell
# Proxmox VE LXC (existing Proxmox cluster)
remo proxmox bootstrap --host pve-node1
remo proxmox create --name dev1 --host pve-node1
remo shell
# Any SSH-reachable box (no credentials needed)
remo add mybox me@192.168.1.50
remo configure mybox
remo shellAll you need is an SSH key pair — plus credentials for your chosen platform, if you're provisioning one.