Back when OpenClaw was super popular, I wasn’t really a fan of using Node for deployment. The subsequent security vulnerabilities confirmed my doubts. Now, there are plenty of great forks. Since I prefer lightweight setups, I went with the lighter ZeroClaw.
Since I’m deploying my own AI assistant, I don’t want my data uploaded to the cloud. So, the goal this time is to build a fully local private assistant.
Overview
To keep everything fully local, I’ll use Ollama for hosting local models. Communication will go through a Matrix server running on my NAS. For clients on phones and PCs, I’ll use Element. Although Element has a web client, I couldn’t get it working due to configuration issues, so I’ll skip that for now.
I also tried setting up multi-container instances and building an MCP server. Since it’s isolated in a container, I gave ZeroClaw full permissions.
Compiling ZeroClaw
Install Rust. Head over to
https://rustup.rs/
, download rustup-init.exe, and run it. Press 1 for the default install. You will need Visual Studio and its build tools installed during this process.
Clone the official ZeroClaw repo:
| |
Run setup.bat to start the installation. Choose the version you want; if you are not sure, go with the standard install.
By the way, I fixed the Windows path installation issue. My very first PR! (●’◡’●)
Also, there’s a bug in how the official installer writes the PATH environment variable. After installing, open PowerShell and run this (too lazy to PR this small bug):
| |
Then close the terminal.
Deploying Local Models
Install Scoop. Open PowerShell and run:
| |
Add the extras bucket and install ollama:
| |
Run the Qwen2.5-coder-7b-instruct-Q4_K_M model (you can also do this after installing ZeroClaw):
| |
Once you see success and the interactive prompt, you’re good to go. It runs on http://127.0.0.1:11434 by default.
Matrix Deployment
Deploy a Synapse server using Docker, then connect using Element.
First, generate the configuration file:
| |
Open data/homeserver.yaml and tweak the config. For example:
| |
Create your docker-compose.yml:
| |
Spin up the container:
| |
Grab the client from the Element official website , connect to your server, register an account, and start chatting.
Create a dedicated account for claw. Go to settings. You can find the Access Token at the bottom of “Help & About”, the recovery key under “Encryption”, and your Username (which is your user-id) on the Account page.
Configuring ZeroClaw
Launch the GUI onboarding:
| |
Just follow the steps based on your setup. Here are some key points:
Select Ollama, enter your custom model name, put a dummy API Key (like sk-local), select the model, and keep the rest default. Note: I recommend enabling sandbox-enabled and setting sandbox-backend to docker.
In the claw configuration, I recommend turning on interrupt-on-new-message so you can interrupt running tasks with a new message.
Start the agent:
| |
Start the channel to listen to Matrix:
| |
Matrix Configuration Issues
I’m not sure if I missed a setting, but for allowed users, you need to create a group. Add this to your configuration file:
| |
Of course, you can configure other parts separately using the GUI helpers:
- agent
| |
- channel
| |
Local MCP
I wrote an MCP server to hook up some local services, including image generation, TTS, and printer services.
For image generation, it supports local generation (via ComfyUI) and OpenAI’s DALL-E 2. Other services are untested for now. I haven’t decided on a TTS service yet, and the printer integration is more of a “nice-to-have” than a necessity.
Check out my GitHub repo for details:
Docker Multi-instances
Since ZeroClaw currently only supports listening to one Matrix account per channel instance, I set up multi-container deployment to handle different Matrix accounts. I also added features like random wake-ups and multi-message detection. The official Docker image is still stuck at 0.7.5 (probably waiting for 0.8.0), so I built my own image locally. Configuration files have changed quite a bit since 0.7.5, so I don’t recommend using the official 0.7.5 image.