Self-host OpenHands
A self-hosted control center for AI coding agents: describe a task in natural language and OpenHands writes code, runs commands, and iterates on its own. It ships as Agent Canvas, an npx-installable web UI that runs its own agent or third-party agents (Claude Code, Codex, and other Agent-Client-Protocol-compatible agents), and you bring your own LLM API key (Anthropic, OpenAI, or a self-hosted OpenAI-compatible endpoint).
Key facts
Pick OpenHands when you want a browser control centre for coding agents on your own VM: Agent Canvas is MIT-licensed, installed with `npx @openhands/agent-canvas`, and runs the OpenHands agent or ACP agents (Claude Code, Codex, Gemini CLI) against models you pay for yourself — direct Anthropic, OpenAI or Google keys, an OpenHands LLM key, or a local OpenAI-compatible server such as Ollama. The moving parts are Node.js, `uv` for the Python agent-server runtime and an API key you generate; upstream says "2 vCPU / 4 GB RAM is plenty for a single user". If you want a multi-agent platform with identity, audit trails and durable workflows rather than one developer's agent, AgentArea is the fit.
Follow the OpenHands deploy guide →What you need
- Any VPS with at least 4096 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- About an afternoon — budget time for troubleshooting
Paid link — we earn a commission if you shop through it.
Install
Run these commands on your server:
# OpenHands Agent Canvas — official npx installer + systemd (docs/SELF_HOSTING.md). Node.js 24 + uv:
# the docs say Node 22.x, but @openhands/agent-canvas 1.20.0 declares engines.node >=24 — 24 satisfies both
sudo apt-get update && sudo apt-get install -y curl git
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash - && sudo apt-get install -y nodejs
curl -LsSf https://astral.sh/uv/install.sh | sh # agent-server runtime
export PATH="$HOME/.local/bin:$PATH" # uv installs here — needed in this same shell
export LOCAL_BACKEND_API_KEY=$(openssl rand -base64 32) # save this value
npx @openhands/agent-canvas --public # quick test run, binds 127.0.0.1:8000
# for a persistent service, wrap the same command in a systemd unit —
# see https://github.com/OpenHands/OpenHands/blob/main/docs/SELF_HOSTING.md —
# then (optional) front :8000 with nginx + Let's Encrypt, or reach it over an SSH tunnel
# → https://your-domain — paste LOCAL_BACKEND_API_KEY when promptedWhat you take on
OpenHands reorganised itself in 2026 and its self-hosting guide is blunt about what the agent can reach: