Use named volume for opencode config instead of host bind mount
Validate / docs-check (push) Successful in 14s
Validate / validate-base (push) Has started running
Validate / validate-omos (push) Has been cancelled

Switching from a host bind mount (~/.config/opencode) to a named volume
(devbox-opencode-config) eliminates the symlink conflict between host
and container environments. Each manages its own skill/instruction
symlinks independently, allowing native opencode and containerized
opencode to coexist on the same machine.

Also removes the ~/.agents/skills bind mount recommendation — the
container manages its own skills directory via the entrypoint deploy,
and sharing it with the host causes relative-path conflicts.
This commit is contained in:
Joakim Persson
2026-05-02 22:50:09 +00:00
parent 26ce9aa490
commit 59e58a9d00
2 changed files with 20 additions and 8 deletions
+7 -2
View File
@@ -51,8 +51,12 @@ services:
# where the repo lives on the host. Set SKILLSET_PATH in .env. # where the repo lives on the host. Set SKILLSET_PATH in .env.
# - ${SKILLSET_PATH}:/home/developer/skillset # - ${SKILLSET_PATH}:/home/developer/skillset
# Opencode config — per-user (persists settings across restarts) # Persist opencode config (opencode.jsonc, oh-my-opencode-slim.json,
- ${HOME}/${SIGNUM}/.config/opencode:/home/developer/.config/opencode # instructions, etc.) across container recreations. Auto-generated on
# first start from env vars by generate-config.py and the skillset
# deploy script. Using a named volume keeps the container's symlinks
# independent from the host.
- devbox-opencode-config:/home/developer/.config/opencode
# Persist opencode data (auth, memory, session history) # Persist opencode data (auth, memory, session history)
- devbox-data:/home/developer/.local/share/opencode - devbox-data:/home/developer/.local/share/opencode
@@ -79,6 +83,7 @@ services:
# - ${HOME}/${SIGNUM}/.aws:/home/developer/.aws # - ${HOME}/${SIGNUM}/.aws:/home/developer/.aws
volumes: volumes:
devbox-opencode-config:
devbox-data: devbox-data:
devbox-shell-history: devbox-shell-history:
devbox-zoxide: devbox-zoxide:
+13 -6
View File
@@ -48,13 +48,19 @@ services:
# where the repo lives on the host. Set SKILLSET_PATH in .env. # where the repo lives on the host. Set SKILLSET_PATH in .env.
# - ${SKILLSET_PATH}:/home/developer/skillset # - ${SKILLSET_PATH}:/home/developer/skillset
# Optional: mount opencode config directory (persists config changes across restarts) # Persist opencode config (opencode.jsonc, oh-my-opencode-slim.json,
# Includes opencode.json, oh-my-opencode-slim.json, skills, etc. # instructions, etc.) across container recreations. Auto-generated on
# When mounted, OPENCODE_PROVIDER auto-config is skipped if opencode.json exists. # first start from env vars by generate-config.py and the skillset
# - ~/.config/opencode:/home/developer/.config/opencode # deploy script. Using a named volume (not a host bind mount) keeps
# the container's skill/instruction symlinks independent from the host,
# allowing both native and containerized opencode on the same machine.
- devbox-opencode-config:/home/developer/.config/opencode
# Optional: mount opencode agent skills from host # NOTE: Do NOT bind-mount ~/.agents/skills/ from the host. The
# - ~/.agents/skills:/home/developer/.agents/skills:ro # container manages its own skills directory independently — the
# entrypoint deploys skills from the skillset repo on each start.
# Sharing it with the host causes symlink conflicts (relative paths
# differ between host and container filesystem namespaces).
# Optional: mount neovim config from host (plugins auto-install on first start) # Optional: mount neovim config from host (plugins auto-install on first start)
# - ~/.config/nvim:/home/developer/.config/nvim:ro # - ~/.config/nvim:/home/developer/.config/nvim:ro
@@ -114,6 +120,7 @@ services:
# - ~/.aws:/home/developer/.aws # - ~/.aws:/home/developer/.aws
volumes: volumes:
devbox-opencode-config:
devbox-data: devbox-data:
devbox-state: devbox-state:
devbox-shell-history: devbox-shell-history: