Skip to main content
NullClaw provides production-ready Docker images optimized for minimal size and security.

Quick Start

1

Pull the image

2

Run the gateway

3

Verify it's running

Building from Source

The Dockerfile uses a multi-stage build optimized for binary size:
Build locally:

Multi-architecture Builds

The Dockerfile supports both AMD64 and ARM64:
The TARGETARCH argument automatically selects the correct Zig target:
  • amd64x86_64-linux-musl
  • arm64aarch64-linux-musl

Environment Variables

string
required
Your AI provider API key
string
default:"/nullclaw-data/workspace"
Workspace directory for agent operations
string
default:"/nullclaw-data"
Home directory for config and data
string
default:"3000"
Gateway HTTP port

Docker Compose

For production deployments, use docker-compose:

Running Services

Security Modes

NullClaw provides two Docker build targets:

Safe Default (Non-root)

Runs as user 65534:65534 (nobody). This is the default.
Non-root mode cannot install packages or modify system files. Use this for production.

Autonomous Mode (Root)

Runs as root with full system access. Requires explicit opt-in.
Only use root mode if your agent needs system-level operations. This allows the AI to install packages, modify system files, and spawn processes with elevated privileges.

Configuration

The Docker image includes a default config at /nullclaw-data/.nullclaw/config.json:
Override with your own config:

Persistent Storage

Use named volumes to persist data across container restarts:
The volume contains:
  • ~/.nullclaw/config.json - Configuration
  • ~/.nullclaw/memory.db - SQLite memory backend
  • ~/workspace/ - Agent workspace files

Health Checks

The gateway exposes a /health endpoint:
Response:
Docker Compose includes automatic health checks:

Logging

View container logs:
With docker-compose:

Resource Limits

NullClaw is designed for minimal resource usage:
  • Binary size: < 1 MB (ReleaseSmall)
  • Memory footprint: < 5 MB peak RSS
  • Zero dependencies beyond libc
Set container limits:
Or in docker-compose: