经 AI Skill Hub 精选评估,圣Claude AI工作站 获评「推荐使用」。已获得 2.3k 颗 GitHub Star,这款Agent工作流在功能完整性、社区活跃度和易用性方面表现出色,AI 评分 7.8 分,适合有一定技术背景的用户使用。
基于Claude打造的开源AI编程工作站,集成代码补全、网页UI、7个AI命令行工具、无头浏览器等50+功能。适合开发者、AI工程师快速构建AI驱动的编码环境,提升开发效率。
圣Claude AI工作站 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
基于Claude打造的开源AI编程工作站,集成代码补全、网页UI、7个AI命令行工具、无头浏览器等50+功能。适合开发者、AI工程师快速构建AI驱动的编码环境,提升开发效率。
圣Claude AI工作站 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
# 克隆仓库 git clone https://github.com/CoderLuii/HolyClaude cd HolyClaude # 查看安装说明 cat README.md # 按 README 完成环境依赖安装后即可使用
# 查看帮助 holyclaude --help # 基本运行 holyclaude [options] <input> # 详细使用说明请查阅文档 # https://github.com/CoderLuii/HolyClaude
# holyclaude 配置说明 # 查看配置选项 holyclaude --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export HOLYCLAUDE_CONFIG="/path/to/config.yml"
🌍 English | Español | Français | Italiano | Português | Deutsch | Русский | हिन्दी | 中文 | 日本語 | 한국어
This is not a minimal container. This is an entire development workstation.
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
---
The "I just want it running" template. Copy this entire block into a docker-compose.yaml file:
```yaml
Same image, every knob exposed. Copy this entire block into a docker-compose.yaml file:
```yaml
CLAUDE.md), and OAuth session (no re-login)./workspace/home/claude/.claude (since v1.1.7). Environment-provided keys remain in your Compose or host environment.```bash
1. Create a folder for HolyClaude:
mkdir holyclaude && cd holyclaude
2. Create a docker-compose.yaml file. Copy one of the templates below: - Quick template — minimal, zero config, just works - Full template — all options, fully documented
3. Pull and start:
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 — use Tailscale or Cloudflare Tunnel instead.
<p align="right"> <a href="#top">↑ back to top</a> </p>
---
The complete reference. Every variable, what it defaults to, what it does.
| Variable | Default | What it does |
|---|---|---|
TZ | UTC | Container timezone |
PUID | 1000 | Container user ID for Docker-style UID/GID remapping |
PGID | 1000 | Container group ID for Docker-style UID/GID remapping |
NODE_OPTIONS | Full Compose: --max-old-space-size=4096 | Optional Node.js heap limit. The quick Compose file and raw image do not set a heap-size default. |
HOLYCLAUDE_BASE_PATH | *(unset)* | Optional web UI subpath such as /holyclaude for Tailscale Serve --set-path or reverse proxies |
GIT_USER_NAME | HolyClaude User | Git commit author, seeded only when the persisted global config has no value |
GIT_USER_EMAIL | noreply@holyclaude.local | Git commit email, seeded only when the persisted global config has no value |
CHOKIDAR_USEPOLLING | *(unset)* | Set to 1 for SMB/CIFS — enables polling file watchers |
WATCHFILES_FORCE_POLLING | *(unset)* | Set to true for SMB/CIFS — enables Python polling |
NOTIFY_DISCORD | *(unset)* | Discord webhook URL for notifications |
NOTIFY_TELEGRAM | *(unset)* | Telegram bot URL for notifications |
NOTIFY_PUSHOVER | *(unset)* | Pushover URL for notifications |
NOTIFY_SLACK | *(unset)* | Slack webhook URL for notifications |
NOTIFY_EMAIL | *(unset)* | Email (SMTP) URL for notifications |
NOTIFY_GOTIFY | *(unset)* | Gotify URL for notifications |
NOTIFY_URLS | *(unset)* | Catch-all — comma-separated [Apprise URLs](https://github.com/caronc/apprise/wiki) |
ANTHROPIC_API_KEY | *(unset)* | Anthropic API key (alternative to web UI OAuth) |
ANTHROPIC_AUTH_TOKEN | *(unset)* | Anthropic auth token (alternative to API key, or set to ollama for Ollama) |
ANTHROPIC_BASE_URL | *(unset)* | Custom Anthropic API endpoint (proxies, private deployments, or Ollama's Anthropic-compatible API) |
CLAUDE_CODE_USE_BEDROCK | *(unset)* | Set to 1 to use Amazon Bedrock backend |
CLAUDE_CODE_USE_VERTEX | *(unset)* | Set to 1 to use Google Vertex AI backend |
GEMINI_API_KEY | *(unset)* | Google Gemini API key |
OPENAI_API_KEY | *(unset)* | OpenAI API key (for Codex CLI, or use codex login --device-auth for ChatGPT subscription) |
CURSOR_API_KEY | *(unset)* | Cursor API key |
HOLYCLAUDE_CODEX_CHAT_PERMISSION_MODE | acceptEdits fallback | CloudCLI Codex chat fallback when a request omits permissionMode. The current browser client sends an explicit value. Valid: default, acceptEdits, bypassPermissions |
HOLYCLAUDE_CODEX_CLI_PERMISSION_MODE | default | Raw codex CLI first-boot mode for new ~/.codex/config.toml only. Valid: default, acceptEdits, bypassPermissions |
HOLYCLAUDE_DESLOPPIFY_SETUP | off | Optional Desloppify global skill setup. Valid: off, all, claude, codex, gemini, opencode, or comma-separated subsets |
HOLYCLAUDE_SSH_ENABLE | false | Enables the optional sshd service when a safe authorized_keys mount is present |
HOLYCLAUDE_SSH_AUTHORIZED_KEYS | /run/holyclaude-ssh/authorized_keys | Read-only public-key file for SSH login as claude; must not live under .claude or /workspace |
HOLYCLAUDE_SSH_HOST_KEYS_DIR | /var/lib/holyclaude-ssh/host_keys | Root-owned SSH host key directory; mount /var/lib/holyclaude-ssh to keep fingerprints stable after recreate |
HOLYCLAUDE_MOSH_ENABLE | false | Allows mosh-server for SSH sessions when UDP ports are mapped |
HOLYCLAUDE_MOSH_UDP_START | 60000 | First UDP port Mosh may use |
HOLYCLAUDE_MOSH_UDP_END | 60010 | Last UDP port Mosh may use |
<p align="right"> <a href="#top">↑ back to top</a> </p>
---
By default, the CloudCLI account database (~/.cloudcli) is container-local and gets wiped on rebuild. Re-creating the account takes 10 seconds, so most people leave it as-is.
CloudCLI is a single-user service. Remote access shares the same CloudCLI account, /workspace, and mounted credential context; it does not create separate users or tenant isolation.
If you want it to survive rebuilds, add a named Docker volume to your 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 block
HolyClaude prepares this directory before CloudCLI starts. Fresh Docker volumes inherit the image's claude:claude ownership. Existing volumes are repaired to the configured PUID/PGID during normal root-starting Docker startup. If the mount is read-only or cannot be repaired, startup stops with the exact path and UID/GID instead of letting CloudCLI repeat unable to open database file.
For rootless Podman, use docker-compose.podman-rootless.yaml. Its keep-id mapping and :Z labels let the existing host user write the mounted state without a privileged ownership repair. :Z handles SELinux labeling; :U rewrites host ownership and is not the default.
Do NOT bind-mount./data/cloudclion a network share (NAS, SMB/CIFS, NFS). CloudCLI stores its account in SQLite, and SQLite's file locking breaks on network mounts. You'll hitdatabase is lockederrors constantly. Named volumes live on the Docker engine's local filesystem, which is why this works — bind mounts pointing at a NAS will not.
A bind mount to a local SSD path is fine too, just keep it off any network share.
<p align="right"> <a href="#top">↑ back to top</a> </p>
---
HolyClaude also ships sshd and Mosh for people who want a direct terminal from a phone, laptop, NAS, or VPN connection. It is off by default. Nothing listens on port 22 unless you enable it.
This is a remote shell into the same container that holds your /workspace and Claude state. Treat it like SSH to your dev box:
claudeauthorized_keys under .claude or /workspaceSafe setup shape:
services:
holyclaude:
ports:
- "127.0.0.1:2222:22"
- "127.0.0.1:60000-60010:60000-60010/udp"
volumes:
- ./data/ssh/authorized_keys:/run/holyclaude-ssh/authorized_keys:ro
- holyclaude-ssh:/var/lib/holyclaude-ssh
environment:
- HOLYCLAUDE_SSH_ENABLE=true
- HOLYCLAUDE_MOSH_ENABLE=true
volumes:
holyclaude-ssh:
Prepare the public key file on the host:
mkdir -p data/ssh
cp ~/.ssh/id_ed25519.pub data/ssh/authorized_keys
Connect over SSH:
ssh -p 2222 claude@127.0.0.1
Connect over Mosh when UDP is reachable:
mosh --ssh="ssh -p 2222" -p 60000:60010 claude@127.0.0.1
Bind those ports to localhost, a VPN interface, or a firewall-restricted address. If you change 127.0.0.1 to 0.0.0.0, you are taking responsibility for that exposure.
The full image ships eight AI CLIs. The slim image ships the five core CLIs.
| Provider | Command | How to authenticate | Subscription works? |
|---|---|---|---|
| **Claude Code** | claude | CloudCLI web UI (OAuth) | **Yes** — Max/Pro plan or API key |
| **Gemini CLI** | gemini | GEMINI_API_KEY env var | API key (pay-per-use) |
| **OpenAI Codex** | codex | OPENAI_API_KEY or codex login --device-auth | **Yes** — ChatGPT Plus/Pro/Team/Enterprise or API key |
| **Cursor** | cursor | CURSOR_API_KEY env var | API key |
| **TaskMaster AI** | task-master | Uses existing AI provider keys | Works with configured keys |
| **Junie** | junie | JetBrains AI subscription | JetBrains account required, full image only |
| **OpenCode** | opencode | Configure via TUI | OpenRouter and other providers, full image only |
| **Pi Coding Agent** | pi | Configure through Pi | Supports multiple providers, full image only |
Claude Code is the primary CLI. The others are there because sometimes you want a second opinion, or a specific model's strengths, or you're comparing outputs. Having all of them one Tab away is the whole point.
OpenCode is the full-image path for OpenRouter and multi-provider model routing. Configure it inside opencode; free model availability depends on OpenRouter and provider account limits, not HolyClaude.
<p align="right"> <a href="#top">↑ back to top</a> </p>
---
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. | ~4.1 GB |
**slim** | Core tools only — Claude installs extras on-demand | Smaller VPS, limited disk, metered bandwidth | ~2.4 GB |
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
The full image includes everything above, plus:
<details> <summary><strong>Additional AI CLIs</strong></summary>
| CLI | Command | What it's for |
|---|---|---|
| **Junie** | junie | JetBrains' AI coding agent |
| **OpenCode** | opencode | Open source AI agent (OpenRouter and other providers) |
| **Pi Coding Agent** | pi | Minimal agent harness (multiple providers) |
</details>
<details> <summary><strong>Additional npm packages — deployment, ORMs, performance</strong></summary>
| Package | What it's for |
|---|---|
wrangler, @cloudflare/next-on-pages | Cloudflare Workers deployment |
vercel | Vercel deployment |
netlify-cli | Netlify deployment; the optional local Go/Rust functions proxy is omitted |
az | Azure CLI for cloud deployment and management |
prisma, drizzle-kit | The two most popular Node.js ORMs |
pm2 | Production process manager |
eas-cli | Expo / React Native builds |
lighthouse, @lhci/cli | Performance auditing (full image only; Chromium is already there) |
sharp-cli | Image processing CLI |
json-server, http-server | Mock REST APIs, static file serving |
@marp-team/marp-cli | Markdown to presentation slides |
</details>
<details> <summary><strong>Additional Python packages — PDFs, data viz, web frameworks</strong></summary>
| Package | What it's for |
|---|---|
reportlab, weasyprint, cairosvg, fpdf2, PyMuPDF, img2pdf | PDF generation, reading, conversion, and merging libraries. |
xlsxwriter, xlrd | Excel formats beyond what openpyxl covers |
matplotlib, seaborn | Data visualization and charts |
python-pptx | PowerPoint generation |
fastapi, uvicorn | Python web framework |
</details>
<details> <summary><strong>Additional system packages — media, documents</strong></summary>
| Package | What it's for |
|---|---|
pandoc | Convert between any document format (markdown, HTML, PDF, docx, epub...) |
ffmpeg | Video and audio processing (extract, convert, transcode) |
libvips-dev | High-performance image processing library |
</details>
Slim users: Missing a package? Ask Claude. It installs npm/pip packages in seconds. System packages (pandoc, ffmpeg) take 1-2 minutes. You get the same capabilities — the full image just has zero wait time.
<p align="right"> <a href="#top">↑ back to top</a> </p>
---
<details> <summary><strong>CloudCLI shows wrong default directory</strong></summary>
CloudCLI opens to /home/claude instead of /workspace.
Cause: A custom or modified CloudCLI service script did not set WORKSPACES_ROOT=/workspace before launching CloudCLI.
Fix: Already handled in HolyClaude. The s6 run script uses with-contenv, exports WORKSPACES_ROOT=/workspace, then starts CloudCLI as the claude user. </details>
<details> <summary><strong>CloudCLI says "Failed to browse filesystem"</strong></summary>
CloudCLI cannot open ~, /workspace, or a broad NAS mount such as /volume2/docker:/workspace.
Cause: HolyClaude 1.3.3 could remove CloudCLI's expandWorkspacePath helper while disabling CloudCLI's in-container self-update path.
Fix: Update to HolyClaude 1.3.4 or newer:
docker compose pull && docker compose up -d
Broad NAS mounts work, but /workspace is the CloudCLI boundary. Anything readable under that mount is visible to authenticated CloudCLI users. Use a narrower project mount when you do not want the whole NAS folder tree exposed inside CloudCLI. </details>
<details> <summary><strong>CloudCLI Web Terminal shows black squares or missing characters</strong></summary>
The Web Terminal output is hard to read. Box drawing, emoji, CJK text, or CLI banners may show as black squares or broken characters.
Cause: Older images built the CloudCLI Web Terminal plugin with string-based PTY output handling and a narrow xterm.js font stack. If a multibyte character was split between PTY chunks, or if WebGL picked a weak fallback font, terminal output could render as replacement blocks.
Fix: Update to HolyClaude 1.3.5 or newer:
docker compose pull && docker compose up -d
HolyClaude now patches the baked Web Terminal plugin before it is built. If your browser still shows black squares after updating, open browser DevTools on the CloudCLI page, run this once, then reopen the Web Terminal:
localStorage.setItem('web-terminal-disable-webgl', 'true') </details>
<details> <summary><strong>SQLite "database is locked"</strong></summary>
Cause: SQLite databases on SMB/CIFS network mounts. CIFS doesn't support the file-level locking SQLite requires.
Fix: Don't store SQLite databases on network shares. HolyClaude keeps .cloudcli in container-local storage for exactly this reason. If you have your own SQLite databases in /workspace on a NAS, move them to a local path. </details>
<details> <summary><strong>Chromium crashes / blank pages / tab failures</strong></summary>
Cause: Usually insufficient shared memory. Docker defaults to 64MB. If the process exits immediately with SIGTRAP or exit 133, treat that as a separate browser/runtime failure instead of a shared-memory symptom.
Fix: Ensure shm_size: 2g in your compose file. For heavy browser use (many tabs, complex pages), increase to 4g. If you still get an immediate SIGTRAP, re-check the browser build path before only raising shm. </details>
<details> <summary><strong>File watchers not detecting changes (hot reload broken)</strong></summary>
Cause: SMB/CIFS network mounts don't support inotify.
Fix: Enable polling in your compose environment:
- CHOKIDAR_USEPOLLING=1
- WATCHFILES_FORCE_POLLING=true Note: Polling uses more CPU than inotify. Only enable on network mounts. </details>
<details> <summary><strong>Permission denied errors</strong></summary>
Cause: Container UID/GID doesn't match host file ownership.
Fix for Docker: ```bash
HolyClaude 是一个全面的开发工作站项目,提供一个完整的开发环境。
HolyClaude 不是一个最小的容器,而是一个完整的开发工作站,包含 Claude Code、web UI、无头浏览器、7 个 AI CLI 和 50+ 个开发工具,所有这些都已经容器化并准备好使用。
HolyClaude 不需要任何环境依赖或系统要求。
HolyClaude 的安装过程非常简单,只需要一条命令:docker compose up。HolyClaude 支持您的现有 Claude Code 订阅,包括 Max/Pro 计划和 API 密钥。
HolyClaude 的使用教程如下:1. 创建一个 HolyClaude 文件夹;2. 创建一个 docker-compose.yaml 文件;3. 拉取和启动 HolyClaude:docker compose up -d;4. 打开 web UI。
HolyClaude 的配置说明包括 MCP、环境变量和关键参数等。
HolyClaude 提供 7 个 AI CLI,包括 Claude Code、Gemini 等,所有这些 CLI 都已经容器化并准备好使用。
HolyClaude 提供两种图像变体:latest 和 slim,两者都提供相同的质量,但 slim 图像更轻量级。
HolyClaude 的常见问题包括 CloudCLI 显示错误的默认目录等。
设计完整的AI编程生态系统,集成度高。但主要依赖Claude API,扩展性受限。文档完善度待评估,社区维护需观察。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
AI Skill Hub 点评:圣Claude AI工作站 的核心功能完整,质量良好。对于自动化工程师和运维人员来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | HolyClaude |
| 原始描述 | 开源AI工作流:AI coding workstation: Claude Code + web UI + 7 AI CLIs + headless browser + 50+。⭐2.3k · Dockerfile |
| Topics | Claude集成AI编程工作流自动化Docker容器化开源工具 |
| GitHub | https://github.com/CoderLuii/HolyClaude |
| License | MIT |
| 语言 | Dockerfile |
收录时间:2026-05-16 · 更新时间:2026-05-19 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端