Skip to main content
NanoClaw is a lightweight, self-hosted AI assistant that runs on WhatsApp and Telegram. This fork adds Venice AI support so everything runs privately without an Anthropic subscription.

Pay Per Token

No subscription. Pay only for what you use

Private Inference

Zero data retention on Venice servers

Docker Isolation

Each chat runs in its own secure container

Why NanoClaw?

NanoClaw is a clean, minimal alternative to larger platforms like OpenClaw. It’s designed for one person running one bot.
FeatureNanoClawOpenClaw
Codebase~2,000 lines~500,000 lines
Dependencies~15 packages70+ packages
SecurityDocker container isolationApplication-level allowlists
SetupOne wizard, ~10 minutesManual multi-step config
Target userOne person, one botMulti-user platform

What You Get

  • Personal AI assistant on Telegram and/or WhatsApp
  • Powered by Venice AI — no Anthropic account needed
  • Bot runs in an isolated Docker container
  • Model switching — tell the bot “switch to zai-org-glm-5” or “use opus” anytime
  • Scheduled tasks — set reminders, recurring tasks
  • Web search and browsing built in
  • Markdown formatting in Telegram messages

Prerequisites

For Telegram (recommended for first-time users):
  1. Open Telegram and search for @BotFather
  2. Send /newbot and follow the prompts
  3. Save the token BotFather gives you (looks like 123456789:ABCdef...)

Setup

The setup takes about 10 minutes. You’ll need two Terminal windows open side by side.
1

Clone and Install

Open Terminal and run:
git clone https://github.com/lorenzovenice/nanoclaw-venice.git
cd nanoclaw-venice
npm install
Wait for npm install to finish with no errors.
2

Start the Venice Proxy

The proxy translates between Claude Code and Venice AI. It needs to stay running.Replace your-key with your Venice API key and run:
VENICE_API_KEY=your-key npm run proxy
You should see:
Venice API proxy listening on http://localhost:4001
Forwarding to: https://api.venice.ai/api/v1
Leave this terminal window open. Don’t close it — the proxy needs to keep running.
3

Launch Claude Code

Open a second Terminal window (Cmd+N on macOS, Ctrl+Shift+N on Linux).Navigate to the project folder and start Claude Code with Venice routing:
cd nanoclaw-venice
ANTHROPIC_BASE_URL=http://localhost:4001 ANTHROPIC_API_KEY=venice-proxy claude
If prompted “Do you want to use this API key?” — select Yes.
4

Run the Setup Wizard

In your Claude Code terminal, type:
/setup
The wizard walks you through:
  1. Bootstrap — checks Node.js and dependencies
  2. Venice API key — validates and saves your key
  3. Channel choice — pick WhatsApp, Telegram, or both
  4. Container build — builds the Docker container (takes a few minutes first time)
  5. WhatsApp auth — scan QR code with your phone (if applicable)
  6. Telegram setup — send a message to your bot so it detects your chat
  7. Trigger word — prefix that activates the bot (default: @Andy)
  8. Mount directories — pick “No” for now (you can add file access later)
  9. Start service — NanoClaw starts running in the background
If the wizard stops between steps, type “continue” or “next step” to nudge it forward.
5

Start Chatting

Once setup is complete, open your chat (Telegram or WhatsApp) and send:
@Andy hello, are you there?
The bot should respond within seconds. In your main channel, you can type normally without the @Andy prefix.You can now close both terminal windows. The bot runs as a background service.

How It Works

There are two layers to NanoClaw:
LayerWhat It Does
Claude Code CLIAdmin tool for setup, debugging, and customization
The BotAI in your chat, running inside an isolated Docker container
To open Claude Code anytime:
cd nanoclaw-venice
ANTHROPIC_BASE_URL=http://localhost:4001 ANTHROPIC_API_KEY=venice-proxy claude

Models

ContextDefault ModelHow to Switch
Bot (in chat)claude-sonnet-4-6Tell the bot: “switch to opus” or “use zai-org-glm-5”
Claude Code CLIclaude-opus-4-6Use /model in Claude Code
See the model catalog for all available Venice models.

Troubleshooting

The proxy can occasionally crash on connection errors. To restart:
cd nanoclaw-venice
VENICE_API_KEY=your-key npm run proxy
For auto-restart, install pm2:
npm install -g pm2
cd nanoclaw-venice
VENICE_API_KEY=your-key pm2 start "npx tsx proxy/venice-proxy.ts" --name venice-proxy
Now pm2 keeps the proxy running and restarts it if it crashes.
ActionCommand
Check statuspm2 status
View logspm2 logs venice-proxy
Restartpm2 restart venice-proxy
Stoppm2 stop venice-proxy
This means Claude Code can’t connect to the Venice proxy.
  1. Check the proxy is running. Look at the Terminal window — it should show Venice API proxy listening on http://localhost:4001.
  2. Make sure you’re in the right folder. Always cd nanoclaw-venice first.
  3. Start fresh: Close all terminals and restart both the proxy and Claude Code.
Restart the proxy and the bot:
# Restart proxy
cd nanoclaw-venice
VENICE_API_KEY=your-key npm run proxy

# Restart bot (new terminal)
# macOS:
launchctl kickstart -k gui/$(id -u)/com.nanoclaw
# Linux:
systemctl --user restart nanoclaw
Check available models at the model catalog.
  1. Check your trigger word. Make sure you’re using the right prefix (e.g., @Andy hello).
  2. Check Docker is running. Run docker info — if it errors, open Docker Desktop.
  3. Check the proxy is running. Should show Venice API proxy listening...
  4. Check logs: tail -f logs/nanoclaw.log in the project folder.
  5. Restart everything: Restart both proxy and bot (see above).
Make sure Docker Desktop is open and running. Wait 10 seconds for Docker to fully start, then type continue in the wizard to retry.
Your WhatsApp session can expire. To reconnect:
cd nanoclaw-venice
npm run auth
Scan the QR code with WhatsApp (Settings → Linked Devices → Link a Device), then restart the bot.

Advanced

By default, the bot is completely walled off from your computer. To share folders:
  • During setup: When asked about directory access, choose “Yes”
  • After setup: Run /customize in Claude Code
The bot runs as a background service. To control it manually:macOS:
ActionCommand
Startlaunchctl load ~/Library/LaunchAgents/com.nanoclaw.plist
Stoplaunchctl unload ~/Library/LaunchAgents/com.nanoclaw.plist
Restartlaunchctl kickstart -k gui/$(id -u)/com.nanoclaw
Linux:
ActionCommand
Startsystemctl --user start nanoclaw
Stopsystemctl --user stop nanoclaw
Restartsystemctl --user restart nanoclaw
If you just want Claude Code with Venice and don’t need WhatsApp/Telegram:Terminal 1:
cd nanoclaw-venice
VENICE_API_KEY=your-key npm run proxy
Terminal 2:
cd nanoclaw-venice
ANTHROPIC_BASE_URL=http://localhost:4001 ANTHROPIC_API_KEY=venice-proxy claude

Architecture

You (WhatsApp/Telegram)

   NanoClaw (Node.js)

   Docker Container (isolated sandbox)

   Venice Proxy (localhost:4001)

   api.venice.ai (private inference)
FilePurpose
proxy/venice-proxy.tsTranslates Anthropic format to OpenAI format for Venice
src/index.tsMain orchestrator — message loop, agent invocation
src/channels/whatsapp.tsWhatsApp connection via baileys
src/channels/telegram.tsTelegram bot via grammy
src/container-runner.tsSpawns isolated agent containers

FAQ

The Claude Agent SDK speaks Anthropic’s message format. Venice speaks OpenAI’s format. The proxy translates between them.
Yes. Tell the bot “switch to zai-org-glm-5” or any Venice model ID. See the model catalog.
Agents run in Docker containers with OS-level isolation. The Venice API key is passed via stdin, never written to disk inside containers. Each group gets its own isolated environment.
No. Everything runs through Venice AI. You only need a Venice API key.
Yes. It works on any Linux machine with Docker. Use the systemd service for auto-start on boot.

Resources