DeepSeek Harness's Sandbox Confines Files, Not Network or Processes DeepSeek Harness, an open-source agent framework released as a developer preview, ships a fail-closed filesystem sandbox using bubblewrap, Landlock, Seatbelt, or Windows ACLs, but its documentation states that network access and process visibility are outside the sandbox's scope. The sandbox interface, `ctx.sandbox`, confines only file effects via three modes—read-only, workspace-write, and danger-full-access—and refuses to run commands unconfined if no backend is available. The framework also provides an append-only session log for traceability, but the sandbox does not govern network or process activity. Articles DeepSeek Harness's Sandbox Confines Files, Not Network or Processes DeepSeek Harness ships a fail-closed filesystem sandbox using bwrap, Landlock, Seatbelt, or Windows ACLs, but its own source and documentation state that network access and process visibility are outside what the sandbox governs. DeepSeek Harness landed on Hacker News this week as a developer preview: an agent framework built on the claim that "every part of the product is a plugin, including the model adapter, the tool registry, the session log, and the agent loop itself, so every part is replaceable from configuration." The launch page pairs that with a second claim, traceability: an append-only session log that records every prompt, tool call, tool result, and context injection the model saw, with resume, fork, search, and replay built on top of it. Both claims hold up. The repository backs them with real code, not just a landing page. But "traceable" and "sandboxed" are different properties, and the actual sandbox interface, which DeepSeek ships as open source, shows exactly where its boundary sits and where it does not. What Runs a Tool Call what-runs-a-tool-call DeepSeek Harness is built on Cordis, a plugin framework where "plugins contribute services, typed events, and reversible effects to a shared context." There is no privileged core. The model adapter, the tool registry, and the session log are each a plugin mounted into the same tree, and a deployment composes its own stack from a profile a named set of bundles plus local patch files. A tool call moves through a documented pipeline before it runs: php model emits tool-call block - tool/call logged to session before execution - tools/pre-execute waterfall hooks, permission checks, sandbox wrap - registered guards deny or abstain - ctx.approval one-shot prompt, if a guard asked for one - tools/execute waterfall timeout, retry, the tool body itself - tools/post-execute waterfall accept, block, replace, add context - tool/result logged to session The sandbox enters at tools/pre-execute , through a seam called ctx.sandbox . That is the part worth reading closely, because "sandbox" in this codebase means something narrower than it does in a product like Docker Sandboxes or a Firecracker microVM /blog/ai-agent-sandboxes-ebpf-runtime-visibility/ . The Sandbox Is Real, and Narrower Than It Sounds the-sandbox-is-real-and-narrower-than-it-sounds ctx.sandbox is an abstract seam with one method: confine argv, policy . It takes the exact argv a tool is about to spawn and returns a wrapped argv that runs the same command under a file-effect policy. The default implementation, dsh-sandbox-local , is a real, fail-closed, cross-platform confinement layer: Linux : bubblewrap bwrap and Landlock. macOS : Seatbelt, via sandbox-exec . Windows : a restricted-token backend enforced through ACLs. The policy vocabulary is three modes: | Mode | What it permits | Network confinement | Process confinement | |---|---|---|---| read-only | Required sinks only, such as /dev/null | None | None | workspace-write | The workspace root and a backend-defined temp area | None | None | danger-full-access | Everything; confinement is skipped entirely | N/A | N/A | The engineering is careful about failure. If a session requests read-only or workspace-write and no backend is usable on the host, confine does not fall back to running the command unconfined. It throws SandboxUnavailableError , and the harness refuses the command: sandbox mode "workspace-write" is requested but no sandbox backend is usable on this host; refusing to run the command unconfined. Install bubblewrap or run a Landlock-enforcing kernel Linux , ensure sandbox-exec is usable macOS , or ensure the ACL restricted-token runner can start Windows . Otherwise, switch the consumer to danger-full-access. The docs are also honest about partial enforcement. Enforcement completeness is a reported fact, full or partial , not an assumption. Older Landlock kernel ABIs and the Windows ACL backend's "Everyone / hard-link boundaries" are named as current partial cases, meaning a caller that requires an absolute filesystem boundary on those hosts has to check the reported value rather than trust the mode name. That is a well-built primitive for what it does. The question is what it does not do. What ctx.sandbox Does Not Cover what-ctx-sandbox-does-not-cover The sandbox subsystem documentation states its scope directly: " SandboxMode governs filesystem effects only." And, more pointedly: "Network and process visibility are outside this vocabulary." That is not a gap the docs hide. It is a design decision, stated plainly, and it has real consequences for what an agent can do even under the strictest confined mode. The web fetch tool's schema takes a single required field: url . There is no domain allowlist in the schema, and nothing in the sandbox or capability-seam documentation describes a network policy layer that filters where it can go. An agent under workspace-write mode, unable to write outside the project directory, can still call web fetch against any host on the internet. The same asymmetry applies to shell execution. dsh-bash-sandbox wraps the same argv through ctx.sandbox , so a blocked file operation surfaces as sandbox: file access denied under