Repository navigation
Mount the host's Agent Skills into the container, read-only - #258
Merged
Merged
Conversation
The claude-code feature's allow-list had no skills in it, so a workspace came up with no ~/.claude/skills at all and every skill installed on the host was invisible inside. That lands hardest on a wf launch: wf execs `dl <ws> -- claude` into a node and the session it lands in cannot see the /wf skill it was launched to run. Two paths, because wf skills install leaves *relative* links - skills/wf -> ../wf-skills/wf - with the prompt bodies in the sibling directory. Mounting skills/ alone hands the container a directory of dangling links, which is no skills rather than stale ones. Read-only, like commands/ and hooks/: a skill is executable instructions, and the allow-list gains no write path onto the host. The one cost is a warning, not a failure - wf refreshes its links on every launch, so a wf run from inside a container says it could not and carries on.
Reviewer's GuideThis PR updates the claude-code devcontainer feature to mount the host’s Agent Skills into the container as read-only, adjusts the init script to pre-create the corresponding host directories, and refreshes documentation and changelog to reflect the new behavior and version bump. File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #258 +/- ##
=======================================
Coverage 93.26% 93.26%
=======================================
Files 25 25
Lines 3771 3771
=======================================
Hits 3517 3517
Misses 254 254 🚀 New features to boost your workflow:
|
Merged
blooop
added a commit
that referenced
this pull request
Aug 18, 2026
Ships two merges that landed after 0.0.28 was cut. #258: the claude-code feature mounts ~/.claude/skills and ~/.claude/wf-skills read-only. The allow-list had neither, so a workspace this repo's devcontainer built had no ~/.claude/skills at all and every skill installed on the host was invisible inside — a wf launch into a node landing in a session that could not see the /wf skill it was launched to run. Repo content rather than package content, so the fix arrives with a checkout of main and a container recreate, not with this version bump; the release is here so main and the published package agree. #257: prepare_cold names both arms of the base answer and refuses an unhandled one, closing the silent launch-from-stale-cache a third arm would have reintroduced behind #245's report. Goes out through Auto-publish → Conda Publish, the same way 0.0.28 did: no tag or GitHub release is created by hand.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was wrong
The
claude-codefeature mounts~/.claudea path at a time, andskills/was not on the list. A workspace this devcontainer builds therefore comes up with no~/.claude/skillsat all:Measured in two live
blooop/devlaunchnode containers today. Every skill installed on the host is invisible in there.Where that bites hardest is
wf: it execsdl <ws> -- claude …to carry an agent into a node, and the session it lands in cannot see the/wfskill it was launched to run — nor/wf-tddor/wf-review. On the host the install is healthy (wf skillsreports all five linksok), and wayfinder 0.18's launch-time link healing runs host-side, so nothing on that end can fix it. A repo whose devcontainer binds~/.claudeas one directory —blooop/wayfinder's own — never sees this, which is what makes it look repo-specific.The change
Two read-only mounts, plus the
mkdir -pthe pre-create hook needs so the bind sources exist:Two paths and not one, because
wf skills installleaves relative links —skills/wf -> ../wf-skills/wf— with the prompt bodies in the sibling directory. Mountingskills/alone delivers a directory of dangling links, which is no skills rather than stale ones.Read-only, like
commands/andhooks/: a skill is executable instructions, and this way the allow-list gains no new write path onto the host. The security property tested intest_claude_config_protection.pyis untouched.This reverses something the README argued for
The feature's README named
skills/in What Is Not Mounted and stated the cost plainly — "the skills and plugins installed on your host are not visible in there". So this is a deliberate decision being changed, not an omission being filled. The argument for changing it: the allow-list exists to stop a container writing to host config, and a read-only mount does not write. Skills are the same kind of thing ascommands/andhooks/, which are already mounted on exactly those terms.plugins/stays out.One cost comes with it, and it is a warning rather than a failure:
wfrefreshes its own links on every launch, so awfrun from inside a container prints that it could not refresh them (EROFS) and carries on — itsrefresh_skillsis best-effort by design.Verification
pixi run pytest— 1834 passed, 24 deselected. The README↔manifest agreement tests intest_claude_code_feature_mounts.pycover the new mounts without needing a third copy of the list; the pre-create-hook tests derive file-vs-directory from the README's trailing slash, and both new entries are directories.pixi run prek— clean.pixi run test-e2e), which needs a real Docker daemon and devpod.Existing containers need a rebuild to pick the mounts up.
🤖 Generated with Claude Code
Summary by Sourcery
Mount the host's Agent Skills and linked skill bodies into the claude-code container as read-only configuration.
New Features:
Bug Fixes:
Enhancements:
Documentation:
Tests:
Chores: