Getting ZeroClaw running on a VPS takes about five minutes end to end. The entire runtime is a single Rust binary under 9 MB, and it idles at around 4 MB of RAM. If your VPS came with ZeroClaw pre-installed, the setup wizard handles most of the work. You just need an API key from your AI provider of choice.
SSH in and start the setup wizard
Connect to your server over SSH:
ssh root@YOUR_IP_ADDRESS
On a fresh ZeroClaw VPS, the onboard wizard launches automatically the first time you connect. It walks you through picking your AI provider, entering your API key, choosing a messaging channel and configuring the workspace directory. The whole process is interactive, and if you already have your API key handy it takes about two minutes.
If the wizard doesn't appear or you closed your session before finishing, run it manually:
zeroclaw onboard
It picks up where you left off and skips whatever you already completed.
Choosing an AI provider
ZeroClaw supports over 30 providers out of the box. For most people though, the real decision is between two paths: a cloud API or local inference.
If you're going the cloud API route, Anthropic and OpenAI are the straightforward picks. Anthropic's Claude models tend to follow complex instructions well and write solid code, which makes them a good fit if you'll use ZeroClaw as a development assistant. OpenAI gives you GPT-4o and the broader compatibility that comes with being the default everyone builds against. Pricing is comparable for both, somewhere around $3 per million input tokens for the mid-tier models. In practice that works out to a few cents per day for casual use.
OpenRouter is worth knowing about because it aggregates dozens of providers behind a single API key. You get Anthropic, OpenAI, Google, Mistral and open-source models without juggling separate accounts. The markup is small and you can switch models by editing one line in your config.
If you'd rather skip API costs entirely, you can run ZeroClaw with Ollama and serve models locally on the same VPS. That's a different setup path covered in its own tutorial.
API key configuration
The wizard prompts for your key after you select a provider. You can also set it directly in the config file at ~/.zeroclaw/config.toml:
default_provider = "anthropic"
api_key = "sk-ant-..."
One thing worth noting: ZeroClaw sets 0600 permissions on config.toml by default, as recommended in the project's security documentation. If you're backing up configs to a Git repo, make sure your API key isn't in the commit history. The zeroclaw auth commands offer a cleaner way to manage provider credentials if you switch between them often:
zeroclaw auth login --provider anthropic
zeroclaw auth status
Connect your first messaging channel
The wizard asks you to pick a channel. Telegram is the most popular starting point because creating a bot takes about 30 seconds through BotFather and doesn't require any business verification. We've written a full Telegram setup walkthrough if you want the detailed version, but the short version is: message @BotFather on Telegram, send /newbot, pick a name, copy the token.
If you skipped the channel step during the wizard, you can bind one later from the command line:
zeroclaw channel bind-telegram YOUR_BOT_TOKEN
zeroclaw channel list
Test the connection
Before you set up services and background processes, confirm that ZeroClaw can actually reach your provider. Fire off a quick test from the CLI:
zeroclaw agent -m "What model are you running?"
You should see a response within a few seconds. If something goes wrong, run the built-in diagnostics:
zeroclaw doctor
This checks your config, provider connectivity, channel health and system resources in one pass. It's the first command you should reach for when anything looks off. If the errors persist, the ZeroClaw troubleshooting guide covers the usual suspects in detail.
Run ZeroClaw as a background service
By default ZeroClaw runs in the foreground, which means it dies when you close your SSH session. For a persistent assistant that stays online after you disconnect, install it as a systemd service:
zeroclaw service install
zeroclaw service start
Check that it's running:
zeroclaw service status
From here, ZeroClaw starts automatically on reboot and restarts if it crashes. Applying config changes requires a restart:
zeroclaw service restart
If you'd prefer to run the full stack manually instead of through systemd, the zeroclaw daemon command starts the gateway, all bound channels, the cron scheduler and the agent runtime in a single process. That's fine for testing but less reliable than the service approach for anything you want running long-term.
Optional: The web dashboard
ZeroClaw includes a React-based web dashboard for chatting, browsing memory, editing config and reading logs. It's off by default, and frankly you don't need it for everyday operation. But if you want a visual interface, add one line to your config:
sed -i '/^\[gateway\]/a web_dist_dir = "/root/.zeroclaw/web"' /root/.zeroclaw/config.toml
Restart the service, then open an SSH tunnel from your local machine:
ssh -L 42617:127.0.0.1:42617 root@YOUR_VPS_PUBLIC_IP
Navigate to http://localhost:42617 in your browser. Whatever you do, don't bind the gateway to a public IP without a firewall rule. That would expose your AI assistant and its memory to the entire internet.
Where to go from here
Your assistant is live. From here, the direction depends on what you need. If you want your bot reachable on Telegram, Discord and WhatsApp simultaneously, that takes a few more minutes per channel. If you want conversations to persist across sessions, the memory system is worth understanding because the hybrid SQLite vector and keyword search it uses works well out of the box but can be tuned. For a complete CLI reference, the ZeroClaw getting started guide in our knowledge base has every available command.

