Repository navigation
Releases: DailybotHQ/devcontainer-kit
Release list
devcontainer-kit v1.0.1
Interface stays 2. Patch: coding-agents-kit v1.0.1 so @default stays its own
account inside containers, and a doctor warning when a shared codex@default would
mix host and container Codex versions on the same state DB.
Changed
- Pins: coding-agents-kit v1.0.1 (
AGENTKIT_TAG; tag commit3f51881, tarball
sha256923277aa…,SHA256SUMSsha256de17573e…).@defaultis the container's
own account: the login profile no longer pointsCLAUDE_CONFIG_DIR/CODEX_HOME
at[agents] default_profile(that made@defaultthe named profile). A bare
ak <cli>still followsAGENTKIT_DEFAULT_PROFILE_<CLI>when that is set.
ak usagelists@default, andak <cli> @default— and a plainclaude/
codex— uses the container's own home. Claude's@defaultis its own
directory on the claude volume (~/.claude).
Added
dck doctor: when[agents] host_profilessharescodex@default(the host's
live~/.codex, read-write inside), a warning (text and--json, schema-additive
host_profiles.codex_versions) if the host'scodex --versiondiffers from the
container's. A mismatched pair has corrupted that state DB; use a named profile
inside (ak codex @name) or align the versions.
Fixed
- Herdr: a changed
[herdr] labelrenames the machine again. dck ran
herdr machine rename --label <label> <id>, the order Herdr 0.9.3's--help
prints but its parser rejects (usage: herdr machine rename <profile-id> --label <label>); the failure stopped the rest ofdck up(the machine id pushed inside,
the mesh refresh, the layout). dck now passes the id first. - Herdr:
dck herdr add|status|repairanddck upno longer report a stopped
remote server as answering.herdr status serverexits 0 and prints
status: not runningwhile no server runs; dck now requires its
status: runningline. - Herdr:
dck up(andrebuild,start,restart) waits for the container's
Herdr server before creating the standard layout, up toDCK_HERDR_LAYOUT_WAIT
seconds (default 60) and only while the host's Herdr runs; when it does not start
in time the layout is skipped with a note (rundck herdr layout) instead of
failing with "the Herdr layout could not be created". - dev.sh: the plain-compose fallback (no dck installed) chooses
DCK_HOST_SSH_AUTH_SOCKby Docker provider beforeupandrebuild, as dck does:
/dev/nullon a provider without Docker Desktop's agent socket (colima, podman, …),
so the agent bind no longer fails the start there. A baredocker compose upon
such a provider still needsDCK_HOST_SSH_AUTH_SOCK=/dev/null(documented in the
rendered compose file anddocs/config.md).
Install
git clone --branch v1.0.1 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}-v1.0.1 (digests in the images workflow run).
devcontainer-kit v1.0.0
The first stable release. Interface stays 2; nothing breaks from v0.3.7, so upgrade with
dck init and dck rebuild so the image carries the new pins.
Stability commitment
From 1.0.0 the public interface follows semver: a breaking change to it needs a new major
version (and, for the files below, a new interface number). The public interface is:
- The
dckverbs and flags:init,setup,up,down,stop,start,restart,
ps,logs,shell,exec,build,rebuild,config,ports,ssh,herdr,
host,agents,ask,doctor,--skill,help,--version, their documented flags
(--repo,--profile,--project,--trust,--compose-file,--service, …) and the
exit codes (0 ok, 1 failed, 2 usage, 3 configuration, 4 environment, 5 refused). - The schemas:
dck.tomland the host profile (docs/schema/dck-config-v2.json,
dck-profile-v2.json) and thedck doctor --jsonreport (dck-doctor-v2.json). - The render contract: the files
dck initwrites and owns (devcontainer.jsonkeys,
compose,docker/local/<service>/,dev.sh), thedck:managedmarkers and user blocks it
preserves, and the environment the entrypoint reads.
Internals (lib/, the layer installers, the image's build steps) are not part of it.
Changed
- Pins: herdr-peers v1.0.0 (
HERDR_PEERS_TAG, verified by the sha256 of its
SHA256SUMS,11634ef2…; tag commit3bf118d, 16 files), its first stable release
(protocol 1). - Pins: coding-agents-kit v1.0.0 (
AGENTKIT_TAG; tag commit57b82fa, tarball
sha2561fd86b4f…,SHA256SUMSsha2568995e737…), its first stable release; the
layer's install call (install.sh --no-rc) and its three skills are unchanged. - Pins: deepworkplan-vim v1.0.0 (
DWP_VIM_TAG; tag commitf0929f9,install.sh
sha256d1aaa207…, the value itsSHA256SUMSandinstall.sh.sha256publish), its first
stable release: visible selections, OSC 52 copy without a clipboard tool, no stray start
screen row.
Fixed
- A flaky editor layer no longer fails the image build. The deepworkplan-vim installer
runs with--strict, and one plugin clone that lost a race with the network (seen as
missing: nvim-cmp, orlualine.nvim/nvim-tree.luaaway from the lockfile) failed the
whole build.editor.shnow reruns the installer when--strictreports a plugin problem —
up to 3 attempts, with a growing pause — and then fails the build, loudly; any other
installer failure (a checksum, a refusal) still fails at once. Theimagesscope runs the
retry against a stub installer: one or two flaky attempts recover, three fail, and a
non-plugin failure is never retried. - Docs: every user doc,
AGENTS.md,SECURITY.md,CONTRIBUTING.mdand the dck skill
re-verified against the code (init's base image and marker refusal, the App layout, doctor's
problem list, satellites, PRIMARY mode, presets,dev_sh,node_first, per-developer CLIs);
the README opens with a theme-aware logo (assets/).
Install
git clone --branch v1.0.0 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}-v1.0.0 (digests in the images workflow run).
devcontainer-kit v0.3.7
Interface stays 2. Upgrade with dck init and dck rebuild so the image carries the new
herdr-peers.
Changed
- Pins: herdr-peers v0.3.2 (
HERDR_PEERS_TAG, verified by the sha256 of its
SHA256SUMS,8a8112ee…; tag commitda167c5, 16 files): agents inside a container get
notices, plan lead records (lead,status --pane,lead show --pane) andDWP_PLAN
ids, which DeepWorkPlan 7.7.1 lanes rely on. The image build checks every file itsSHA256SUMS
lists (now alsobin/anddocs/schema/); the image and dck's host copy
(dck host peers install) still install only the skill, every file of it listed. - Pins: coding-agents-kit v0.7.1 (
AGENTKIT_TAG; tag commit0e3e3c6, tarball
sha2565a6e5380…,SHA256SUMSsha256ccf0919e…):ak status, a named profile's
suffixed API-key variable counts as its login, Gemini API keys listed under Antigravity,
and the Antigravity launch warning only where the Google login is machine-wide. - The repository's own container is re-rendered at v0.3.7, and the
imagesscope now fails
whendocker/local/app/dck/differs from its sources (images/versions.env,
images/common/,lib/entrypoint.sh,lib/layers/) or fromVERSION; thedockerscope
checks thatherdr-peers --versioninside both fixtures is the pinned tag.
Install
git clone --branch v0.3.7 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.7 (digests in the images workflow run).
devcontainer-kit v0.3.6
Interface stays 2.
Added
- Two modes for the coding-agent CLIs. The default: the CLIs chosen at onboarding
([agents] clis) are wired (home volume,DCK_AGENTSpersistence, host-profile sharing,
default_profile) and installed for everyone; a developer may install fewer. The
advanced opt-in,[agents] supported = "all" | [...], wires every supported CLI,
installed or not, and each developer chooses what to install;dck initoffers it
(one interactive question for a newdck.tomlwith the agents layer, or
dck init --supported all|"a b"). What your image installs: env
DCK_AGENT_CLIS>DCK_AGENT_CLISindocker/local/.env> host profile[agents] clis
(replace), thenclis_extra(add) > dck.tomlclis([]= none), plus every
INSTALL_<CLI>_CLIthat is exactlytrue(environment ordocker/local/.env). An
unknown or unwired name stopsdck up/rebuild(exit 3) with the list (in the default
mode, with the way to the advanced mode); the layer refuses it at build time too
(DCK_AGENT_SUPPORTED). See
docs/config.md. - The rendered compose passes
DCK_AGENT_CLIS: "${DCK_AGENT_CLIS:-<clis>}"and one
INSTALL_<CLI>_CLI: "${INSTALL_<CLI>_CLI:-false}"per wired CLI as build args, so
plain compose and the editor's rebuild readdocker/local/.envtoo;dck initcreates
a create-onlydocker/local/.env.examplethat explains the repository's mode and its
options.
dck up/rebuildpass the effective list, through a fourth runtime overlay
(<project>-clis.yml, the build arg only) when it differs from dck.toml's. - The image records what it installed (
/opt/dck/agent-clis):dck upwarns anddck doctorreports rebuild needed: dck rebuild when it differs from the requested list;
the doctor shows the mode, supported, requested (with its source) and installed
(layers.clis_mode,clis_supported,clis_effective,clis_source,clis_image). - PRIMARY mode.
dck [--project P] --compose-file F… <verb>without--serviceruns
the main service through other compose files (a repository's own overlay, for example a
preview proxy's backend file): the files replacedockerComposeFilein order, dck's
runtime overlays still go last, with the same alias, label and Herdr machine as a plain
upand every host step (always the compose backend). Forup,rebuild,down,
ps,logs,shell,exec,ssh,stop,start,restart,config,herdr,
doctor(which lists the files in use:repo.compose_files,compose_override). antigravityas a coding-agent CLI kind ([agents] clis,supported, the host
profile'sclis/clis_extra,DCK_AGENT_CLIS,INSTALL_ANTIGRAVITY_CLI): the agents
layer installs the Antigravity CLI (agy) throughak install antigravity, and the
entrypoint persists~/.geminion anantigravityvolume. Inside a containeragy
reaches no OS keyring, so it keeps each Google login in a file under that home —
one login per ak profile (ak antigravity @name), several accounts side by side,
which the macOS Keychain's single slot never allowed. Its profiles stay unshareable
from the host ([agents] host_profilesskips them, as before). A state volume can no
longer be namedantigravity(it is the CLI's home volume).
Changed
- An existing repository keeps its wiring (the default mode: its
clis); its compose
file gains the build args, sodck upanddck doctorreport it as stale until
dck initre-renders it. [agents] host_profilesshares the ak profiles of the wired CLIs that exist on the host
(in the advanced mode, every supported CLI, installed or not); what it skips is reported
for the requested CLIs only.--serviceneeds--project;--compose-filewithout--serviceis PRIMARY mode
(it was a usage error).- Agent tooling: the vendored
deepworkplanskill moves to v7.6.3 and the AI Diff Reviewer
skill to v3.3.11, the pack's pin (skills-lock.json, AGENTS.md provenance), through the
pack's own upgrade flow and addon planner;.dwp/config.jsonnow also records the dev
container addon (the repository's own dck container, v0.3.5). - Pins: coding-agents-kit v0.7.0 (
AGENTKIT_TAG; tag commitd2b5b59, tarball
sha2568bd2746b…,SHA256SUMSsha256c30da1be…): theantigravitykind,ak usage
for Antigravity, and ak's capacity and lease commands.
Fixed
- With
[agents] host_profileson, an ak profile created inside for a CLI the host does not
share (antigravity, cursor, or a CLI with no host profile) was written to
~/.dck/host/agentkit/profiles/<cli>/in the container layer, sodck rebuild(or any
recreate) lost it and its login. The entrypoint now links that directory to the CLI's
directory on theagentkitvolume (0700) — the one ak uses with the option off. Before
a recreate,dck up --recreateanddck rebuildrun that step inside the old container,
so an older image's layer-only profiles move onto the volume first, without overwriting
the volume's copy (the rest is kept on the volume as.<cli>.dck-pre-volume-<UTC>,
logged by path). Shared CLIs' directories (the host's mounts) and anything on another
device are never moved; a link pointing outside the volume is refused. See
docs/layers.md. - The preflight checked devcontainer.json's compose files even when
--compose-file
(PRIMARY mode, satellites) replaced them, so a given file withprivileged, the Docker
socket, host mounts or a path outside the repository started without--trust. It now
checks the files compose runs. dck upreused an image dck did not build when one already had the service's tag (a
pre-dck image left by a repository's old tooling, with its own entrypoint), so no host
step ran untildck rebuild.dck upnow inspects the image first: one without dck's
DCK_IMAGE_VERSIONordck-entrypoint, or built by another dck version than the
repository's render (docker/local/<svc>/dck/VERSION), is rebuilt and its container
replaced, with a note naming the image and why.dck downleft the primary's Herdr machine registered (only a satellite'sdown
removed it). It now removes the machine and SSH aliasdck upregistered whenever the
dev service goes down; the nextdck upregisters them again.
Install
git clone --branch v0.3.6 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.6 (digests in the images workflow run).
devcontainer-kit v0.3.5
Interface stays 2.
Added
- Workspace satellites through dck.
dck --project P --compose-file F… --service S up|down|ps|logs|shell|exec|ssh|…acts on one service of another compose project — a
second instance of a dev service (<svc>satellite) with its own project, files and
ports — with every host step the main service gets: the authorized dck key,[ssh] copy_keys, host-profile overlays anddefault_profile, the git identity,
HERDR_PEERS_SELF, its own Herdr machine (aliasdck-<project>-<service>, label
<project> · <service>or--label) with the mesh, and the Codex/Claude container
config. Its sshd port is read from compose.downremoves only that service, its Herdr
machine and its SSH alias; the main service is never touched. up --seed-state-from VOLUME(satellites) copies only the login state (config_gh,
config_dailybot; never history, keys or Herdr state) from another state volume into
the satellite's, once, while it is empty.- A recipe for repositories that start satellites from their own scripts
(docs/shared-stack.md).
Fixed
- A workspace under the renamed user's home builds. With
userother thandev
and a workspace inside that user's home (user = "node",workspace = "/home/node/app"), the base block ranWORKDIR <workspace>before renaming the
uid-1000 user:WORKDIRcreated/home/nodefirst andusermod -mfailed (exit 12).
The rename and home move now come beforeWORKDIR, and such a workspace is created
owned by the user. Every flavour; a repository without a renamed user renders as
before.
Install
git clone --branch v0.3.5 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.5 (digests in the images workflow run).
devcontainer-kit v0.3.4
Interface stays 2.
Changed
-
Pins: coding-agents-kit v0.5.3 (
AGENTKIT_TAG; tag commit5124f93, tarball
sha256f0903bf6…,SHA256SUMSsha2560ab8e810…): Codex launched with--no-daemon
when the app-server daemon is missing. -
Panes Herdr restores no longer land on a login screen. Herdr's session restore
relaunches a plainclaude --resume <id>orcodex resume, without ak. With
[agents] default_profileset (and shared), the container's login profile now exports
CLAUDE_CONFIG_DIR/CODEX_HOMEas that profile's home, so a plain CLI uses the
default account; a value already set (ak's own) wins.dck doctorshows it. -
Codex skips its startup update check and the app-server daemon's auto-start inside
containers. The entrypoint (dck_codex_config) writescheck_for_update_on_startup = falseand[features] daemon_auto_start = falseinto the container's own Codex
configs (~/.codexon its volume, ak codex profiles on the container's
volume) at every start, since dck pins every CLI version. Never in the host's Codex
home or a host-shared profile; a value the developer set is kept. Codex's hooks are
not pre-trusted: that consent stays the developer's. -
dev.shsurfaces dck's refusals (exit 5: a container configuration that reaches the
host and needs--trust, or markers to fix) on stdout too, so a caller that discards
stderr still sees whyup,buildorrebuildstopped.
Install
git clone --branch v0.3.4 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.4 (digests in the images workflow run).
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).
devcontainer-kit v0.3.2
Interface stays 2.
Added
-
The host's SSH keys inside containers, opt-in (
[ssh] copy_keys = truein the host
profile; off by default, a repository'sdck.tomlcannot set it). Tools that only offer
key files, such asgh auth login, ignored the forwarded agent and asked to generate a
new key. With it on,dck upbinds the host's~/.sshread-only at~/.ssh_host
through a runtime compose overlay ($TMPDIR/dck-<uid>/<project>-sshkeys.yml), and every
container start copies itsid_*keys into the container's~/.sshon the state
volume (private 0600,.pub0644, refreshed when they change on the host, removed when
removed there). dck's ownconfig,config.d/,authorized_keysand
known_hosts.dck-hostare never touched, a key the container made itself is kept, and
the agent forwarding is unchanged. Turning it off removes the copies at the next start.
While it is on, the whole host~/.sshis readable inside (read-only), not only the
id_*keys, and private keys rest in the state volume: the trade-off and the wipe are
indocs/SECURITY.md. New entrypoint functiondck_ssh_copy_keys. -
dck setupasks once, on a terminal, whether to copy the host's SSH keys (default no)
and records the answer in the profile's[ssh]table. -
dck doctorreports the opt-in and the key file names (ssh keys copied: …, names
only);doctor --jsongains an optionalssh_keysobject (enabled,reason,
host_keys,copied). -
The agents layer installs coding-agents-kit's three skills (
agentkit,
agentkit-setup,agentkit-orchestrate) from the same verified release tarball into
the image's shared skills directory; the entrypoint links them into every agent's
skills directory at each start, so a recreate no longer loses them. -
The repository dogfoods its own container (
.devcontainer/,docker/local/,
dev.sh): python-3.13 with every coding-agents-kit CLI, Herdr, herdr-peers and
shellcheck, registered as a Herdr machine; the unit gate runs inside.
Fixed
[compose] state_volumeindck.toml(anddck init --state-volume NAME): the
name of the service's state volume (sshd host key,~/.ssh, gh auth, Herdr client
state, history). It was hardcoded asstate, so repositories sharing one compose
project (oneCOMPOSE_PROJECT_NAME) all mounted one<project>_statevolume. The
default staysstate, so no existing install loses its volume; only the compose
volume's name changes, the mount point (~/.dck/volumes/state) does not. The agents
layer's volumes stay shared by name.dck doctorflags a compose project shared with other services whose state volume is
not per service (or another service mounting the same state volume), with the fix;
doctor --jsongains an optionalcomposeobject. The doctor now resolves the compose
project like the launcher and compose (COMPOSE_PROJECT_NAMEfrom the environment or
the compose directory's.envbefore the file'sname:).dck doctorsays when Claude's default account will not be logged in inside (its
host login is the macOS keychain, never shared, andCLAUDE_CODE_OAUTH_TOKENis not in
ak's env file), with both fixes, instead of a bare "not copied" line.- A container built from scratch reaches the host and its peers at once:
dck rebuild,
dck startanddck restartnow run the same post-start steps asdck up— the Herdr
machine is registered (re-added when it was removed, its host key re-pinned), the mesh
and the host-catalog mirror are pushed, and the layout is created. A rebuild after the
volumes were removed left an empty Herdr catalog inside untildck herdr meshran by
hand.
Changed
- Pins: coding-agents-kit v0.5.1 (
AGENTKIT_TAG; tag commit48c38f8, tarball
sha25662cde0e8…,SHA256SUMSsha256400e8fd6…). - Agent tooling: the vendored
deepworkplanskill moves to v7.6.1 (skills-lock.json,
AGENTS.md provenance), through the pack's own addon planner; the AI Diff Reviewer
stays at v3.3.9, the pack's pin.
Install
git clone --branch v0.3.2 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.2 (digests in the images workflow run).
devcontainer-kit v0.3.1
Interface stays 2.
Fixed
- Host accounts keep working across
dck up: the env file of[agents] host_profiles
is now bound through its per-project directory (~/.config/dck/agents/<project>/env,
in the container~/.dck/host/agentkit/hostenv/env), not as a single file. Every
dck uprewrites it atomically, and a single-file bind kept showing the old inode,
so tokens went stale or unset in a running container until--recreate. The v0.3.0
file~/.config/dck/agents/<project>.envis removed on the nextdck up. - A removed
statevolume no longer breaksdck sshanddck herdr add(anddck up
with Herdr on) behind a bare "sshd does not answer": the host key is pinned from the
container itself throughdocker exec(new entrypoint helperdck_host_key_pub), and
a changed key is re-pinned with a note. When the key cannot be read (an older image),
a mismatch is named with the exactssh-keygen -R <alias> -f …fix.
Changed
- Pins: herdr-peers v0.2.2 (
HERDR_PEERS_TAG, verified by the sha256 of its
SHA256SUMS): Codex lanes pass--pane, andlistshows full machine ids. - Agent tooling: the vendored
deepworkplanskill moves to v7.6.0 and the AI Diff
Reviewer skill to v3.3.9 (skills-lock.json,.dwp/config.json, AGENTS.md
provenance), through the pack's own addon planner. - Docs: no agent keys through Claude's bypass-permissions acknowledgement. A leftover one
is escalated to the developer, who accepts it once per profile; folder trust is the only
screen an agent may key through, and only on a pane it launched itself when
--trust-cwdwas unavailable (docs/layers.md, thedckskill,docs/SECURITY.md).
Install
git clone --branch v0.3.1 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.1 (digests in the images workflow run).
devcontainer-kit v0.3.0
Interface stays 2: every new key is optional and off by default.
Added
- Containers can use the host's agent accounts (
[agents] host_profiles = true, host
profile only — a repository'sdck.tomlcannot turn it on).dck upadds a runtime
compose overlay, never written into the repository, that binds the host's
coding-agents-kit profiles of the CLIs the repository installs ([agents] clis;
claude, codex, pi, cline, grok, opencode — never cursor, whose profiles hold absolute
host symlinks), one bind per profile, withAGENTKIT_PROFILES_DIRpointing at them;
[agents] host_profile_nameslimits them to the profiles listed ("claude@work1").
Also the host's Codex home (codex@default) when codex is installed, and a generated
env file (0600, under~/.config/dck/agents/) read-only withAGENTKIT_ENVpointing
at it. Mounts are read-write only where the CLI writes, each reason documented and
shown by the doctor. The env file has no implicit secret: only the Claude token of
each shared Claude profile and the exact names in[agents] host_env_keys; with the
option off nothing is copied. Values never appear in compose files, logs or the
doctor; the names do. dck doctorreports the shared profiles with their mount mode and reason, the env
file's names and, from the host's
ak profiles --json(profiles-v1, coding-agents-kit v0.5.0+), the Claude profiles
that log in through the macOS keychain without a token variable (with the fix:
claude setup-token, then store it in ak's env file asCLAUDE_CODE_OAUTH_TOKEN_<SUFFIX>).
doctor --jsongains an optionalhost_profilesobject (profiles,mounts, …).- Unattended agent launches. With autonomy on, the entrypoint marks the app path as
trusted for Claude and Codex at each start — in the container's own CLI homes and in
shared host profiles — and writes Claude's bypass-permissions acknowledgement only in
the container's own homes, never in a shared host profile.AGENTKIT_PERMISSIONS=ask
writes neither. The Herdr fallback for a screen that still appears is documented.
Changed
- The agents layer installs coding-agents-kit v0.5.0 (
AGENTKIT_TAG, verified by
AGENTKIT_SHA256): accounts and quota (ak usage,ak pick), the per-profile Claude
token (CLAUDE_CODE_OAUTH_TOKEN_<SUFFIX>) andak profiles --json(profiles-v1),
whichhost_profilesanddck doctorbuild on. - Pins: herdr-peers v0.2.1 (
HERDR_PEERS_TAG, verified by the sha256 of its
releaseSHA256SUMS) inside the images and fordck host peers install, and
deepworkplan-vim v0.7.0 (DWP_VIM_TAG, its tag commit and installer sha256) as
the editor. - With
host_profileson,dck upuses the compose backend (the overlay is a compose
file the devcontainer CLI never reads). - The test suite is PATH-hermetic: the developer's own
ak,herdr,herdr-peers,
dckand agent CLIs are hidden from every test, andAGENTKIT_*,HERDR_*,
CLAUDE_*,CODEX_*and credential-shaped variables are cleared in the sandbox.
Security
- Credential sharing is opt-in and documented in
docs/SECURITY.md: Codexauth.json
is shared read-write, so keep one active writer per account.
Upgrade: install v0.3.0, then (optionally) set [agents] host_profiles = true in your
host profile and dck up --recreate.
Install
git clone --branch v0.3.0 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.0 (digests in the images workflow run).