🌍 English | Español | Français | Italiano | Português | Deutsch | Русский | हिन्दी | 中文 | 日本語 | 한국어
Une commande. Un poste de travail IA complet. Claude Code, interface web, navigateur headless, 7 CLI IA, 50+ outils de développement — containerisé et prêt à l'emploi.
Vous alliez passer 2 heures à tout installer manuellement. Ou vous pouvez simplement faire docker compose up.
Fonctionne avec votre abonnement Claude Code existant. Plan Max/Pro, clé API — quoi que vous ayez, ça marche directement.
Vous connaissez la chanson. Vous voulez Claude Code. Mais vous le voulez aussi dans un navigateur. Avec un navigateur headless pour les captures d'écran et les tests. Avec Playwright configuré. Avec tous les CLI IA. Avec TypeScript, Python, des outils de déploiement, des clients de bases de données, GitHub CLI.
Alors vous commencez à installer les choses. Une par une. Puis Chromium refuse de se lancer parce que la mémoire partagée de Docker fait 64 Mo. Puis Xvfb n'est pas configuré. Puis l'UID à l'intérieur du conteneur ne correspond pas à votre hôte et tout renvoie "permission denied". Puis vous réalisez que l'installateur de Claude Code se bloque quand WORKDIR appartient à root. Puis SQLite se bloque sur votre montage NAS. Puis —
HolyClaude est le conteneur que j'ai construit après avoir résolu chacun de ces problèmes.
Je l'utilise quotidiennement sur mon propre serveur depuis des semaines. Chaque bug a été rencontré, diagnostiqué et corrigé. Chaque cas limite a été traité. Chaque "pourquoi ça ne fonctionne pas dans Docker" a trouvé sa réponse.
Vous le téléchargez. Vous le lancez. Vous ouvrez votre navigateur. Vous construisez.
Ceci exécute le vrai Claude Code CLI d'Anthropic. Pas un wrapper. Pas un proxy. Pas une copie.
Votre compte Anthropic existant fonctionne directement :
- Plan Claude Max/Pro — authentification via l'interface web (OAuth), identique à Claude Code sur le bureau
- Clé API Anthropic — saisissez votre clé API dans l'interface web, même facturation qu'habituellement
- Aucun coût supplémentaire — HolyClaude est gratuit et open source. Vous ne payez Anthropic que pour ce que vous utilisez, comme vous le faites déjà.
HolyClaude ne touche pas à vos identifiants. Ils sont stockés localement dans votre volume bind-monté (
./data/claude/), exactement comme ils le seraient sur un système nu.
1. Créez un dossier pour HolyClaude :
mkdir holyclaude && cd holyclaude2. Créez un fichier docker-compose.yaml. Copiez l'un des modèles ci-dessous :
- Modèle rapide — minimal, zéro configuration, fonctionne directement
- Modèle complet — toutes les options, entièrement documenté
3. Téléchargez et démarrez :
docker compose up -d4. Ouvrez l'interface web :
http://localhost:30015. Créez un compte CloudCLI (ça prend 10 secondes), connectez-vous avec votre compte Anthropic, et c'est parti.
Pas de fichiers
.env. Pas de préconfiguration. Pas besoin de lire 40 pages de documentation avant de pouvoir commencer. Ça fonctionne, c'est tout.
Vous voulez y accéder depuis l'extérieur de votre réseau ? Ne faites pas de port-forward. Consultez Accès distant et exposition — utilisez Tailscale ou Cloudflare Tunnel à la place.
| Plateforme | Statut | Notes |
|---|---|---|
| Linux (amd64) | ✅ Entièrement supporté | Performances natives, recommandé |
| Linux (arm64) | ✅ Entièrement supporté | Raspberry Pi 4+, Oracle Cloud, AWS Graviton |
| macOS (Docker Desktop) | ✅ Entièrement supporté | Apple Silicon et Intel via Docker Desktop |
| Windows (WSL2 + Docker Desktop) | ✅ Entièrement supporté | Nécessite le backend WSL2 |
| Synology / QNAP NAS | ✅ Entièrement supporté | Utilisez CHOKIDAR_USEPOLLING=true pour les montages SMB |
| Kubernetes | 🔜 Bientôt disponible | Chart Helm prévu |
Je l'ai construit parce que j'en avais assez de refaire la même configuration à chaque fois. Installer Claude Code, connecter une interface web, configurer Chromium dans Docker, corriger les problèmes de permissions, déboguer la supervision des processus. À chaque fois.
Alors j'ai créé un conteneur qui fait tout ça. Et ensuite j'ai rencontré tous les bugs possibles pour que vous n'ayez pas à le faire.
| HolyClaude | Le faire soi-même | |
|---|---|---|
| Configuration | 30 secondes | 1 à 2 heures (si tout se passe bien) |
| Claude Code | Pré-installé, pré-configuré, prêt | Installer, configurer, déboguer le blocage de l'installateur, corriger WORKDIR |
| Interface web | CloudCLI inclus avec plugins | Trouver une interface web, l'installer, la configurer, la connecter à Claude |
| Navigateur headless | Chromium + Xvfb + Playwright, configuré | Installer Chromium, installer Xvfb, configurer l'affichage :99, corriger shm, corriger sandbox, corriger seccomp... |
| CLI IA | 7 fournisseurs, un seul conteneur | Installer chacun séparément via 3 gestionnaires de paquets |
| Outils de dev | 50+ outils, prêts | apt-get install / npm i -g / pip install pendant une heure |
| Gestion des processus | s6-overlay (redémarrage auto, arrêt propre) | Écrire votre propre config supervisord ou espérer que le restart Docker fonctionne |
| Persistance | Bind mounts, les identifiants survivent à tout | Comprendre les volumes Docker, déboguer "pourquoi c'est un répertoire et pas un fichier" |
| Mises à jour | docker pull && docker compose up -d |
Mettre à jour 50 outils manuellement, prier pour que rien ne casse |
| Multi-arch | AMD64 + ARM64 | Prier que votre Dockerfile se compile sur ARM |
La dernière ligne de chaque installation manuelle, c'est "ça marche sur ma machine." HolyClaude marche sur toutes les machines.
HolyClaude exécute le Claude Code CLI officiel d'Anthropic. Votre compte existant fonctionne immédiatement.
| Méthode d'authentification | Comment | Coût |
|---|---|---|
| Plan Claude Max/Pro (abonnement) | Connexion via l'interface web CloudCLI — même flux OAuth que sur le bureau | Votre abonnement existant, sans frais supplémentaires |
| Clé API Anthropic | Collez votre clé API dans l'interface web | Paiement à l'usage, même facturation Anthropic |
| Pourquoi | |
|---|---|
| Clé API OpenAI pour Claude | Entreprises différentes, API différente. Les clés OpenAI fonctionnent avec le Codex CLI (également pré-installé) |
Abonnés ChatGPT Plus/Pro : Votre abonnement fonctionne avec le Codex CLI. Exécutez
codex login --device-authà l'intérieur du conteneur pour vous authentifier avec votre compte ChatGPT.
| CLI | Ce dont vous avez besoin |
|---|---|
| Gemini CLI | Clé API Google AI (GEMINI_API_KEY) |
| OpenAI Codex | Clé API OpenAI (OPENAI_API_KEY) ou abonnement ChatGPT Plus/Pro (codex login --device-auth) |
| Cursor | Clé API Cursor (CURSOR_API_KEY) |
| TaskMaster AI | Utilise vos clés de fournisseur IA (Anthropic, OpenAI, etc.) |
| Junie | Compte JetBrains (abonnement JetBrains AI) |
| OpenCode | Configurer via le TUI opencode (supporte plusieurs fournisseurs) |
HolyClaude est gratuit et open source. Vous ne payez vos fournisseurs IA que pour l'usage, comme vous le faites déjà. Nous ne proxifions pas, n'interceptons pas et ne touchons pas à vos identifiants. Ils vivent dans votre bind mount local.
Deux saveurs. Même qualité. Choisissez votre catégorie de poids.
| Tag | Ce que vous obtenez | Idéal pour |
|---|---|---|
latest |
Tout pré-installé — chaque outil, chaque bibliothèque, chaque CLI | La plupart des utilisateurs. Zéro temps d'attente. Claude n'a jamais besoin de s'arrêter pour installer quelque chose. |
slim |
Outils de base uniquement — Claude installe les extras à la demande | VPS plus petit, disque limité, bande passante mesurée |
X.Y.Z |
Image complète, version épinglée | Stabilité en production — vous contrôlez quand mettre à jour |
X.Y.Z-slim |
Image slim, version épinglée | Production + empreinte réduite |
# Complet — batteries incluses (recommandé)
docker pull coderluii/holyclaude
# Slim — léger et efficace
docker pull coderluii/holyclaude:slim
latestest toujours l'image complète. Utilisateurs de slim : pas d'inquiétude — quand vous demandez à Claude de faire quelque chose qui nécessite un outil manquant, il l'installe en quelques secondes. Vous obtenez les mêmes capacités, juste avec un téléchargement initial plus léger.
Le modèle "je veux juste que ça tourne". Copiez ce bloc entier dans un fichier docker-compose.yaml :
# ==============================================================================
# HolyClaude — Quick Start
# Just run: docker compose up -d
# Then open: http://localhost:3001
# ==============================================================================
services:
holyclaude:
image: coderluii/holyclaude:latest # Full image (use :slim for smaller download)
container_name: holyclaude
hostname: holyclaude
restart: unless-stopped
shm_size: 2g # Chromium needs this — don't remove
network_mode: bridge
cap_add:
- SYS_ADMIN # Required: Chromium sandboxing
- SYS_PTRACE # Required: debugging tools
security_opt:
- seccomp=unconfined # Required: Chromium in Docker
ports:
- "3001:3001" # CloudCLI web UI
volumes:
#
# ./data/claude — Your settings, credentials, API keys, and Claude's memory.
# This is what survives container rebuilds.
# NEVER delete this folder — your auth lives here.
#
- ./data/claude:/home/claude/.claude
#
# ./workspace — Your code. All projects go here.
# Bind-mounted so you can access files from your host.
#
- ./workspace:/workspace
environment:
- TZ=UTC # Your timezone (e.g., America/New_York, Europe/London)Ensuite :
docker compose up -dOuvrez http://localhost:3001. Créez un compte CloudCLI. Connectez-vous avec votre compte Anthropic. Construisez quelque chose.
C'est toute la configuration. Vous avez terminé.
Pourquoi
SYS_ADMIN+seccomp=unconfined? Chromium a besoin de ces options pour fonctionner dans Docker — c'est standard pour tout navigateur containerisé (docs Playwright, docs Puppeteer, tous les pipelines CI qui exécutent des tests de navigateur). Sans elles, Chromium plante au démarrage. Ce n'est pas un risque de sécurité propre à HolyClaude.
Pourquoi
shm_size: 2g? Docker alloue 64 Mo de mémoire partagée aux conteneurs par défaut. Chromium utilise/dev/shmintensément pour le rendu des onglets. À 64 Mo, les onglets plantent aléatoirement. 2 Go est le minimum recommandé pour tout setup Chromium-dans-Docker.
Même image, chaque paramètre exposé. Copiez ce bloc entier dans un fichier docker-compose.yaml :
# ==============================================================================
# HolyClaude — Full Configuration
# All options documented inline.
# Detailed docs: https://github.com/CoderLuii/HolyClaude/blob/master/docs/configuration.md
# ==============================================================================
services:
holyclaude:
image: coderluii/holyclaude:latest # Full image (use :slim for smaller download)
container_name: holyclaude
hostname: holyclaude
restart: unless-stopped
shm_size: 2g # Chromium shared memory — increase to 4g for heavy browser use
network_mode: bridge
cap_add:
- SYS_ADMIN # Required: Chromium sandboxing
- SYS_PTRACE # Required: debugging tools (strace, lsof)
security_opt:
- seccomp=unconfined # Required: Chromium syscall requirements
ports:
#
# CloudCLI web UI — this is the only port you need.
# Override the host-side port from `.env` if 3001 is already in use.
#
- "${HOLYCLAUDE_HOST_PORT:-3001}:3001"
#
# Dev server ports — uncomment as needed.
# These let you access dev servers running inside the container from your host browser.
#
# - "3000:3000" # Next.js / Express
# - "4321:4321" # Astro
# - "5173:5173" # Vite
# - "8787:8787" # Wrangler (Cloudflare Workers)
# - "9229:9229" # Node.js debugger
volumes:
#
# PERSISTENT DATA
#
# ./data/claude — Settings, credentials, API keys, Claude's memory file.
# Survives container rebuilds. NEVER delete this folder.
# Override the host path from `.env` if you want it elsewhere.
#
- ${HOLYCLAUDE_HOST_CLAUDE_DIR:-./data/claude}:/home/claude/.claude
#
# ./workspace — Your code and projects. Everything you build goes here.
# Accessible from your host machine.
# Override the host path from `.env` if you want a different root.
#
- ${HOLYCLAUDE_HOST_WORKSPACE_DIR:-./workspace}:/workspace
environment:
#
# TIMEZONE
# Full list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
#
- TZ=UTC
#
# PERFORMANCE
# Node.js heap memory limit in MB. Increase if you work on large monorepos
# and hit out-of-memory errors. 4096 (4GB) is a solid default.
#
- NODE_OPTIONS=--max-old-space-size=4096
#
# USER MAPPING
# Match these to your host user so files created inside the container
# have the right ownership on your host. Run `id -u` and `id -g` on your host.
#
- PUID=1000
- PGID=1000
#
# SMB/CIFS NETWORK MOUNTS
# Only enable these if your volumes are on a NAS, Samba share, or CIFS mount.
# They enable polling-based file watching since network mounts don't support inotify.
# Leave commented out for local storage — polling uses more CPU.
#
# - CHOKIDAR_USEPOLLING=1
# - WATCHFILES_FORCE_POLLING=true
#
# NOTIFICATIONS (optional)
# Get notified when Claude finishes a task or hits an error.
# Uses Apprise — supports 100+ services. Also requires creating a flag file
# inside the container: touch ~/.claude/notify-on
#
# - NOTIFY_DISCORD=discord://webhook_id/webhook_token
# - NOTIFY_TELEGRAM=tg://bot_token/chat_id
# - NOTIFY_PUSHOVER=pover://user_key@app_token
# - NOTIFY_SLACK=slack://token_a/token_b/token_c
# - NOTIFY_EMAIL=mailto://user:pass@gmail.com?to=you@gmail.com
# - NOTIFY_GOTIFY=gotify://hostname/token
# - NOTIFY_URLS= # catch-all: comma-separated Apprise URLs
#
# AI PROVIDER KEYS (optional)
# Claude Code can authenticate via web UI (OAuth) or ANTHROPIC_API_KEY.
# Set these if you want to use additional AI CLIs or API-based auth.
#
# - GEMINI_API_KEY=your_key
# - OPENAI_API_KEY=your_key
# - CURSOR_API_KEY=your_keyEnsuite :
docker compose up -dSi vous souhaitez modifier le port côté hôte ou les chemins de bind-mount sans éditer le compose, copiez .env.example vers .env et définissez :
HOLYCLAUDE_HOST_PORT=3003
HOLYCLAUDE_HOST_CLAUDE_DIR=./data/claude
HOLYCLAUDE_HOST_WORKSPACE_DIR=./workspaceCes valeurs sont lues par Docker Compose sur l'hôte. Ce ne sont pas des variables d'environnement du conteneur.
| Section | Ce qu'elle fait | Quand la modifier |
|---|---|---|
| Timezone | Horloge du conteneur | Toujours — définissez votre fuseau horaire local |
| Performance | Plafond mémoire Node.js | Seulement si vous avez des erreurs OOM sur de grands projets |
| User mapping | Permissions de fichiers entre conteneur et hôte | Si vous obtenez "permission denied" (id -u et id -g sur votre hôte) |
| SMB/CIFS | Mode de surveillance des fichiers par polling | Seulement si vos volumes sont sur un NAS ou un partage réseau |
| Notifications | Alertes push via Apprise (Discord, Telegram, Slack, Email, 100+ services) | Si vous voulez vous éloigner et savoir quand Claude a terminé |
| AI providers | Clés API pour Gemini, Codex, Cursor, Junie, OpenCode | Si vous voulez utiliser des CLI IA autres que Claude |
Chaque variable d'environnement est optionnelle. Le conteneur fonctionne parfaitement avec juste
TZ=UTC. Tout le reste a des valeurs par défaut sensées ou est géré via l'interface web.
La référence complète. Chaque variable, sa valeur par défaut, ce qu'elle fait.
| Variable | Défaut | Ce qu'elle fait |
|---|---|---|
TZ |
UTC |
Fuseau horaire du conteneur |
PUID |
1000 |
ID utilisateur du conteneur — faites correspondre à votre hôte pour éviter les problèmes de permissions |
PGID |
1000 |
ID de groupe du conteneur — faites correspondre à votre hôte pour éviter les problèmes de permissions |
NODE_OPTIONS |
--max-old-space-size=4096 |
Limite mémoire heap Node.js en Mo |
GIT_USER_NAME |
HolyClaude User |
Auteur des commits Git (défini une fois au premier démarrage) |
GIT_USER_EMAIL |
noreply@holyclaude.local |
Email des commits Git (défini une fois au premier démarrage) |
CHOKIDAR_USEPOLLING |
(non défini) | Définissez à 1 pour SMB/CIFS — active les observateurs de fichiers par polling |
WATCHFILES_FORCE_POLLING |
(non défini) | Définissez à true pour SMB/CIFS — active le polling Python |
NOTIFY_DISCORD |
(non défini) | URL du webhook Discord pour les notifications |
NOTIFY_TELEGRAM |
(non défini) | URL du bot Telegram pour les notifications |
NOTIFY_PUSHOVER |
(non défini) | URL Pushover pour les notifications |
NOTIFY_SLACK |
(non défini) | URL du webhook Slack pour les notifications |
NOTIFY_EMAIL |
(non défini) | URL Email (SMTP) pour les notifications |
NOTIFY_GOTIFY |
(non défini) | URL Gotify pour les notifications |
NOTIFY_URLS |
(non défini) | Attrape-tout — URLs Apprise séparées par des virgules |
ANTHROPIC_API_KEY |
(non défini) | Clé API Anthropic (alternative à l'OAuth via interface web) |
ANTHROPIC_AUTH_TOKEN |
(non défini) | Token d'authentification Anthropic (alternative à la clé API) |
ANTHROPIC_BASE_URL |
(non défini) | Endpoint API Anthropic personnalisé (proxies, déploiements privés) |
CLAUDE_CODE_USE_BEDROCK |
(non défini) | Définissez à 1 pour utiliser le backend Amazon Bedrock |
CLAUDE_CODE_USE_VERTEX |
(non défini) | Définissez à 1 pour utiliser le backend Google Vertex AI |
GEMINI_API_KEY |
(non défini) | Clé API Google Gemini |
OPENAI_API_KEY |
(non défini) | Clé API OpenAI (pour Codex CLI, ou utilisez codex login --device-auth pour l'abonnement ChatGPT) |
CURSOR_API_KEY |
(non défini) | Clé API Cursor |
OLLAMA_HOST |
(non défini) | URL de l'endpoint Ollama (ex. http://host.docker.internal:11434) |
Ce n'est pas un conteneur minimal. C'est un poste de travail de développement complet.
Node.js 22 LTS + paquets npm globaux
| Paquet | À quoi ça sert |
|---|---|
typescript, tsx |
Compilation et exécution TypeScript |
pnpm |
Gestionnaire de paquets rapide et économe en espace disque |
vite, esbuild |
Outils de build ultra-rapides |
eslint, prettier |
Qualité du code et formatage |
serve, nodemon |
Serveur de fichiers statiques, redémarrage automatique du serveur de développement |
concurrently |
Exécuter plusieurs scripts en parallèle |
dotenv-cli |
Charger des variables d'environnement depuis des fichiers .env |
Paquets Python 3
| Paquet | À quoi ça sert |
|---|---|
requests, httpx |
Clients HTTP |
beautifulsoup4, lxml |
Web scraping et parsing HTML |
Pillow |
Traitement d'images (pré-compilé — pas d'attente) |
pandas, numpy |
Manipulation de données (pré-compilés — sérieusement, vous ne voulez pas les installer avec pip au runtime) |
openpyxl |
Lecture/écriture de fichiers Excel |
python-docx |
Lecture/écriture de documents Word |
jinja2, markdown |
Templating et rendu markdown |
pyyaml, python-dotenv |
Parsing de fichiers de configuration |
rich, click, tqdm |
Beaux CLIs et barres de progression |
playwright |
Automatisation de navigateur (Chromium déjà configuré et prêt) |
Outils système
| Outil | À quoi ça sert |
|---|---|
git, gh |
Contrôle de version + GitHub CLI (PRs, issues, releases depuis le terminal) |
ripgrep (rg), fd, fzf |
Recherche ultra-rapide — Claude les utilise constamment |
bat, tree, jq |
Meilleur cat (coloration syntaxique), arborescences de répertoires, traitement JSON |
curl, wget |
Téléchargements HTTP |
tmux |
Multiplexeur de terminal — exécuter des choses en arrière-plan |
htop, lsof, strace |
Surveillance des processus et débogage |
imagemagick |
Conversion d'images (convert, identify, mogrify) |
chromium |
Navigateur headless — captures d'écran, Playwright, Lighthouse |
psql, redis-cli, sqlite3 |
Communication directe avec les bases de données |
openssh-client |
SSH vers d'autres machines |
CLI IA — tous les grands fournisseurs
| CLI | Commande | À quoi ça sert |
|---|---|---|
| Claude Code | claude |
L'événement principal — vous tournez à l'intérieur de celui-ci |
| Gemini CLI | gemini |
Agent de codage IA de Google |
| OpenAI Codex | codex |
Agent de codage d'OpenAI |
| Cursor | cursor |
Agent IA de Cursor |
| TaskMaster AI | task-master |
Planification de tâches et orchestration |
| Junie | junie |
Agent de codage IA de JetBrains |
| OpenCode | opencode |
Agent IA open source (plusieurs fournisseurs) |
Sept CLI IA. Un seul conteneur. Passez de l'un à l'autre instantanément. Aucune autre image Docker ne fait ça.
L'image complète inclut tout ce qui précède, plus :
Paquets npm supplémentaires — déploiement, ORMs, performance
| Paquet | À quoi ça sert |
|---|---|
wrangler, @cloudflare/next-on-pages |
Déploiement Cloudflare Workers |
vercel |
Déploiement Vercel |
netlify-cli |
Déploiement Netlify |
az |
CLI Azure pour le déploiement cloud et la gestion |
prisma, drizzle-kit |
Les deux ORMs Node.js les plus populaires |
pm2 |
Gestionnaire de processus en production |
eas-cli |
Builds Expo / React Native |
lighthouse, @lhci/cli |
Audit de performance (Chromium est déjà là) |
sharp-cli |
CLI de traitement d'images |
json-server, http-server |
APIs REST mock, service de fichiers statiques |
@marp-team/marp-cli |
Markdown vers diapositives de présentation |
Paquets Python supplémentaires — PDFs, visualisation de données, frameworks web
| Paquet | À quoi ça sert |
|---|---|
reportlab, weasyprint, cairosvg, fpdf2, PyMuPDF, pdfkit, img2pdf |
Toutes les grandes bibliothèques PDF. Générez-les, lisez-les, convertissez-les, fusionnez-les. |
xlsxwriter, xlrd |
Formats Excel au-delà de ce que couvre openpyxl |
matplotlib, seaborn |
Visualisation de données et graphiques |
python-pptx |
Génération de présentations PowerPoint |
fastapi, uvicorn |
Framework web Python |
httpie |
Client HTTP convivial (comme curl mais lisible) |
Paquets système supplémentaires — médias, documents
| Paquet | À quoi ça sert |
|---|---|
pandoc |
Convertir entre n'importe quel format de document (markdown, HTML, PDF, docx, epub...) |
ffmpeg |
Traitement vidéo et audio (extraire, convertir, transcoder) |
libvips-dev |
Bibliothèque de traitement d'images haute performance |
Utilisateurs slim : Il manque un paquet ? Demandez à Claude. Il installe les paquets npm/pip en quelques secondes. Les paquets système (pandoc, ffmpeg) prennent 1 à 2 minutes. Vous obtenez les mêmes capacités — l'image complète a juste zéro temps d'attente.
Sept CLI IA. Un seul conteneur. Aucune autre image Docker ne vous donne ça.
| Fournisseur | Commande | Comment s'authentifier | Abonnement fonctionne ? |
|---|---|---|---|
| Claude Code | claude |
Interface web CloudCLI (OAuth) | Oui — Plan Max/Pro ou clé API |
| Gemini CLI | gemini |
Variable d'env GEMINI_API_KEY |
Clé API (paiement à l'usage) |
| OpenAI Codex | codex |
OPENAI_API_KEY ou codex login --device-auth |
Oui — ChatGPT Plus/Pro/Team/Enterprise ou clé API |
| Cursor | cursor |
Variable d'env CURSOR_API_KEY |
Clé API |
| TaskMaster AI | task-master |
Utilise les clés de fournisseur IA existantes | Fonctionne avec les clés configurées |
| Junie | junie |
Abonnement JetBrains AI | Compte JetBrains requis |
| OpenCode | opencode |
Configurer via TUI | Supporte plusieurs fournisseurs |
Claude Code est le CLI principal. Les autres sont là parce que vous voulez parfois un deuxième avis, ou les points forts d'un modèle spécifique, ou que vous comparez des sorties. Les avoir tous à un
Tabde distance, c'est tout l'intérêt.
HolyClaude fonctionne avec Ollama comme alternative à un abonnement Anthropic. Définissez deux variables d'environnement et utilisez des modèles locaux ou cloud.
Consultez le guide de configuration complet : docs/ollama.md
graph TB
subgraph Docker Container
EP["entrypoint.sh"] --> BS["bootstrap.sh\n(first boot only)"]
EP --> S6["s6-overlay\n(PID 1)"]
S6 --> CC["CloudCLI\n(:3001)"]
S6 --> XV["Xvfb\n(:99)"]
CC --> CLAUDE["Claude Code CLI"]
CLAUDE --> TOOLS["Dev Tools\n(Node, Python, Git...)"]
CLAUDE --> CHROME["Chromium\n(headless)"]
XV -.-> CHROME
end
subgraph Host
DATA["./data/claude"] -.->|bind mount| HOME["~/.claude"]
WS["./workspace"] -.->|bind mount| WORK["/workspace"]
end
USER["Browser"] -->|":3001"| CC
style S6 fill:#2d3748,color:#fff
style CC fill:#6366f1,color:#fff
style CLAUDE fill:#f59e0b,color:#000
-
Le conteneur démarre —
entrypoint.shs'exécute en tant que root. Remapping de l'UID/GID pour correspondre à votre utilisateur hôte, pré-création des fichiers requis (prévenant le bug Docker "créé en tant que répertoire"), vérification s'il s'agit d'un premier démarrage. -
Premier démarrage uniquement —
bootstrap.shs'exécute une seule fois. Copie les paramètres par défaut, le modèle de mémoire, configure l'identité git. Crée un fichier sentinelle (.holyclaude-bootstrapped) pour qu'il ne s'exécute plus jamais. Vos personnalisations sont protégées à partir de ce moment. -
s6-overlay prend le contrôle en tant que PID 1 — Ce n'est pas supervisord. C'est s6-overlay, conçu spécifiquement pour Docker. Supervise CloudCLI et Xvfb. Redémarre automatiquement en cas de crash. Transmet les signaux. Récolte les zombies. S'arrête proprement.
-
CloudCLI sert l'interface web — Port 3001. Interface basée sur navigateur pour Claude Code avec gestion de projets, sessions multiples et plugins (stats de projet + terminal web inclus).
-
Xvfb fournit un affichage virtuel — Chromium a besoin d'un écran pour rendre, même en mode "headless". Xvfb lui donne un affichage virtuel 1920x1080 à
:99. C'est pourquoi Playwright, les captures d'écran et Lighthouse fonctionnent tous hors de la boîte.
Consultez docs/architecture.md pour la plongée technique complète — notamment pourquoi nous avons choisi s6 plutôt que supervisord, pourquoi les plugins sont intégrés dans l'image, et pourquoi runuser plutôt que su.
holyclaude/
├── .github/ # CI/CD workflows, issue & PR templates
│ ├── FUNDING.yml # Sponsor/donation links
│ ├── ISSUE_TEMPLATE/ # Bug report, feature request, package request
│ ├── pull_request_template.md
│ ├── SECURITY.md # Security policy
│ └── workflows/ # Docker build & push automation
├── assets/ # Logo and banner images
├── config/ # Claude Code configuration
│ ├── claude-memory-full.md
│ ├── claude-memory-slim.md
│ └── settings.json
├── docs/ # Extended documentation
│ ├── architecture.md
│ ├── CHANGELOG.md
│ ├── configuration.md
│ ├── dockerhub-description.md
│ ├── ollama.md
│ └── troubleshooting.md
├── scripts/ # Container lifecycle scripts
│ ├── bootstrap.sh # First-run setup
│ ├── entrypoint.sh # Container entrypoint
│ └── notify.py # Notification helper (Apprise)
├── s6-overlay/ # Process supervision (s6-rc services)
├── Dockerfile # Single-stage build
├── docker-compose.yaml # Quick start (minimal config)
├── docker-compose.full.yaml # Full config (all options)
├── LICENSE
└── README.md| Quoi | Où (conteneur) | Où (hôte) | Survit à la reconstruction ? |
|---|---|---|---|
| Paramètres, identifiants, clés API | /home/claude/.claude |
./data/claude |
Oui |
| Session Claude Code (OAuth, onboarding) | /home/claude/.claude.json |
./data/claude/.claude.json.persist |
Oui |
| Votre code et projets | /workspace |
./workspace |
Oui |
| Compte CloudCLI | /home/claude/.cloudcli |
(conteneur uniquement par défaut — voir ci-dessous) | Non (opt-in disponible) |
- Votre authentification Anthropic et clés API
- Paramètres Claude Code, mémoire (
CLAUDE.md) et session OAuth (sans reconnexion) - Tout votre code dans
./workspace - Configuration Git
- Auth Codex, Gemini et Cursor CLI (depuis v1.1.7)
- Compte web CloudCLI — inscription rapide, c'est tout (sauf si vous activez la persistance ci-dessous)
# Supprimez le fichier sentinelle — PAS tout le dossier
rm ./data/claude/.holyclaude-bootstrapped
docker compose restart holyclaudeNe jamais supprimer
./data/claude/entièrement. C'est là que vivent vos identifiants. Supprimez le fichier sentinelle si vous voulez un bootstrap frais. Supprimez des fichiers de configuration spécifiques si vous voulez réinitialiser les paramètres. Mais ne noyez jamais tout le dossier.
Par défaut, la base de données du compte CloudCLI (~/.cloudcli) est locale au conteneur et est effacée à la reconstruction. Recréer le compte prend 10 secondes, donc la plupart des gens laissent ça tel quel.
Si vous voulez qu'il survive aux reconstructions, ajoutez un named Docker volume à votre compose file :
services:
holyclaude:
volumes:
- ./data/claude:/home/claude/.claude
- ./workspace:/workspace
- cloudcli-data:/home/claude/.cloudcli # add this line
volumes:
cloudcli-data: # and this blockNe faites PAS de bind-mount de
./data/cloudclisur un partage réseau (NAS, SMB/CIFS, NFS). CloudCLI stocke son compte dans SQLite, et le verrouillage de fichiers de SQLite ne fonctionne pas sur les montages réseau. Vous aurez des erreursdatabase is lockeden permanence. Les named volumes vivent sur le système de fichiers local du moteur Docker, c'est pourquoi ça fonctionne — les bind mounts pointant vers un NAS ne fonctionneront pas.
Un bind mount vers un chemin SSD local convient aussi, gardez-le juste hors de tout partage réseau.
Claude Code s'exécute en mode allowEdits par défaut. C'est le paramètre le plus sûr et utile :
| Action | Autorisé ? |
|---|---|
| Lire des fichiers | Oui |
| Modifier / créer des fichiers | Oui |
| Exécuter des commandes shell | Vous demande d'abord |
| Installer des paquets | Vous demande d'abord |
C'est ainsi que je l'utilise personnellement. Modifiez ./data/claude/settings.json sur votre hôte :
{
"permissions": {
"defaultMode": "bypassPermissions"
}
}Le mode bypass signifie que Claude exécute n'importe quelle commande sans confirmation. Rapide, puissant, et exactement ce que vous voulez si vous faites confiance à ce que vous construisez. Mais
allowEditsest le paramètre par défaut sûr pour une raison.
HolyClaude lie CloudCLI au port 3001. Par défaut c'est local uniquement — parfait pour tourner sur votre laptop ou un serveur domestique auquel vous accédez en SSH.
Dès que vous voulez y accéder depuis l'extérieur de votre réseau, lisez cette section.
Je le dis clairement : ne percez pas un trou dans votre routeur et n'exposez pas 3001 à l'internet ouvert. Même pas avec un mot de passe. Voici pourquoi :
- CloudCLI expose un shell complet via le plugin terminal web
- Il peut exécuter du code arbitraire, installer des paquets et lire/écrire tout votre
/workspace - Il détient vos tokens OAuth Anthropic et clés API
- Les mots de passe d'authentification basique se font brute-forcer, credential-stuffer et extraire des logs
- Un mot de passe divulgué = quelqu'un d'autre a une instance Claude Code payante qui tourne sur votre machine avec votre argent
Un mot de passe est un ralentisseur, pas une porte. Traitez HolyClaude comme vous traiteriez une session SSH : jamais sur l'internet ouvert sans un tunnel approprié devant.
Voici les deux options que je recommande vraiment :
| Option | Pour qui | Pourquoi |
|---|---|---|
| Tailscale | Usage personnel, petites équipes | VPN mesh WireGuard. Installez Tailscale sur votre serveur + votre laptop/téléphone, et vous accédez à http://holyclaude:3001 de n'importe où comme si vous étiez sur le LAN. Aucun port ouvert, pas de DNS, pas de certificats. Gratuit pour usage personnel. |
| Cloudflare Tunnel | Partage avec d'autres, hostname public | Cloudflare proxifie la connexion, donc le port 3001 reste fermé. Vous obtenez un vrai domaine avec HTTPS, et vous pouvez mettre Cloudflare Access (Google/GitHub SSO) devant. Le niveau gratuit couvre la plupart des usages personnels. |
Les deux vous donnent :
- Zéro port ouvert sur votre routeur
- Transport chiffré de bout en bout
- Authentification réelle basée sur l'identité (pas un mot de passe partagé)
- Journaux d'audit
Si vous devez absolument sauter le tunnel (tutoriel de self-hosting, réseau de lab isolé, peu importe), au strict minimum :
- Mettez un reverse proxy devant (Caddy, nginx, Traefik) avec un vrai TLS
- Ajoutez un allowlisting d'IP au niveau du pare-feu ou du proxy — uniquement vos IPs connues
- Activez
bypassPermissions: false(la valeur par défaut) pour que les commandes shell demandent toujours confirmation - Faites tourner vos identifiants Anthropic si quelque chose semble bizarre
- Exécutez derrière Cloudflare Access ou un SSO similaire, pas une authentification basique
Même avec tout ça, la surface de risque est énorme. Utilisez Tailscale ou Cloudflare Tunnel. Ils sont gratuits, prennent cinq minutes à configurer, et c'est ce que j'utilise personnellement.
Éloignez-vous de votre ordinateur et sachez quand Claude a terminé. Utilise Apprise pour les notifications — supporte 100+ services dont Discord, Telegram, Slack, Email, Pushover, Gotify, et plus.
Pour activer :
- Ajoutez une ou plusieurs variables
NOTIFY_*à l'environmentde votre compose :- NOTIFY_DISCORD=discord://webhook_id/webhook_token - NOTIFY_TELEGRAM=tg://bot_token/chat_id
- À l'intérieur du conteneur :
touch ~/.claude/notify-on
Consultez la documentation de configuration pour toutes les variables supportées et les formats d'URL.
Pour désactiver : rm ~/.claude/notify-on
Événements qui déclenchent des notifications :
| Événement | Ce qui s'est passé |
|---|---|
stop |
Claude a terminé la tâche en cours |
error |
Un échec d'utilisation d'outil s'est produit |
Complètement silencieux quand non configuré. Aucune variable
NOTIFY_*définie ? Pas de fichier flag ? Zéro appel réseau. Zéro spam dans les logs. Zéro surcharge.
# Télécharger la dernière image
docker compose pull
# Recréer le conteneur avec la nouvelle image
docker compose up -dVos données persistent dans ./data/claude et ./workspace — la mise à jour ne remplace que le conteneur, pas vos fichiers.
Pour épingler une version spécifique plutôt que latest :
image: coderluii/holyclaude:1.1.2 # instead of :latestCloudCLI affiche le mauvais répertoire par défaut
CloudCLI s'ouvre sur /home/claude au lieu de /workspace.
Cause : WORKSPACES_ROOT n'atteint pas le processus CloudCLI. Les variables d'env docker-compose ne passent pas à travers s6-setuidgid de s6-overlay — il s'exécute avec un environnement propre par conception (fonctionnalité de sécurité, pas un bug).
Correctif : Déjà géré dans HolyClaude. Le script de lancement s6 définit WORKSPACES_ROOT=/workspace directement dans l'environnement du processus.
SQLite "database is locked"
Cause : Bases de données SQLite sur des montages réseau SMB/CIFS. CIFS ne supporte pas le verrouillage de fichiers au niveau qu'SQLite requiert.
Correctif : Ne stockez pas de bases de données SQLite sur des partages réseau. HolyClaude garde .cloudcli dans le stockage local du conteneur exactement pour cette raison. Si vous avez vos propres bases de données SQLite dans /workspace sur un NAS, déplacez-les vers un chemin local.
Chromium plante / pages blanches / échecs d'onglets
Cause : Mémoire partagée insuffisante. Docker utilise 64 Mo par défaut.
Correctif : Assurez-vous que shm_size: 2g est dans votre fichier compose. Pour une utilisation intensive du navigateur (nombreux onglets, pages complexes), augmentez à 4g.
Les observateurs de fichiers ne détectent pas les changements (rechargement à chaud cassé)
Cause : Les montages réseau SMB/CIFS ne supportent pas inotify.
Correctif : Activez le polling dans l'environnement de votre compose :
- CHOKIDAR_USEPOLLING=1
- WATCHFILES_FORCE_POLLING=trueNote : Le polling utilise plus de CPU qu'inotify. Activez-le uniquement sur les montages réseau.
Erreurs de permission refusée
Cause : L'UID/GID du conteneur ne correspond pas à la propriété des fichiers de l'hôte.
Correctif :
# Sur votre machine hôte
id -u # → c'est votre PUID
id -g # → c'est votre PGIDDéfinissez-les dans votre fichier compose :
- PUID=1000
- PGID=1000Docker crée .claude.json en tant que répertoire
Cause : Si un fichier cible de bind-mount n'existe pas avant le démarrage du conteneur, Docker le crée utilement en tant que répertoire. Merci, Docker.
Correctif : Déjà géré — entrypoint.sh le pré-crée en tant que fichier.
Consultez docs/troubleshooting.md pour le guide complet incluant tous les problèmes SMB/CIFS et l'historique complet des bugs rencontrés et corrigés.
Ce ne sont pas des bugs HolyClaude — ce sont des problèmes en amont ou des compromis intentionnels.
| Problème | Pourquoi | Contournement |
|---|---|---|
| Le bouton "Continue in Shell" ne fonctionne pas | Bug en amont de CloudCLI (race condition dans l'init du terminal) | Utilisez le plugin Web Terminal à la place (pré-installé) |
| Cursor CLI "Command timeout" | Pas de clé API configurée — cosmétique uniquement, n'affecte rien | Définissez CURSOR_API_KEY ou ignorez |
| Compte CloudCLI perdu à la reconstruction | SQLite ne peut pas persister sur les montages réseau — compromis intentionnel | Recréez le compte (~10 secondes) |
| Notifications push web "not supported" | Limitation du navigateur dans CloudCLI, comportement standard | Utilisez les notifications Apprise à la place (voir Notifications) |
Vous voulez compiler l'image vous-même plutôt que de la télécharger depuis Docker Hub ? Allez-y :
git clone https://github.com/CoderLuii/HolyClaude.git
cd holyclaude
# Build full image
docker build -t holyclaude .
# Build slim image
docker build --build-arg VARIANT=slim -t holyclaude:slim .
# Build for ARM (Apple Silicon, Raspberry Pi, AWS Graviton)
docker buildx build --platform linux/arm64 -t holyclaude .Utilisez ensuite image: holyclaude au lieu de image: coderluii/holyclaude:latest dans votre fichier compose.
Comment HolyClaude se compare-t-il aux autres approches ?
| Approche | Interface web | Multi-IA | Outils pré-configurés | Navigateur headless | Configuration en une commande | Persistance |
|---|---|---|---|---|---|---|
| HolyClaude | CloudCLI | 5 CLIs | 50+ outils | Chromium + Xvfb + Playwright | docker compose up |
Bind mounts |
| Claude Code (bare metal) | Non | Non | Installez vous-même | Installez vous-même | Installation multi-étapes | Manuelle |
| Claude Code + oh-my-openagent | Non | Oui (multi-modèle) | Certains | Non | npm install | Manuelle |
| DIY Docker + Claude Code | Peut-être | Peut-être | Ce que vous ajoutez | Si vous le configurez | Si vous écrivez le Dockerfile | Si vous configurez les volumes |
| Cursor IDE | Intégré | Cursor uniquement | Inclus dans l'IDE | Non | Téléchargez l'app | Données de l'app |
HolyClaude ne concurrence pas les agents de codage — c'est la couche d'infrastructure qui les fait tous mieux fonctionner. C'est le conteneur dans lequel vous les exécutez.
Ce qui arrive ensuite :
| Statut | Fonctionnalité |
|---|---|
| 🔜 | Builds natifs ARM — images ARM64 natives optimisées, pas seulement émulées |
| 🔜 | Intégration tunnel VS Code — VS Code Server intégré ou tunnel pour se connecter depuis VS Code Desktop |
| 🔜 | Routage des notifications — différentes destinations de notification par type d'événement (erreurs vers Telegram, completions vers Discord) |
Vous avez une idée ? Démarrez une discussion ou demandez une fonctionnalité.
Vous utilisez HolyClaude pour construire quelque chose ? Nous serions ravis de le voir.
Ouvrez une issue avec le label showcase ou soumettez une PR pour ajouter votre projet ici :
Soyez le premier à ajouter votre projet ici.
Les contributions sont les bienvenues. Ce projet est né d'une utilisation quotidienne réelle, et il s'améliore quand plus de personnes l'utilisent et trouvent des cas limites.
- Forkez-le
- Créez une branche (
git checkout -b feature/something) - Committez-le
- Poussez-le
- Ouvrez une PR
Bugs, demandes de fonctionnalités, questions : ouvrez une issue.
| Canal | Utilisation |
|---|---|
| GitHub Discussions | Questions, montrez votre configuration, idées |
| Issues | Rapports de bugs, demandes de fonctionnalités et de paquets |
| Security Advisories | Rapports de vulnérabilités (privés) |
Utilisez le modèle d'issue 📦 Package Request. Incluez le nom du paquet, la méthode d'installation, et quelle variante (full/slim) elle devrait cibler.
HolyClaude est gratuit, open source, et maintenu par un seul développeur qui l'utilise chaque jour.
Si ça vous a fait gagner du temps, voici comment vous pouvez aider :
- Mettez une étoile à ce repo — c'est la chose la plus importante que vous puissiez faire pour la visibilité
- Partagez-le — parlez-en à un ami, postez-le, tweetez-le
- Ouvrez des issues — les rapports de bugs et les demandes de fonctionnalités améliorent HolyClaude pour tout le monde
- Contribuez — les PRs sont toujours les bienvenues
L'image Docker HolyClaude inclut des logiciels tiers, chacun sous sa propre licence. Composants notables :
| Composant | Licence | Source |
|---|---|---|
| CloudCLI | GPL-3.0 | siteboon/claudecodeui |
| s6-overlay | ISC | just-containers/s6-overlay |
| Node.js | MIT | nodejs/node |
Consultez THIRD-PARTY-NOTICES pour les détails complets incluant les notices de modification. Le code source propre à HolyClaude est sous licence MIT.
MIT — voir LICENSE. Utilisez-le comme vous voulez.
Construit par CoderLuii · coderluii.dev
Ce conteneur est ce que j'utilise chaque jour. S'il vous fait gagner ne serait-ce que la moitié du temps de configuration qu'il m'a fait gagner, une étoile serait appréciée.
