Skip to content
Projekte

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.

So werden diese Zahlen gemessen

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 gehostet

docs/translations/README.de.md

Original

🌍 English | Español | Français | Italiano | Português | Deutsch | Русский | हिन्दी | 中文 | 日本語 | 한국어

HolyCode HolyCode

HolyCode Banner

License: MIT Docker Pulls Full Image GitHub Stars Twitter Follow PayPal Buy Me A Coffee Website GitHub Release Issues Contributors

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.yaml verwendet die Syntax ${ANTHROPIC_API_KEY}, die aus deiner Shell-Umgebung oder einer .env-Datei liest. Kopiere .env.example nach .env und trage deinen API-Schlüssel ein.

nach oben


☁ 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.

Sichere deinen Platz

nach oben


💻 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

nach oben


⚡ 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

nach oben


🤖 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.

nach oben


📋 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

nach oben


📄 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

nach oben


🔧 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_AUTH wird beim Neustart des Containers wirksam. ENABLE_OH_MY_OPENAGENT ist nur noch eine veraltete Einstellung und beendet derzeit den Start mit einem Migrationshinweis.

HOLYCODE_PLUGIN_UPDATE steuert Plugin-Paketaktualisierungen. manual (Standard) installiert aktivierte Plugins nur wenn sie fehlen und behält vom Benutzer installierte Versionen bei. auto installiert fehlende Plugins und synchronisiert die deklarierten Pins beim Start. Dies ist unabhängig von OPENCODE_DISABLE_AUTOUPDATE, das nur OpenCode betrifft.

HolyCode installiert oh-my-openagent derzeit nicht. Wenn ENABLE_OH_MY_OPENAGENT=true in 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=true startet Paperclip auf Port 3100 im 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=true aus einer älteren Installation bestehen bleibt, beendet HolyCode den Start mit einem kurzen Migrationshinweis. /home/opencode/.hermes bleibt unverändert erhalten, damit die Daten nach einer späteren Wiederaufnahme der Integration oder bei einem Rollback verfügbar sind.

GIT_USER_NAME und GIT_USER_EMAIL werden 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-bootstrapped dann docker compose restart.

nach oben


📦 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 das v weg. Nach v1.0.9 folgt v1.1.0, nach v1.1.9 folgt v1.2.0 und nach v1.9.9 folgt v2.0.0. v1.0.10 bis v1.0.13 bleiben 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.

nach oben


🧩 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.

nach oben


🏗 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.

nach oben


💻 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)

nach oben


💾 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.

nach oben


🔐 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.

nach oben


⬆️ 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

nach oben


🛠 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

nach oben


🔨 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

nach oben


🤝 Mitwirken

  1. Das Repository forken
  2. Einen Branch erstellen: git checkout -b feature/your-feature
  3. Änderungen committen: git commit -m "feat: your feature"
  4. Pushen: git push origin feature/your-feature
  5. Einen Pull Request öffnen

Siehe CONTRIBUTING.md für vollständige Richtlinien.

nach oben


⭐ Support

Wenn HolyCode dir eine weitere Stunde Umgebungseinrichtung erspart hat, hier ist wie du es weitergeben kannst.

nach oben


📄 Lizenz

MIT-Lizenz - siehe LICENSE.

nach oben


Erstellt von CoderLuii · coderluii.dev