Back to Blog
Proxmox
AI
Clawdbot
Self-Hosted
LXC
Docker
Homelab
Running Clawdbot on Proxmox: A Practical Guide for Real Humans
January 25, 2026
12 min read read
This guide explains how to run **Clawdbot**, a self-hosted AI agent, on **Proxmox Virtual Environment (VE)** in a way that is stable, secure, and maintainable.
Clawdbot is not a "run it once and forget it" tool. It's a long-running process that holds state, executes commands, stores memory, and stays connected to messaging platforms. That means it behaves much more like a server application than a chatbot.
Because of that, laptops are a poor long-term home. Servers are better. And for many homelabs, Proxmox is where servers live.
This document walks through the architectural realities, the sharp edges you'll hit, and the exact steps needed to make Clawdbot behave nicely inside Proxmox.
---
## 1. From Chatbots to Agents (Why This Is Different)
### 1.1 Chatbots End Conversations. Agents Don't.
Traditional chatbots respond to text and then disappear. Agents stick around.
Clawdbot runs as a Node.js application that gives an LLM access to tools and a real runtime environment. That means it can:
- Execute shell commands
- Read and write files
- Maintain memory across sessions
- Stay connected to Telegram or WhatsApp
- Run continuously in the background
Once you treat an AI like this, you also have to treat its infrastructure seriously.
### 1.2 The "Local-First" Philosophy
Clawdbot follows a local-first model. Configuration, memory, and state live on disk under the user's home directory, not on someone else's servers.
This has two practical implications:
1. You need persistent storage
2. You need backups
Proxmox already solves both problems well, which makes it a good fit.
The catch is that Clawdbot was originally designed for desktop environments. Proxmox is not a desktop environment.
That mismatch is where most problems come from.
---
## 2. Understanding the Proxmox Environment
Before installing anything, it helps to understand the hosting options Proxmox gives you.
### 2.1 Virtual Machines
VMs behave exactly like normal Linux systems.
**Pros:**
- systemd behaves normally
- user sessions work
- Clawdbot's default install path works
**Cons:**
- Higher memory and CPU overhead
- Overkill for a lightweight Node.js service
If you want the easiest path, use a VM.
### 2.2 Linux Containers (LXC)
LXCs are lighter and faster. They share the host kernel and are ideal for always-on services.
**Pros:**
- Very low overhead
- Fast startup
- Easy snapshots
**The problem:**
- No real user session
- No working `systemd --user`
- No user D-Bus
Clawdbot expects all three.
That's why a normal `clawdbot onboard --install-daemon` fails in an unprivileged LXC.
This guide focuses on fixing that.
---
## 3. What You Need Before Installing
### 3.1 Hardware
**Cloud-based inference:**
- 2 vCPU
- 2–4 GB RAM
**Local models:**
- 16 GB+ RAM
- GPU passthrough if possible
**Storage:**
- Minimum 20 GB
- More if you plan to store lots of files or logs
### 3.2 Operating System
Debian 12 (Bookworm) is recommended.
Ubuntu 22.04 or 24.04 also works.
Examples below assume Debian 12.
### 3.3 Node.js Version Matters
Clawdbot **requires Node.js 22+**.
The default Debian repositories usually ship older versions. Installing `nodejs` directly from apt will not work.
You must use NodeSource.
---
## 4. Deployment Strategy A: LXC With a System-Level Service
This approach installs Clawdbot directly inside an LXC and runs it as a system service.
It's efficient and stable once configured.
### 4.1 Create the Container
- Debian 12 template
- Unprivileged container enabled
- Static IP recommended
Start the container and open a shell.
---
### 4.2 Install Dependencies and Node.js
```bash
# Update base system
apt update && apt upgrade -y
# Install prerequisites
apt install -y curl git build-essential sudo python3
# Add NodeSource repository for Node.js 22
curl -fsSL https://deb.nodesource.com/setup_22.x -o nodesource_setup.sh
bash nodesource_setup.sh
# Install Node.js
apt install -y nodejs
# Verify version
node -v
```
Make sure this prints `v22.x.x`.
---
### 4.3 Create a Dedicated User
Running this as root is unnecessary and risky.
```bash
adduser clawd
usermod -aG sudo clawd
```
Switch to the user:
```bash
su - clawd
```
---
### 4.4 Install Clawdbot
```bash
npm install -g clawdbot@latest
```
At this point, **do not** run the daemon installer. It will fail.
---
### 4.5 Why `systemd --user` Fails Here
Clawdbot normally installs itself as a user service.
In an unprivileged LXC:
- The user systemd instance isn't running
- The user D-Bus socket doesn't exist
The result is an error like:
> Failed to connect to user scope bus
This is expected.
The fix is to run Clawdbot as a **system service** that executes as the `clawd` user.
---
### 4.6 Create a Systemd Service
As root:
```bash
sudo nano /etc/systemd/system/clawdbot.service
```
Paste the following **unchanged**:
```ini
[Unit]
Description=Clawdbot Gateway Service
Documentation=https://github.com/clawdbot/clawdbot
After=network.target
[Service]
User=clawd
Group=clawd
Environment=HOME=/home/clawd
Environment=NODE_ENV=production
Environment=CLAWDBOT_GATEWAY_BIND=0.0.0.0
Environment=CLAWDBOT_GATEWAY_PORT=18789
ExecStart=/usr/bin/node /usr/lib/node_modules/clawdbot/dist/index.js gateway
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
```
Enable and start:
```bash
sudo systemctl daemon-reload
sudo systemctl enable clawdbot
sudo systemctl start clawdbot
```
Check status:
```bash
sudo systemctl status clawdbot
```
---
### 4.7 About `clawdbot doctor`
`clawdbot doctor` will complain about the daemon.
Ignore that part.
It only knows how to check user services.
Your service is working if `systemctl status` says it is.
---
## 5. Deployment Strategy B: Docker (Optional)
If you prefer containerized builds and immutable environments, Docker is a valid alternative.
### 5.1 Enable Nesting in Proxmox
For the LXC:
- Enable **nesting**
- Enable **keyctl**
---
### 5.2 Install Docker
```bash
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
```
---
### 5.3 Docker Compose Setup
Create directories:
```bash
mkdir -p ~/clawdbot-docker/config ~/clawdbot-docker/workspace
```
`docker-compose.yml`:
```yaml
services:
clawdbot:
image: ghcr.io/gsaraiva2109/clawdbot-build:latest
container_name: clawdbot
restart: unless-stopped
network_mode: host
environment:
- HOME=/home/node
- TERM=xterm-256color
- CLAWDBOT_GATEWAY_BIND=0.0.0.0
- CLAWDBOT_GATEWAY_PORT=18789
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
volumes:
- ./config:/home/node/.clawdbot
- ./workspace:/home/node/clawd
```
Host networking is recommended for mDNS discovery.
---
## 6. Networking and Gateway Access
### 6.1 Binding
By default, Clawdbot binds to localhost.
For headless setups, you must override this:
```bash
CLAWDBOT_GATEWAY_BIND=0.0.0.0
```
---
### 6.2 Secure Onboarding With SSH Tunnel
Do not expose the gateway publicly during setup.
From your workstation:
```bash
ssh -L 18789:127.0.0.1:18789 user@<lxc_ip>
```
Then open:
```
http://127.0.0.1:18789
```
---
## 7. Onboarding and Configuration
The wizard lets you:
- Name the agent
- Select the LLM provider
- Add API keys
- Pair Telegram or WhatsApp
All configuration is stored in:
```
~/.clawdbot/
```
This directory is the entire "brain" of the agent.
Back it up.
---
## 8. Operating the Agent
### 8.1 Logs
```bash
journalctl -u clawdbot -f
```
This shows:
- Model calls
- Tool execution
- Gateway activity
---
### 8.2 Messaging as a Terminal
Once connected, messaging platforms effectively become a remote shell.
This is powerful.
It is also dangerous if access is not restricted.
---
## 9. Security Basics (Do Not Skip)
### 9.1 Restrict Who Can Talk to the Bot
Use `allowFrom` in `clawdbot.json`:
```json
"telegram": {
"enable": true,
"token": "...",
"allowFrom": [123456789]
}
```
Without this, anyone who finds the bot can run commands.
---
### 9.2 Updates
**LXC install:**
```bash
npm install -g clawdbot@latest
systemctl restart clawdbot
```
**Docker:**
```bash
docker compose pull
docker compose up -d
```
---
## 10. Final Notes
Running Clawdbot on Proxmox turns your server from a passive box into an active participant. It can observe, reason, and act.
The biggest hurdle is not performance.
It's understanding where desktop assumptions break in server environments.
Once you address that, Clawdbot runs cleanly, predictably, and safely inside Proxmox.
---
## Related Resources
- [Proxmox VE Documentation](https://pve.proxmox.com/wiki/Main_Page)
- [Clawdbot GitHub Repository](https://github.com/clawdbot/clawdbot)
- [NodeSource Node.js Binary Distributions](https://github.com/nodesource/distributions)
- [r/Proxmox Community](https://www.reddit.com/r/Proxmox/)
Keep Exploring
Immich in Proxmox LXC: A Stability Gamble Worth Taking?
Running Immich in a Proxmox LXC container sounds elegant, but real-world experience reveals stability challenges. Here's what the community learned about LXC vs VM approaches.
Docker in LXC vs VMs on Proxmox: Why This Debate Refuses to Die in 2026
Docker in LXC or VM on Proxmox? Compare security, performance, backup behavior, and operational risk so you can pick the right model.
LXC Meets Docker? And Other Questions About Proxmox 9.1
Proxmox VE 9.1 introduces OCI image support for LXC containers and more. We answer the biggest questions about this release, from Docker-in-LXC fixes to TPM changes and upgrade stability.
Proxmox 9.1 Can 'Run Docker Containers'… but Not the Way You Think
Proxmox 9.1's new OCI container feature promises Docker-like functionality, but the reality is more nuanced. We dive into what actually works, what doesn't, and why this isn't the Docker replacement many hoped for.