🌍 English | Español | Français | Italiano | Português | Deutsch | Русский | हिन्दी | 中文 | 日本語 | 한국어
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.
Multi-Agenten-Orchestrierung integriert. Aktiviere oh-my-openagent und verwandle OpenCode in ein koordiniertes Agentensystem mit paralleler Ausführung.
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.
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.
| 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 |
Schritt 1. Lade das Image herunter.
docker pull coderluii/holycode:latestSchritt 2. Erstelle eine docker-compose.yaml.
services:
holycode:
image: coderluii/holycode:latest
container_name: holycode
restart: unless-stopped
shm_size: 2g
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.
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.
- Immer aktuell. Neuestes OpenCode, neueste Werkzeuge. Wir kümmern uns darum.
- Dein Zustand folgt dir. Sitzungen, Einstellungen, MCP-Konfigurationen zwischen Nutzungen gespeichert.
Der Frühzugang ist kostenlos. Keine Kreditkarte erforderlich.
| Plattform | Architektur | Status |
|---|---|---|
| Linux | amd64 | Unterstützt |
| Linux | arm64 | Unterstützt |
| macOS (Docker Desktop) | amd64 / arm64 | Unterstützt |
| Windows (WSL2) | amd64 | Unterstützt |
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 |
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.
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
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
# - GIT_USER_EMAIL=you@example.com
# --- 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
# --- oh-my-openagent (multi-agent orchestration for OpenCode) ---
# Installs automatically on first boot when enabled
# Toggle on/off with docker compose down && up -d
# - ENABLE_OH_MY_OPENAGENT=true
| 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 |
noreply@holycode.local |
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) | Auf true setzen, um Multi-Agenten-Orchestrierungs-Plugin zu aktivieren |
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 |
ENABLE_HERMES |
(keiner) | Auf true setzen, um Hermes als integrierten Meta-Agenten-API zu starten |
HERMES_PORT |
8642 |
Überschreibt den Container-Port für Hermes |
HOLYCODE_PLUGIN_UPDATE |
manual |
Plugin-Aktualisierungsmodus: manual (installiert wenn fehlend) oder auto (installiert und aktualisiert beim Start) |
Plugin-Umschalter (
ENABLE_CLAUDE_AUTH,ENABLE_OH_MY_OPENAGENT) werden beim Neustart des Containers wirksam. Umgebungsvariable setzen unddocker compose down && up -dausführen.
HOLYCODE_PLUGIN_UPDATEsteuert Plugin-Paketaktualisierungen.manual(Standard) installiert aktivierte Plugins nur wenn sie fehlen.autoinstalliert fehlende Plugins und aktualisiert aktivierte Plugins bei jedem Start. Dies ist unabhängig vonOPENCODE_DISABLE_AUTOUPDATE, das nur OpenCode betrifft.
ENABLE_OH_MY_OPENAGENT=trueaktiviert das Plugin und stellt die integrierte Skill/oh-my-openagent-setupbereit. Die Skill erscheint nur wenn das Plugin aktiviert ist. Verwende sie, um die plugin-spezifische Konfigurationsdatei unter~/.config/opencode/oh-my-openagent.jsonczu erstellen oder zu aktualisieren.
HolyCodes Standard-Picker-Richtlinie: sichtbar:
sisyphus,hephaestus,prometheus,atlas; versteckte Unteragenten:oracle,librarian,explore,metis,momus,multimodal-looker,sisyphus-junior. Wenn du einen neuen Anbieter hinzufügst und das sichtbare Standardmodell veraltet erscheint, führe/oh-my-openagent-setuperneut aus und dann:docker exec -it holycode bash -c "bunx oh-my-opencode doctor"unddocker exec -it holycode bash -c "bunx oh-my-opencode refresh-model-capabilities".
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.
ENABLE_HERMES=truestartet Hermes auf Port8642im Container. Hermes persistiert unter~/.hermes, verwendet das bereits installierteopencode-Binary und kann eine OpenAI-kompatible API bereitstellen, während es Codearbeit zurück an HolyCode delegiert.
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.
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 | 22 (LTS) |
| npm | Mit Node.js 22 gebündelt |
| Python | 3 (System) |
| pip | Mit Python 3 gebündelt |
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 |
|---|---|
| Hermes Agent | Selbstverbessernder Meta-Agent mit MCP, Messaging-Adaptern und OpenCode-Delegation |
| 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.
HolyCode wird jetzt mit zwei optionalen Schichten über OpenCode geliefert. Du brauchst sie nicht, um den Container zu verwenden. Aktiviere die Umgebungsvariable, starte den Container neu und der Dienst startet neben der normalen Web-UI.
Hermes ist die Option "klügeres Gehirn". Er läuft als integrierter Meta-Agent, stellt eine OpenAI-kompatible API auf Port 8642 bereit und delegiert Codearbeit durch Aufruf des lokalen opencode-Binaries, das HolyCode bereits mitliefert.
Aktivieren mit:
environment:
- ENABLE_HERMES=true
- HERMES_PORT=8642Der Hermes-Zustand liegt unter /home/opencode/.hermes und folgt derselben Persistenzgeschichte wie der Rest von HolyCode.
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=3100Der Paperclip-Zustand liegt unter /home/opencode/.paperclip. Öffne das Dashboard, richte dein Unternehmen ein und stelle dort OpenCode-gestützte Mitarbeiter ein.
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.
Das Web-UI auf Port 4096 ist die primäre Schnittstelle. Du kannst OpenCode aber auch direkt von der Kommandozeile im Container verwenden.
docker exec -it holycode bash
opencodeDies öffnet OpenCodes vollständiges Terminal-UI mit denselben Funktionen wie die Web-Version.
Führe einen einzelnen Prompt aus ohne das TUI zu betreten:
docker exec -it holycode bash -c "opencode run 'explain this codebase'"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.
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"Wenn ENABLE_OH_MY_OPENAGENT=true aktiviert ist, wird die Skill /oh-my-openagent-setup verfügbar. Verwende sie, um die plugin-spezifische Konfiguration zu erstellen oder zu aktualisieren:
/oh-my-openagent-setup
Wenn du einen neuen Anbieter hinzufügst und das sichtbare Standardmodell veraltet erscheint, führe /oh-my-openagent-setup erneut aus und dann:
docker exec -it holycode bash -c "bunx oh-my-opencode doctor"
docker exec -it holycode bash -c "bunx oh-my-opencode refresh-model-capabilities"| 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 |
bunx oh-my-opencode doctor |
Diagnostiziert oh-my-openagent-Konfiguration und Modellauflösung |
bunx oh-my-opencode refresh-model-capabilities |
Aktualisiert Anbieter/Modell-Fähigkeits-Cache |
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) |
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.
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 # PGIDAuf den meisten Systemen ist das 1000:1000. Auf macOS ist es oft 501:20. Im Compose-File eintragen:
environment:
- PUID=501
- PGID=20Wenn du das weglässt, können Dateien in deinem Workspace root gehören und du brauchst sudo, um sie vom Host aus zu bearbeiten.
Das neueste Image herunterladen und den Container neu erstellen. Deine Daten bleiben unberührt.
docker compose pull
docker compose up -dDas ist alles. Ein Befehl. Deine Sitzungen, Einstellungen und Konfigurationen sind im Bind-Mount, also geht nichts verloren.
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: 2gOhne 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 -gDen Umgebungsabschnitt der Compose-Datei entsprechend aktualisieren:
environment:
- PUID=1001 # durch tatsächliche UID ersetzen
- PGID=1001 # durch tatsächliche GID ersetzenDann 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:4097Oder den konfliktierenden Prozess finden und stoppen:
# Linux / macOS
lsof -i :4096
# Windows
netstat -ano | findstr :4096Container startet, aber Web-UI lädt nie
Container-Logs überprüfen:
docker compose logs -f holycodeOpenCode 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.
Warum braucht HolyCode kein SYS_ADMIN oder seccomp=unconfined?
Chromium läuft mit --no-sandbox im Container, was für containerisierte Browser-Setups Standard ist. Das eliminiert den Bedarf an SYS_ADMIN-Fähigkeiten oder seccomp=unconfined, die einige andere Docker-Browser-Setups benötigen. Der Container selbst stellt die Isolierungsgrenze bereit.
Wenn der eingebaute Sandbox von Chromium bevorzugt wird, folgendes zur Compose-Datei hinzufügen und --no-sandbox aus der CHROMIUM_FLAGS-Umgebungsvariable entfernen:
cap_add:
- SYS_ADMIN
security_opt:
- seccomp=unconfinedSQLite 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/shareHolyCode neu starten: docker compose up -d --force-recreate
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- 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.
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
MIT-Lizenz - siehe LICENSE.
Erstellt von CoderLuii · coderluii.dev
