# HolyClaude **AI Coding Workstation (Claude Code CLI + Web UI)** ## Service Overview | Property | Value | |----------|-------| | **Service Name** | holyclaude | | **Host** | seattle | | **Category** | AI / Development | | **Docker Image** | `coderluii/holyclaude:latest` | | **Compose File** | `hosts/vms/seattle/holyclaude.yaml` | | **Port** | 3059 (container :3001) | | **URL** | `http://seattle:3059` (Tailscale-only) | | **Status** | Testing | ## Purpose HolyClaude bundles the Claude Code CLI, the [siteboon/claude-code-ui](https://github.com/siteboon/claude-code-ui) web UI, multiple AI CLIs, and a headless Chromium into a single Docker image. Upstream: [github.com/CoderLuii/HolyClaude](https://github.com/CoderLuii/HolyClaude) (MIT). Deployed on seattle as a testing sandbox for evaluating the web UI workflow. ## Access Bound to the Tailscale interface only (`100.82.197.124:3059`). Not reachable from the public IP (YOUR_WAN_IP). Access via Tailscale from any node on the tailnet: ``` http://seattle:3059 http://100.82.197.124:3059 ``` First visit prompts you to create a username/password for the UI. ## Volumes | Container Path | Docker Volume | Purpose | |----------------|---------------|---------| | `/home/claude` | `holyclaude-data` | UI config, user account, Claude Code state, plugins | | `/workspace` | `holyclaude-workspace` | Project code (WORKDIR inside the container) | ## Configuration Environment variables set in the compose file: | Variable | Value | |----------|-------| | `TZ` | `America/Los_Angeles` | | `PUID` | `1000` | | `PGID` | `1000` | The image runs as `root` internally (typical for dev-workstation containers — it drops to the `claude` user for most work via s6-overlay). ## Management ```bash # From seattle cd /root/repos/homelab/hosts/vms/seattle docker compose -f holyclaude.yaml ps docker compose -f holyclaude.yaml logs -f docker compose -f holyclaude.yaml restart docker compose -f holyclaude.yaml pull && docker compose -f holyclaude.yaml up -d # Tear down (keep data): docker compose -f holyclaude.yaml down # Tear down + wipe volumes: docker compose -f holyclaude.yaml down -v ``` ## Security Notes - Bound to Tailscale IP only — no public exposure. - Third-party community image; pinned to `:latest` for now since this is testing. Pin to a digest before treating as production. - Container runs privileged-as-root internally; any project code mounted into `/workspace` is readable/writable by the container. - The bundled UI accepts arbitrary shell commands — treat access to the UI the same as SSH to the host. ## Troubleshooting | Issue | Check | |-------|-------| | UI unreachable | `docker ps --filter name=holyclaude` — container healthy? | | Port conflict | `ss -tlnp \| grep 3059` — anything else bound to 3059? | | Can't reach over Tailscale | `tailscale status` on client; confirm seattle is online | | Stuck at login | First-run creates the account; if forgotten, `docker compose down -v` resets everything |