How to Set Up HolyClaude: A 5-Minute AI Development Workstation Tutorial
Step-by-step guide to setting up HolyClaude — your containerized AI coding workstation with Claude Code, web UI, and 8 AI CLI providers.
You're 5 Minutes Away From a Fully Functional AI Coding Workstation
I timed it. From zero to having Claude Code running in a browser with Playwright, a headless Chromium, and 8 AI CLI providers — 4 minutes and 23 seconds. That includes Docker pulling the image.
Here's how to do it yourself.
🚀 Want to deploy HolyClaude yourself?
Docker configs, system requirements, and installation guides — all on one page.
View HolyClaude Tool Page →Prerequisites
- Docker Engine 24+ with Compose V2 (docker compose, not docker-compose)
- At least 4 GB RAM on your host (8 GB recommended if you're actually coding in there)
- 5 GB free disk for the full image (~4.1 GB compressed, larger unpacked)
- An Anthropic account with Claude Max/Pro subscription or an API key
This works on Linux (AMD64 and ARM64), macOS via Docker Desktop, and even Synology/QNAP NAS. I tested it on an Oracle Cloud ARM instance with 4 GB RAM and it runs smoothly.
Step 1: Create Your Project Folder
mkdir holyclaude && cd holyclaude
I keep mine at ~/docker/holyclaude/ but honestly, put it wherever you want. The container will create two folders inside: data/ for your Claude credentials and memory, and workspace/ for your code.
Step 2: Create docker-compose.yaml
Here's the quick-start template — minimal, zero config, just works:
services:
holyclaude:
image: coderluii/holyclaude:latest
container_name: holyclaude
hostname: holyclaude
restart: unless-stopped
shm_size: 2g
network_mode: bridge
cap_add:
- SYS_ADMIN
- SYS_PTRACE
security_opt:
- seccomp=unconfined
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data/claude:/home/claude/.claude
- ./workspace:/workspace
Why 127.0.0.1:3001? This binds the web UI to localhost only. If you want to access it from other devices on your network, change it to "0.0.0.0:3001:3001" — but then your AI workstation is accessible to anyone who knows your IP. If you need remote access, use Tailscale or Cloudflare Tunnel instead. Don't just port-forward it.
shm_size: 2g — I lost 30 minutes the first time because Chromium needs shared memory and Docker defaults to 64 MB. This is pre-solved here.
Step 3: Pull and Start
docker compose up -d
This pulls the image and starts the container. The first pull is ~4.1 GB (compressed), so go make a coffee. Subsequent pulls are only the changed layers.
Step 4: Open the Web UI
http://localhost:3001
You should see the CloudCLI login screen. If you don't, check that the container started:
docker logs holyclaude
If you see "CloudCLI is running on port 3001" — you're golden.
Step 5: Authenticate
Create a CloudCLI account (takes about 10 seconds — email + password). Then sign in with your Anthropic account (the same OAuth flow you use for desktop Claude Code).
If you use an API key instead of a subscription, paste it in the settings panel. Both work the same way.
| Auth Method | How It Works | Cost |
|---|---|---|
| Claude Max/Pro | Sign in through CloudCLI OAuth | Your existing subscription |
| API Key | Paste in web UI settings | Pay-per-use (standard Anthropic rates) |
| Codex CLI | codex login --device-auth | ChatGPT Plus/Pro works here too |
Step 6: Start Building
Once authenticated, you're in a full terminal environment inside the container. Everything is ready:
claude— Claude Code CLI (just works)codex— OpenAI Codex (if you authenticated)gemini— Google Gemini CLI (set GEMINI_API_KEY)cursor— Cursor CLI- Python, Node.js, TypeScript, git, gh, and 50+ other tools
Common Pitfalls (And How I Avoided Them)
I almost gave up because bind mounts weren't working. If your ./workspace folder has weird permissions inside the container, check that your UID/GID on the host match. The container runs as claude user (UID 1000 by default). If your host UID is different, add PUID and PGID environment variables to the compose file.
Chromium still failing? Double-check that shm_size: 2g is set and seccomp=unconfined is in security_opt. These two lines alone saved me hours of debugging.
Updating
docker compose pull
docker compose up -d
That's it. Your credentials in ./data/claude/ survive the update. Your workspace files survive. Even Claude's memory persists. The only thing that changes is the container image.
Final Tips
Use the slim tag (coderluii/holyclaude:slim) if disk space is tight — it's ~2.4 GB instead of 4.1 GB. Claude installs missing tools on demand, which takes a few seconds but saves bandwidth.
If you're running on a NAS with SMB mounts, add CHOKIDAR_USEPOLLING=true as an environment variable. File watching doesn't work on network filesystems without polling.
That's it. Four steps. Five minutes. One AI development workstation that actually works.
🚀 Explore HolyClaude on Run This Ai
Docker Compose configs, system requirements, installation guides, and more — all in one place.
View HolyClaude Tool Page →