CoderLuii/HolyCode
CoderLuii/HolyCode has 84 GitHub stars and 15 forks. GitHot measured +1 stars in 24 hours and +7 in 7 days. Last checked 2026-11-15 07:09 UTC. Last push 2026-11-05.
Gemessener Sternzuwachs
- in 24h
- +1
- in 7 days
- +7
- in 15 days
- Verlauf wird gesammelt
- in 1 month
- Verlauf wird gesammelt
Nettoänderungen in überlappenden Zeiträumen, keine Tagessummen. Fehlende Messwerte bleiben leer. Sterne zeigen Interesse, nicht Qualität.
Über uns
AI coding workstation: OpenCode + Claude subscription support + 30+ tools + headless browser + multi-agent orchestration
Selbst gehostetdocs/translations/README.de.md
Original🌍 English | Español | Français | Italiano | Português | Deutsch | Русский | हिन्दी | 中文 | 日本語 | 한국어
HolyCode
Ein Container. Alle Werkzeuge. Jeder Anbieter.
OpenCode läuft in einem Container mit allem bereits installiert. 50+ Entwicklungswerkzeuge, 10+ KI-Anbieter, headloser Browser, persistenter Zustand. Lege es auf einem beliebigen Rechner ab und mach genau dort weiter, wo du aufgehört hast.
Funktioniert mit deinem Claude-Abonnement. Aktiviere das Claude Auth-Plugin und nutze deinen bestehenden Claude Max/Pro-Plan. Kein separater API-Schlüssel nötig.
Mehragenten-Plugin vorerst selbst verwalten. Die von HolyCode verwaltete Installation von oh-my-openagent ist in v1.1.4 ausgesetzt. Beim ersten erfolgreichen Start ohne das alte Flag wird der frühere verwaltete Plugin-Eintrag deaktiviert; Einstellungen, Skills und Paket-Cache bleiben erhalten.
Du wolltest eine Stunde damit verbringen, deine Umgebung wiederherzustellen. Oder du kannst einfach docker compose up ausführen.
Kein Self-Hosting gewünscht? HolyCode Cloud kommt. Dieselben Werkzeuge, null Einrichtung. Frühzugang ist kostenlos.
Was ist das?
Du kennst die Geschichte. Du richtest deine Entwicklungsumgebung perfekt ein. Dann wechselst du den Rechner. Oder baust einen Container neu auf. Oder dein System entscheidet, dass heute der Tag ist, an dem es stirbt.
Plötzlich installierst du Werkzeuge neu. Suchst nach Konfigurationsdateien. Gibst API-Schlüssel erneut ein. Fragst dich, warum ripgrep nicht mehr im PATH ist. Versuchst herauszufinden, warum Chromium nicht startet, weil Docker Containern 64 MB gemeinsamen Speicher gibt. Dann ist Xvfb nicht konfiguriert. Dann stimmt die UID im Container nicht mit der des Hosts überein und alles gibt Permission denied.
HolyCode ist der Container, den ich gebaut habe, nachdem ich jeden einzelnen dieser Probleme gelöst hatte.
Er kapselt OpenCode, einen KI-Programmieragenten mit eingebautem Web-UI. Alle deine Einstellungen, Sitzungen, MCP-Konfigurationen, Plugins und Werkzeugverlauf leben in einem Bind-Mount außerhalb des Containers. Neu aufbauen, aktualisieren oder auf einen neuen Rechner umziehen. Dein Zustand kommt sofort zurück.
Es ist die gleiche Idee wie HolyClaude, aber OpenCode statt Claude Code kapselnd. Und hier ist der Punkt: OpenCode ist nicht an einen einzigen Anbieter gebunden. Weise es auf Anthropic, OpenAI, Google Gemini, Groq, AWS Bedrock oder Azure OpenAI. Gleicher Container, deine Wahl des Modells.
50+ Entwicklungswerkzeuge, zwei Sprachlaufzeiten, ein headloser Browser-Stack und Prozessüberwachung. Alles verkabelt, alles beim ersten Start bereit. Ich betreibe das auf meinem eigenen Server. Jeder Fehler wurde gefunden, diagnostiziert und behoben.
Du lädst es herunter. Du startest es. Du öffnest den Browser. Du baust.
Inhaltsverzeichnis
| Abschnitt | |
|---|---|
| 1 | Schnellstart |
| 2 | HolyCode Cloud |
| 3 | Plattformunterstützung |
| 4 | Warum HolyCode |
| 5 | Anbieterunterstützung |
| 6 | Docker Compose - Schnell |
| 7 | Docker Compose - Vollständig |
| 8 | Umgebungsvariablen |
| 9 | Was ist enthalten |
| 10 | Integrierte Dienste |
| 11 | Architektur |
| 12 | CLI-Verwendung |
| 13 | Daten und Persistenz |
| 14 | Berechtigungen |
| 15 | Aktualisierungen |
| 16 | Fehlerbehebung |
| 17 | Lokale Erstellung |
| 18 | Mitwirken |
| 19 | Support |
| 20 | Lizenz |
🚀 Schnellstart
Schritt 1. Lade das Image herunter.
docker pull coderluii/holycode:latest
Schritt 2. Erstelle eine docker-compose.yaml.
Das Compose-Setup verwendet das Chromium-seccomp-Profil von HolyCode. Wenn du nicht aus einem Repository-Klon arbeitest, lade zuerst die Release-Datei herunter:
mkdir -p config
curl -fsSLo config/chromium-seccomp.json \
https://raw.githubusercontent.com/CoderLuii/HolyCode/v1.1.3/config/chromium-seccomp.json
services:
holycode:
image: coderluii/holycode:latest
container_name: holycode
restart: unless-stopped
shm_size: 2g
security_opt:
- seccomp=./config/chromium-seccomp.json
ports:
- "4096:4096"
volumes:
- ./data/opencode:/home/opencode
- ./local-cache/opencode:/home/opencode/.cache/opencode
- ./workspace:/workspace
environment:
- PUID=1000
- PGID=1000
- ANTHROPIC_API_KEY=your-key-here
Schritt 3. Starte es.
docker compose up -d
Öffne http://localhost:4096. Du bist drin.
Die mitgelieferte
docker-compose.yamlverwendet die Syntax${ANTHROPIC_API_KEY}, die aus deiner Shell-Umgebung oder einer.env-Datei liest. Kopiere.env.examplenach.envund trage deinen API-Schlüssel ein.
☁ HolyCode Cloud (Demnächst)
Kein Self-Hosting gewünscht? Wir bauen eine verwaltete Version von HolyCode.
Die gleichen 50+ Werkzeuge. Die gleichen 10+ Anbieter. Der gleiche persistente Zustand. Kein Docker. Kein Terminal. Öffne einfach deinen Browser und programmiere.
Was du mit Cloud bekommst:
- Null Einrichtung. Kein Docker, keine Konfigurationsdateien, keine Terminalbefehle.
- Funktioniert auf jedem Gerät. Laptop, Tablet, Smartphone. Öffne einen Browser und los.
- Getaggte Releases aktualisieren OpenCode und die Tool-Pins für dich.
- Dein Zustand folgt dir. Sitzungen, Einstellungen, MCP-Konfigurationen zwischen Nutzungen gespeichert.
Der Frühzugang ist kostenlos. Keine Kreditkarte erforderlich.
💻 Plattformunterstützung
| Plattform | Architektur | Status |
|---|---|---|
| Linux | amd64 | Unterstützt |
| Linux | arm64 | Unterstützt |
| macOS (Docker Desktop) | amd64 / arm64 | Unterstützt |
| Windows (WSL2) | amd64 | Unterstützt |
⚡ Warum HolyCode
Ich habe das gebaut, weil ich es leid war, jedes Mal das gleiche Setup zu wiederholen. OpenCode installieren, einen headlosen Browser einrichten, Berechtigungsprobleme beheben, Prozessüberwachung debuggen. Jedes. Mal.
Also habe ich einen Container gemacht, der das alles erledigt. Und dann habe ich jeden möglichen Fehler getroffen, damit du es nicht musst.
| HolyCode | Selbst gemacht | |
|---|---|---|
| Zeit bis zur ersten funktionierenden Sitzung | Unter 2 Minuten | 30-60 Minuten |
| Chromium + Xvfb headloser Browser | Vorkonfiguriert | Selbst recherchieren, installieren, debuggen |
| Entwicklungswerkzeug-Suite (ripgrep, fzf, lazygit, etc.) | Vorinstalliert | Einzeln suchen und installieren |
| Zustandspersistenz über Neuerstellungen hinweg | Automatisch via Bind-Mount | Manuelle Bind-Mounts, leicht falsch zu konfigurieren |
| UID/GID-Dateiberechtigungs-Remapping | Eingebautes PUID/PGID | chmod-Hacks im Dockerfile |
| Multi-Architektur-Unterstützung | amd64 + arm64 sofort einsatzbereit | Selbst erstellen und beide pushen |
| Aktualisierungen | docker pull + compose up |
Von Grund auf neu erstellen, hoffen dass nichts bricht |
🤖 Anbieterunterstützung
OpenCode ist anbieterunabhängig. Setze den API-Schlüssel, den du verwendest, und fertig.
| Anbieter | Umgebungsvariable | Hinweise |
|---|---|---|
| Anthropic | ANTHROPIC_API_KEY |
Claude-Modelle |
| OpenAI | OPENAI_API_KEY |
GPT-Modelle |
| Google Gemini | GEMINI_API_KEY |
Gemini-Modelle |
| Groq | GROQ_API_KEY |
Schnelle Inferenz |
| AWS Bedrock | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION |
Alle drei setzen |
| Azure OpenAI | AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_KEY, AZURE_OPENAI_API_VERSION |
Alle drei setzen |
| GitHub | GITHUB_TOKEN |
GitHub Copilot über OpenAI-kompatiblen Endpunkt |
| Vertex AI | (über OpenCode konfiguriert) | Google Vertex AI-Modelle |
| GitHub Models | (über OpenCode konfiguriert) | Auf GitHub gehostete Modelle |
| Ollama | (über OpenCode konfiguriert) | Lokale Modelle via Ollama |
Du musst nur Schlüssel für Anbieter setzen, die du tatsächlich verwendest. Alles andere ist optional und wird ignoriert.
Vertex AI, GitHub Models und Ollama werden über das Anbietersystem von OpenCode konfiguriert. Führe opencode providers login im Container aus.
📋 Docker Compose - Schnell
Die minimale Einrichtung. Kopieren, Schlüssel eintragen, ausführen.
services:
holycode:
image: coderluii/holycode:latest
container_name: holycode
restart: unless-stopped
shm_size: 2g # Erforderlich für Chromium-Stabilität
ports:
- "4096:4096" # OpenCode Web-UI
volumes:
- ./data/opencode:/home/opencode
- ./local-cache/opencode:/home/opencode/.cache/opencode
- ./workspace:/workspace # Deine Projektdateien
environment:
- PUID=1000
- PGID=1000
- ANTHROPIC_API_KEY=your-key-here # Oder durch beliebigen Anbieterschlüssel ersetzen
📄 Docker Compose - Vollständig
Jede Option dokumentiert. In docker-compose.yaml kopieren und auskommentieren, was benötigt wird.
# HolyCode - Full Configuration Reference
# Copy this file to docker-compose.yaml and customize.
# All options documented. Uncomment what you need.
services:
holycode:
image: coderluii/holycode:latest
container_name: holycode
restart: unless-stopped
shm_size: 2g
ports:
- "4096:4096" # OpenCode web UI
volumes:
# --- Persistent state (all OpenCode data under home dir) ---
- ./data/opencode:/home/opencode # Config, sessions, plugins, all XDG paths
# --- Cache isolation (keeps plugin cache on local disk, avoids CIFS/SMB symlink issues) ---
- ./local-cache/opencode:/home/opencode/.cache/opencode
# --- Workspace ---
- ./workspace:/workspace # Your project files
environment:
# --- Container user ---
- PUID=1000 # Match your host UID for file permissions
- PGID=1000 # Match your host GID for file permissions
# --- Git identity (used on first boot) ---
# - GIT_USER_NAME=Your Name
# - [email protected]
# --- AI provider API keys (add the ones you use) ---
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
# - OPENAI_API_KEY=${OPENAI_API_KEY:-}
# - GEMINI_API_KEY=${GEMINI_API_KEY:-}
# - GROQ_API_KEY=${GROQ_API_KEY:-}
# - GITHUB_TOKEN=${GITHUB_TOKEN:-}
# --- AWS Bedrock (uncomment all 3 for Bedrock) ---
# - AWS_ACCESS_KEY_ID=
# - AWS_SECRET_ACCESS_KEY=
# - AWS_REGION=us-east-1
# --- Azure OpenAI (uncomment all 3 for Azure) ---
# - AZURE_OPENAI_ENDPOINT=
# - AZURE_OPENAI_API_KEY=
# - AZURE_OPENAI_API_VERSION=
# --- OpenCode behavior (set by default in image, override if needed) ---
# - OPENCODE_DISABLE_AUTOUPDATE=true
# - OPENCODE_DISABLE_TERMINAL_TITLE=true
# - OPENCODE_MODEL=claude-sonnet-4-6
# - OPENCODE_PERMISSION=auto
# - OPENCODE_DISABLE_LSP_DOWNLOAD=true
# - OPENCODE_DISABLE_AUTOCOMPACT=true
# - OPENCODE_ENABLE_EXA=true
# --- Web UI Security (basic auth for opencode web) ---
# - OPENCODE_SERVER_PASSWORD=your-password
# - OPENCODE_SERVER_USERNAME=opencode
# --- Claude Auth (use Claude subscription instead of API key) ---
# Reads credentials from ./data/opencode/.claude/.credentials.json
# NOTE: May violate Anthropic TOS. Use at your own risk.
# Toggle on/off with docker compose down && up -d
# - ENABLE_CLAUDE_AUTH=true
# --- Legacy oh-my-openagent flag ---
# Managed installation is unavailable in v1.1.4. Existing config is preserved.
# Startup stops with a migration message while this flag is true.
# - ENABLE_OH_MY_OPENAGENT=true
🔧 Umgebungsvariablen
| Variable | Standard | Zweck |
|---|---|---|
PUID |
1000 |
Container-Benutzer-UID, an Host anpassen für korrekte Dateirechte |
PGID |
1000 |
Container-Benutzer-GID, an Host anpassen für korrekte Dateirechte |
GIT_USER_NAME |
HolyCode User |
Git-Identität beim ersten Start konfiguriert |
GIT_USER_EMAIL |
[email protected] |
Git-Identität beim ersten Start konfiguriert |
ANTHROPIC_API_KEY |
(keiner) | Anthropic Claude |
OPENAI_API_KEY |
(keiner) | OpenAI GPT-Modelle |
GEMINI_API_KEY |
(keiner) | Google Gemini |
GROQ_API_KEY |
(keiner) | Groq schnelle Inferenz |
GITHUB_TOKEN |
(keiner) | GitHub CLI-Authentifizierung und Copilot |
AWS_ACCESS_KEY_ID |
(keiner) | AWS Bedrock - alle drei AWS-Variablen setzen |
AWS_SECRET_ACCESS_KEY |
(keiner) | AWS Bedrock |
AWS_REGION |
(keiner) | AWS Bedrock-Region (z.B. us-east-1) |
AZURE_OPENAI_ENDPOINT |
(keiner) | Azure OpenAI - alle drei Azure-Variablen setzen |
AZURE_OPENAI_API_KEY |
(keiner) | Azure OpenAI |
AZURE_OPENAI_API_VERSION |
(keiner) | Azure OpenAI API-Version |
OPENCODE_DISABLE_AUTOUPDATE |
true |
Verhindert, dass OpenCode sich im Container selbst aktualisiert |
OPENCODE_DISABLE_TERMINAL_TITLE |
true |
Verhindert, dass OpenCode den Terminal-Titel ändert |
OPENCODE_MODEL |
(keiner) | Überschreibt das Standardmodell |
OPENCODE_PERMISSION |
(keiner) | Auf auto setzen, um Berechtigungsaufforderungen zu überspringen |
OPENCODE_DISABLE_LSP_DOWNLOAD |
(keiner) | Deaktiviert automatische LSP-Server-Downloads |
OPENCODE_DISABLE_AUTOCOMPACT |
(keiner) | Deaktiviert automatische Kontextkomprimierung |
OPENCODE_ENABLE_EXA |
(keiner) | Aktiviert Exa-Websuchintegration |
OPENCODE_SERVER_PASSWORD |
(keiner) | Schützt das Web-UI mit Basisauthentifizierung |
OPENCODE_SERVER_USERNAME |
opencode |
Benutzername für Web-UI-Basisauthentifizierung |
ENABLE_CLAUDE_AUTH |
(keiner) | Auf true setzen, um Claude-Abonnement statt API-Schlüssel zu verwenden |
ENABLE_OH_MY_OPENAGENT |
(keiner) | Veraltete Einstellung; true beendet den Start ohne Änderungen, danach deaktiviert eine einmalige Migration den alten aktiven Eintrag |
ENABLE_PAPERCLIP |
(keiner) | Auf true setzen, um das Paperclip-Dashboard und Agenten-Board zu starten |
PAPERCLIP_PORT |
3100 |
Überschreibt den Container-Port für Paperclip |
PAPERCLIP_INSTANCE_ID |
default |
Lokaler Paperclip-Instanzname für isolierten Zustand |
PAPERCLIP_BIND |
lan |
Paperclip reachability preset; lan binds inside Docker on 0.0.0.0 |
ENABLE_HERMES |
(keiner) | Veraltete Einstellung; HolyCode beendet den Start mit einem Migrationshinweis, solange Hermes nicht gebündelt ist |
HOLYCODE_PLUGIN_UPDATE |
manual |
Plugin-Aktualisierungsmodus: manual (installiert nur fehlende Plugins und lässt Benutzer-Versionen unverändert) oder auto (synchronisiert deklarierte Pins beim Start) |
ENABLE_CLAUDE_AUTHwird beim Neustart des Containers wirksam.ENABLE_OH_MY_OPENAGENTist nur noch eine veraltete Einstellung und beendet derzeit den Start mit einem Migrationshinweis.
HOLYCODE_PLUGIN_UPDATEsteuert Plugin-Paketaktualisierungen.manual(Standard) installiert aktivierte Plugins nur wenn sie fehlen und behält vom Benutzer installierte Versionen bei.autoinstalliert fehlende Plugins und synchronisiert die deklarierten Pins beim Start. Dies ist unabhängig vonOPENCODE_DISABLE_AUTOUPDATE, das nur OpenCode betrifft.
HolyCode installiert oh-my-openagent derzeit nicht. Wenn
ENABLE_OH_MY_OPENAGENT=truein einer älteren Installation bestehen bleibt, stoppt der Container ohne Änderungen. Nach dem Entfernen des Flags deaktiviert der erste erfolgreiche Start den alten aktiven Eintrag und erhält Einstellungen, Skills und Paket-Cache.
ENABLE_PAPERCLIP=truestartet Paperclip auf Port3100im Container. Öffne das Dashboard, erstelle ein Unternehmen und stelle dort OpenCode-gestützte Agenten ein. Paperclip persistiert automatisch unter~/.paperclip.
Hermes ist im aktuellen Image weiterhin nicht gebündelt. Wenn
ENABLE_HERMES=trueaus einer älteren Installation bestehen bleibt, beendet HolyCode den Start mit einem kurzen Migrationshinweis./home/opencode/.hermesbleibt unverändert erhalten, damit die Daten nach einer späteren Wiederaufnahme der Integration oder bei einem Rollback verfügbar sind.
GIT_USER_NAMEundGIT_USER_EMAILwerden nur beim ersten Start angewendet. Zum erneuten Anwenden die Sentinel-Datei löschen und neu starten:docker exec holycode rm /home/opencode/.config/opencode/.holycode-bootstrappeddanndocker compose restart.
📦 Was ist enthalten
Kernwerkzeuge
| Werkzeug | Zweck |
|---|---|
git |
Versionskontrolle |
ripgrep |
Schnelle Dateiinhalt-Suche |
fd |
Schneller Dateisucher |
fzf |
Unscharfe Suche |
bat |
Cat mit Syntaxhervorhebung |
eza |
Moderner ls-Ersatz |
lazygit |
Terminal-Git-UI |
delta |
Bessere Git-Diffs |
gh |
GitHub CLI |
htop |
Prozessmonitor |
tar |
Archiv-Erstellung und -Extraktion |
tree |
Verzeichnisbaumvisualisierung |
less |
Seitenweise Dateiansicht |
vim |
Terminal-Texteditor |
tmux |
Terminal-Multiplexer |
Sprachlaufzeiten
| Laufzeit | Version |
|---|---|
| Node.js | 24.22.2 (LTS) |
| npm | 12.2.2 |
| Python | 3.13 (Trixie) |
| pip | Mit Python 3.13 gebündelt |
Release-Tags verwenden exakt
vX.Y.Z. Docker-Image-Tags lassen dasvweg. Nachv1.0.9folgtv1.1.0, nachv1.1.9folgtv1.2.0und nachv1.9.9folgtv2.0.0.v1.0.10bisv1.0.13bleiben unveränderlich.
Current v1.2.9 pins: Node.js 24.22.2, OpenCode 1.19.5, OpenSpec 1.14.3, Claude Code 2.1.318, npm 12.2.2, pnpm 12.16.1, PM2 7.1.2, Wrangler 4.157.0 (Miniflare 5.20261103.0-beta, workerd 1.20261103.1), Lighthouse 13.6.0, pip 26.3, Playwright 1.64.1, certifi 2026.10.23, and GitHub CLI 2.103.3. Paperclip 2026.831.1, Claude Auth 2.2.1, TypeScript 6.0.3, and json-server 0.17.4 stay pinned. npm, PM2, and pip use their official payloads without dependency overlays or vendor repairs. Native image qualification is required before release. Hermes and managed oh-my-openagent remain unavailable; external CLIProxyAPI endpoints remain supported.
Entwicklungswerkzeuge
| Werkzeug | Zweck |
|---|---|
curl |
HTTP-Anfragen |
wget |
Datei-Downloads |
jq |
JSON-Verarbeitung |
unzip / zip |
Archivwerkzeuge |
ssh |
Fernzugriff |
build-essential + pkg-config |
Kompilierung nativer npm-Addons |
python3-venv |
Virtuelle Python-Umgebungen |
procps |
Prozesswerkzeuge: ps, top |
iproute2 |
Netzwerkwerkzeuge: ip, ss |
lsof |
Offene-Dateien-Diagnose |
| OpenSSL | Krypto- und Zertifikatwerkzeuge (über Basis-Image) |
Browser-Stack
| Komponente | Zweck |
|---|---|
| Chromium | Headloser Browser-Engine |
| Xvfb | Virtueller Framebuffer-Display-Server |
| Playwright | Browser-Automatisierungs-Framework |
Der Browser-Stack läuft sofort headless. Kein Display-Server, keine GPU, keine zusätzliche Konfiguration. Playwright- und Puppeteer-Skripte funktionieren wie erwartet.
Enthält Liberation-, DejaVu-, Noto- und Noto Color Emoji-Schriftarten für korrektes Seiten-Rendering und Screenshots.
Integrierte Dienste
| Dienst | Zweck |
|---|---|
| Paperclip | Lokales Agenten-Board, das OpenCode-Arbeiter einstellt und per Heartbeat weckt |
| Claude Code CLI | Installiert für Claude-Abonnement-Authentifizierungsabläufe via ENABLE_CLAUDE_AUTH |
Prozessverwaltung
| Komponente | Zweck |
|---|---|
| s6-overlay v3 | Prozesssupervisor und Init-System |
| Benutzerdefinierter Einstiegspunkt | UID/GID-Remapping, Git-Einrichtung, Bootstrap |
s6-overlay überwacht OpenCode und Xvfb. Wenn ein Prozess abstürzt, startet er automatisch neu. Container-Neustart-Richtlinien bleiben sauber, weil der Supervisor das intern handhabt.
🧩 Integrierte Dienste
Paperclip bleibt als optionaler Dienst über OpenCode gebündelt. Die CLIProxyAPI-Integration verwendet weiterhin einen extern verwalteten Endpunkt. Hermes ist vorübergehend nicht im Image enthalten.
Hermes Agent (vorübergehend nicht gebündelt)
Hermes bleibt aus dem Image entfernt. HolyCode startet keinen Hermes-Prozess und veröffentlicht keinen Hermes-Port.
Deine vorhandenen Daten unter /home/opencode/.hermes werden weder gelöscht noch migriert. Entferne ENABLE_HERMES=true aus älteren Konfigurationen, damit das aktuelle Image startet. Bewahre das Verzeichnis für eine spätere Wiederaufnahme der Integration oder für die Wiederherstellung eines unveränderten Vorab-Snapshots auf.
Paperclip
Paperclip ist die Option "Agenten-Board". Es gibt dir ein lokales Dashboard auf Port 3100, wo du ein Unternehmen erstellst, Agenten einstellst und diese Agenten nach Zeitplan aufwachen lässt. Im Hintergrund werden opencode run-Prozesse gestartet, also sind die Arbeiter immer noch HolyCode.
Aktivieren mit:
environment:
- ENABLE_PAPERCLIP=true
- PAPERCLIP_PORT=3100
Der Paperclip-Zustand liegt unter /home/opencode/.paperclip. Paperclip läuft ebenfalls mit /home/opencode als Home und hält OpenCode-Konfiguration, Cache und Status unter demselben Verzeichnis, sodass die Agenten dieselbe persistente Konfiguration sehen wie die OpenCode-Web-UI. Paperclip liefert den Skills-Katalog jetzt über das Paketset aus, das HolyCode installiert, sodass die Skills-Seite den Katalog lädt statt bei GET /api/skills/catalog zu scheitern. Öffne das Dashboard, richte dein Unternehmen ein und stelle dort OpenCode-gestützte Mitarbeiter ein.
🏗 Architektur
graph TD
A[docker compose up -d] --> B[entrypoint.sh]
B --> C[UID/GID Remap]
C --> D[Plugin Toggles]
D --> E{First Boot?}
E -->|Yes| F[bootstrap.sh]
E -->|No| G[s6-overlay /init]
F --> G
G --> H[Xvfb :99]
G --> I[opencode web :4096]
I --> J[Web UI]
J --> K[Your Browser]
I --> L[CLI Access]
L --> M[docker exec -it holycode bash]
M --> N[opencode TUI]
M --> O[opencode run 'message']
M --> P[opencode attach localhost:4096]
Der Einstiegspunkt verwaltet Benutzer-Remapping, Plugin-Umschalter, optionale integrierte Dienst-Umschalter und die Erststart-Einrichtung. s6-overlay überwacht Xvfb, den OpenCode-Webserver und alle aktivierten optionalen integrierten Dienste. Bei einem Absturz eines überwachten Prozesses startet s6 ihn automatisch neu. Greife auf das Web-UI auf Port 4096 zu oder führe Befehle im Container aus für die vollständige CLI-Erfahrung.
💻 CLI-Verwendung
Das Web-UI auf Port 4096 ist die primäre Schnittstelle. Du kannst OpenCode aber auch direkt von der Kommandozeile im Container verwenden.
Interaktives TUI
docker exec -it holycode bash
opencode
Dies öffnet OpenCodes vollständiges Terminal-UI mit denselben Funktionen wie die Web-Version.
Einmalige Befehle
Führe einen einzelnen Prompt aus ohne das TUI zu betreten:
docker exec -it holycode bash -c "opencode run 'explain this codebase'"
Mit dem laufenden Server verbinden
Verbinde eine lokale TUI-Sitzung mit dem bereits laufenden OpenCode-Webserver:
docker exec -it holycode bash -c "opencode attach http://localhost:4096"
Dies teilt dieselbe Sitzung wie das Web-UI. Änderungen in einem erscheinen im anderen.
Anbieterverwaltung
Anbieter von innerhalb des Containers auflisten und konfigurieren:
docker exec -it holycode bash -c "opencode providers list"
docker exec -it holycode bash -c "opencode providers login"
oh-my-openagent Migration
HolyCode installiert oder aktualisiert oh-my-openagent in v1.1.4 nicht. Mit ENABLE_OH_MY_OPENAGENT=true stoppt der Start, ohne den Plugin-Zustand zu ändern. Nach dem Entfernen des Flags deaktiviert der erste erfolgreiche Start den alten Eintrag, speichert dessen Paketangabe und erhält Einstellungen, Skills und Paket-Cache. Fügst du das Plugin später manuell wieder hinzu, behandelt HolyCode es als benutzerverwaltet.
Nützliche Befehle
| Befehl | Was er tut |
|---|---|
opencode |
Startet das TUI |
opencode run 'message' |
Einmaliger Prompt |
opencode attach <url> |
Verbindet TUI mit laufendem Server |
opencode web --port 4096 |
Startet Webserver (läuft bereits via s6) |
opencode serve |
Headloser API-Server |
opencode providers list |
Zeigt konfigurierte Anbieter |
opencode providers login |
Anbieter hinzufügen oder wechseln |
opencode models |
Listet verfügbare Modelle |
opencode models <provider> |
Listet Modelle für einen bestimmten Anbieter |
opencode stats |
Zeigt Token-Nutzung und Kosten |
opencode session list |
Listet vergangene Sitzungen |
opencode export <sessionID> |
Exportiert Sitzung als JSON |
opencode plugin <module> |
Installiert ein Plugin |
opencode upgrade |
Aktualisiert OpenCode (standardmäßig im Container deaktiviert) |
💾 Daten und Persistenz
Der gesamte OpenCode-Zustand lebt in einem einzigen Bind-Mount unter ./data/opencode. Der Container ist zustandslos. Der Bind-Mount enthält alles, was wichtig ist.
| Host-Pfad | Container-Pfad | Inhalt |
|---|---|---|
./data/opencode/.config/opencode |
/home/opencode/.config/opencode |
Einstellungen, Agenten, MCP-Konfigurationen, Themes, Plugins |
./data/opencode/.local/share/opencode |
/home/opencode/.local/share/opencode |
SQLite-Sitzungsdatenbank, MCP-OAuth-Tokens |
./data/opencode/.local/state/opencode |
/home/opencode/.local/state/opencode |
Häufigkeitsdaten, Modell-Cache, Schlüssel-Wert-Speicher |
./local-cache/opencode |
/home/opencode/.cache/opencode |
Plugin-node_modules, automatisch installierte Abhängigkeiten |
Den Container jederzeit neu erstellen. docker compose pull && docker compose up -d ausführen und Sitzungen, Einstellungen und Konfigurationen kommen automatisch zurück.
SQLite WAL-Hinweis. Die Sitzungsdatenbank verwendet Write-Ahead Logging. Die .db-Datei nicht kopieren, während der Container läuft. Den Container zuerst stoppen, wenn die Datenbankdatei gesichert oder migriert werden muss.
Netzwerkspeicher-Hinweis. Wenn sich ./data/opencode auf einem CIFS/SMB-Netzwerk-Mount (NAS, Synology, TrueNAS) befindet, kann der SQLite WAL-Modus fehlschlagen, da SMB standardmäßig kein Byte-Range-Locking unterstützt. HolyCode erkennt dies beim Start und gibt eine Warnung mit dem Fix aus. Siehe den Abschnitt Fehlerbehebung unten.
🔐 Berechtigungen
HolyCode verwendet PUID und PGID, um den internen Container-Benutzer dem Host-Benutzer anzupassen. Das bedeutet, dass Dateien, die in ./workspace geschrieben werden, dir gehören, nicht root.
Finde deine IDs auf Linux und macOS:
id -u # PUID
id -g # PGID
Auf den meisten Systemen ist das 1000:1000. Auf macOS ist es oft 501:20. Im Compose-File eintragen:
environment:
- PUID=501
- PGID=20
Wenn du das weglässt, können Dateien in deinem Workspace root gehören und du brauchst sudo, um sie vom Host aus zu bearbeiten.
⬆️ Aktualisierungen
Stoppe den Container und sichere die Home-, Cache- und Workspace-Volumes, bevor du das neueste Image herunterlädst.
Wenn du von einer Version vor v1.1.3 aktualisierst, lade das oben gezeigte seccomp-Profil herunter und füge security_opt zum Dienst holycode hinzu, bevor du den Container neu erstellst.
v1.2.9 behält Paperclip 2026.831.1 bei, daher gibt es keine neue Paperclip-Migration und keine neue Standardüberschreibung für den nativen Runner. Stelle für ein Rollback die unveränderten Home-, Cache- und Workspace-Volumes von vor dem Upgrade mit Image 1.2.8 wieder her; verwende keine Volumes, die bereits mit v1.2.9 gestartet wurden.
v1.1.9 migriert Paperclip von 2026.824.1 auf 2026.831.1 mit den Migrationen 0223–0230. Die entfernten Felder brandColor und attachmentMaxBytes werden gelöscht und laufende Anmeldesitzungen zurückgesetzt; melde dich nach dem Upgrade erneut an. Stelle für ein Rollback das unveränderte Backup mit Image 1.1.8 wieder her. Starte 1.1.8 niemals mit einer bereits von v1.1.9 migrierten Datenbank.
Paperclip wird in v1.1.4 von 2026.707.0 auf 2026.722.0 migriert. Ein Rollback ist nur mit Image 1.1.3 und unveränderten Volumes von vor dem v1.1.4-Upgrade möglich. Starte Image 1.1.3 niemals mit bereits von v1.1.4 migrierten Paperclip-Daten.
docker compose stop
docker compose pull
docker compose up -d
🛠 Fehlerbehebung
Chromium stürzt ab oder Browser-Automatisierung schlägt fehl
Die häufigste Ursache ist unzureichender gemeinsamer Speicher. Chromium benötigt mindestens 1-2 GB /dev/shm für zuverlässigen Betrieb.
Sicherstellen, dass die Compose-Datei shm_size: 2g hat:
services:
holycode:
shm_size: 2g
Ohne das wird Chromium lautlos abstürzen oder fehlerhafte Screenshots produzieren.
Permission denied bei Workspace-Dateien
PUID und PGID stimmen nicht mit dem Host-Benutzer überein. IDs finden:
id -u && id -g
Den Umgebungsabschnitt der Compose-Datei entsprechend aktualisieren:
environment:
- PUID=1001 # durch tatsächliche UID ersetzen
- PGID=1001 # durch tatsächliche GID ersetzen
Dann den Container neu erstellen: docker compose up -d --force-recreate
Port 4096 bereits in Verwendung
Etwas anderes auf dem Rechner verwendet Port 4096. Auf einen anderen Host-Port umleiten:
ports:
- "4097:4096" # Zugriff über http://localhost:4097
Oder den konfliktierenden Prozess finden und stoppen:
# Linux / macOS
lsof -i :4096
# Windows
netstat -ano | findstr :4096
Container startet, aber Web-UI lädt nie
Container-Logs überprüfen:
docker compose logs -f holycode
OpenCode braucht ein paar Sekunden zur Initialisierung. 10-15 Sekunden nach docker compose up -d warten, bevor der Browser geöffnet wird. Wenn es immer noch nicht verfügbar ist, werden die Logs den Grund angeben.
Wie verwendet HolyCode die Chromium-Sandbox?
Chromium läuft als Benutzer opencode mit aktivierter integrierter Sandbox. Die Compose-Dateien laden das eingeschränkte Profil config/chromium-seccomp.json automatisch.
Bei einem eigenen Container-Aufruf muss dasselbe Profil geladen werden:
security_opt:
- seccomp=./config/chromium-seccomp.json
Deaktiviere die Sandbox nicht und gewähre dem Container keine zusätzlichen Berechtigungen.
SQLite WAL schlägt auf CIFS/SMB-Netzwerk-Mounts fehl (NAS)
Wenn sich das Verzeichnis ./data/opencode auf einer CIFS/SMB-Netzwerkfreigabe befindet, schlägt OpenCode
möglicherweise mit folgendem Fehler fehl:
Failed to run the query 'PRAGMA journal_mode = WAL'
OpenCode verwendet SQLite mit Write-Ahead Logging (WAL) für die Sitzungsdatenbank. WAL erfordert Byte-Range-Locking, das CIFS/SMB standardmäßig nicht unterstützt. HolyCode erkennt dies beim Start.
Fix: Fügen Sie nobrl,mfsymlinks zu den CIFS-Mount-Optionen in /etc/fstab hinzu:
# Vorher
//192.168.1.100/share /mnt/share cifs credentials=/etc/smbcreds,uid=1000,gid=1000 0 0
# Nachher (nobrl,mfsymlinks hinzufügen)
//192.168.1.100/share /mnt/share cifs credentials=/etc/smbcreds,uid=1000,gid=1000,nobrl,mfsymlinks 0 0
Dann neu einhängen:
sudo umount /mnt/share
sudo mount /mnt/share
HolyCode neu starten: docker compose up -d --force-recreate
🔨 Lokale Erstellung
Das Repository klonen, das Image erstellen, in der Compose-Datei ersetzen.
git clone https://github.com/coderluii/holycode.git
cd holycode
docker build -t holycode:local .
Dann in der docker-compose.yaml das Image ersetzen:
image: holycode:local
🤝 Mitwirken
- Das Repository forken
- Einen Branch erstellen:
git checkout -b feature/your-feature - Änderungen committen:
git commit -m "feat: your feature" - Pushen:
git push origin feature/your-feature - Einen Pull Request öffnen
Siehe CONTRIBUTING.md für vollständige Richtlinien.
⭐ Support
Wenn HolyCode dir eine weitere Stunde Umgebungseinrichtung erspart hat, hier ist wie du es weitergeben kannst.
- Das Repository auf GitHub mit einem Stern versehen
- Mit jemandem teilen, der es nützlich finden würde
- Buy Me A Coffee
- PayPal
- GitHub Sponsors
📄 Lizenz
MIT-Lizenz - siehe LICENSE.
Erstellt von CoderLuii · coderluii.dev