Post

Self-Hosting an AI Assistant: Part 3 - Installing OpenClaw

Installing Node.js 22 and OpenClaw on WOPR to bring Joshua to life.

Self-Hosting an AI Assistant: Part 3 - Installing OpenClaw

With WOPR hardened, it’s time to install OpenClaw - the framework that will power Joshua, my self-hosted AI assistant.

Why OpenClaw

I wanted an AI assistant I could interact with naturally via Discord - something that runs 24/7 on my own hardware, uses my own API keys, and gives me full control. OpenClaw fits that niche. It’s essentially a bridge between chat platforms and LLM APIs, with the ability to execute tasks, manage files, and run automation.

The name Joshua comes from WarGames, naturally. “Shall we play a game?”

Node.js 22

OpenClaw requires Node.js 22+. Ubuntu’s default repos have an older version, so we’ll use NodeSource:

1
2
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs

Verify the installation:

1
2
node --version
npm --version

You should see something like:

1
2
v22.22.0
10.9.4

Install OpenClaw

With Node.js in place, install OpenClaw globally:

1
sudo npm install -g openclaw@latest

Then run the onboarding wizard with the daemon flag to set it up as a background service:

1
openclaw onboard --install-daemon

This walks you through initial configuration and installs a systemd service so Joshua starts automatically when WOPR boots.

Daemon Management

Once installed, you can manage Joshua with these commands:

Task Command
Start daemon openclaw daemon start
Stop daemon openclaw daemon stop
Check status systemctl status openclaw
View logs openclaw logs
Check model status openclaw models status

The config lives in ~/.openclaw/:

1
2
3
~/.openclaw/
├── openclaw.json                          # Main config
└── agents/main/agent/auth-profiles.json   # API credentials

Dashboard Access

OpenClaw runs a local dashboard on port 18789. Since WOPR is headless, use an SSH tunnel to access it:

1
ssh -N -L 18789:127.0.0.1:18789 lightman@192.168.2.89

Then open http://localhost:18789 in your browser. The onboarding process will give you a token to append to the URL for authentication.

Next Up

Joshua is installed but not yet connected to anything useful. Next post covers setting up a Discord bot so I can actually talk to him. “Greetings, Professor Falken.”


This post was co-written with Claude, who will soon be the brain behind Joshua.

This post is licensed under CC BY 4.0 by the author.