Skip to main content

Installation

Complete installation guide for NanoClaw on macOS, Linux, and Windows (WSL).

System requirements

Operating system

  • macOS 11 (Big Sur) or later
  • Intel or Apple Silicon (M1/M2/M3)
  • 4GB RAM minimum, 8GB recommended
  • 2GB free disk space

Prerequisites

1. Node.js 20 or later

NanoClaw requires Node.js 20 or later.
Using Homebrew (recommended):
brew install node@22
Using nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install 22
nvm use 22
Verify installation:
node --version  # Should show v20.x or higher

2. Claude Code

Claude Code is required to run the /setup command and customize NanoClaw. Download from: claude.ai/download
  1. Download Claude Code for macOS
  2. Open the DMG file
  3. Drag Claude Code to Applications
  4. Launch Claude Code
  5. Sign in with your Anthropic account
Verify installation:
claude --version
You need a Claude Pro or Claude Team subscription, or an Anthropic API key.

3. Container runtime

Agents run in isolated containers. You need either Apple Container (macOS only) or Docker.
Apple Container is a lightweight, native macOS container runtime.Installation:
brew install container
Verify:
container --version
Benefits:
  • Native macOS integration
  • Lighter resource usage than Docker
  • Faster startup times
Apple Container is macOS-only. During setup, you can choose between Apple Container and Docker. Docker is the default and works on macOS, Linux, and Windows (via WSL2).

4. Build tools (for native modules)

NanoClaw uses better-sqlite3, which requires native compilation.
Install Xcode Command Line Tools:
xcode-select --install
Verify:
gcc --version

5. OneCLI (v1.2.22+)

Starting in v1.2.22, NanoClaw uses OneCLI for credential management. OneCLI is a local gateway that injects API keys into container traffic without exposing secrets.
curl -fsSL onecli.sh/install | sh
curl -fsSL onecli.sh/cli/install | sh
Verify installation:
onecli version
Run onecli --help to see all available commands for managing secrets and gateway configuration.
OneCLI is also installed automatically by the /setup skill if not already present. It’s listed here so you know about the dependency upfront.
What /setup handles for you: OneCLI installation, npm dependencies, container image build, channel configuration, and service setup. What you need beforehand: Node.js, Claude Code, a container runtime, and build tools.

Installation steps

Once all prerequisites are installed:
1

Fork and clone the repository

Fork qwibitai/nanoclaw on GitHub, then clone your fork:
git clone https://github.com/<you>/nanoclaw.git
cd nanoclaw
Forking gives you a remote to push your customizations to. A plain git clone works for trying things out — you can migrate to a fork later.
WSL users: Clone into the Linux filesystem (~/nanoclaw), not the Windows mount (/mnt/c/...). File operations on /mnt/c/ are significantly slower due to the 9P filesystem bridge.
2

Launch Claude Code

claude
3

Run setup

In Claude Code:
/setup
Claude will handle dependencies, container setup, marketplace plugin installation, and channel configuration automatically.At the end of setup, you’ll be asked about opt-in diagnostics. NanoClaw can send anonymized system info (version, OS, architecture, node version, channels selected) to help improve the project. You can choose Yes, No, or Never ask again. No personally identifiable information is collected.
See the Quick start guide for detailed setup instructions.

Docker sandbox one-liner

If you just want NanoClaw’s Docker sandboxes without the full setup:
curl -fsSL https://nanoclaw.dev/install-docker-sandboxes.sh | bash

Package dependencies

NanoClaw uses these core dependencies (from package.json):
{
  "dependencies": {
    "@onecli-sh/sdk": "^0.2.0",     // OneCLI gateway integration (v1.2.22+)
    "better-sqlite3": "^11.8.1",   // SQLite database
    "cron-parser": "^5.5.0",       // Task scheduling
    "pino": "^9.6.0",              // Logging
    "pino-pretty": "^13.0.0",      // Log formatting
    "yaml": "^2.8.2",              // YAML parsing
    "zod": "^4.3.6"                // Schema validation
  }
}
Channel-specific dependencies (e.g., @whiskeysockets/baileys for WhatsApp, grammy for Telegram) are added when you install a channel skill. Only core dependencies ship on main.
All dependencies are installed automatically by /setup via npm install.

Container image

The agent container includes:
  • Base: Node.js 24 (Debian slim)
  • Browser: Chromium with CJK and emoji font support
  • Claude Agent SDK: @anthropic-ai/claude-code (pre-installed)
  • Tools: agent-browser, bash, git, curl
  • User: Non-root node user (uid 1000)
The container is built during setup:
./container/build.sh
This creates the nanoclaw-agent image.

File structure

After installation, NanoClaw creates:
NanoClaw
src
dist
container
groups
main
CLAUDE.md
logs
store
messages.db
auth
data
sessions
logs
nanoclaw.log
nanoclaw.error.log
.env
package.json
External files:
  • ~/.config/nanoclaw/mount-allowlist.json - Mount permissions
  • ~/.config/nanoclaw/sender-allowlist.json - Sender access control (optional)
  • ~/Library/LaunchAgents/com.nanoclaw.plist (macOS) - Service config
  • ~/.config/systemd/user/nanoclaw.service (Linux/WSL with systemd) - Service config

Service management

NanoClaw runs as a background service:
# Start service
launchctl load ~/Library/LaunchAgents/com.nanoclaw.plist

# Stop service
launchctl unload ~/Library/LaunchAgents/com.nanoclaw.plist

# Restart service
launchctl kickstart -k gui/$(id -u)/com.nanoclaw

# Check status
launchctl list | grep nanoclaw

# View logs
tail -f ~/workspace/NanoClaw/logs/nanoclaw.log

Verification

Verify your installation:
# Check service is running
# macOS
launchctl list | grep nanoclaw

# Linux
systemctl --user status nanoclaw

# Check logs
tail -f logs/nanoclaw.log

# Test database
node -e "const db=require('./dist/db.js');console.log(db.getAllRegisteredGroups())"
Or ask Claude Code:
/debug

Troubleshooting

Node.js native module errors

# Rebuild native modules
npm rebuild

# Or reinstall dependencies
rm -rf node_modules package-lock.json
npm install

Container build fails

# Clear build cache
# Docker
docker builder prune -f

# Apple Container
container builder stop
container builder rm
container builder start

# Rebuild
./container/build.sh

Service won’t start

# Check error logs
cat logs/nanoclaw.error.log

# Verify Node.js path
which node

# Ensure .env exists
ls -la .env

# Rebuild and restart
npm run build
launchctl kickstart -k gui/$(id -u)/com.nanoclaw

WSL-specific issues

Docker not found in WSL: Ensure Docker Desktop’s WSL integration is enabled (Settings > Resources > WSL Integration). Verify with:
docker --version
If Docker Desktop is running but WSL can’t find it, restart WSL:
# In PowerShell (not WSL)
wsl --shutdown
Slow file operations: If builds or installs are slow, you may have cloned into /mnt/c/. Move to the Linux filesystem:
mv /mnt/c/Users/you/nanoclaw ~/nanoclaw
cd ~/nanoclaw
getuid warnings: On native Windows (without WSL), process.getuid() is unavailable. The container runner handles this gracefully — the warning is informational and can be ignored. Inside WSL, getuid works normally.

Docker group permission issues (Linux)

If you see “permission denied” errors:
# Immediate fix
sudo setfacl -m u:$USER:rw /var/run/docker.sock

# Persistent fix
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/socket-acl.conf << EOF
[Service]
ExecStartPost=/usr/bin/setfacl -m u:$USER:rw /var/run/docker.sock
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Next steps

Quick start

Complete the setup process

Security

Learn about container isolation

Customizing

Modify NanoClaw for your needs

Troubleshooting

Fix common issues
Last modified on March 24, 2026