Devcontainer-Addon
Geben Sie dem Repository einen reproduzierbaren, isolierten Entwicklungscontainer — einen, den Menschen, Editoren und Coding-Agenten gleichermaßen nutzen können. In DWP v7 (Paket v7.9.0) integriert dieses Addon devcontainer-kit, ein MIT-Produkt, das ohne Deep Work Plan funktioniert. Es ist optional: Ein Repository ist auch ohne es vollständig konform.
Was devcontainer-kit bereitstellt
- Ein Template auf Basis der Dev Containers-Spezifikation, das
dck initin einem festen Layout in das Repository rendert:.devcontainer/devcontainer.json,docker/local/<service>/Dockerfile,docker/local/docker-compose.yamlunddev.sh. Bei einem erneuten Lauf gleicht es ab und überschreibt nie Ihre Änderungen; jede Änderung an einer bestehenden Datei wird zuerst angezeigt und erfordert eine Einwilligung. - Der eigene Container des Repositorys. Das Dockerfile startet vom offiziellen Image der Laufzeitumgebung, per Digest fixiert —
node-24,python-3.13oderdebian— und kopiert die Build-Schritte des Kits nachdocker/local/<service>/dck/. Es ist kein gemeinsames Basis-Image beteiligt. dev.shunddck.bash dev.sh upbaut, startet und verbindet den Container aus einem einfachen Terminal;shell,rebuild,doctorund die übrigen Befehle funktionieren mit oder ohne VS Code oder Cursor.- Herdr in beide Richtungen. Das Herdr des Hosts bindet jeden Container über einen nur an Loopback gebundenen SSH-Server als Rechner ein, und der Container öffnet sich mit der Standard-Seitenleiste: App, Editor, Development und Agents. Jeder Workspace und jedes Pane, auch die später geöffneten, startet im App-Pfad (standardmäßig
/app). Darin ermöglicht herdr-peers Agenten, Agenten auf dem Host und in anderen Containern zu befragen. - Der Skill
dck-dockerfile. Ein Agent erstellt oder regeneriert auf Anfrage den Container eines Repositorys und belegt ihn mit einem echten Build.
Installation
git clone --branch v1.1.1 https://github.com/DailybotHQ/devcontainer-kit && ./devcontainer-kit/install.sh
cd your-repo && dck init && bash dev.sh up
Voraussetzungen: bash 3.2 oder neuer und python3 3.11 oder neuer auf einem Linux- oder macOS-Host sowie Docker mit Compose v2 für die Container-Befehle. Prüfen Sie ein Release anhand seines SHA256SUMS-Assets. Fixieren Sie v1.1.1: v0.2.0 wird nicht unterstützt.
| Element | Wert |
|---|---|
| Produkt | DailybotHQ/devcontainer-kit, Tag v1.1.1, Schnittstelle 2 |
| Registry-Schlüssel | devcontainer in .dwp/config.json |
| Konfiguration pro Repository | .devcontainer/dck.toml |
| Erkennung | dck doctor --json |
Stabil seit v1.0.0. Die öffentliche Schnittstelle folgt semantischer Versionierung und ändert sich inkompatibel nur in einer neuen Major-Version (und bei den Dateien mit einer neuen Schnittstellennummer): die dck-Verben mit ihren dokumentierten Flags und Exit-Codes (0 ok, 1 fehlgeschlagen, 2 Aufruf, 3 Konfiguration, 4 Umgebung, 5 abgelehnt), die Schemas von dck.toml, Host-Profil und dck doctor --json (Schnittstelle 2) sowie der Render-Vertrag — die Dateien, die dck init schreibt und verwaltet, die dck:managed-Markierungen und Benutzerblöcke, die es bewahrt, und die Umgebung, die der Entrypoint liest. Ab v0.3.7 bricht nichts: Führen Sie dck init und dck rebuild aus, damit das Image die neuen fixierten Versionen enthält (herdr-peers v1.1.0, coding-agents-kit v1.1.0 und DeepWorkPlan Vim v1.0.1).
Layer
Jeder Container enthält die Entwicklungswerkzeuge — git, gh, ripgrep, einen SSH-Server, Herdr und herdr-peers — und kein Geheimnis, sofern Sie sich nicht für Host-Konten entscheiden. Der Rest ist ein Layer, den Sie in dck.toml wählen:
| Layer | Standard | Was er hinzufügt |
|---|---|---|
agents |
aus | coding-agents-kit aus seinem verifizierten Release und die von Ihnen aufgeführten CLIs, jede mit eigenem persistentem Volume, dazu die Presets classic (claudex, codexx, …) und providers (claude-glm, codex-azure, …). Agenten laufen standardmäßig in Autonomie — der Container ist die Sandbox. Opt-out: AGENTKIT_PERMISSIONS=ask in der .env des Service. |
editor |
an | Neovim mit DeepWorkPlan Vim, per Tag fixiert; ausgeschaltet gibt es einen einfachen Editor. |
dailybot |
aus | Die Dailybot-CLI, für das Dailybot-Addon. |
Anmeldungen, gh, die Herdr-Konfiguration und die Git-Identität überstehen bash dev.sh rebuild. Mit dem Layer agents enthält das Image außerdem die drei Skills von coding-agents-kit (agentkit, agentkit-setup, agentkit-orchestrate), die bei jedem Start in das Skills-Verzeichnis jedes Agenten verlinkt werden, sodass ein neu erstellter Container sie behält.
Das State-Volume (SSH-Host-Schlüssel, ~/.ssh, gh-Anmeldung, Herdr-Client-Zustand, Verlauf) heißt state. Wenn sich mehrere Services ein Compose-Projekt teilen, geben Sie jedem mit [compose] state_volume in dck.toml (oder dck init --state-volume NAME) einen eigenen Namen; andernfalls binden alle dasselbe Volume ein, und dck doctor weist darauf hin.
Agenten über Rechnergrenzen hinweg
Seit v0.2.3 richtet dck up unter Docker Desktop ohne manuellen Schritt ein bidirektionales Mesh ein:
- Container und Host. Agenten im Container erreichen Herdr-Agenten auf dem Host, in jedem anderen dck-Container und in den anderen Loopback-Containern, die das Herdr Ihres Hosts bereits verwaltet — und diese erreichen sie umgekehrt ebenso. Jeder Peer trägt einen fixierten Host-Schlüssel; nichts wird bei der ersten Verwendung vertraut.
- Ein optionaler Host-Listener.
dck setupbietet einmalig einen SSH-Server auf Benutzerebene an127.0.0.1an, der nur den dck-Schlüssel akzeptiert und von launchd (macOS) am Laufen gehalten wird. Wenn Sie bereits einen Loopback-Listener betreiben, verweisen Sie das Host-Profil stattdessen darauf.dck host listener disableentfernt ihn. - Übersteht Rebuilds. Der Herdr-Rechnerkatalog des Containers liegt auf einem Volume, sodass
bash dev.sh rebuildjeden darin registrierten Rechner beibehält. Seitv0.3.2führenrebuild,startundrestartdieselben Schritte aus wieup: Der Container wird erneut beim Herdr des Hosts registriert, sein Host-Schlüssel neu fixiert und das Mesh verteilt, sodass ein von Grund auf neu gebauter Container den Host und seine Peers sofort erreicht. - Codex-Panes im Container. Ein Codex-Agent braucht
HERDR_PEERS_SELF, die Rechner-ID des Containers, wie sie auf dem Host gespeichert ist, um Peers auf anderen Rechnern anzufragen. Seitv0.3.3hält das Kit diese ID bei jeder Registrierung fest, und die Login-Shells des Containers exportieren sie, sodass kein Agent sie von Hand setzt;dck doctormeldet eine Abweichung. Seitv0.3.4überspringen die containereigenen Codex-Konfigurationen die Update-Prüfung von Codex beim Start und seinen Hintergrund-Daemon (das Kit fixiert jede CLI-Version), ohne je das Codex-Home Ihres Hosts oder ein geteiltes Profil anzutasten. - Antworten auch vom Host.
dck setupinstalliert ein verifiziertes herdr-peers auf dem Host, sodassdck agentsunddck askdort funktionieren und Host-Agenten mitherdr-peers replyantworten. - Container, die das Kit nicht erstellt hat. Führen Sie die öffentlichen Schlüssel, mit denen sie sich anmelden, unter
[ssh] authorized_extrain Ihrem Host-Profil auf, dann erreichen auch sie dck-Container.
Kombinieren Sie es mit coding-agents-kit auf dem Host und im Container, und dasselbe ak startet Agenten auf beiden Seiten.
Host-Konten im Container
Ein Container kann die Konten nutzen, die Sie auf dem Host bereits haben — so wie git bereits über den SSH-Agenten des Hosts arbeitet —, ohne Anmeldung im Container. Das ist Opt-in und liegt in Ihrem Host-Profil, nie in der dck.toml eines Repositorys:
[agents]
host_profiles = true # Standard: false
host_env_keys = ["ZAI_CODING_API_KEY"] # Allowlist der zu teilenden env-Namen
Mit aktiviertem host_profiles teilt dck up nur die Profile der CLIs, die das Repository installiert:
- Claude Code über ein langlebiges Token pro Profil:
CLAUDE_CODE_OAUTH_TOKENfür@defaultundCLAUDE_CODE_OAUTH_TOKEN_<SUFFIX>für@name(das Suffix in Großbuchstaben, jedes Zeichen außerhalb vonA-Z,0-9und_wird zu_). - Codex über seine Auth-Datei, für
@defaultund für jedes Profil. - Die env-Datei des Kits, schreibgeschützt und auf die Namen in
host_env_keysreduziert.
Das gesamte Agentkit-Home wird nie eingebunden, und Profile mit absoluten Host-Pfaden werden übersprungen. Eine mit Schreibzugriff geteilte Codex-Anmeldung kann von zwei Schreibern gleichzeitig erneuert werden: Halten Sie einen aktiven Agenten pro Codex-Konto. [agents] default_profile im Host-Profil (zum Beispiel { claude = "@work3" }) sorgt dafür, dass ein bloßes ak claude im Container dieses geteilte Konto nutzt (coding-agents-kit ≥ v0.5.2); eine @default-Anmeldung von Claude unter macOS liegt im Schlüsselbund (Keychain) und lässt sich nicht teilen. Seit v0.3.4 richten die Shells des Containers auch ein bloßes claude oder codex auf dieses Konto aus, sodass Panes, die Herdr wiederherstellt, darauf statt auf einem Anmeldebildschirm öffnen. Im Container läuft dasselbe ak <kind> @<profile> auf demselben Konto wie auf dem Host; das erlaubt einem Lead, Container-Lanes die Konten zu übergeben, die ak pick gewählt hat — siehe Viele Agenten betreiben.
Mehrere Repositories, ein Compose-Stack
Seit v0.3.3 kann ein Repository, dessen Service Teil eines größeren Compose-Projekts ist (eine API, eine Web-App, Worker und eine Datenbank, die sich ein Projekt teilen), diesem beitreten, ohne dass Sie von Hand bearbeiten, was dck rendert. Alles ist additiv: Ein Repository, das keinen dieser Schlüssel setzt, wird genau wie bisher gerendert.
- Ein Projekt, ein State-Volume pro Service.
[compose] projectbenennt in jedem Repository das gemeinsame Projekt;state_volume,[compose] networksund[compose] volumeshalten den Zustand jedes Service sowie die Daten-Volumes und Netzwerke des Stacks auseinander. - Ein Benutzerblock. Zeilen zwischen
# >>> user:<service> >>>und# <<< user:<service> <<<innerhalb des dck-Service bleiben unverändert erhalten: einfache Schlüssel für das, was dck nicht rendert (depends_on,healthcheck), undx-dck-merge:für Schlüssel, die dck rendert. Eine Datei, die nur einen Teil der dck-Markierungen enthält, wird mit Hinweis auf die Korrektur abgelehnt statt neu geschrieben. - Port-Strings.
ssh_portundportsakzeptieren Compose-Ausdrücke wie"${API_PORT:-8000}:8000"; sie bleiben auf127.0.0.1, sofern der String keine Host-IP nennt. - Gemeinsame Builds und ein eigener Launcher.
[build] contextund[build] dockerfiledecken ein Dockerfile ab, das mehrere Services teilen;dev_sh = falsebehält das eigenedev.sheines Repositorys. - Workspace-Satelliten. Seit
v0.3.5startet und stoppt eine zweite Instanz des Service in einem eigenen Compose-Projekt über dck (dck --project P --compose-file F --service S upoderdown) und erhält so denselben Host-Schlüssel, dieselben Konten, dieselbe Git-Identität und denselben Herdr-Rechner wie die Hauptinstanz;up --seed-state-from VOLUMEkopiert nur die Anmeldungen in ihr leeres State-Volume. In einer Overlay-Datei mussextendsdie Datei nennen, die es erweitert. - Node für Agenten. Das eigene Node der Agenten liegt unter
/opt/dck/nodeund ersetzt nie das des Images;[agents] node_first = truestellt es im PATH an die erste Stelle, wenn die Werkzeuge des Repositorys das brauchen.
Die SSH-Schlüssel des Hosts im Container
Manche Werkzeuge lesen nur Schlüsseldateien und ignorieren den weitergeleiteten Agenten: gh auth login etwa bietet an, einen neuen Schlüssel zu erzeugen. Seit v0.3.2 können Sie das per Opt-in aktivieren, und zwar nur in Ihrem Host-Profil (die dck.toml eines Repositorys kann es nicht setzen; dck setup fragt einmal, Standard ist Nein):
[ssh]
copy_keys = true # default false
Solange die Option aktiv ist, bindet dck up das ~/.ssh des Hosts schreibgeschützt unter ~/.ssh_host ein, und jeder Start kopiert dessen id_*-Schlüssel in das ~/.ssh des Containers (private Schlüssel 0600), synchron mit dem Host. Die Agent-Weiterleitung bleibt unverändert, und das Abschalten entfernt die Kopien beim nächsten Start. Der Preis: Das gesamte ~/.ssh des Hosts ist im Container lesbar, und die privaten Schlüssel liegen im State-Volume.
Sicherheitsvorgaben
- Jeder veröffentlichte Port bindet an
127.0.0.1, soferndck.tomlnichtbindsetzt. - Git über SSH läuft über den SSH-Agenten des Hosts — dessen Socket, nie eine Schlüsseldatei und nie ein eingebundenes
~/.sshoder~/.gitconfig, es sei denn, Sie habencopy_keysin Ihrem Host-Profil aktiviert. Die Git-Identität stammt ausDCK_GIT_*-Werten, diedck setupausfüllt. - SSH-Host-Schlüssel werden zur Laufzeit in ein projektbezogenes Volume erzeugt und nie in ein Image eingebacken; der Server akzeptiert nur öffentliche Schlüssel, ohne Root-Login und ohne Passwörter.
- Das Template fügt kein
cap_add, keinenprivileged-Modus und keinen Docker-Socket hinzu. - Jeder Download ist per Version fixiert und per Prüfsumme verifiziert; das Basis-Image ist per Digest fixiert.
- Das Herdr-Mesh, über das Agenten in einem Container die anderen erreichen, ist standardmäßig aktiv und im Bedrohungsmodell des Kits mit seinen Abschaltmöglichkeiten dokumentiert. Der Host-Listener erlaubt Code in einem laufenden Container, auf dem Host eine Shell unter Ihrem Benutzer zu öffnen: Er ist Opt-in, nur über Loopback erreichbar, akzeptiert nur den dck-Schlüssel und lässt sich mit
dck host listener disableentfernen.
Hinweise
Optional und nie erforderlich. Ein Repository ist mit null optionalen Addons vollständig konform. Linux- und macOS-Hosts werden unterstützt; das Mesh zwischen Containern erfordert Docker Desktop.