[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-CoderLuii--HolyClaude":3,"tool-CoderLuii--HolyClaude":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":80,"owner_email":81,"owner_twitter":76,"owner_website":82,"owner_url":83,"languages":84,"stars":97,"forks":98,"last_commit_at":99,"license":100,"difficulty_score":23,"env_os":101,"env_gpu":102,"env_ram":102,"env_deps":103,"category_tags":113,"github_topics":114,"view_count":23,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":130,"updated_at":131,"faqs":132,"releases":163},3183,"CoderLuii\u002FHolyClaude","HolyClaude","AI coding workstation: Claude Code + web UI + 7 AI CLIs + headless browser + 50+ tools","HolyClaude 是一款开箱即用的 AI 编程工作站，旨在让开发者通过一条命令即可启动完整的开发环境。它集成了官方原生的 Claude Code 命令行工具、友好的 Web 操作界面、无头浏览器（用于截图和自动化测试）、7 种主流 AI 命令行工具以及超过 50 种常用开发实用程序，所有组件均被精心封装在 Docker 容器中。\n\n过去，手动搭建此类环境往往需要数小时：开发者常受困于 Docker 共享内存不足导致浏览器无法启动、容器内权限配置错误、工作目录所有权冲突或数据库锁死等繁琐问题。HolyClaude 正是为解决这些痛点而生，作者在实际服务器长期运行中修复了各类边缘情况，确保环境稳定可靠。用户无需再为配置烦恼，只需执行 `docker compose up`，即可直接利用现有的 Claude Code 订阅（包括 Max\u002FPro 计划或 API Key）投入工作。\n\n这款工具特别适合希望高效利用 AI 辅助编程的软件工程师、全栈开发者及技术研究人员。其独特亮点在于“零配置”体验与对真实 CLI 环境的完美还原——它不是简单的包装器，而是提供了包含 Playwright、T","HolyClaude 是一款开箱即用的 AI 编程工作站，旨在让开发者通过一条命令即可启动完整的开发环境。它集成了官方原生的 Claude Code 命令行工具、友好的 Web 操作界面、无头浏览器（用于截图和自动化测试）、7 种主流 AI 命令行工具以及超过 50 种常用开发实用程序，所有组件均被精心封装在 Docker 容器中。\n\n过去，手动搭建此类环境往往需要数小时：开发者常受困于 Docker 共享内存不足导致浏览器无法启动、容器内权限配置错误、工作目录所有权冲突或数据库锁死等繁琐问题。HolyClaude 正是为解决这些痛点而生，作者在实际服务器长期运行中修复了各类边缘情况，确保环境稳定可靠。用户无需再为配置烦恼，只需执行 `docker compose up`，即可直接利用现有的 Claude Code 订阅（包括 Max\u002FPro 计划或 API Key）投入工作。\n\n这款工具特别适合希望高效利用 AI 辅助编程的软件工程师、全栈开发者及技术研究人员。其独特亮点在于“零配置”体验与对真实 CLI 环境的完美还原——它不是简单的包装器，而是提供了包含 Playwright、TypeScript、Python 及各类数据库客户端在内的生产级环境。无论是进行复杂的项目构建、自动化测试还是快速原型开发，HolyClaude 都能让你跳过环境搭建的坑，专注于代码创造本身。","🌍 **English** | [Español](docs\u002Ftranslations\u002FREADME.es.md) | [Français](docs\u002Ftranslations\u002FREADME.fr.md) | [Italiano](docs\u002Ftranslations\u002FREADME.it.md) | [Português](docs\u002Ftranslations\u002FREADME.pt.md) | [Deutsch](docs\u002Ftranslations\u002FREADME.de.md) | [Русский](docs\u002Ftranslations\u002FREADME.ru.md) | [हिन्दी](docs\u002Ftranslations\u002FREADME.hi.md) | [中文](docs\u002Ftranslations\u002FREADME.zh.md) | [日本語](docs\u002Ftranslations\u002FREADME.ja.md) | [한국어](docs\u002Ftranslations\u002FREADME.ko.md)\n\n# \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_8fa943cbeca3.png\" alt=\"HolyClaude\" width=\"39\" valign=\"bottom\"> \u003Ca name=\"top\">\u003C\u002Fa>HolyClaude\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_62d9986719e2.png\" alt=\"HolyClaude Banner\" width=\"100%\" \u002F>\n\u003C\u002Fdiv>\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![Docker Pulls](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_74a898177127.png)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n[![Full Image](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fimage-size\u002Fcoderluii\u002Fholyclaude\u002Flatest?label=full&color=blue&logo=docker)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n[![Slim Image](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fimage-size\u002Fcoderluii\u002Fholyclaude\u002Fslim?label=slim&color=green&logo=docker)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n\u003Cbr>\n[![GitHub Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FCoderLuii\u002FHolyClaude?style=social)](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude)\n[![Twitter Follow](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002FCoderLuii?style=social)](https:\u002F\u002Fx.com\u002FCoderLuii)\n[![PayPal](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDonate-PayPal-blue.svg)](https:\u002F\u002Fwww.paypal.com\u002Fdonate\u002F?hosted_button_id=PM2UXGVSTHDNL)\n[![Buy Me A Coffee](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBuy%20Me%20A%20Coffee-support-yellow.svg?style=flat&logo=buy-me-a-coffee)](https:\u002F\u002Fbuymeacoffee.com\u002FCoderLuii)\n[![Website](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fwebsite-coderluii.dev-orange?logo=astro)](https:\u002F\u002Fcoderluii.dev)\n[![GitHub Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FCoderLuii\u002FHolyClaude?color=369eff&labelColor=black&logo=github&style=flat-square)](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Freleases)\n[![Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002FCoderLuii\u002FHolyClaude?color=ff80eb&labelColor=black&style=flat-square)](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues)\n[![Contributors](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcontributors\u002FCoderLuii\u002FHolyClaude?color=c4f042&labelColor=black&style=flat-square)](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fgraphs\u002Fcontributors)\n\n### Stop configuring. Start building.\n\nOne command. Full AI development workstation. Claude Code, web UI, headless browser, 7 AI CLIs, 50+ dev tools — containerized and ready.\n\n**You were going to spend 2 hours setting this up manually. Or you could just `docker compose up`.**\n\n**Works with your existing Claude Code subscription.** Max\u002FPro plan, API key — whatever you have, it just works.\n\n---\n\n## What is this?\n\nYou 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.\n\nSo 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—\n\n**HolyClaude is the container I built after solving every single one of those problems.**\n\nI'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.\n\nYou pull it. You run it. You open your browser. You build.\n\n### :credit_card: Use Your Existing Subscription\n\n**This runs the real Claude Code CLI.** Not a wrapper. Not a proxy. Not a knock-off.\n\nYour existing Anthropic account works directly:\n- **Claude Max\u002FPro plan** — authenticate through the web UI (OAuth), same as desktop Claude Code\n- **Anthropic API key** — set it through the web UI, same billing as always\n- **No extra cost** — HolyClaude is free and open source. You only pay Anthropic for what you use, like you already do.\n\n> HolyClaude doesn't touch your credentials. They're stored locally in your bind-mounted volume (`.\u002Fdata\u002Fclaude\u002F`), same as they would be on bare metal.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## Table of Contents\n\n| | Section |\n|---|---|\n| :zap: | [Quick Start](#zap-quick-start) |\n| :computer: | [Platform Support](#computer-platform-support) |\n| :star2: | [Why HolyClaude](#star2-why-holyclaude) |\n| :credit_card: | [Subscription & Authentication](#credit_card-subscription--authentication) |\n| :package: | [Image Variants](#package-image-variants) |\n| :whale: | [Docker Compose — Quick](#whale-docker-compose--quick) |\n| :whale2: | [Docker Compose — Full](#whale2-docker-compose--full) |\n| :wrench: | [Environment Variables](#wrench-environment-variables) |\n| :rocket: | [What's Inside](#rocket-whats-inside) |\n| :robot: | [AI CLI Providers](#robot-ai-cli-providers) |\n| :llama: | [Using Ollama](#llama-using-ollama) |\n| :building_construction: | [Architecture](#building_construction-architecture) |\n| :file_folder: | [Project Structure](#file_folder-project-structure) |\n| :floppy_disk: | [Data & Persistence](#floppy_disk-data--persistence) |\n| :lock: | [Permissions](#lock-permissions) |\n| :bell: | [Notifications](#bell-notifications) |\n| :arrows_counterclockwise: | [Upgrading](#arrows_counterclockwise-upgrading) |\n| :construction: | [Troubleshooting](#construction-troubleshooting) |\n| :warning: | [Known Issues](#warning-known-issues) |\n| :hammer_and_wrench: | [Building Locally](#hammer_and_wrench-building-locally) |\n| :bar_chart: | [Alternatives](#bar_chart-alternatives) |\n| :rocket: | [Roadmap](#rocket-roadmap) |\n| :trophy: | [Built with HolyClaude](#trophy-built-with-holyclaude) |\n| :handshake: | [Contributing](#handshake-contributing) |\n| :heart: | [Support](#heart-support) |\n| :scroll: | [Third-Party Software](#scroll-third-party-software) |\n| :page_facing_up: | [License](#page_facing_up-license) |\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :zap: Quick Start\n\n**1.** Create a folder for HolyClaude:\n\n```bash\nmkdir holyclaude && cd holyclaude\n```\n\n**2.** Create a `docker-compose.yaml` file. Copy one of the templates below:\n- [Quick template](#whale-docker-compose--quick) — minimal, zero config, just works\n- [Full template](#whale2-docker-compose--full) — all options, fully documented\n\n**3.** Pull and start:\n\n```bash\ndocker compose up -d\n```\n\n**4.** Open the web UI:\n\n```\nhttp:\u002F\u002Flocalhost:3001\n```\n\n**5.** Create a CloudCLI account (takes 10 seconds), sign in with your Anthropic account, and you're live.\n\n> No `.env` files. No pre-configuration. No reading 40 pages of docs before you can start. It just runs.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :computer: Platform Support\n\n| Platform | Status | Notes |\n|----------|--------|-------|\n| Linux (amd64) | ✅ Fully supported | Native performance, recommended |\n| Linux (arm64) | ✅ Fully supported | Raspberry Pi 4+, Oracle Cloud, AWS Graviton |\n| macOS (Docker Desktop) | ✅ Fully supported | Apple Silicon & Intel via Docker Desktop |\n| Windows (WSL2 + Docker Desktop) | ✅ Fully supported | Requires WSL2 backend |\n| Synology \u002F QNAP NAS | ✅ Fully supported | Use `CHOKIDAR_USEPOLLING=true` for SMB mounts |\n| Kubernetes | 🔜 Coming soon | Helm chart planned |\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :star2: Why HolyClaude\n\nI 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.\n\nSo I made a container that does all of it. And then I hit every possible bug so you don't have to.\n\n| | HolyClaude | Doing it yourself |\n|---|---|---|\n| **Setup** | 30 seconds | 1-2 hours (if it goes well) |\n| **Claude Code** | Pre-installed, pre-configured, ready | Install, configure, debug installer hanging, fix WORKDIR |\n| **Web UI** | CloudCLI included with plugins | Find a web UI, install it, configure it, wire it to Claude |\n| **Headless browser** | Chromium + Xvfb + Playwright, configured | Install Chromium, install Xvfb, configure display :99, fix shm, fix sandbox, fix seccomp... |\n| **AI CLIs** | 7 providers, one container | Install each one separately across 3 package managers |\n| **Dev tools** | 50+ tools, ready | `apt-get install` \u002F `npm i -g` \u002F `pip install` for the next hour |\n| **Process management** | s6-overlay (auto-restart, graceful shutdown) | Write your own supervisord config or hope Docker restart works |\n| **Persistence** | Bind mounts, credentials survive everything | Figure out Docker volumes, debug \"why is this a directory not a file\" |\n| **Updates** | `docker pull && docker compose up -d` | Update 50 tools manually, pray nothing breaks |\n| **Multi-arch** | AMD64 + ARM64 | Pray your Dockerfile builds on ARM |\n\n**The last row of every manual setup is \"works on my machine.\"** HolyClaude works on every machine.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :credit_card: Subscription & Authentication\n\nHolyClaude runs the **official Claude Code CLI** from Anthropic. Your existing account works out of the box.\n\n### What works:\n\n| Authentication method | How | Cost |\n|----------------------|-----|------|\n| **Claude Max\u002FPro plan** (subscription) | Sign in through CloudCLI web UI — same OAuth flow as desktop | Your existing subscription, no extra charge |\n| **Anthropic API key** | Paste your API key in the web UI | Pay-per-use, same Anthropic billing |\n\n### What doesn't work:\n\n| | Why |\n|---|---|\n| OpenAI API key for Claude | Different company, different API. OpenAI keys work with the **Codex CLI** (also pre-installed) |\n\n> **ChatGPT Plus\u002FPro subscribers:** Your subscription works with the **Codex CLI**. Run `codex login --device-auth` inside the container to authenticate with your ChatGPT account.\n\n### Other AI CLIs included:\n\n| CLI | What you need |\n|-----|--------------|\n| Gemini CLI | Google AI API key (`GEMINI_API_KEY`) |\n| OpenAI Codex | OpenAI API key (`OPENAI_API_KEY`) or ChatGPT Plus\u002FPro subscription (`codex login --device-auth`) |\n| Cursor | Cursor API key (`CURSOR_API_KEY`) |\n| TaskMaster AI | Uses your AI provider keys (Anthropic, OpenAI, etc.) |\n| Junie | JetBrains account (JetBrains AI subscription) |\n| OpenCode | Configure via `opencode` TUI (supports multiple providers) |\n\n> **HolyClaude is free and open source.** You only pay your AI providers for usage, same as you already do. We don't proxy, intercept, or touch your credentials. They live in your local bind mount.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :package: Image Variants\n\nTwo flavors. Same quality. Pick your weight class.\n\n| Tag | What you get | Best for |\n|-----|-------------|----------|\n| **`latest`** | Everything pre-installed — every tool, every library, every CLI | Most users. Zero wait time. Claude never has to stop and install something. |\n| **`slim`** | Core tools only — Claude installs extras on-demand | Smaller VPS, limited disk, metered bandwidth |\n| `X.Y.Z` | Full image, pinned version | Production stability — you control when to update |\n| `X.Y.Z-slim` | Slim image, pinned version | Production + small footprint |\n\n```bash\n# Full — batteries included (recommended)\ndocker pull coderluii\u002Fholyclaude\n\n# Slim — lean and mean\ndocker pull coderluii\u002Fholyclaude:slim\n```\n\n> **`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.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :whale: Docker Compose — Quick\n\nThe \"I just want it running\" template. Copy this entire block into a `docker-compose.yaml` file:\n\n```yaml\n# ==============================================================================\n# HolyClaude — Quick Start\n# Just run: docker compose up -d\n# Then open: http:\u002F\u002Flocalhost:3001\n# ==============================================================================\n\nservices:\n  holyclaude:\n    image: coderluii\u002Fholyclaude:latest     # Full image (use :slim for smaller download)\n    container_name: holyclaude\n    hostname: holyclaude\n    restart: unless-stopped\n    shm_size: 2g                           # Chromium needs this — don't remove\n    network_mode: bridge\n    cap_add:\n      - SYS_ADMIN                          # Required: Chromium sandboxing\n      - SYS_PTRACE                         # Required: debugging tools\n    security_opt:\n      - seccomp=unconfined                 # Required: Chromium in Docker\n    ports:\n      - \"3001:3001\"                        # CloudCLI web UI\n    volumes:\n      #\n      # .\u002Fdata\u002Fclaude — Your settings, credentials, API keys, and Claude's memory.\n      #                  This is what survives container rebuilds.\n      #                  NEVER delete this folder — your auth lives here.\n      #\n      - .\u002Fdata\u002Fclaude:\u002Fhome\u002Fclaude\u002F.claude\n      #\n      # .\u002Fworkspace — Your code. All projects go here.\n      #               Bind-mounted so you can access files from your host.\n      #\n      - .\u002Fworkspace:\u002Fworkspace\n    environment:\n      - TZ=UTC                             # Your timezone (e.g., America\u002FNew_York, Europe\u002FLondon)\n```\n\nThen:\n\n```bash\ndocker compose up -d\n```\n\nOpen `http:\u002F\u002Flocalhost:3001`. Create a CloudCLI account. Sign in with your Anthropic account. Build something.\n\n**That's the whole setup. You're done.**\n\n> **Why `SYS_ADMIN` + `seccomp=unconfined`?** Chromium needs these to run inside Docker — it's standard for any containerized browser (Playwright docs, Puppeteer docs, every CI pipeline that runs browser tests). Without them, Chromium crashes on startup. This is not a security risk unique to HolyClaude.\n\n> **Why `shm_size: 2g`?** Docker gives containers 64MB of shared memory by default. Chromium uses `\u002Fdev\u002Fshm` heavily for tab rendering. At 64MB, tabs crash randomly. 2GB is the recommended minimum for any Chromium-in-Docker setup.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :whale2: Docker Compose — Full\n\nSame image, every knob exposed. Copy this entire block into a `docker-compose.yaml` file:\n\n```yaml\n# ==============================================================================\n# HolyClaude — Full Configuration\n# All options documented inline.\n# Detailed docs: https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fblob\u002Fmain\u002Fdocs\u002Fconfiguration.md\n# ==============================================================================\n\nservices:\n  holyclaude:\n    image: coderluii\u002Fholyclaude:latest     # Full image (use :slim for smaller download)\n    container_name: holyclaude\n    hostname: holyclaude\n    restart: unless-stopped\n    shm_size: 2g                           # Chromium shared memory — increase to 4g for heavy browser use\n    network_mode: bridge\n    cap_add:\n      - SYS_ADMIN                          # Required: Chromium sandboxing\n      - SYS_PTRACE                         # Required: debugging tools (strace, lsof)\n    security_opt:\n      - seccomp=unconfined                 # Required: Chromium syscall requirements\n    ports:\n      #\n      # CloudCLI web UI — this is the only port you need.\n      # Override the host-side port from `.env` if 3001 is already in use.\n      #\n      - \"${HOLYCLAUDE_HOST_PORT:-3001}:3001\"\n      #\n      # Dev server ports — uncomment as needed.\n      # These let you access dev servers running inside the container from your host browser.\n      #\n      # - \"3000:3000\"                      # Next.js \u002F Express\n      # - \"4321:4321\"                      # Astro\n      # - \"5173:5173\"                      # Vite\n      # - \"8787:8787\"                      # Wrangler (Cloudflare Workers)\n      # - \"9229:9229\"                      # Node.js debugger\n    volumes:\n      #\n      # PERSISTENT DATA\n      #\n      # .\u002Fdata\u002Fclaude — Settings, credentials, API keys, Claude's memory file.\n      #                  Survives container rebuilds. NEVER delete this folder.\n      #                  Override the host path from `.env` if you want it elsewhere.\n      #\n      - ${HOLYCLAUDE_HOST_CLAUDE_DIR:-.\u002Fdata\u002Fclaude}:\u002Fhome\u002Fclaude\u002F.claude\n      #\n      # .\u002Fworkspace — Your code and projects. Everything you build goes here.\n      #               Accessible from your host machine.\n      #               Override the host path from `.env` if you want a different root.\n      #\n      - ${HOLYCLAUDE_HOST_WORKSPACE_DIR:-.\u002Fworkspace}:\u002Fworkspace\n    environment:\n      #\n      # TIMEZONE\n      # Full list: https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FList_of_tz_database_time_zones\n      #\n      - TZ=UTC\n      #\n      # PERFORMANCE\n      # Node.js heap memory limit in MB. Increase if you work on large monorepos\n      # and hit out-of-memory errors. 4096 (4GB) is a solid default.\n      #\n      - NODE_OPTIONS=--max-old-space-size=4096\n      #\n      # USER MAPPING\n      # Match these to your host user so files created inside the container\n      # have the right ownership on your host. Run `id -u` and `id -g` on your host.\n      #\n      - PUID=1000\n      - PGID=1000\n      #\n      # SMB\u002FCIFS NETWORK MOUNTS\n      # Only enable these if your volumes are on a NAS, Samba share, or CIFS mount.\n      # They enable polling-based file watching since network mounts don't support inotify.\n      # Leave commented out for local storage — polling uses more CPU.\n      #\n      # - CHOKIDAR_USEPOLLING=1\n      # - WATCHFILES_FORCE_POLLING=true\n      #\n      # NOTIFICATIONS (optional)\n      # Get notified when Claude finishes a task or hits an error.\n      # Uses Apprise — supports 100+ services. Also requires creating a flag file\n      # inside the container: touch ~\u002F.claude\u002Fnotify-on\n      #\n      # - NOTIFY_DISCORD=discord:\u002F\u002Fwebhook_id\u002Fwebhook_token\n      # - NOTIFY_TELEGRAM=tg:\u002F\u002Fbot_token\u002Fchat_id\n      # - NOTIFY_PUSHOVER=pover:\u002F\u002Fuser_key@app_token\n      # - NOTIFY_SLACK=slack:\u002F\u002Ftoken_a\u002Ftoken_b\u002Ftoken_c\n      # - NOTIFY_EMAIL=mailto:\u002F\u002Fuser:pass@gmail.com?to=you@gmail.com\n      # - NOTIFY_GOTIFY=gotify:\u002F\u002Fhostname\u002Ftoken\n      # - NOTIFY_URLS=                                   # catch-all: comma-separated Apprise URLs\n      #\n      # AI PROVIDER KEYS (optional)\n      # Claude Code can authenticate via web UI (OAuth) or ANTHROPIC_API_KEY.\n      # Set these if you want to use additional AI CLIs or API-based auth.\n      #\n      # - GEMINI_API_KEY=your_key\n      # - OPENAI_API_KEY=your_key\n      # - CURSOR_API_KEY=your_key\n```\n\nThen:\n\n```bash\ndocker compose up -d\n```\n\nIf you want to change the host-side port or bind-mount paths without editing compose, copy `.env.example` to `.env` and set:\n\n```dotenv\nHOLYCLAUDE_HOST_PORT=3003\nHOLYCLAUDE_HOST_CLAUDE_DIR=.\u002Fdata\u002Fclaude\nHOLYCLAUDE_HOST_WORKSPACE_DIR=.\u002Fworkspace\n```\n\nThese values are read by Docker Compose on the host. They are not container environment variables.\n\n### What each section controls:\n\n| Section | What it does | When to change it |\n|---------|-------------|-------------------|\n| **Timezone** | Container clock | Always — set to your local TZ |\n| **Performance** | Node.js memory ceiling | Only if you hit OOM errors on large projects |\n| **User mapping** | File permissions between container and host | If you get \"permission denied\" (`id -u` and `id -g` on your host) |\n| **SMB\u002FCIFS** | File watcher polling mode | Only if your volumes live on a NAS or network share |\n| **Notifications** | Push alerts via Apprise (Discord, Telegram, Slack, Email, 100+ services) | If you want to walk away and know when your AI agents are done |\n| **AI providers** | API keys for Gemini, Codex, Cursor, Junie, OpenCode | If you want to use AI CLIs other than Claude |\n\n> **Every single environment variable is optional.** The container runs perfectly with just `TZ=UTC`. Everything else has sensible defaults or is handled through the web UI.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :wrench: Environment Variables\n\nThe complete reference. Every variable, what it defaults to, what it does.\n\n| Variable | Default | What it does |\n|----------|---------|--------------|\n| `TZ` | `UTC` | Container timezone |\n| `PUID` | `1000` | Container user ID — match your host to avoid permission issues |\n| `PGID` | `1000` | Container group ID — match your host to avoid permission issues |\n| `NODE_OPTIONS` | `--max-old-space-size=4096` | Node.js heap memory limit in MB |\n| `GIT_USER_NAME` | `HolyClaude User` | Git commit author (set once on first boot) |\n| `GIT_USER_EMAIL` | `noreply@holyclaude.local` | Git commit email (set once on first boot) |\n| `CHOKIDAR_USEPOLLING` | *(unset)* | Set to `1` for SMB\u002FCIFS — enables polling file watchers |\n| `WATCHFILES_FORCE_POLLING` | *(unset)* | Set to `true` for SMB\u002FCIFS — enables Python polling |\n| `NOTIFY_DISCORD` | *(unset)* | Discord webhook URL for notifications |\n| `NOTIFY_TELEGRAM` | *(unset)* | Telegram bot URL for notifications |\n| `NOTIFY_PUSHOVER` | *(unset)* | Pushover URL for notifications |\n| `NOTIFY_SLACK` | *(unset)* | Slack webhook URL for notifications |\n| `NOTIFY_EMAIL` | *(unset)* | Email (SMTP) URL for notifications |\n| `NOTIFY_GOTIFY` | *(unset)* | Gotify URL for notifications |\n| `NOTIFY_URLS` | *(unset)* | Catch-all — comma-separated [Apprise URLs](https:\u002F\u002Fgithub.com\u002Fcaronc\u002Fapprise\u002Fwiki) |\n| `ANTHROPIC_API_KEY` | *(unset)* | Anthropic API key (alternative to web UI OAuth) |\n| `ANTHROPIC_AUTH_TOKEN` | *(unset)* | Anthropic auth token (alternative to API key) |\n| `ANTHROPIC_BASE_URL` | *(unset)* | Custom Anthropic API endpoint (proxies, private deployments) |\n| `CLAUDE_CODE_USE_BEDROCK` | *(unset)* | Set to `1` to use Amazon Bedrock backend |\n| `CLAUDE_CODE_USE_VERTEX` | *(unset)* | Set to `1` to use Google Vertex AI backend |\n| `GEMINI_API_KEY` | *(unset)* | Google Gemini API key |\n| `OPENAI_API_KEY` | *(unset)* | OpenAI API key (for Codex CLI, or use `codex login --device-auth` for ChatGPT subscription) |\n| `CURSOR_API_KEY` | *(unset)* | Cursor API key |\n| `OLLAMA_HOST` | *(unset)* | Ollama endpoint URL (e.g., `http:\u002F\u002Fhost.docker.internal:11434`) |\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :rocket: What's Inside\n\nThis is not a minimal container. This is an entire development workstation.\n\n### Both variants (full + slim)\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Node.js 22 LTS + npm global packages\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Package | What it's for |\n|---------|---------------|\n| `typescript`, `tsx` | TypeScript compilation and execution |\n| `pnpm` | Fast, disk-efficient package manager |\n| `vite`, `esbuild` | Lightning-fast build tools |\n| `eslint`, `prettier` | Code quality and formatting |\n| `serve`, `nodemon` | Static file server, auto-restart dev server |\n| `concurrently` | Run multiple scripts in parallel |\n| `dotenv-cli` | Load env vars from `.env` files |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Python 3 packages\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Package | What it's for |\n|---------|---------------|\n| `requests`, `httpx` | HTTP clients |\n| `beautifulsoup4`, `lxml` | Web scraping and HTML parsing |\n| `Pillow` | Image processing (pre-compiled — no waiting) |\n| `pandas`, `numpy` | Data manipulation (pre-compiled — seriously, you don't want to pip install these at runtime) |\n| `openpyxl` | Read\u002Fwrite Excel files |\n| `python-docx` | Read\u002Fwrite Word documents |\n| `jinja2`, `markdown` | Templating and markdown rendering |\n| `pyyaml`, `python-dotenv` | Config file parsing |\n| `rich`, `click`, `tqdm` | Beautiful CLIs and progress bars |\n| `playwright` | Browser automation (Chromium already configured and ready) |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>System tools\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Tool | What it's for |\n|------|---------------|\n| `git`, `gh` | Version control + GitHub CLI (PRs, issues, releases from the terminal) |\n| `ripgrep` (`rg`), `fd`, `fzf` | Blazing-fast search — Claude uses these constantly |\n| `bat`, `tree`, `jq` | Better cat (syntax highlighting), directory trees, JSON processing |\n| `curl`, `wget` | HTTP downloads |\n| `tmux` | Terminal multiplexer — run things in the background |\n| `htop`, `lsof`, `strace` | Process monitoring and debugging |\n| `imagemagick` | Image conversion (`convert`, `identify`, `mogrify`) |\n| `chromium` | Headless browser — screenshots, Playwright, Lighthouse |\n| `psql`, `redis-cli`, `sqlite3` | Talk to databases directly |\n| `openssh-client` | SSH into things |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>AI CLIs — every major provider\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| CLI | Command | What it's for |\n|-----|---------|---------------|\n| **Claude Code** | `claude` | The main event — you're running inside this |\n| **Gemini CLI** | `gemini` | Google's AI coding agent |\n| **OpenAI Codex** | `codex` | OpenAI's coding agent |\n| **Cursor** | `cursor` | Cursor's AI agent |\n| **TaskMaster AI** | `task-master` | Task planning and orchestration |\n| **Junie** | `junie` | JetBrains' AI coding agent |\n| **OpenCode** | `opencode` | Open source AI agent (multiple providers) |\n\nSeven AI CLIs. One container. Switch between them instantly. No other Docker image does this.\n\n\u003C\u002Fdetails>\n\n### Full image only (additional packages)\n\nThe full image includes everything above, plus:\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Additional npm packages — deployment, ORMs, performance\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Package | What it's for |\n|---------|---------------|\n| `wrangler`, `@cloudflare\u002Fnext-on-pages` | Cloudflare Workers deployment |\n| `vercel` | Vercel deployment |\n| `netlify-cli` | Netlify deployment |\n| `az` | Azure CLI for cloud deployment and management |\n| `prisma`, `drizzle-kit` | The two most popular Node.js ORMs |\n| `pm2` | Production process manager |\n| `eas-cli` | Expo \u002F React Native builds |\n| `lighthouse`, `@lhci\u002Fcli` | Performance auditing (Chromium is already there) |\n| `sharp-cli` | Image processing CLI |\n| `json-server`, `http-server` | Mock REST APIs, static file serving |\n| `@marp-team\u002Fmarp-cli` | Markdown to presentation slides |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Additional Python packages — PDFs, data viz, web frameworks\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Package | What it's for |\n|---------|---------------|\n| `reportlab`, `weasyprint`, `cairosvg`, `fpdf2`, `PyMuPDF`, `pdfkit`, `img2pdf` | Every major PDF library. Generate them, read them, convert them, merge them. |\n| `xlsxwriter`, `xlrd` | Excel formats beyond what openpyxl covers |\n| `matplotlib`, `seaborn` | Data visualization and charts |\n| `python-pptx` | PowerPoint generation |\n| `fastapi`, `uvicorn` | Python web framework |\n| `httpie` | Human-friendly HTTP client (like curl but readable) |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Additional system packages — media, documents\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Package | What it's for |\n|---------|---------------|\n| `pandoc` | Convert between any document format (markdown, HTML, PDF, docx, epub...) |\n| `ffmpeg` | Video and audio processing (extract, convert, transcode) |\n| `libvips-dev` | High-performance image processing library |\n\n\u003C\u002Fdetails>\n\n> **Slim users:** Missing a package? Ask Claude. It installs npm\u002Fpip packages in seconds. System packages (pandoc, ffmpeg) take 1-2 minutes. You get the same capabilities — the full image just has zero wait time.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :robot: AI CLI Providers\n\nSeven AI CLIs. One container. No other Docker image gives you this.\n\n| Provider | Command | How to authenticate | Subscription works? |\n|----------|---------|--------------------|--------------------|\n| **Claude Code** | `claude` | CloudCLI web UI (OAuth) | **Yes** — Max\u002FPro plan or API key |\n| **Gemini CLI** | `gemini` | `GEMINI_API_KEY` env var | API key (pay-per-use) |\n| **OpenAI Codex** | `codex` | `OPENAI_API_KEY` or `codex login --device-auth` | **Yes** — ChatGPT Plus\u002FPro\u002FTeam\u002FEnterprise or API key |\n| **Cursor** | `cursor` | `CURSOR_API_KEY` env var | API key |\n| **TaskMaster AI** | `task-master` | Uses existing AI provider keys | Works with configured keys |\n| **Junie** | `junie` | JetBrains AI subscription | JetBrains account required |\n| **OpenCode** | `opencode` | Configure via TUI | Supports multiple providers |\n\n> 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.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :llama: Using Ollama\n\nHolyClaude works with [Ollama](https:\u002F\u002Follama.com) as an alternative to an Anthropic subscription. Set two environment variables and use local or cloud models.\n\nSee the full setup guide: **[docs\u002Follama.md](docs\u002Follama.md)**\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :building_construction: Architecture\n\n```mermaid\ngraph TB\n    subgraph Docker Container\n        EP[\"entrypoint.sh\"] --> BS[\"bootstrap.sh\\n(first boot only)\"]\n        EP --> S6[\"s6-overlay\\n(PID 1)\"]\n        S6 --> CC[\"CloudCLI\\n(:3001)\"]\n        S6 --> XV[\"Xvfb\\n(:99)\"]\n        CC --> CLAUDE[\"Claude Code CLI\"]\n        CLAUDE --> TOOLS[\"Dev Tools\\n(Node, Python, Git...)\"]\n        CLAUDE --> CHROME[\"Chromium\\n(headless)\"]\n        XV -.-> CHROME\n    end\n\n    subgraph Host\n        DATA[\".\u002Fdata\u002Fclaude\"] -.->|bind mount| HOME[\"~\u002F.claude\"]\n        WS[\".\u002Fworkspace\"] -.->|bind mount| WORK[\"\u002Fworkspace\"]\n    end\n\n    USER[\"Browser\"] -->|\":3001\"| CC\n\n    style S6 fill:#2d3748,color:#fff\n    style CC fill:#6366f1,color:#fff\n    style CLAUDE fill:#f59e0b,color:#000\n```\n\n### How the pieces fit together\n\n1. **Container starts** — `entrypoint.sh` runs as root. Remaps UID\u002FGID to match your host user, pre-creates required files (preventing Docker's \"create it as a directory\" bug), checks if this is a first boot.\n\n2. **First boot only** — `bootstrap.sh` runs once. Copies default settings, memory template, configures git identity. Creates a sentinel file (`.holyclaude-bootstrapped`) so it never runs again. Your customizations are safe from that point on.\n\n3. **s6-overlay takes over as PID 1** — This isn't supervisord. It's [s6-overlay](https:\u002F\u002Fgithub.com\u002Fjust-containers\u002Fs6-overlay), purpose-built for Docker. Supervises CloudCLI and Xvfb. Auto-restarts on crash. Forwards signals. Reaps zombies. Shuts down gracefully.\n\n4. **CloudCLI serves the web UI** — Port 3001. Browser-based interface to Claude Code with project management, multiple sessions, and plugins (project stats + web terminal included).\n\n5. **Xvfb provides a virtual display** — Chromium needs a screen to render to, even in \"headless\" mode. Xvfb gives it a 1920x1080 virtual display at `:99`. This is why Playwright, screenshots, and Lighthouse all work out of the box.\n\nSee [docs\u002Farchitecture.md](docs\u002Farchitecture.md) for the full technical deep-dive — including why we chose s6 over supervisord, why plugins are baked into the image, and why `runuser` instead of `su`.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :file_folder: Project Structure\n\n```\nholyclaude\u002F\n├── .github\u002F                 # CI\u002FCD workflows, issue & PR templates\n│   ├── FUNDING.yml          # Sponsor\u002Fdonation links\n│   ├── ISSUE_TEMPLATE\u002F      # Bug report, feature request, package request\n│   ├── pull_request_template.md\n│   ├── SECURITY.md          # Security policy\n│   └── workflows\u002F           # Docker build & push automation\n├── assets\u002F                  # Logo and banner images\n├── config\u002F                  # Claude Code configuration\n│   ├── claude-memory-full.md\n│   ├── claude-memory-slim.md\n│   └── settings.json\n├── docs\u002F                    # Extended documentation\n│   ├── architecture.md\n│   ├── CHANGELOG.md\n│   ├── configuration.md\n│   ├── dockerhub-description.md\n│   ├── ollama.md\n│   └── troubleshooting.md\n├── scripts\u002F                 # Container lifecycle scripts\n│   ├── bootstrap.sh         # First-run setup\n│   ├── entrypoint.sh        # Container entrypoint\n│   └── notify.py            # Notification helper (Apprise)\n├── s6-overlay\u002F              # Process supervision (s6-rc services)\n├── Dockerfile               # Single-stage build\n├── docker-compose.yaml      # Quick start (minimal config)\n├── docker-compose.full.yaml # Full config (all options)\n├── LICENSE\n└── README.md\n```\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :floppy_disk: Data & Persistence\n\n| What | Where (container) | Where (host) | Survives rebuild? |\n|------|-------------------|-------------|-------------------|\n| Settings, credentials, API keys | `\u002Fhome\u002Fclaude\u002F.claude` | `.\u002Fdata\u002Fclaude` | **Yes** |\n| Your code and projects | `\u002Fworkspace` | `.\u002Fworkspace` | **Yes** |\n| CloudCLI account | `\u002Fhome\u002Fclaude\u002F.cloudcli` | *(container only)* | No |\n| Onboarding state | `\u002Fhome\u002Fclaude\u002F.claude.json` | *(container only)* | No |\n\n### What survives `docker compose down && docker compose up`:\n- Your Anthropic authentication and API keys\n- Claude Code settings and memory (`CLAUDE.md`)\n- All your code in `.\u002Fworkspace`\n- Git configuration\n\n### What you'll redo (10 seconds):\n- CloudCLI web account — quick signup, that's it\n\n### Re-triggering first-boot setup:\n```bash\n# Delete the sentinel file — NOT the whole folder\nrm .\u002Fdata\u002Fclaude\u002F.holyclaude-bootstrapped\ndocker compose restart holyclaude\n```\n\n> **Never delete `.\u002Fdata\u002Fclaude\u002F` entirely.** That's where your credentials live. Delete the sentinel file if you want a fresh bootstrap. Delete specific config files if you want to reset settings. But never nuke the whole folder.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :lock: Permissions\n\nClaude Code runs in **`allowEdits`** mode by default. This is the safest useful setting:\n\n| Action | Allowed? |\n|--------|----------|\n| Read files | Yes |\n| Edit \u002F create files | Yes |\n| Run shell commands | **Asks you first** |\n| Install packages | **Asks you first** |\n\n### Want full bypass? (power users)\n\nThis is how I personally run it. Edit `.\u002Fdata\u002Fclaude\u002Fsettings.json` on your host:\n\n```json\n{\n  \"permissions\": {\n    \"defaultMode\": \"bypassPermissions\"\n  }\n}\n```\n\n> **Bypass mode means Claude executes any command without confirmation.** Fast, powerful, and exactly what you want if you trust what you're building. But `allowEdits` is the safe default for a reason.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :bell: Notifications\n\nWalk away from your computer and know when your AI agents are done. Claude Code, Codex, and Gemini CLI all send notifications when a task completes. Uses [Apprise](https:\u002F\u002Fgithub.com\u002Fcaronc\u002Fapprise) — supports 100+ services including Discord, Telegram, Slack, Email, Pushover, Gotify, and more.\n\n**To enable:**\n\n1. Add one or more `NOTIFY_*` variables to your compose `environment`:\n   ```yaml\n   - NOTIFY_DISCORD=discord:\u002F\u002Fwebhook_id\u002Fwebhook_token\n   - NOTIFY_TELEGRAM=tg:\u002F\u002Fbot_token\u002Fchat_id\n   ```\n2. Inside the container: `touch ~\u002F.claude\u002Fnotify-on`\n\nSee [configuration docs](docs\u002Fconfiguration.md#notifications-apprise) for all supported variables and URL formats.\n\n**To disable:** `rm ~\u002F.claude\u002Fnotify-on`\n\n**Events that trigger notifications:**\n| Event | What happened |\n|-------|--------------|\n| `stop` | Claude Code, Codex, or Gemini finished the current task |\n| `error` | A tool use failure occurred |\n\n> Completely silent when not configured. No `NOTIFY_*` vars set? No flag file? Zero network calls. Zero log spam. Zero overhead.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :arrows_counterclockwise: Upgrading\n\n```bash\n# Pull the latest image\ndocker compose pull\n\n# Recreate the container with the new image\ndocker compose up -d\n```\n\nYour data persists in `.\u002Fdata\u002Fclaude` and `.\u002Fworkspace` — upgrading only replaces the container, not your files.\n\nTo pin a specific version instead of `latest`:\n\n```yaml\nimage: coderluii\u002Fholyclaude:1.1.2   # instead of :latest\n```\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :construction: Troubleshooting\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>CloudCLI shows wrong default directory\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nCloudCLI opens to `\u002Fhome\u002Fclaude` instead of `\u002Fworkspace`.\n\n**Cause:** `WORKSPACES_ROOT` not reaching the CloudCLI process. Docker-compose env vars don't pass through s6-overlay's `s6-setuidgid` — it runs with a clean environment by design (security feature, not a bug).\n\n**Fix:** Already handled in HolyClaude. The s6 run script sets `WORKSPACES_ROOT=\u002Fworkspace` directly in the process environment.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>SQLite \"database is locked\"\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**Cause:** SQLite databases on SMB\u002FCIFS network mounts. CIFS doesn't support the file-level locking SQLite requires.\n\n**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 `\u002Fworkspace` on a NAS, move them to a local path.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Chromium crashes \u002F blank pages \u002F tab failures\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**Cause:** Insufficient shared memory. Docker defaults to 64MB.\n\n**Fix:** Ensure `shm_size: 2g` in your compose file. For heavy browser use (many tabs, complex pages), increase to `4g`.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>File watchers not detecting changes (hot reload broken)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**Cause:** SMB\u002FCIFS network mounts don't support `inotify`.\n\n**Fix:** Enable polling in your compose environment:\n```yaml\n- CHOKIDAR_USEPOLLING=1\n- WATCHFILES_FORCE_POLLING=true\n```\nNote: Polling uses more CPU than inotify. Only enable on network mounts.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Permission denied errors\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**Cause:** Container UID\u002FGID doesn't match host file ownership.\n\n**Fix:**\n```bash\n# On your host machine\nid -u  # → this is your PUID\nid -g  # → this is your PGID\n```\nSet them in your compose file:\n```yaml\n- PUID=1000\n- PGID=1000\n```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Docker creates .claude.json as a directory\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**Cause:** If a bind-mount target file doesn't exist before container start, Docker helpfully creates it as a directory. Thanks, Docker.\n\n**Fix:** Already handled — `entrypoint.sh` pre-creates it as a file.\n\u003C\u002Fdetails>\n\nSee [docs\u002Ftroubleshooting.md](docs\u002Ftroubleshooting.md) for the complete guide including all SMB\u002FCIFS gotchas and the full history of bugs we encountered and fixed.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :warning: Known Issues\n\nThese are not HolyClaude bugs — they're upstream issues or intentional trade-offs.\n\n| Issue | Why | Workaround |\n|-------|-----|------------|\n| \"Continue in Shell\" button broken | CloudCLI upstream bug (race condition in terminal init) | Use the **Web Terminal** plugin instead (pre-installed) |\n| Cursor CLI \"Command timeout\" | No API key configured — cosmetic only, doesn't affect anything | Set `CURSOR_API_KEY` or ignore |\n| CloudCLI account lost on rebuild | SQLite can't persist on network mounts — intentional trade-off | Re-create account (~10 seconds) |\n| Web push notifications \"not supported\" | Browser limitation in CloudCLI, standard behavior | Use Apprise notifications instead (see [Notifications](#bell-notifications)) |\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :hammer_and_wrench: Building Locally\n\nWant to build the image yourself instead of pulling from Docker Hub? Go for it:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude.git\ncd holyclaude\n\n# Build full image\ndocker build -t holyclaude .\n\n# Build slim image\ndocker build --build-arg VARIANT=slim -t holyclaude:slim .\n\n# Build for ARM (Apple Silicon, Raspberry Pi, AWS Graviton)\ndocker buildx build --platform linux\u002Farm64 -t holyclaude .\n```\n\nThen use `image: holyclaude` instead of `image: coderluii\u002Fholyclaude:latest` in your compose file.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :bar_chart: Alternatives\n\nHow does HolyClaude compare to other approaches?\n\n| Approach | Web UI | Multi-AI | Pre-configured tools | Headless browser | One command setup | Persistence |\n|----------|--------|----------|---------------------|-----------------|-------------------|-------------|\n| **HolyClaude** | CloudCLI | 5 CLIs | 50+ tools | Chromium + Xvfb + Playwright | `docker compose up` | Bind mounts |\n| Claude Code (bare metal) | No | No | Install yourself | Install yourself | Multi-step install | Manual |\n| Claude Code + oh-my-openagent | No | Yes (multi-model) | Some | No | npm install | Manual |\n| DIY Docker + Claude Code | Maybe | Maybe | Whatever you add | If you configure it | If you write the Dockerfile | If you set up volumes |\n| Cursor IDE | Built-in | Cursor only | IDE-bundled | No | Download app | App data |\n\nHolyClaude isn't competing with coding agents — it's the **infrastructure layer** that makes them all work better. It's the container you run them inside.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :rocket: Roadmap\n\nWhat's coming next:\n\n| Status | Feature |\n|--------|---------|\n| 🔜 | **ARM-native builds** — optimized native ARM64 images, not just emulated |\n| 🔜 | **VS Code tunnel integration** — built-in VS Code Server or tunnel for connecting from VS Code desktop |\n| 🔜 | **Notification routing** — different notification destinations per event type (errors to Telegram, completions to Discord) |\n\nHave an idea? [Start a discussion](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fdiscussions) or [request a feature](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002Fnew?template=feature_request.yml).\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :trophy: Built with HolyClaude\n\nUsing HolyClaude to build something? We'd love to see it.\n\nOpen an issue with the `showcase` label or submit a PR to add your project here:\n\n\u003C!-- Add your project: [Project Name](url) — one-line description -->\n\n*Be the first to add your project here.*\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :handshake: Contributing\n\nContributions welcome. This project was born from real daily usage, and it gets better when more people use it and find edge cases.\n\n1. Fork it\n2. Branch it (`git checkout -b feature\u002Fsomething`)\n3. Commit it\n4. Push it\n5. PR it\n\nBugs, feature requests, questions: [open an issue](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues).\n\n### Get in touch\n\n| Channel | Use for |\n|---------|---------|\n| [GitHub Discussions](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fdiscussions) | Questions, show your setup, ideas |\n| [Issues](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues) | Bug reports, feature & package requests |\n| [Security Advisories](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fsecurity\u002Fadvisories\u002Fnew) | Vulnerability reports (private) |\n\n### Want a tool added?\n\nUse the [📦 Package Request](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002Fnew?template=package_request.yml) issue template. Include the package name, install method, and which variant (full\u002Fslim) it should target.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :heart: Support\n\nHolyClaude is free, open source, and maintained by one developer who uses it every day.\n\nIf it saved you time, here's how you can help:\n\n- **Star this repo** — it's the single biggest thing you can do for visibility\n- **Share it** — tell a friend, post it, tweet it\n- **Open issues** — bug reports and feature requests make HolyClaude better for everyone\n- **Contribute** — PRs are always welcome\n\n[![PayPal](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDonate-PayPal-blue.svg)](https:\u002F\u002Fwww.paypal.com\u002Fdonate\u002F?hosted_button_id=PM2UXGVSTHDNL)\n[![Buy Me A Coffee](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBuy%20Me%20A%20Coffee-support-yellow.svg?style=flat&logo=buy-me-a-coffee)](https:\u002F\u002Fbuymeacoffee.com\u002FCoderLuii)\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :scroll: Third-Party Software\n\nThe HolyClaude Docker image includes third-party software, each under its own license. Notable components:\n\n| Component | License | Source |\n|-----------|---------|--------|\n| CloudCLI | GPL-3.0 | [siteboon\u002Fclaudecodeui](https:\u002F\u002Fgithub.com\u002Fsiteboon\u002Fclaudecodeui) |\n| s6-overlay | ISC | [just-containers\u002Fs6-overlay](https:\u002F\u002Fgithub.com\u002Fjust-containers\u002Fs6-overlay) |\n| Node.js | MIT | [nodejs\u002Fnode](https:\u002F\u002Fgithub.com\u002Fnodejs\u002Fnode) |\n\nSee [THIRD-PARTY-NOTICES](THIRD-PARTY-NOTICES) for full details including modification notices. HolyClaude's own source code is MIT licensed.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :page_facing_up: License\n\nMIT — see [LICENSE](LICENSE). Use it however you want.\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ back to top\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n\u003C!-- Star History -->\n\u003Cdiv align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#CoderLuii\u002FHolyClaude&Date\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_654d1e4052fc.png&theme=dark\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_654d1e4052fc.png\" \u002F>\n    \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_654d1e4052fc.png\" width=\"600\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n\u003C\u002Fdiv>\n\n---\n\n\u003Cdiv align=\"center\">\n\nBuilt by [CoderLuii](https:\u002F\u002Fgithub.com\u002Fcoderluii) · [coderluii.dev](https:\u002F\u002Fcoderluii.dev)\n\nThis container is what I use every day. If it saves you even half the setup time it saved me, a star would be nice.\n\n\u003C\u002Fdiv>\n","🌍 **English** | [Español](docs\u002Ftranslations\u002FREADME.es.md) | [Français](docs\u002Ftranslations\u002FREADME.fr.md) | [Italiano](docs\u002Ftranslations\u002FREADME.it.md) | [Português](docs\u002Ftranslations\u002FREADME.pt.md) | [Deutsch](docs\u002Ftranslations\u002FREADME.de.md) | [Русский](docs\u002Ftranslations\u002FREADME.ru.md) | [हिन्दी](docs\u002Ftranslations\u002FREADME.hi.md) | [中文](docs\u002Ftranslations\u002FREADME.zh.md) | [日本語](docs\u002Ftranslations\u002FREADME.ja.md) | [한국어](docs\u002Ftranslations\u002FREADME.ko.md)\n\n# \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_8fa943cbeca3.png\" alt=\"HolyClaude\" width=\"39\" valign=\"bottom\"> \u003Ca name=\"top\">\u003C\u002Fa>HolyClaude\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_62d9986719e2.png\" alt=\"HolyClaude Banner\" width=\"100%\" \u002F>\n\u003C\u002Fdiv>\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![Docker Pulls](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_74a898177127.png)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n[![Full Image](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fimage-size\u002Fcoderluii\u002Fholyclaude\u002Flatest?label=full&color=blue&logo=docker)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n[![Slim Image](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fimage-size\u002Fcoderluii\u002Fholyclaude\u002Fslim?label=slim&color=green&logo=docker)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n\u003Cbr>\n[![GitHub Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FCoderLuii\u002FHolyClaude?style=social)](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude)\n[![Twitter Follow](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002FCoderLuii?style=social)](https:\u002F\u002Fx.com\u002FCoderLuii)\n[![PayPal](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDonate-PayPal-blue.svg)](https:\u002F\u002Fwww.paypal.com\u002Fdonate\u002F?hosted_button_id=PM2UXGVSTHDNL)\n[![Buy Me A Coffee](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBuy%20Me%20A%20Coffee-support-yellow.svg?style=flat&logo=buy-me-a-coffee)](https:\u002F\u002Fbuymeacoffee.com\u002FCoderLuii)\n[![Website](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fwebsite-coderluii.dev-orange?logo=astro)](https:\u002F\u002Fcoderluii.dev)\n[![GitHub Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FCoderLuii\u002FHolyClaude?color=369eff&labelColor=black&logo=github&style=flat-square)](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Freleases)\n[![Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002FCoderLuii\u002FHolyClaude?color=ff80eb&labelColor=black&style=flat-square)](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues)\n[![Contributors](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcontributors\u002FCoderLuii\u002FHolyClaude?color=c4f042&labelColor=black&style=flat-square)](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fgraphs\u002Fcontributors)\n\n### 停止配置，开始构建。\n\n一条命令。完整的 AI 开发工作站。Claude Code、Web UI、无头浏览器、7 个 AI CLI、50 多种开发工具——全部容器化并随时可用。\n\n**你本来要花 2 小时手动设置这些。或者你只需运行 `docker compose up`。**\n\n**与你现有的 Claude Code 订阅兼容。** Max\u002FPro 方案、API 密钥——无论你有什么，它都能正常工作。\n\n---\n\n## 这是什么？\n\n你懂的。你想用 Claude Code。但你也想在浏览器中使用它。还要有用于截图和测试的无头浏览器，配置好的 Playwright，所有的 AI CLI，以及 TypeScript、Python、部署工具、数据库客户端、GitHub CLI 等等。\n\n于是你开始逐一安装这些工具。结果 Chromium 因为 Docker 的共享内存只有 64MB 而无法启动。接着 Xvfb 又没配置好。然后容器内的 UID 和宿主机不匹配，导致权限被拒绝。后来你发现当 WORKDIR 归 root 所有时，Claude Code 的安装程序会卡住。再后来，SQLite 在你的 NAS 挂载上锁了……就这样周而复始。\n\n**HolyClaude 就是我解决所有这些问题后构建出来的容器镜像。**\n\n我已经在我的服务器上每天运行它好几个星期了。每一个 bug 都被发现、诊断并修复；每一个边缘情况都被妥善处理；每一个“为什么在 Docker 中不起作用”的问题都得到了解答。\n\n你只需要拉取这个镜像，运行它，打开浏览器，就可以开始构建了。\n\n### :credit_card: 使用你现有的订阅\n\n**这里运行的是真正的 Claude Code CLI。** 不是封装器，不是代理，也不是山寨版。\n\n你现有的 Anthropic 账户可以直接使用：\n- **Claude Max\u002FPro 方案** — 通过 Web UI（OAuth）进行认证，与桌面版 Claude Code 相同\n- **Anthropic API 密钥** — 通过 Web UI 设置，计费方式与平时一致\n- **无需额外费用** — HolyClaude 是免费且开源的。你只需按照现有方式向 Anthropic 支付实际使用的费用。\n\n> HolyClaude 不会接触你的凭据。它们会被存储在本地的绑定挂载卷中（`.\u002Fdata\u002Fclaude\u002F`），就像你在物理机上一样。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## 目录\n\n| | 节目 |\n|---|---|\n| :zap: | [快速入门](#zap-quick-start) |\n| :computer: | [平台支持](#computer-platform-support) |\n| :star2: | [为什么选择 HolyClaude](#star2-why-holyclaude) |\n| :credit_card: | [订阅与认证](#credit_card-subscription--authentication) |\n| :package: | [镜像变体](#package-image-variants) |\n| :whale: | [Docker Compose — 快速](#whale-docker-compose--quick) |\n| :whale2: | [Docker Compose — 完整](#whale2-docker-compose--full) |\n| :wrench: | [环境变量](#wrench-environment-variables) |\n| :rocket: | [内部包含的内容](#rocket-whats-inside) |\n| :robot: | [AI CLI 提供者](#robot-ai-cli-providers) |\n| :llama: | [使用 Ollama](#llama-using-ollama) |\n| :building_construction: | [架构](#building_construction-architecture) |\n| :file_folder: | [项目结构](#file_folder-project-structure) |\n| :floppy_disk: | [数据与持久化](#floppy_disk-data--persistence) |\n| :lock: | [权限](#lock-permissions) |\n| :bell: | [通知](#bell-notifications) |\n| :arrows_counterclockwise: | [升级](#arrows_counterclockwise-upgrading) |\n| :construction: | [故障排除](#construction-troubleshooting) |\n| :warning: | [已知问题](#warning-known-issues) |\n| :hammer_and_wrench: | [本地构建](#hammer_and_wrench-building-locally) |\n| :bar_chart: | [替代方案](#bar_chart-alternatives) |\n| :rocket: | [路线图](#rocket-roadmap) |\n| :trophy: | [用 HolyClaude 构建的项目](#trophy-built-with-holyclaude) |\n| :handshake: | [贡献](#handshake-contributing) |\n| :heart: | [支持](#heart-support) |\n| :scroll: | [第三方软件](#scroll-third-party-software) |\n| :page_facing_up: | [许可证](#page_facing_up-license) |\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :zap: 快速入门\n\n**1.** 为 HolyClaude 创建一个文件夹：\n\n```bash\nmkdir holyclaude && cd holyclaude\n```\n\n**2.** 创建一个 `docker-compose.yaml` 文件。复制以下模板之一：\n- [快速模板](#whale-docker-compose--quick) — 极简，无需配置，即开即用\n- [完整模板](#whale2-docker-compose--full) — 包含所有选项，文档齐全\n\n**3.** 拉取并启动：\n\n```bash\ndocker compose up -d\n```\n\n**4.** 打开 Web 界面：\n\n```\nhttp:\u002F\u002Flocalhost:3001\n```\n\n**5.** 创建一个 CloudCLI 账号（耗时约 10 秒），使用您的 Anthropic 账号登录，即可开始使用。\n\n> 无需 `.env` 文件。无需预先配置。无需在开始之前阅读 40 页的文档。它就能直接运行。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :computer: 平台支持\n\n| 平台 | 状态 | 备注 |\n|----------|--------|-------|\n| Linux (amd64) | ✅ 完全支持 | 原生性能，推荐使用 |\n| Linux (arm64) | ✅ 完全支持 | 树莓派 4+、Oracle Cloud、AWS Graviton |\n| macOS (Docker Desktop) | ✅ 完全支持 | 苹果芯片及英特尔处理器通过 Docker Desktop 支持 |\n| Windows (WSL2 + Docker Desktop) | ✅ 完全支持 | 需要 WSL2 后端 |\n| Synology \u002F QNAP NAS | ✅ 完全支持 | 使用 `CHOKIDAR_USEPOLLING=true` 处理 SMB 挂载 |\n| Kubernetes | 🔜 即将推出 | 计划提供 Helm Chart |\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :star2: 为什么选择 HolyClaude\n\n我构建这个项目是因为厌倦了每次都要重复同样的设置。安装 Claude Code、搭建 Web 界面、在 Docker 中配置 Chromium、解决权限问题、调试进程管理等，每次都得重新来一遍。\n\n于是我就做了一个容器，把这些都搞定。我还把可能遇到的所有问题都提前解决了，这样您就不用再操心了。\n\n| | HolyClaude | 自行搭建 |\n|---|---|---|\n| **设置** | 30 秒 | 1–2 小时（顺利的话） |\n| **Claude Code** | 预装、预配置，即刻可用 | 需要安装、配置、调试卡住的安装程序、修复 WORKDIR |\n| **Web 界面** | 包含 CloudCLI 及插件 | 寻找 Web 界面、安装、配置，并将其与 Claude 连接 |\n| **无头浏览器** | Chromium + Xvfb + Playwright，已配置 | 需要安装 Chromium、Xvfb，配置显示 :99，修复 shm、沙盒、seccomp… |\n| **AI CLI 工具** | 支持 7 家厂商，全部集成在一个容器中 | 需要分别通过 3 种包管理器单独安装每个工具 |\n| **开发工具** | 50+ 工具，即用 | 接下来的一个小时都在执行 `apt-get install` \u002F `npm i -g` \u002F `pip install` |\n| **进程管理** | s6-overlay（自动重启、优雅关闭） | 需要编写自己的 supervisord 配置，或者寄希望于 Docker 的重启机制 |\n| **数据持久化** | 绑定挂载，凭据永不丢失 | 需要理解 Docker 卷的概念，调试“为什么这里是个目录而不是文件” |\n| **更新** | `docker pull && docker compose up -d` | 需要手动更新 50 个工具，祈祷不会出错 |\n| **多架构支持** | AMD64 + ARM64 | 希望您的 Dockerfile 能在 ARM 上成功构建 |\n\n**每次手动搭建的最后一句话都是：“在我的机器上可以运行。”**而 HolyClaude 在任何机器上都能正常工作。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :credit_card: 订阅与认证\n\nHolyClaude 运行的是 Anthropic 官方的 Claude Code CLI。您现有的账户可以直接使用。\n\n### 支持的功能：\n\n| 认证方式 | 方法 | 费用 |\n|----------------------|-----|------|\n| **Claude Max\u002FPro 方案**（订阅） | 通过 CloudCLI Web 界面登录 — 与桌面版相同的 OAuth 流程 | 使用您现有的订阅，无需额外付费 |\n| **Anthropic API 密钥** | 在 Web 界面中粘贴您的 API 密钥 | 按使用量计费，与 Anthropic 的标准收费一致 |\n\n### 不支持的功能：\n\n| | 原因 |\n|---|---|\n| OpenAI API 密钥用于 Claude | 不同公司，不同 API。OpenAI 密钥适用于 **Codex CLI**（同样预装） |\n\n> **ChatGPT Plus\u002FPro 订阅用户：** 您的订阅适用于 **Codex CLI**。在容器内运行 `codex login --device-auth` 即可使用 ChatGPT 账号进行认证。\n\n### 其他包含的 AI CLI 工具：\n\n| CLI | 所需条件 |\n|-----|--------------|\n| Gemini CLI | Google AI API 密钥 (`GEMINI_API_KEY`) |\n| OpenAI Codex | OpenAI API 密钥 (`OPENAI_API_KEY`) 或 ChatGPT Plus\u002FPro 订阅 (`codex login --device-auth`) |\n| Cursor | Cursor API 密钥 (`CURSOR_API_KEY`) |\n| TaskMaster AI | 使用您的 AI 提供商密钥（Anthropic、OpenAI 等） |\n| Junie | JetBrains 账户（JetBrains AI 订阅） |\n| OpenCode | 通过 `opencode` TUI 配置（支持多家提供商） |\n\n> **HolyClaude 是免费且开源的。** 您只需为使用的 AI 服务付费，这与您平时的支付方式相同。我们不会代理、拦截或接触您的凭据。它们会保存在您本地的绑定挂载目录中。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :package: 镜像版本\n\n两种镜像，质量相同。根据需求选择适合的重量级版本。\n\n| 标签 | 内容 | 适用场景 |\n|-----|-------------|----------|\n| **`latest`** | 预装所有工具、库和 CLI | 大多数用户。无需等待。Claude 不需要停下来安装任何东西。 |\n| **`slim`** | 仅核心工具 — Claude 会在需要时按需安装 | 更小的 VPS、磁盘空间有限、带宽受限 |\n| `X.Y.Z` | 完整镜像，固定版本 | 生产环境的稳定性 — 您可以控制何时更新 |\n| `X.Y.Z-slim` | 精简镜像，固定版本 | 生产环境 + 更小的占用空间 |\n\n```bash\n# 完整版 — 一切尽在掌握（推荐）\ndocker pull coderluii\u002Fholyclaude\n\n# 精简版 — 简洁高效\ndocker pull coderluii\u002Fholyclaude:slim\n```\n\n> **`latest` 始终是完整版镜像。** 对于使用 `slim` 版本的用户，请放心——当您让 Claude 执行需要某个缺失工具的任务时，它会在几秒钟内自动安装该工具。您将获得相同的功能，只是初始下载的体积更小。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :whale: Docker Compose — 快速版\n\n“只想让它跑起来”的模板。将整个代码块复制到 `docker-compose.yaml` 文件中：\n\n```yaml\n# ==============================================================================\n# HolyClaude — 快速入门\n# 直接运行：docker compose up -d\n# 然后打开：http:\u002F\u002Flocalhost:3001\n\n# ==============================================================================\n\nservices:\n  holyclaude:\n    image: coderluii\u002Fholyclaude:latest     # 完整镜像（若需较小下载量，请使用 :slim）\n    container_name: holyclaude\n    hostname: holyclaude\n    restart: unless-stopped\n    shm_size: 2g                           # Chromium 需要此设置——请勿移除\n    network_mode: bridge\n    cap_add:\n      - SYS_ADMIN                          # 必需：Chromium 沙箱机制\n      - SYS_PTRACE                         # 必需：调试工具\n    security_opt:\n      - seccomp=unconfined                 # 必需：Docker 中运行 Chromium\n    ports:\n      - \"3001:3001\"                        # CloudCLI Web 界面\n    volumes:\n      #\n      # .\u002Fdata\u002Fclaude — 您的设置、凭据、API 密钥以及 Claude 的记忆数据。\n      #                  这些内容会在容器重建后依然保留。\n      #                  切勿删除此文件夹——您的认证信息都存储在这里。\n      #\n      - .\u002Fdata\u002Fclaude:\u002Fhome\u002Fclaude\u002F.claude\n      #\n      # .\u002Fworkspace — 您的代码。所有项目都放在此处。\n      #               绑定挂载，以便您从宿主机访问文件。\n      #\n      - .\u002Fworkspace:\u002Fworkspace\n    environment:\n      - TZ=UTC                             # 您的时区（例如，America\u002FNew_York、Europe\u002FLondon）\n```\n\n然后：\n\n```bash\ndocker compose up -d\n```\n\n打开 `http:\u002F\u002Flocalhost:3001`。创建一个 CloudCLI 账户。使用您的 Anthropic 账户登录。开始构建吧。\n\n**这就是全部的设置步骤。完成了！**\n\n> **为什么需要 `SYS_ADMIN` + `seccomp=unconfined`？** Chromium 在 Docker 容器内运行时需要这些权限——这是任何容器化浏览器的标准配置（Playwright 文档、Puppeteer 文档以及所有运行浏览器测试的 CI 流程）。如果没有它们，Chromium 启动时会崩溃。这并不是 HolyClaude 特有的安全风险。\n>\n> **为什么需要 `shm_size: 2g`？** 默认情况下，Docker 为容器分配 64MB 的共享内存。Chromium 会大量使用 `\u002Fdev\u002Fshm` 来渲染标签页。如果只有 64MB，标签页会频繁崩溃。对于在 Docker 中运行 Chromium 的场景，推荐至少设置为 2GB。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :whale2: Docker Compose — 完整版\n\n相同的镜像，所有配置选项一应俱全。将以下完整内容复制到 `docker-compose.yaml` 文件中：\n\n```yaml\n# ==============================================================================\n# HolyClaude — 完整配置\n# 所有选项均在注释中说明。\n# 详细文档：https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fblob\u002Fmain\u002Fdocs\u002Fconfiguration.md\n# ==============================================================================\n\nservices:\n  holyclaude:\n    image: coderluii\u002Fholyclaude:latest     # 完整镜像（若需较小下载量，请使用 :slim）\n    container_name: holyclaude\n    hostname: holyclaude\n    restart: unless-stopped\n    shm_size: 2g                           # Chromium 共享内存——重度浏览器使用时可调至 4g\n    network_mode: bridge\n    cap_add:\n      - SYS_ADMIN                          # 必需：Chromium 沙箱机制\n      - SYS_PTRACE                         # 必需：调试工具（strace、lsof）\n    security_opt:\n      - seccomp=unconfined                 # 必需：Chromium 对系统调用的要求\n    ports:\n      #\n      # CloudCLI Web 界面——这是您唯一需要的端口。\n      # 如果 3001 端口已被占用，可通过 `.env` 文件覆盖主机侧端口。\n      #\n      - \"${HOLYCLAUDE_HOST_PORT:-3001}:3001\"\n      #\n      # 开发服务器端口——根据需要取消注释。\n      # 这些端口允许您通过宿主机浏览器访问容器内运行的开发服务器。\n      #\n      # - \"3000:3000\"                      # Next.js \u002F Express\n      # - \"4321:4321\"                      # Astro\n      # - \"5173:5173\"                      # Vite\n      # - \"8787:8787\"                      # Wrangler（Cloudflare Workers）\n      # - \"9229:9229\"                      # Node.js 调试器\n    volumes:\n      #\n      # 持久化数据\n      #\n      # .\u002Fdata\u002Fclaude — 设置、凭据、API 密钥以及 Claude 的记忆文件。\n      #                  即使容器重建，这些数据也会保留。切勿删除此文件夹。\n      #                  如需更改路径，可通过 `.env` 文件覆盖主机路径。\n      #\n      - ${HOLYCLAUDE_HOST_CLAUDE_DIR:-.\u002Fdata\u002Fclaude}:\u002Fhome\u002Fclaude\u002F.claude\n      #\n      # .\u002Fworkspace — 您的代码和项目。您所构建的一切都存放于此。\n      #               可从宿主机访问。\n      #               如需不同根目录，可通过 `.env` 文件覆盖主机路径。\n      #\n      - ${HOLYCLAUDE_HOST_WORKSPACE_DIR:-.\u002Fworkspace}:\u002Fworkspace\n    environment:\n      #\n      # 时区\n      # 完整列表：https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FList_of_tz_database_time_zones\n      #\n      - TZ=UTC\n      #\n      # 性能\n      # Node.js 堆内存限制（单位：MB）。如果您处理大型 monorepo 并遇到内存不足错误，可以适当提高此值。4096 MB（4GB）是一个稳妥的默认值。\n      #\n      - NODE_OPTIONS=--max-old-space-size=4096\n      #\n      # 用户映射\n      # 将这些值与宿主机用户匹配，以确保容器内创建的文件在宿主机上拥有正确的所有权。可在宿主机上运行 `id -u` 和 `id -g` 获取相应数值。\n      #\n      - PUID=1000\n      - PGID=1000\n      #\n      # SMB\u002FCIFS 网络挂载\n      # 仅当您的卷位于 NAS、Samba 共享或 CIFS 挂载上时才启用。\n      # 它们通过轮询方式实现文件监控，因为网络挂载不支持 inotify。本地存储则保持注释状态——轮询会消耗更多 CPU。\n      #\n      # - CHOKIDAR_USEPOLLING=1\n      # - WATCHFILES_FORCE_POLLING=true\n      #\n      # 通知功能（可选）\n      # 当 Claude 完成任务或发生错误时接收通知。\n      # 使用 Apprise——支持 100 多种服务。此外，还需在容器内创建一个标记文件：touch ~\u002F.claude\u002Fnotify-on。\n      #\n      # - NOTIFY_DISCORD=discord:\u002F\u002Fwebhook_id\u002Fwebhook_token\n      # - NOTIFY_TELEGRAM=tg:\u002F\u002Fbot_token\u002Fchat_id\n      # - NOTIFY_PUSHOVER=pover:\u002F\u002Fuser_key@app_token\n      # - NOTIFY_SLACK=slack:\u002F\u002Ftoken_a\u002Ftoken_b\u002Ftoken_c\n      # - NOTIFY_EMAIL=mailto:\u002F\u002Fuser:pass@gmail.com?to=you@gmail.com\n      # - NOTIFY_GOTIFY=gotify:\u002F\u002Fhostname\u002Ftoken\n      # - NOTIFY_URLS=                                   # 通用配置：逗号分隔的 Apprise URL 列表\n      #\n      # AI 提供商密钥（可选）\n      • CLAUDE Code 可通过 Web UI（OAuth）或 ANTHROPIC_API_KEY 进行认证。\n      • 如需使用其他 AI CLI 或基于 API 的认证，请设置以下参数。\n      #\n      # - GEMINI_API_KEY=your_key\n      # - OPENAI_API_KEY=your_key\n      # - CURSOR_API_KEY=your_key\n```\n\n然后：\n\n```bash\ndocker compose up -d\n```\n\n如果您想在不修改 `docker-compose.yaml` 的情况下更改主机侧端口或绑定挂载路径，可以将 `.env.example` 复制到 `.env` 文件中，并设置：\n\n```dotenv\nHOLYCLAUDE_HOST_PORT=3003\nHOLYCLAUDE_HOST_CLAUDE_DIR=.\u002Fdata\u002Fclaude\nHOLYCLAUDE_HOST_WORKSPACE_DIR=.\u002Fworkspace\n```\n\n这些值由 Docker Compose 在宿主机上读取，而非容器内的环境变量。\n\n### 各部分的功能说明：\n\n| 部分         | 功能                           | 何时需要更改                     |\n|--------------|--------------------------------|----------------------------------|\n| **时区**     | 容器的系统时间                 | 始终——设置为本地时区             |\n| **性能**     | Node.js 内存上限               | 仅在大型项目中遇到内存不足错误时 |\n| **用户映射** | 容器与宿主机之间的文件权限     | 当出现“权限拒绝”错误时（使用 `id -u` 和 `id -g` 检查宿主机用户和组） |\n| **SMB\u002FCIFS** | 文件监视器轮询模式             | 仅当卷挂载在 NAS 或网络共享上时   |\n| **通知**     | 通过 Apprise 推送告警（Discord、Telegram、Slack、邮件等 100 多种服务） | 如果你想离开后仍能知道 AI 代理何时完成 |\n| **AI 提供商**| Gemini、Codex、Cursor、Junie、OpenCode 的 API 密钥 | 如果你想使用 Claude 以外的 AI 命令行工具 |\n\n> **每个环境变量都是可选的。** 容器仅需设置 `TZ=UTC` 即可完美运行。其余配置都有合理的默认值，或可通过 Web 界面进行管理。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :wrench: 环境变量\n\n完整参考。每个变量的默认值及其作用。\n\n| 变量            | 默认值       | 功能                                       |\n|-----------------|--------------|--------------------------------------------|\n| `TZ`            | `UTC`        | 容器的时区                                 |\n| `PUID`          | `1000`       | 容器的用户 ID — 与宿主机一致以避免权限问题 |\n| `PGID`          | `1000`       | 容器的组 ID — 与宿主机一致以避免权限问题   |\n| `NODE_OPTIONS`  | `--max-old-space-size=4096` | Node.js 堆内存限制（单位：MB）           |\n| `GIT_USER_NAME` | `HolyClaude User` | Git 提交作者名（首次启动时设置一次）       |\n| `GIT_USER_EMAIL`| `noreply@holyclaude.local` | Git 提交邮箱（首次启动时设置一次）         |\n| `CHOKIDAR_USEPOLLING` | *(未设置)* | 设置为 `1` 以启用 SMB\u002FCIFS 的文件监视器轮询 |\n| `WATCHFILES_FORCE_POLLING` | *(未设置)* | 设置为 `true` 以启用 Python 的轮询机制    |\n| `NOTIFY_DISCORD` | *(未设置)* | Discord 通知的 Webhook URL                 |\n| `NOTIFY_TELEGRAM` | *(未设置)* | Telegram 机器人通知的 URL                  |\n| `NOTIFY_PUSHOVER` | *(未设置)* | Pushover 通知的 URL                        |\n| `NOTIFY_SLACK` | *(未设置)* | Slack 通知的 Webhook URL                   |\n| `NOTIFY_EMAIL` | *(未设置)* | 电子邮件（SMTP）通知的 URL                 |\n| `NOTIFY_GOTIFY` | *(未设置)* | Gotify 通知的 URL                          |\n| `NOTIFY_URLS` | *(未设置)* | 通用配置——以逗号分隔的 [Apprise URLs](https:\u002F\u002Fgithub.com\u002Fcaronc\u002Fapprise\u002Fwiki) |\n| `ANTHROPIC_API_KEY` | *(未设置)* | Anthropic API 密钥（替代 Web UI OAuth）      |\n| `ANTHROPIC_AUTH_TOKEN` | *(未设置)* | Anthropic 身份验证令牌（替代 API 密钥）     |\n| `ANTHROPIC_BASE_URL` | *(未设置)* | 自定义 Anthropic API 端点（代理、私有部署） |\n| `CLAUDE_CODE_USE_BEDROCK` | *(未设置)* | 设置为 `1` 以使用 Amazon Bedrock 后端       |\n| `CLAUDE_CODE_USE_VERTEX` | *(未设置)* | 设置为 `1` 以使用 Google Vertex AI 后端     |\n| `GEMINI_API_KEY` | *(未设置)* | Google Gemini 的 API 密钥                   |\n| `OPENAI_API_KEY` | *(未设置)* | OpenAI 的 API 密钥（用于 Codex CLI，或使用 `codex login --device-auth` 访问 ChatGPT 订阅） |\n| `CURSOR_API_KEY` | *(未设置)* | Cursor 的 API 密钥                         |\n| `OLLAMA_HOST` | *(未设置)* | Ollama 端点的 URL（例如 `http:\u002F\u002Fhost.docker.internal:11434`）|\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :rocket: 容器内部包含的内容\n\n这不是一个极简容器。它是一个完整的开发工作站。\n\n### 两种版本（完整版 + 精简版）\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Node.js 22 LTS + npm 全局包\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| 包名         | 用途                       |\n|--------------|----------------------------|\n| `typescript`, `tsx` | TypeScript 编译与执行      |\n| `pnpm`       | 快速且磁盘友好的包管理工具 |\n| `vite`, `esbuild` | 极速构建工具              |\n| `eslint`, `prettier` | 代码质量和格式化           |\n| `serve`, `nodemon` | 静态文件服务器、开发服务器自动重启 |\n| `concurrently` | 并行运行多个脚本           |\n| `dotenv-cli` | 从 `.env` 文件加载环境变量 |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Python 3 包\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| 包名         | 用途                       |\n|--------------|----------------------------|\n| `requests`, `httpx` | HTTP 客户端                |\n| `beautifulsoup4`, `lxml` | 网页抓取与 HTML 解析       |\n| `Pillow`     | 图像处理（预编译，无需等待） |\n| `pandas`, `numpy` | 数据处理（预编译——真的不建议在运行时用 pip 安装） |\n| `openpyxl`   | 读写 Excel 文件            |\n| `python-docx`| 读写 Word 文档             |\n| `jinja2`, `markdown` | 模板渲染与 Markdown 渲染   |\n| `pyyaml`, `python-dotenv` | 配置文件解析               |\n| `rich`, `click`, `tqdm` | 美观的命令行界面与进度条   |\n| `playwright` | 浏览器自动化（Chromium  redy 配置完毕） |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>系统工具\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| 工具         | 用途                       |\n|--------------|----------------------------|\n| `git`, `gh`  | 版本控制 + GitHub CLI（PR、问题、发布均可在终端完成） |\n| `ripgrep` (`rg`)、`fd`、`fzf` | 超快速搜索——Claude 经常使用这些工具 |\n| `bat`, `tree`, `jq` | 更好的 `cat`（语法高亮）、目录树、JSON 处理 |\n| `curl`, `wget` | HTTP 下载                  |\n| `tmux`       | 终端多路复用器——可在后台运行任务 |\n| `htop`, `lsof`, `strace` | 进程监控与调试             |\n| `imagemagick`| 图像转换（`convert`、`identify`、`mogrify`） |\n| `chromium`   | 无头浏览器——截图、Playwright、Lighthouse 使用 |\n| `psql`, `redis-cli`, `sqlite3` | 直接与数据库交互           |\n| `openssh-client` | SSH 连接到其他设备         |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>AI 命令行工具——各大主流提供商\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| 工具         | 命令         | 用途                       |\n|--------------|--------------|----------------------------|\n| **Claude Code** | `claude`     | 核心功能——你将在其中运行   |\n| **Gemini CLI** | `gemini`     | Google 的 AI 编码助手       |\n| **OpenAI Codex** | `codex`      | OpenAI 的编码助手           |\n| **Cursor**    | `cursor`     | Cursor 的 AI 代理           |\n| **TaskMaster AI** | `task-master` | 任务规划与编排             |\n| **Junie**     | `junie`      | JetBrains 的 AI 编码助手     |\n| **OpenCode**  | `opencode`   | 开源 AI 代理（支持多家提供商） |\n\n七款 AI 命令行工具。一个容器。可即时切换。没有其他 Docker 镜像能做到这一点。\n\n\u003C\u002Fdetails>\n\n### 仅完整镜像（附加包）\n\n完整镜像包含以上所有内容，此外还包括：\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>额外的 npm 包 — 部署、ORM、性能\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| 包名 | 用途 |\n|---------|---------------|\n| `wrangler`, `@cloudflare\u002Fnext-on-pages` | Cloudflare Workers 部署 |\n| `vercel` | Vercel 部署 |\n| `netlify-cli` | Netlify 部署 |\n| `az` | Azure CLI，用于云部署和管理 |\n| `prisma`, `drizzle-kit` | 最流行的两个 Node.js ORM |\n| `pm2` | 生产环境进程管理器 |\n| `eas-cli` | Expo \u002F React Native 构建 |\n| `lighthouse`, `@lhci\u002Fcli` | 性能审计（Chromium 已经内置） |\n| `sharp-cli` | 图像处理命令行工具 |\n| `json-server`, `http-server` | 模拟 REST API、静态文件服务 |\n| `@marp-team\u002Fmarp-cli` | 将 Markdown 转换为演示文稿幻灯片 |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>额外的 Python 包 — PDF、数据可视化、Web 框架\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| 包名 | 用途 |\n|---------|---------------|\n| `reportlab`, `weasyprint`, `cairosvg`, `fpdf2`, `PyMuPDF`, `pdfkit`, `img2pdf` | 所有主要的 PDF 库。可以生成、读取、转换、合并 PDF 文件。 |\n| `xlsxwriter`, `xlrd` | 处理 openpyxl 未涵盖的 Excel 格式 |\n| `matplotlib`, `seaborn` | 数据可视化与图表绘制 |\n| `python-pptx` | PowerPoint 演示文稿生成 |\n| `fastapi`, `uvicorn` | Python Web 框架 |\n| `httpie` | 人性化的 HTTP 客户端（类似 curl，但更易读） |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>额外的系统包 — 媒体、文档\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| 包名 | 用途 |\n|---------|---------------|\n| `pandoc` | 在任意文档格式之间进行转换（markdown、HTML、PDF、docx、epub 等） |\n| `ffmpeg` | 视频和音频处理（提取、转换、转码） |\n| `libvips-dev` | 高性能图像处理库 |\n\n\u003C\u002Fdetails>\n\n> **精简用户：** 缺少某个包？问问 Claude 吧。它可以在几秒钟内安装 npm\u002Fpip 包。系统包（pandoc、ffmpeg）则需要 1-2 分钟。你仍然可以获得相同的功能——只是完整镜像无需等待。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :robot: AI CLI 提供者\n\n七个 AI CLI。一个容器。没有其他 Docker 镜像能提供这样的组合。\n\n| 提供者 | 命令 | 认证方式 | 是否需要订阅？ |\n|----------|---------|--------------------|--------------------|\n| **Claude Code** | `claude` | CloudCLI Web UI（OAuth） | **是** — 需要 Max\u002FPro 方案或 API 密钥 |\n| **Gemini CLI** | `gemini` | `GEMINI_API_KEY` 环境变量 | API 密钥（按使用付费） |\n| **OpenAI Codex** | `codex` | `OPENAI_API_KEY` 或 `codex login --device-auth` | **是** — 需要 ChatGPT Plus\u002FPro\u002FTeam\u002FEnterprise 或 API 密钥 |\n| **Cursor** | `cursor` | `CURSOR_API_KEY` 环境变量 | API 密钥 |\n| **TaskMaster AI** | `task-master` | 使用已有的 AI 提供者密钥 | 可以配合配置好的密钥使用 |\n| **Junie** | `junie` | JetBrains AI 订阅 | 需要 JetBrains 账户 |\n| **OpenCode** | `opencode` | 通过 TUI 配置 | 支持多个提供商 |\n\n> Claude Code 是主要的 CLI。其他 CLI 的存在是因为有时你需要第二意见，或者想要特定模型的优势，又或是比较不同模型的输出。将所有这些 CLI 放在一个 `Tab` 键的距离内，正是这个镜像的意义所在。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :llama: 使用 Ollama\n\nHolyClaude 可以与 [Ollama](https:\u002F\u002Follama.com) 配合使用，作为 Anthropic 订阅的替代方案。只需设置两个环境变量，即可使用本地或云端模型。\n\n完整设置指南请参见：**[docs\u002Follama.md](docs\u002Follama.md)**\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :building_construction: 架构\n\n```mermaid\ngraph TB\n    subgraph Docker 容器\n        EP[\"entrypoint.sh\"] --> BS[\"bootstrap.sh\\n(仅首次启动)\"]\n        EP --> S6[\"s6-overlay\\n(PID 1)\"]\n        S6 --> CC[\"CloudCLI\\n(:3001)\"]\n        S6 --> XV[\"Xvfb\\n(:99)\"]\n        CC --> CLAUDE[\"Claude Code CLI\"]\n        CLAUDE --> TOOLS[\"开发工具\\n(Node、Python、Git...)\"]\n        CLAUDE --> CHROME[\"Chromium\\n(无头模式)\"]\n        XV -.-> CHROME\n    end\n\n    subgraph 主机\n        DATA[\".\u002Fdata\u002Fclaude\"] -.->|绑定挂载| HOME[\"~\u002F.claude\"]\n        WS[\".\u002Fworkspace\"] -.->|绑定挂载| WORK[\"\u002Fworkspace\"]\n    end\n\n    USER[\"浏览器\"] -->|\":3001\"| CC\n\n    style S6 fill:#2d3748,color:#fff\n    style CC fill:#6366f1,color:#fff\n    style CLAUDE fill:#f59e0b,color:#000\n```\n\n### 各部分如何协同工作\n\n1. **容器启动** — `entrypoint.sh` 以 root 用户运行。将 UID\u002FGID 映射为与主机用户一致，预先创建所需文件（防止 Docker 的“将其创建为目录”错误），并检查是否为首次启动。\n\n2. **仅首次启动** — `bootstrap.sh` 只运行一次。复制默认设置、内存模板，并配置 Git 用户身份。创建一个标记文件（`.holyclaude-bootstrapped`），确保它不再运行。从那时起，你的自定义设置将被安全保存。\n\n3. **s6-overlay 接管 PID 1** — 这不是 supervisord。它是专为 Docker 设计的 [s6-overlay](https:\u002F\u002Fgithub.com\u002Fjust-containers\u002Fs6-overlay)，负责监督 CloudCLI 和 Xvfb。在崩溃时自动重启，转发信号，清理僵尸进程，并优雅地关闭。\n\n4. **CloudCLI 提供 Web UI** — 监听 3001 端口。这是一个基于浏览器的界面，用于访问 Claude Code，支持项目管理、多会话以及插件功能（包括项目统计和 Web 终端）。\n\n5. **Xvfb 提供虚拟显示** — Chromium 即使在“无头”模式下也需要屏幕来渲染内容。Xvfb 提供了一个 1920x1080 的虚拟显示器，地址为 `:99`。这就是为什么 Playwright、截图和 Lighthouse 等工具可以直接使用的原因。\n\n更多技术细节，请参阅 [docs\u002Farchitecture.md](docs\u002Farchitecture.md) — 包括我们为何选择 s6 而不是 supervisord、为何将插件直接打包进镜像，以及为何使用 `runuser` 而不是 `su`。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :file_folder: 项目结构\n\n```\nholyclaude\u002F\n├── .github\u002F                 # CI\u002FCD 工作流、问题与 PR 模板\n│   ├── FUNDING.yml          # 赞助\u002F捐赠链接\n│   ├── ISSUE_TEMPLATE\u002F      # Bug 报告、功能请求、软件包请求\n│   ├── pull_request_template.md\n│   ├── SECURITY.md          # 安全策略\n│   └── workflows\u002F           # Docker 构建与推送自动化\n├── assets\u002F                  # Logo 和横幅图片\n├── config\u002F                  # Claude Code 配置\n│   ├── claude-memory-full.md\n│   ├── claude-memory-slim.md\n│   └── settings.json\n├── docs\u002F                    # 扩展文档\n│   ├── architecture.md\n│   ├── CHANGELOG.md\n│   ├── configuration.md\n│   ├── dockerhub-description.md\n│   ├── ollama.md\n│   └── troubleshooting.md\n├── scripts\u002F                 # 容器生命周期脚本\n│   ├── bootstrap.sh         # 首次运行设置\n│   ├── entrypoint.sh        # 容器入口点\n│   └── notify.py            # 通知助手 (Apprise)\n├── s6-overlay\u002F              # 进程监督 (s6-rc 服务)\n├── Dockerfile               # 单阶段构建\n├── docker-compose.yaml      # 快速启动 (最小配置)\n├── docker-compose.full.yaml # 完整配置 (所有选项)\n├── LICENSE\n└── README.md\n```\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :floppy_disk: 数据与持久化\n\n| 什么 | 容器内位置 | 主机上位置 | 是否在重建后保留？ |\n|------|-------------------|-------------|-------------------|\n| 设置、凭据、API 密钥 | `\u002Fhome\u002Fclaude\u002F.claude` | `.\u002Fdata\u002Fclaude` | **是** |\n| 你的代码和项目 | `\u002Fworkspace` | `.\u002Fworkspace` | **是** |\n| CloudCLI 账户 | `\u002Fhome\u002Fclaude\u002F.cloudcli` | *(仅容器)* | 否 |\n| 引导状态 | `\u002Fhome\u002Fclaude\u002F.claude.json` | *(仅容器)* | 否 |\n\n### 在执行 `docker compose down && docker compose up` 后仍然保留的内容：\n- 你的 Anthropic 认证信息和 API 密钥\n- Claude Code 的设置和记忆 (`CLAUDE.md`)\n- `.\u002Fworkspace` 中的所有代码\n- Git 配置\n\n### 需要重新操作的内容（10 秒钟）：\n- CloudCLI 网页账户 — 快速注册即可\n\n### 重新触发首次引导设置：\n```bash\n# 删除哨兵文件 — 不要删除整个文件夹\nrm .\u002Fdata\u002Fclaude\u002F.holyclaude-bootstrapped\ndocker compose restart holyclaude\n```\n\n> **切勿完全删除 `.\u002Fdata\u002Fclaude\u002F`。** 你的凭据就存放在那里。如果你想进行全新引导，可以删除哨兵文件。如果想重置设置，可以删除特定的配置文件。但千万不要清空整个文件夹。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :lock: 权限\n\nClaude Code 默认以 **`allowEdits`** 模式运行。这是最安全且实用的设置：\n\n| 行动 | 是否允许？ |\n|--------|----------|\n| 读取文件 | 是 |\n| 编辑\u002F创建文件 | 是 |\n| 运行 Shell 命令 | **会先询问你** |\n| 安装软件包 | **会先询问你** |\n\n### 想完全绕过权限吗？（高级用户）\n\n这是我个人使用的模式。在主机上编辑 `.\u002Fdata\u002Fclaude\u002Fsettings.json`：\n\n```json\n{\n  \"permissions\": {\n    \"defaultMode\": \"bypassPermissions\"\n  }\n}\n```\n\n> **绕过模式意味着 Claude 会在无需确认的情况下执行任何命令。** 速度快、功能强大，如果你信任自己正在构建的东西，这正是你需要的。但 `allowEdits` 成为安全默认是有原因的。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :bell: 通知\n\n离开电脑时也能知道 AI 代理何时完成任务。Claude Code、Codex 和 Gemini CLI 都会在任务完成后发送通知。使用 [Apprise](https:\u002F\u002Fgithub.com\u002Fcaronc\u002Fapprise) — 支持 100 多种服务，包括 Discord、Telegram、Slack、Email、Pushover、Gotify 等。\n\n**启用方法：**\n\n1. 在你的 `docker-compose` 文件的 `environment` 中添加一个或多个 `NOTIFY_*` 变量：\n   ```yaml\n   - NOTIFY_DISCORD=discord:\u002F\u002Fwebhook_id\u002Fwebhook_token\n   - NOTIFY_TELEGRAM=tg:\u002F\u002Fbot_token\u002Fchat_id\n   ```\n2. 在容器内：`touch ~\u002F.claude\u002Fnotify-on`\n\n更多支持的变量和 URL 格式，请参阅[配置文档](docs\u002Fconfiguration.md#notifications-apprise)。\n\n**禁用方法：** `rm ~\u002F.claude\u002Fnotify-on`\n\n**触发通知的事件：**\n| 事件 | 发生了什么 |\n|-------|--------------|\n| `stop` | Claude Code、Codex 或 Gemini 完成了当前任务 |\n| `error` | 工具使用失败 |\n\n> 如果未配置，则完全静音。没有设置 `NOTIFY_*` 变量？没有标记文件？零网络请求。零日志垃圾。零开销。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :arrows_counterclockwise: 升级\n\n```bash\n# 拉取最新镜像\ndocker compose pull\n\n# 使用新镜像重新创建容器\ndocker compose up -d\n```\n\n你的数据会保存在 `.\u002Fdata\u002Fclaude` 和 `.\u002Fworkspace` 中——升级只会替换容器，而不会影响你的文件。\n\n如果你想锁定某个特定版本而不是使用 `latest`：\n\n```yaml\nimage: coderluii\u002Fholyclaude:1.1.2   # 替代 :latest\n```\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :construction: 故障排除\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>CloudCLI 显示错误的默认目录\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nCloudCLI 打开时显示的是 `\u002Fhome\u002Fclaude`，而不是 `\u002Fworkspace`。\n\n**原因：** `WORKSPACES_ROOT` 没有传递给 CloudCLI 进程。Docker-compose 的环境变量无法通过 s6-overlay 的 `s6-setuidgid` 传递——它会以干净的环境运行，这是出于安全考虑的设计，并非 bug。\n\n**解决方法：** HolyClaude 已经处理了这个问题。s6 运行脚本会直接在进程环境中设置 `WORKSPACES_ROOT=\u002Fworkspace`。\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>SQLite “数据库已锁定”\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**原因：** SQLite 数据库位于 SMB\u002FCIFS 网络挂载上。CIFS 不支持 SQLite 所需的文件级锁。\n\n**解决方法：** 不要将 SQLite 数据库存储在网络共享上。HolyClaude 将 `.cloudcli` 存储在容器本地存储中，正是为了避免这种情况。如果你在 NAS 上的 `\u002Fworkspace` 中有自己的 SQLite 数据库，请将其移动到本地路径。\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Chromium 崩溃 \u002F 页面空白 \u002F 标签页加载失败\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**原因：** 共享内存不足。Docker 默认只分配 64MB。\n\n**解决方法：** 确保在你的 `docker-compose` 文件中设置 `shm_size: 2g`。对于重度浏览器使用（多标签、复杂页面），可以增加到 `4g`。\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>文件监视器无法检测更改（热重载失效）\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**原因：** SMB\u002FCIFS 网络挂载不支持 `inotify`。\n\n**解决方法：** 在你的 `docker-compose` 环境中启用轮询：\n```yaml\n- CHOKIDAR_USEPOLLING=1\n- WATCHFILES_FORCE_POLLING=true\n```\n\n注意：轮询会比 `inotify` 消耗更多 CPU。仅在网络挂载上启用轮询。\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>权限拒绝错误\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**原因：** 容器的 UID\u002FGID 与主机文件的所有权不匹配。\n\n**解决方法：**\n```bash\nSimplified Chinese:\n\n# 在你的宿主机上\nid -u  # → 这是你的 PUID\nid -g  # → 这是你的 PGID\n```\n在你的 compose 文件中设置它们：\n```yaml\n- PUID=1000\n- PGID=1000\n```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Docker 将 .claude.json 创建为目录\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**原因:** 如果绑定挂载的目标文件在容器启动前不存在，Docker 会贴心地将其创建为目录。感谢你，Docker。\n\n**修复:** 已经处理——`entrypoint.sh` 会预先将其创建为文件。\n\u003C\u002Fdetails>\n\n请参阅 [docs\u002Ftroubleshooting.md](docs\u002Ftroubleshooting.md) 获取完整指南，其中包含所有 SMB\u002FCIFS 的陷阱以及我们遇到并修复的所有 bug 的详细历史。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :warning: 已知问题\n\n这些并不是 HolyClaude 的 bug — 它们是上游问题或有意的权衡取舍。\n\n| 问题 | 原因 | 解决方法 |\n|-------|-----|------------|\n| “继续在 Shell 中”按钮失效 | CloudCLI 上游 bug（终端初始化中的竞态条件） | 改用 **Web Terminal** 插件（已预装） |\n| Cursor CLI “命令超时” | 没有配置 API 密钥 — 仅外观问题，不影响任何功能 | 设置 `CURSOR_API_KEY` 或忽略 |\n| 重建后 CloudCLI 账户丢失 | SQLite 无法在网络挂载上持久化 — 有意的权衡 | 重新创建账户（约 10 秒） |\n| Web 推送通知“不支持” | CloudCLI 中的浏览器限制，属正常行为 | 改用 Apprise 通知（见 [通知](#bell-notifications)） |\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :hammer_and_wrench: 本地构建\n\n想自己构建镜像而不是从 Docker Hub 拉取吗？那就动手吧：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude.git\ncd holyclaude\n\n# 构建完整镜像\ndocker build -t holyclaude .\n\n# 构建精简版镜像\ndocker build --build-arg VARIANT=slim -t holyclaude:slim .\n\n# 为 ARM 架构（Apple Silicon、Raspberry Pi、AWS Graviton）构建\ndocker buildx build --platform linux\u002Farm64 -t holyclaude .\n```\n\n然后在你的 compose 文件中使用 `image: holyclaude` 代替 `image: coderluii\u002Fholyclaude:latest`。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :bar_chart: 替代方案\n\nHolyClaude 和其他方案相比如何？\n\n| 方案 | Web UI | 多 AI | 预配置工具 | 无头浏览器 | 一键部署 | 数据持久化 |\n|----------|--------|----------|---------------------|-----------------|-------------------|-------------|\n| **HolyClaude** | CloudCLI | 5 个 CLI | 50+ 工具 | Chromium + Xvfb + Playwright | `docker compose up` | 绑定挂载 |\n| Claude Code（裸金属） | 否 | 否 | 需自行安装 | 需自行安装 | 多步骤安装 | 手动 |\n| Claude Code + oh-my-openagent | 否 | 是（多模型） | 部分 | 否 | npm install | 手动 |\n| 自己搭建 Docker + Claude Code | 或许 | 或许 | 取决于添加的内容 | 如果配置了 | 如果设置了卷 | 如果设置了卷 |\n| Cursor IDE | 内置 | 仅 Cursor | IDE 自带 | 否 | 下载应用 | 应用数据 |\n\nHolyClaude 并不是与编码代理竞争——它是让它们运行得更好的 **基础设施层**。它就是你用来运行这些工具的容器。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :rocket: 路线图\n\n接下来有什么计划：\n\n| 状态 | 功能 |\n|--------|---------|\n| 🔜 | **ARM 原生构建** — 优化的原生 ARM64 镜像，而不仅仅是模拟的 |\n| 🔜 | **VS Code 隧道集成** — 内置 VS Code Server 或隧道，用于从桌面版 VS Code 连接 |\n| 🔜 | **通知路由** — 根据事件类型将通知发送到不同目的地（错误发送到 Telegram，完成结果发送到 Discord） |\n\n你有什么想法吗？可以在 [讨论区](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fdiscussions) 发起讨论，或者在 [功能请求](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002Fnew?template=feature_request.yml) 中提出。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :trophy: 使用 HolyClaude 构建的作品\n\n正在使用 HolyClaude 构建什么吗？我们很想看看！\n\n打开一个带有 `showcase` 标签的 issue，或者提交 PR 将你的项目添加到这里：\n\n\u003C!-- 添加你的项目：[项目名称](url) — 一行描述 -->\n\n*成为第一个在这里添加项目的人。*\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :handshake: 贡献\n\n欢迎贡献代码。这个项目源于真实的日常使用，只有更多人使用它并发现边缘情况，它才会变得更好。\n\n1. 克隆仓库\n2. 创建分支（`git checkout -b feature\u002Fsomething`）\n3. 提交更改\n4. 推送到远程仓库\n5. 发起 PR\n\n如有 bug、功能请求或疑问，请 [提交 issue](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues)。\n\n### 联系我们\n\n| 渠道 | 用途 |\n|---------|---------|\n| [GitHub 讨论区](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fdiscussions) | 提问、分享你的配置、提出想法 |\n| [问题](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues) | 报告 bug、请求功能和软件包 |\n| [安全公告](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fsecurity\u002Fadvisories\u002Fnew) | 漏洞报告（私密） |\n\n### 想添加某个工具吗？\n\n请使用 [📦 软件包请求](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002Fnew?template=package_request.yml) 问题模板。请注明软件包名称、安装方法以及应针对的版本（完整版\u002F精简版）。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :heart: 支持\n\nHolyClaude 是免费的开源项目，由一位每天都在使用它的开发者维护。\n\n如果它为你节省了时间，你可以通过以下方式提供帮助：\n\n- **给这个仓库点个赞** — 这是你能做的对提升知名度最有帮助的事情\n- **分享它** — 告诉朋友、发布帖子、发推文\n- **提交问题** — bug 报告和功能请求能让 HolyClaude 对每个人都有用\n- **贡献代码** — 欢迎随时提交 PR\n\n[![PayPal](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDonate-PayPal-blue.svg)](https:\u002F\u002Fwww.paypal.com\u002Fdonate\u002F?hosted_button_id=PM2UXGVSTHDNL)\n[![Buy Me A Coffee](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBuy%20Me%20A%20Coffee-support-yellow.svg?style=flat&logo=buy-me-a-coffee)](https:\u002F\u002Fbuymeacoffee.com\u002FCoderLuii)\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :scroll: 第三方软件\n\nHolyClaude 的 Docker 镜像包含了第三方软件，每种软件都有自己的许可证。值得注意的组件如下：\n\n| 组件 | 许可证 | 来源 |\n|-----------|---------|--------|\n| CloudCLI | GPL-3.0 | [siteboon\u002Fclaudecodeui](https:\u002F\u002Fgithub.com\u002Fsiteboon\u002Fclaudecodeui) |\n| s6-overlay | ISC | [just-containers\u002Fs6-overlay](https:\u002F\u002Fgithub.com\u002Fjust-containers\u002Fs6-overlay) |\n| Node.js | MIT | [nodejs\u002Fnode](https:\u002F\u002Fgithub.com\u002Fnodejs\u002Fnode) |\n\n完整的详细信息，包括修改说明，请参阅 [THIRD-PARTY-NOTICES]。HolyClaude 自身的源代码采用 MIT 许可证。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## :page_facing_up: 许可证\n\nMIT — 请参阅 [LICENSE](LICENSE)。您可以按任意方式使用它。\n\n\u003Cp align=\"right\">\n  \u003Ca href=\"#top\">↑ 返回顶部\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n\u003C!-- 星星历史 -->\n\u003Cdiv align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#CoderLuii\u002FHolyClaude&Date\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_654d1e4052fc.png&theme=dark\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_654d1e4052fc.png\" \u002F>\n    \u003Cimg alt=\"星星历史图表\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_readme_654d1e4052fc.png\" width=\"600\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n\u003C\u002Fdiv>\n\n---\n\n\u003Cdiv align=\"center\">\n\n由 [CoderLuii](https:\u002F\u002Fgithub.com\u002Fcoderluii) 构建 · [coderluii.dev](https:\u002F\u002Fcoderluii.dev)\n\n这个容器是我每天都在使用的。如果它能为你节省哪怕一半的配置时间，就像它为我节省的一样，那就请给个赞吧。\n\n\u003C\u002Fdiv>","# HolyClaude 快速上手指南\n\nHolyClaude 是一个开箱即用的 AI 开发工作站容器，集成了 Claude Code CLI、Web UI、无头浏览器（Headless Browser）、7 种 AI 命令行工具以及 50+ 开发工具。无需繁琐配置，一条命令即可启动。\n\n## 环境准备\n\n### 系统要求\nHolyClaude 支持多种平台和架构，请确保您的环境满足以下条件之一：\n\n| 平台 | 架构 | 状态 | 备注 |\n| :--- | :--- | :--- | :--- |\n| **Linux** | amd64 \u002F arm64 | ✅ 完全支持 | 推荐原生运行；ARM64 适用于树莓派 4+、AWS Graviton 等 |\n| **macOS** | Intel \u002F Apple Silicon | ✅ 完全支持 | 需安装 Docker Desktop |\n| **Windows** | amd64 | ✅ 完全支持 | 需启用 WSL2 后端并安装 Docker Desktop |\n| **NAS** | Synology \u002F QNAP | ✅ 完全支持 | 若使用 SMB 挂载，建议设置 `CHOKIDAR_USEPOLLING=true` |\n\n### 前置依赖\n1. **Docker**: 已安装并正在运行。\n2. **Docker Compose**: 建议使用 v2 版本（通常随 Docker Desktop 或新版 Docker Engine 自带）。\n3. **账号准备**:\n   - **Claude Max\u002FPro 订阅用户**: 可直接通过网页端 OAuth 登录。\n   - **按量付费用户**: 准备好您的 Anthropic API Key。\n   - *注：本工具免费开源，您只需向 AI 提供商支付实际使用费用。*\n\n## 安装步骤\n\n### 1. 创建项目目录\n在终端中执行以下命令创建文件夹并进入：\n\n```bash\nmkdir holyclaude && cd holyclaude\n```\n\n### 2. 创建配置文件\n在当前目录下创建 `docker-compose.yaml` 文件。您可以直接使用以下最小化配置模板（零配置，开箱即用）：\n\n```yaml\nversion: '3.8'\n\nservices:\n  holyclaude:\n    image: coderluii\u002Fholyclaude:latest\n    container_name: holyclaude\n    ports:\n      - \"3001:3001\"\n    volumes:\n      - .\u002Fdata:\u002Fhome\u002Fuser\u002Fdata\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n    environment:\n      - TZ=Asia\u002FShanghai\n    restart: unless-stopped\n    # 针对部分 NAS 或特殊文件系统，如需优化文件监听可取消下面注释\n    # environment:\n    #   - CHOKIDAR_USEPOLLING=true\n```\n\n> **镜像选择说明**：\n> - `latest`: 全功能版（推荐），预装所有工具，启动无需等待下载。\n> - `slim`: 精简版，体积更小，缺失的工具会在首次使用时自动安装。\n\n### 3. 启动服务\n执行以下命令拉取镜像并后台启动容器：\n\n```bash\ndocker compose up -d\n```\n\n*首次运行会自动下载镜像，根据网络情况可能需要几分钟。*\n\n## 基本使用\n\n### 1. 访问 Web 界面\n容器启动后，在浏览器中打开以下地址：\n\n```text\nhttp:\u002F\u002Flocalhost:3001\n```\n\n### 2. 初始化与登录\n1. **创建 CloudCLI 账户**: 首次访问时，按照提示创建一个本地管理账户（仅需 10 秒）。\n2. **绑定 AI 账号**:\n   - **订阅用户**: 点击登录，使用您的 Anthropic 账号进行 OAuth 授权（与桌面版流程一致）。\n   - **API Key 用户**: 在设置界面直接填入您的 `Anthropic API Key`。\n3. **开始构建**: 登录成功后，您即可在浏览器中使用完整的 Claude Code 环境，包括代码编辑、终端操作、网页截图测试等功能。\n\n### 3. 验证其他 AI 工具（可选）\n进入容器终端可验证预装的其他 AI CLI 工具：\n\n```bash\ndocker exec -it holyclaude bash\n# 在容器内尝试运行其他工具，例如：\ncodex --help\n# 或配置 Gemini (需设置环境变量 GEMINI_API_KEY)\n```\n\n一切就绪，现在您可以停止手动配置环境，专注于开发了。","某全栈开发者需要在周末快速构建并测试一个包含复杂前端交互和后端数据库的 MVP 原型，且必须确保环境在任何机器上都能一键复现。\n\n### 没有 HolyClaude 时\n- **环境配置耗时极长**：手动安装 Claude Code CLI、Playwright、Chromium 及各类数据库客户端，光是解决依赖冲突和版本兼容就耗费了整整两小时。\n- **容器化陷阱频发**：在 Docker 中运行无头浏览器时，因共享内存默认仅 64MB 导致 Chromium 频繁崩溃，还需反复调试 Xvfb 配置才能正常截图。\n- **权限管理混乱**：容器内用户 UID 与宿主机不匹配，导致生成的文件权限错误，无法在本地编辑器中直接修改，甚至引发 SQLite 锁死问题。\n- **工具链割裂**：需要在终端、浏览器和本地 IDE 之间频繁切换，缺乏统一的 Web UI 来统筹管理 7 种不同的 AI 命令行工具。\n\n### 使用 HolyClaude 后\n- **一键启动工作站**：只需执行 `docker compose up`，即刻获得预装了 Claude Code、Web UI 及 50+ 开发工具的完整环境，零配置直接进入编码状态。\n- **底层难题已预解**：HolyClaude 内部已完美配置好共享内存、Xvfb 及用户权限映射，无头浏览器截图与测试功能开箱即用，不再报错。\n- **无缝文件协作**：容器内外权限自动对齐，本地代码实时同步，彻底消除了“权限拒绝”和数据库锁死等阻碍开发的低级错误。\n- **统一操作界面**：通过内置的 Web UI 即可在浏览器中直接调用所有 AI CLI 工具，结合现有的 Claude 订阅，实现从代码生成到部署的全流程闭环。\n\nHolyClaude 将原本需要数小时的环境搭建与排错工作压缩为一条命令，让开发者能真正专注于业务逻辑的创新而非基础设施的维护。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCoderLuii_HolyClaude_8fa943cb.png","CoderLuii","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FCoderLuii_fa1047af.jpg","Security Analyst by day, tech tinkerer by night. Passionate about cybersecurity, automation, and self-hosted solutions. Always optimizing, always learning.",null,"United States","ship@coderluii.dev","https:\u002F\u002Fcoderluii.dev","https:\u002F\u002Fgithub.com\u002FCoderLuii",[85,89,93],{"name":86,"color":87,"percentage":88},"Dockerfile","#384d54",48.7,{"name":90,"color":91,"percentage":92},"Shell","#89e051",43,{"name":94,"color":95,"percentage":96},"Python","#3572A5",8.3,1792,197,"2026-04-04T06:31:00","MIT","Linux (amd64, arm64), macOS (Docker Desktop), Windows (WSL2 + Docker Desktop), Synology\u002FQNAP NAS","未说明",{"notes":104,"python":102,"dependencies":105},"该工具基于 Docker 容器运行，无需手动配置环境。支持通过 Web UI 使用现有的 Claude Max\u002FPro 订阅或 Anthropic API Key。提供 'latest'（全功能）和 'slim'（精简版）两种镜像版本。在 NAS 上使用 SMB 挂载时建议设置环境变量 CHOKIDAR_USEPOLLING=true。数据持久化通过绑定挂载到本地 .\u002Fdata\u002Fclaude\u002F 目录实现。",[106,107,108,109,110,111,112],"Docker","Docker Compose","s6-overlay","Chromium","Xvfb","Playwright","CloudCLI",[14,13,15],[115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],"ai","ai-coding","anthropic","claude","claude-code","coding-agent","container","developer-tools","devtools","docker","docker-compose","gemini","headless-browser","openai","playwright","2026-03-27T02:49:30.150509","2026-04-06T05:17:07.408738",[133,138,143,148,153,158],{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},14664,"Web Terminal 插件一直显示\"Connecting...\"旋转图标，无法连接终端怎么办？","这是一个已知的 WebSocket 代理问题，已在 v1.1.3 版本中修复。请拉取最新镜像（coderluii\u002Fholyclaude:latest）并重启容器。修复原理是修正了服务器端代码，确保在转发 WebSocket 消息时保留原始帧类型（文本或二进制），而不是全部作为二进制帧转发，从而使浏览器能正确处理就绪消息。临时解决方法是使用 CloudCLI 的主会话终端代替插件标签页。","https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002F11",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},14665,"如何在容器中安装和使用 Azure CLI (az)？","Azure CLI 已在 v1.1.4 版本的 Full 变体镜像中预装。您只需拉取最新镜像，然后在 Web 终端或通过 `docker exec` 运行 `az` 命令即可使用。注意：由于 Azure CLI 依赖较大（约 600MB-1.2GB），它仅包含在 Full 版本中，Slim 版本不包含此工具。","https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002F10",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},14666,"如何添加或使用 Junie (JetBrains AI Agent)？","Junie 已在 v1.1.3 版本的 Full 变体镜像中提供。拉取最新镜像后，您可以在 Web 终端或通过 `docker exec` 运行 `junie` 命令来使用它。请注意，Junie 目前仅作为命令行工具提供，没有独立的 Web 界面（CloudCLI 的主界面专为 Claude Code 设计）。","https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002F4",{"id":149,"question_zh":150,"answer_zh":151,"source_url":152},14667,"使用 Claude CLI 添加 MCP 服务器时报错\"missing required argument 'commandOrUrl'\"如何解决？","该错误是因为命令中缺少必要的全双破折号 `--` 分隔符。正确的命令格式应在环境变量参数和实际命令之间加上 `--`。例如：\n`claude mcp add -e API_KEY=xxx my-server -- npx my-mcp-server`\n请检查您的命令是否遗漏了 `--`，并在添加或编辑 MCP 服务器时确保格式正确。","https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002F22",{"id":154,"question_zh":155,"answer_zh":156,"source_url":157},14668,"如何安装和使用 OpenCode CLI？","OpenCode 已在 v1.1.3 版本的 Full 变体镜像中预装。拉取最新镜像后，您可以直接在 Web 终端或通过 `docker exec` 运行 `opencode` 命令来使用它。它与 Gemini CLI、Codex 等其他 CLI 工具一样，作为终端命令在容器内运行。","https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002F13",{"id":159,"question_zh":160,"answer_zh":161,"source_url":162},14669,"在 MCP 对话框的环境变量字段中输入时，为什么会自动添加等号 (=) 且无法换行？","这是底层 UI 组件（claudecodeui）的一个已知问题，表现为输入第一个字符时自动添加等号，且回车键无法正常换行。目前建议的临时解决方法是：先添加 MCP 服务器，保存后再进行编辑，编辑模式下环境变量字段的输入行为通常会恢复正常。该问题追踪于上游 UI 项目。","https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fissues\u002F20",[164,169,174,179,184,189,194,199,204,209],{"id":165,"version":166,"summary_zh":167,"released_at":168},81561,"v1.1.8","### 已修复\n- 修正了仍引用不存在的 `main` 分支的公共文档链接，包括 Docker Hub 描述以及已翻译的 README 中指向 `docs\u002Fconfiguration.md` 的链接。","2026-04-04T06:32:51",{"id":170,"version":171,"summary_zh":172,"released_at":173},81562,"v1.1.7","## 2026年3月28日\n\n### 新增\n- Codex CLI 已预配置为使用“按需”审批策略和 `workspace-write` 沙箱（不再出现重复的审批提示）\n- Codex、Gemini 和 Cursor CLI 的身份验证及配置可在容器重建后持续保留\n- 为 Codex 和 Gemini CLI 添加了 Apprise 通知钩子（与 Claude Code 使用相同的 `notify-on` 标志文件）\n- Cursor CLI 通知钩子已预配置（将在 Cursor CLI 支持停止事件时自动启用）\n- Claude Code 的 OAuth 会话可在容器重新创建后持续保留\n- README 文档已翻译为：西班牙语、法语、意大利语、葡萄牙语、德语、俄语、印地语、中文、日语、韩语\n\n感谢 @tchirou 提供的反馈和功能请求。","2026-03-29T03:37:26",{"id":175,"version":176,"summary_zh":177,"released_at":178},81563,"v1.1.6","## 2026年3月28日\n\n### 修复\n- Codex CLI 的 `apply_patch` 命令在 Synology NAS 及其他用户命名空间受限的主机上会失败（现通过 setuid 备用方案使 bubblewrap 沙箱正常工作）\n- 修正了文档中错误说明：ChatGPT Plus\u002FPro 订阅无法与 Codex CLI 配合使用（实际上可以通过 `codex login --device-auth` 正常使用）\n\n感谢 @tchirou 报告了 bubblewrap 问题并提出了修复建议。","2026-03-28T22:36:26",{"id":180,"version":181,"summary_zh":182,"released_at":183},81564,"v1.1.5","## 2026年3月28日\n\n### 新增\n- 包含打包的第三方软件许可证归属信息的 `THIRD-PARTY-NOTICES` 文件\n- README 中的“第三方软件”章节\n\n感谢 @viper151 提出的许可证归属请求。","2026-03-28T20:06:38",{"id":185,"version":186,"summary_zh":187,"released_at":188},81565,"v1.1.4","## 2026年3月28日\n\n### 新增\n- 完整版 Azure CLI (`az`)\n- Ollama 设置文档 (`docs\u002Follama.md`)，用于在无需 Anthropic 订阅的情况下，使用本地或云端模型运行 HolyClaude\n\n感谢 @jsgoecke 提出的 Azure CLI 请求，以及 @zuzu59 对 Ollama 文档的贡献。","2026-03-28T16:25:35",{"id":190,"version":191,"summary_zh":192,"released_at":193},81566,"v1.1.3","## 2026年3月27日\n\n### 新增\n- Junie CLI（JetBrains AI 编码助手）完整版\n- OpenCode CLI（开源 AI 编码助手）完整版\n- 将环境变量透传至 CloudCLI，包括 AI 服务提供商的密钥、时区和显示设置相关变量（`ANTHROPIC_API_KEY`、`CLAUDE_CODE_USE_BEDROCK`、`CLAUDE_CODE_USE_VERTEX`、`OLLAMA_HOST`、`TZ`、`DISPLAY` 等）\n\n### 修复\n- Web Terminal 插件卡在“连接中…”加载动画的问题（插件代理中未保留 WebSocket 帧类型，现已修复双向转发）\n- Docker Compose 中的 `NODE_OPTIONS` 现在会正确地与内部标志合并，而不再被静默覆盖\n- `TZ` 和 `DISPLAY` 环境变量现已正确传递给 CloudCLI 进程\n- `settings.json` 中的默认权限模式已从 `allowEdits` 调整为 `acceptEdits`\n\n感谢 @RobertWalther 提供的 WebSocket 修复方案，以及 @kewogc 报告的设置错误问题。","2026-03-28T03:32:06",{"id":195,"version":196,"summary_zh":197,"released_at":198},81567,"v1.1.2","## 2026年3月26日\n\n### 新增\n- Docker HEALTHCHECK 指令，用于容器健康监测（`docker ps` 现在会显示健康\u002F不健康状态）\n- Bootstrap 现在会在重新初始化时备份现有的 `settings.json` 和 `CLAUDE.md` 文件，然后再进行覆盖（自动创建 `.bak` 文件）\n- 扩展了 `CONTRIBUTING.md`，增加了构建命令、测试步骤、文件结构图以及 PR 审核清单\n\n### 链接\n\n- [完整文档](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude)\n- [Docker Hub](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n- [GHCR](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fpkgs\u002Fcontainer\u002Fholyclaude)\n- [项目主页](https:\u002F\u002Fholyclaude.coderluii.dev)","2026-03-27T03:14:28",{"id":200,"version":201,"summary_zh":202,"released_at":203},81568,"v1.1.1","## 2026年3月26日\n\n### 修复\n- 当 Docker 以 root 用户身份创建目录时，首次运行时工作区绑定挂载的权限问题\n- 现在通过 `.gitkeep` 文件跟踪工作区目录，以防止在全新克隆时出现 root 所有权问题\n\n### 新增\n- 可通过 `.env` 文件配置主机端口及绑定挂载路径（`HOLYCLAUDE_HOST_PORT`、`HOLYCLAUDE_HOST_CLAUDE_DIR`、`HOLYCLAUDE_HOST_WORKSPACE_DIR`）\n\n感谢 @Sunwood-ai-labs 的贡献。\n\n### 链接\n\n- [完整文档](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude)\n- [Docker Hub](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n- [GHCR](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fpkgs\u002Fcontainer\u002Fholyclaude)\n- [落地页](https:\u002F\u002Fholyclaude.coderluii.dev)","2026-03-26T23:19:35",{"id":205,"version":206,"summary_zh":207,"released_at":208},81569,"v1.1.0","## 2026年3月25日\n\n### 新增\n- 引入 Apprise 通知引擎，支持 100 多种服务（Discord、Telegram、Slack、电子邮件、Gotify 等）\n- 提供独立的 `NOTIFY_*` 环境变量，便于按服务进行配置\n- 增加通配符 `NOTIFY_URLS`，可用于任何 Apprise 支持的服务\n- 同时支持 Docker Hub 和 GHCR（GitHub 容器注册表）\n\n### 变更\n- 通知后端由 Pushover 替换为 Apprise\n\n### 修复\n- README 中的 Docker 镜像引用现已使用小写格式（`coderluii\u002Fholyclaude` 而不是 `CoderLuii\u002FHolyClaude`）——感谢 @josh-ua\n\n### 移除\n- **重大变更：** 移除了 `PUSHOVER_APP_TOKEN` 和 `PUSHOVER_USER_KEY` 环境变量。请迁移到 `NOTIFY_PUSHOVER=pover:\u002F\u002Fuser_key@app_token`。详情请参阅[配置文档](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fblob\u002Fmaster\u002Fdocs\u002Fconfiguration.md#notifications-apprise)。\n\n### 迁移指南\n\n> 本版本引入了破坏性变更。\n\n- **移除 Pushover 环境变量：** 将 `PUSHOVER_APP_TOKEN` 和 `PUSHOVER_USER_KEY` 替换为单个变量：`NOTIFY_PUSHOVER=pover:\u002F\u002Fuser_key@app_token`\n\n### 链接\n\n- [完整文档](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude)\n- [Docker Hub](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n- [GHCR](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude\u002Fpkgs\u002Fcontainer\u002Fholyclaude)\n- [项目主页](https:\u002F\u002Fholyclaude.coderluii.dev)","2026-03-26T03:20:38",{"id":210,"version":211,"summary_zh":212,"released_at":213},81570,"v1.0.0","# HolyClaude v1.0.0\n\n首次公开发布。只需 30 秒，即可在容器中运行 Claude Code，一切就绪。\n\n## 您将获得的内容\n\n**一条命令。** 完整的 AI 开发工作站。执行 `docker compose up -d` 并打开浏览器即可。\n\n**Claude Code CLI** 已预装，并与 CloudCLI Web 界面一同配置好，监听 3001 端口。使用您现有的 Claude Max 方案或 API 密钥登录。无需额外费用，无需封装器，无需代理。\n\n**一个容器内集成五款 AI CLI。** Claude Code、Gemini CLI、OpenAI Codex、Cursor 和 TaskMaster AI。可即时切换。\n\n**真正可用的无头浏览器。** 预配置了 Chromium + Xvfb + Playwright。截图、浏览器测试、Lighthouse 审计等功能开箱即用。\n\n**50 多种开发工具** 即刻可用。包括 Node.js 22、Python 3、TypeScript、pnpm、ripgrep、git、GitHub CLI、数据库客户端、图像处理等。\n\n**多架构支持。** AMD64 和 ARM64。\n\n## 快速开始\n\n```yaml\nservices:\n  holyclaude:\n    image: coderluii\u002Fholyclaude:latest\n    container_name: holyclaude\n    restart: unless-stopped\n    shm_size: 2g\n    cap_add: [SYS_ADMIN, SYS_PTRACE]\n    security_opt: [seccomp=unconfined]\n    ports: [\"3001:3001\"]\n    volumes:\n      - .\u002Fdata\u002Fclaude:\u002Fhome\u002Fclaude\u002F.claude\n      - .\u002Fworkspace:\u002Fworkspace\n    environment:\n      - TZ=UTC\n```\n\n然后打开 http:\u002F\u002Flocalhost:3001\n\n## 链接\n\n- [完整文档](https:\u002F\u002Fgithub.com\u002FCoderLuii\u002FHolyClaude)\n- [Docker Hub](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fcoderluii\u002Fholyclaude)\n- [落地页](https:\u002F\u002Fholyclaude.coderluii.dev)","2026-03-22T01:03:49"]