Repository navigation
devcontainer-kit v0.3.3
Interface stays 2. Additive: a repository that sets none of the new keys renders
byte-identically to v0.3.2.
Added
HERDR_PEERS_SELFinside containers. Asks from a Codex pane failed with "no reply
route" untilHERDR_PEERS_SELFnamed the container's machine id in the host's Herdr
catalog.dck up,dck herdr add(after every registration) anddck herdr meshnow
record that id on the state volume (new entrypoint functiondck_herdr_self) and the
login profile exports it;dck herdr removeclears it.dck doctorshows both ids
(herdr self;herdr.id/herdr.self_insidein--json) and flags a mismatch.- Shared compose stacks (docs/shared-stack.md), all additive:
a repository that sets none of these renders byte-identically to v0.3.2.- The user block:
# >>> user:<svc> >>>…# <<< user:<svc> <<<inside the dck
service, kept verbatim. Plain keys for what dck does not render (depends_on,
healthcheck, …);x-dck-merge:for keys it does, merged atdck init(lists
appended, maps merged with the user's entry winning, scalars and replace-only keys
such ascommandandentrypointreplaced in any YAML form). A plain key dck also
renders is refused with the fix. - Top-level
user:volumes/user:networkssub-blocks and[compose] volumes, so
the file's other services (a database, workers) declare their data volumes and
networks with their exact names and existing volumes keep reattaching; a name
declared twice is refused. - Port strings:
ssh_portandportsaccept compose expressions
("${DJANGO_RUNSERVER_HOST_PORT:-8000}:8000","5001:3000"), loopback-prefixed
unless they name a host IP; the launcher resolves${VAR:-default}(environment,
thendocker/local/.env) fordck ssh, Herdr and the doctor. [build] context(build from the repository root; dck'sCOPYpaths follow it) and
[build] dockerfile(a Dockerfile shared by several services, where dck's blocks and
itsdck/directory go).[compose] projectand[compose] networks(one top-levelnetworks:, external).[agents] node_first = true: the agents' own Node first on PATH (Dockerfile
ENVand login shells), for a repository whose tooling needs it; off by default.dev_sh = false(dck init --no-dev-sh): a repository that keeps its owndev.sh;
dck initneither creates nor touches it.[agents] presets: the ak alias presets (classic,providers). Unset keeps both,
as before; new renders writepresets = [](off).
- The user block:
[agents] default_profile(host profile):{ claude = "@work3" }exports
AGENTKIT_DEFAULT_PROFILE_<CLI>into containers when that profile is shared, so a
bareak claudeinside uses that account (coding-agents-kit v0.5.2+); the macOS
@defaultClaude login lives in the keychain and cannot be shared.dck doctorshows
the mapping and flags a mapping it cannot apply.dck doctor: Docker Compose >= 2.24 (satellites withextends+!reset), a compose
file that does not reflectdck.tomlor its user block (dck upanddck rebuild
warn too), and what the user block overrides (compose_renderin--json).
Fixed
- The agents layer no longer replaces the image's Node. When the image's
nodewas
missing or older than the pinned major, the pinned Node was extracted over
/usr/local, replacing a repository's production Node and mixing npm trees (an
ak install codexcould fail silently). It now goes into its own prefix
(/opt/dck/node);ak installruns with it first on PATH and the npm-installed agent
CLIs are launched on it, while the repository'snodestays the shell's. - A rebuilt peer's new host key reaches every container.
dck herdr mesh(run from
any repository) re-reads each running peer's sshd host key from the container itself
and re-pins it before pushing, so the host's hop and every other container follow a
peer rebuilt outside its owndck up. - The host's git identity in every container.
dck up,rebuild,startand
restartpushuser.name,user.emailand, when the host signs with SSH, the signing
setup (key::<public key>, never a path or a private key) into the container user's
git config (dck_git_identity_host); no~/.gitconfigmount and noDCK_GIT_*in the
repository's.envneeded (aDCK_GIT_*value still wins for its key).dck doctor
shows the identity and its source. - The Dailybot CLI login survives rebuilds whether the dailybot layer or the
repository installed the CLI:~/.config/dailybotis always on the state volume. [compose] projectwins overCOMPOSE_PROJECT_NAMEin the environment or the compose
.env(passed with-p);dck doctorresolves the project the same way.
Changed
- Pins: herdr-peers v0.2.3 (
HERDR_PEERS_TAG, verified by the sha256 of its
SHA256SUMS,dad7faff…; tag commitff7b7aa): state kept per machine, so a
checkout bind-mounted into a container no longer shares the host'sself.json. - Pins: coding-agents-kit v0.5.2 (
AGENTKIT_TAG; tag commitaf25837, tarball
sha25612cbf6e2…,SHA256SUMSsha2562bedc980…): reads
AGENTKIT_DEFAULT_PROFILE_<CLI>([agents] default_profile). - Markers are all-or-nothing. A compose file or Dockerfile with some of dck's markers
but not all, or with unbalanced markers, is refused with the fix instead of being
replaced or appended to (a block appended at the end could land inside another
mapping). A file without any dck marker is still proposed as a whole-file replacement.
Install
git clone --branch v0.3.3 https://github.com/DailybotHQ/devcontainer-kit
./devcontainer-kit/install.shVerify a clone with shasum -a 256 -c SHA256SUMS. Images: ghcr.io/dailybothq/devcontainer-kit-base:{python-3.13,node-24,debian}-v0.3.3 (digests in the images workflow run).