**English** | [Español](docs/translations/README.es.md) | [Français](docs/translations/README.fr.md) | [Italiano](docs/translations/README.it.md) | [Português](docs/translations/README.pt.md) | [Deutsch](docs/translations/README.de.md) | [Русский](docs/translations/README.ru.md) | [हिन्दी](docs/translations/README.hi.md) | [中文](docs/translations/README.zh.md) | [日本語](docs/translations/README.ja.md) | [한국어](docs/translations/README.ko.md)
#
HolyClaude
### Stop configuring. Start building.
One command. Full AI development workstation. Claude Code, web UI, headless browser, 8 AI CLIs, 50+ dev tools — containerized and ready.
**You were going to spend 2 hours setting this up manually. Or you could just `docker compose up`.**
**Works with your existing Claude Code subscription.** Max/Pro plan, API key — whatever you have, it just works.
> [!TIP]
> **Stop maintaining. Start building.**
>
> A hosted AI workstation. Always-on Linux box.
>
> [holycode.cloud](https://holycode.cloud/?ref=hclaude-readme)
---
## What is this?
You know the drill. You want Claude Code. But you also want it in a browser. With a headless browser for screenshots and testing. With Playwright configured. With every AI CLI. With TypeScript, Python, deployment tools, database clients, GitHub CLI.
v1.6.1 refreshes Claude Code, Cursor Agent, deployment tools, Python utilities and the pinned security overlays. It also adds an opt-in Full-derived Docker client recipe and a read-only Synology link-loop diagnostic. The stock images still ship without Docker CLI, and existing link loops still need a separate recovery step.
Release-sensitive facts are also published in [`contracts/product-facts.json`](contracts/product-facts.json). The release workflow checks that contract against the Dockerfile and Compose files before building images.
So you start installing things. One by one. Then Chromium won't launch because Docker's shared memory is 64MB. Then Xvfb isn't configured. Then the UID inside the container doesn't match your host and everything is permission denied. Then you realize Claude Code's installer hangs when WORKDIR is root-owned. Then SQLite locks on your NAS mount. Then—
**HolyClaude is the container I built after solving every single one of those problems.**
I've been running this daily on my own server for weeks. Every bug has been hit, diagnosed, and fixed. Every edge case has been handled. Every "why doesn't this work in Docker" has been answered.
You pull it. You run it. You open your browser. You build.
### :credit_card: Use Your Existing Subscription
**This runs the real Claude Code CLI.** Not a wrapper. Not a proxy. Not a knock-off.
Your existing Anthropic account works directly:
- **Claude Max/Pro plan** — authenticate through the web UI (OAuth), same as desktop Claude Code
- **Anthropic API key** — set it through the web UI, same billing as always
- **No extra cost** — HolyClaude is free and open source. You only pay Anthropic for what you use, like you already do.
> HolyClaude operates no credential relay. Bundled tools read credentials from container files, bind mounts, or environment variables, then contact the providers you configure directly.
↑ back to top
---
## Table of Contents
| | Section |
|---|---|
| :zap: | [Quick Start](#zap-quick-start) |
| :computer: | [Platform Support](#computer-platform-support) |
| :star2: | [Why HolyClaude](#star2-why-holyclaude) |
| :credit_card: | [Subscription & Authentication](#credit_card-subscription--authentication) |
| :package: | [Image Variants](#package-image-variants) |
| :whale: | [Docker Compose — Quick](#whale-docker-compose--quick) |
| :whale2: | [Docker Compose — Full](#whale2-docker-compose--full) |
| :wrench: | [Environment Variables](#wrench-environment-variables) |
| :rocket: | [What's Inside](#rocket-whats-inside) |
| :robot: | [AI CLI Providers](#robot-ai-cli-providers) |
| :mag: | [Desloppify](#mag-desloppify) |
| :llama: | [Using Ollama](#llama-using-ollama) |
| :building_construction: | [Architecture](#building_construction-architecture) |
| :file_folder: | [Project Structure](#file_folder-project-structure) |
| :floppy_disk: | [Data & Persistence](#floppy_disk-data--persistence) |
| :lock: | [Permissions](#lock-permissions) |
| :shield: | [Remote Access & Exposure](#shield-remote-access--exposure) |
| :bell: | [Notifications](#bell-notifications) |
| :arrows_counterclockwise: | [Upgrading](#arrows_counterclockwise-upgrading) |
| :construction: | [Troubleshooting](#construction-troubleshooting) |
| :warning: | [Known Issues](#warning-known-issues) |
| :hammer_and_wrench: | [Building Locally](#hammer_and_wrench-building-locally) |
| :bar_chart: | [Alternatives](#bar_chart-alternatives) |
| :rocket: | [Roadmap](#rocket-roadmap) |
| :trophy: | [Built with HolyClaude](#trophy-built-with-holyclaude) |
| :handshake: | [Contributing](#handshake-contributing) |
| :heart: | [Support](#heart-support) |
| :scroll: | [Third-Party Software](#scroll-third-party-software) |
| :page_facing_up: | [License](#page_facing_up-license) |
↑ back to top
---
## :zap: Quick Start
**1.** Create a folder for HolyClaude:
```bash
mkdir holyclaude && cd holyclaude
```
**2.** Create a `docker-compose.yaml` file. Copy one of the templates below:
- [Quick template](#whale-docker-compose--quick) — minimal, zero config, just works
- [Full template](#whale2-docker-compose--full) — all options, fully documented
**3.** Pull and start:
```bash
docker compose up -d
```
**4.** Open the web UI:
```
http://localhost:3001
```
**5.** Create a CloudCLI account (takes 10 seconds), sign in with your Anthropic account, and you're live.
> No `.env` files. No pre-configuration. No reading 40 pages of docs before you can start. It just runs.
> **Want to reach it from outside your network?** Don't port-forward it. See [Remote Access & Exposure](#shield-remote-access--exposure) — use Tailscale or Cloudflare Tunnel instead.
↑ back to top
---
## :computer: Platform Support
| Platform | Status | Notes |
|----------|--------|-------|
| Linux (amd64) | ✅ Fully supported | Native performance, recommended |
| Linux (arm64) | ✅ Fully supported | Raspberry Pi 4+, Oracle Cloud, AWS Graviton |
| macOS (Docker Desktop) | ✅ Fully supported | Apple Silicon & Intel via Docker Desktop |
| Windows (WSL2 + Docker Desktop) | ✅ Fully supported | Requires WSL2 backend |
| Synology / QNAP NAS | ✅ Fully supported | Use `CHOKIDAR_USEPOLLING=true` for SMB mounts |
| Kubernetes | Coming soon | Helm chart planned |
↑ back to top
---
## :star2: Why HolyClaude
I built this because I was tired of re-doing the same setup every time. Installing Claude Code, wiring up a web UI, configuring Chromium in Docker, fixing permission issues, debugging process supervision. Every time.
So I made a container that does all of it. And then I hit every possible bug so you don't have to.
| | HolyClaude | Doing it yourself |
|---|---|---|
| **Setup** | 30 seconds | 1-2 hours (if it goes well) |
| **Claude Code** | Pre-installed, pre-configured, ready | Install, configure, debug installer hanging, fix WORKDIR |
| **Web UI** | CloudCLI included with plugins | Find a web UI, install it, configure it, wire it to Claude |
| **Headless browser** | Chromium + Xvfb + Playwright, configured | Install Chromium, install Xvfb, configure display :99, fix shm, fix sandbox, fix seccomp... |
| **AI CLIs** | 8 providers, one container | Install each one separately across 3 package managers |
| **Dev tools** | 50+ tools, ready | `apt-get install` / `npm i -g` / `pip install` for the next hour |
| **Process management** | s6-overlay (auto-restart, graceful shutdown) | Write your own supervisord config or hope Docker restart works |
| **Persistence** | Bind-mounted tool config and workspace survive rebuilds | Figure out Docker volumes, debug "why is this a directory not a file" |
| **Updates** | `docker compose pull && docker compose up -d` | Update 50 tools manually, pray nothing breaks |
| **Multi-arch** | AMD64 + ARM64 | Pray your Dockerfile builds on ARM |
**The last row of every manual setup is "works on my machine."** HolyClaude works on every machine.
↑ back to top
---
## :credit_card: Subscription & Authentication
HolyClaude runs the **official Claude Code CLI** from Anthropic. Your existing account works out of the box.
### What works:
| Authentication method | How | Cost |
|----------------------|-----|------|
| **Claude Max/Pro plan** (subscription) | Sign in through CloudCLI web UI — same OAuth flow as desktop | Your existing subscription, no extra charge |
| **Anthropic API key** | Paste your API key in the web UI | Pay-per-use, same Anthropic billing |
### What doesn't work:
| | Why |
|---|---|
| OpenAI API key for Claude | Different company, different API. OpenAI keys work with the **Codex CLI** (also pre-installed) |
> **ChatGPT Plus/Pro subscribers:** Your subscription works with the **Codex CLI**. Run `codex login --device-auth` inside the container to authenticate with your ChatGPT account. If you need Codex's browser callback flow from your host, expose port `1455` in the full compose template below.
### Other AI CLIs included:
| CLI | What you need |
|-----|--------------|
| Gemini CLI | Google AI API key (`GEMINI_API_KEY`) |
| OpenAI Codex | OpenAI API key (`OPENAI_API_KEY`) or ChatGPT Plus/Pro subscription (`codex login --device-auth`) |
| Cursor | Cursor API key (`CURSOR_API_KEY`) |
| TaskMaster AI | Uses your AI provider keys (Anthropic, OpenAI, etc.) |
| Junie | JetBrains account (JetBrains AI subscription) |
| OpenCode | Configure via `opencode` TUI (OpenRouter and other providers) |
| Pi Coding Agent | Configure through `pi` (supports multiple providers) |
> **HolyClaude is free and open source.** You only pay your AI providers for usage, same as you already do. HolyClaude does not relay provider credentials. Bundled tools read them from container files, bind mounts, or environment variables and contact providers directly.
↑ back to top
---
## :package: Image Variants
Two flavors. Same quality. Pick your weight class.
| Tag | What you get | Best for | Docker Hub compressed size |
|-----|-------------|----------|----------------------------|
| **`latest`** | Everything pre-installed — every tool, every library, every CLI | Most users. Zero wait time. Claude never has to stop and install something. | [Check by architecture](https://hub.docker.com/r/coderluii/holyclaude/tags?name=latest) |
| **`slim`** | Core tools only — Claude installs extras on-demand | Smaller VPS, limited disk, metered bandwidth | [Check by architecture](https://hub.docker.com/r/coderluii/holyclaude/tags?name=slim) |
| `X.Y.Z` | Full image, pinned version | Production stability — you control when to update | Same as `latest` for that release |
| `X.Y.Z-slim` | Slim image, pinned version | Production + small footprint | Same as `slim` for that release |
```bash
# Full — batteries included (recommended)
docker pull coderluii/holyclaude
# Slim — lean and mean
docker pull coderluii/holyclaude:slim
```
> **`latest` is always the full image.** Slim users: don't worry — when you ask Claude to do something that needs a missing tool, it installs it in seconds. You get the same capabilities, just with a smaller initial download.
>
> Download size varies by release and architecture; check the matching tag on Docker Hub. It reports compressed transfer size. Docker, Synology Container Manager, and NAS filesystems can show a larger unpacked size after layers are extracted. Use `slim` when disk space or bandwidth matters more than having every tool ready on first boot.
↑ back to top</