nextlevelbuilder / nextlevelbuilder/goclaw

Sandbox does not mount skills-store, so agents cannot read skill files

Open
#1,162 3 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

agent:github-maintain area:sandbox area:skills bug maintain:triaged P1-high
Dominant language
Go
Stars
3.6k
Forks
1.1k
Avg merge
3d 5h
Merged PRs (30d)
24

Description

Sandbox does not mount skills-store, so agents cannot read skill files

Problem

The agent receives each skill <location> in the system prompt and is told to use read_file to open the corresponding SKILL.md.

However, in sandbox mode the container only mounts the workspace and does not mount the skills-store. This means that even if the Loader discovers the skill, the agent still cannot actually read the skill file inside the sandbox.

Verified behavior

The following has been confirmed:

  • BuildSummary(...) emits <location> values pointing to host skills-store/.../SKILL.md paths
  • sandbox startup mounts only the workspace into the container
  • calling read_file on that absolute path inside the sandbox fails
  • FsBridge.resolvePath(...) falls back when the absolute path is outside the sandbox workdir
  • the agent never gets the real skill content

Root cause

The sandbox-visible filesystem does not match the skill paths returned by the Loader:

  • Loader returns host absolute paths under skills-store
  • sandbox mounts only the workspace
  • the container does not contain the corresponding skills-store tree

So the prompt tells the agent to read a skill file that is not reachable inside the sandbox.

Relevant code

  • internal/agent/systemprompt.go: instructs the agent to open SKILL.md via read_file using <location>
  • internal/skills/loader.go: BuildSummary emits <location>
  • internal/sandbox/docker.go: sandbox only mounts the workspace
  • internal/sandbox/fsbridge.go: absolute paths outside the workdir are rejected/fallen back
  • internal/tools/sandbox_hints.go: shows sandbox file-not-found hints
  • internal/tools/use_skill.go: use_skill does not load content itself; it still depends on read_file

Impact

  • skills are effectively unusable in sandbox mode
  • the agent knows the skill name and location but cannot read the content
  • prompt behavior and runtime filesystem do not match
  • to users this appears as “the skill exists but the agent does not follow it”

Recommendation

At least one of the following must be true:

  1. sandbox mounts the skills-store, and <location> is mapped to a real readable path inside the container
  2. Loader returns container-accessible paths in sandbox mode instead of host paths

A more robust fix is to unify host/container path mapping for skill files so agents never see host absolute paths that are unreachable inside the container.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the skill path from internal/skills/loader.go and internal/agent/systemprompt.go into sandbox startup in internal/sandbox/docker.go. Read internal/sandbox/fsbridge.go and internal/tools/use_skill.go to understand how paths and skill loading interact. Done means a sandboxed agent can read the referenced SKILL.md through a container-accessible path, with the prompt and runtime filesystem aligned.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, go
Domain
infrastructure, security
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.