Skip to content
Conduit

mcp server

sandbox

lightweight OS-level sandbox for securing processes with filesystem and network controls - zero containers, zero fuss

EliFuzz/sandboxcommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

Before you start

  • Node.js 20 or newer
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "elifuzz-sandbox": {
      "command": "npx",
      "args": [
        "-y",
        "vsbx"
      ]
    }
  }
}

same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12

Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs

README

synced Oct 22, 2026

SandBox

Lightweight, OS-native sandboxing solution on macOS (sandbox-exec) and Linux (bubblewrap).

Features

  • agentic code execution (AI agents): with minimal risk of data leaks or system compromise
  • secure-by-default dual isolation: Untrusted code runs with strong restrictions - filesystem isolation prevents secret exfiltration (e.g., SSH keys), while network isolation blocks unrestricted outbound access
  • minimal performance overhead: No containers / VMs required
  • blazingly fast startup times: milliseconds
  • cross-platform: macOS and Linux support
  • highly configurable: fine-grained control over network and filesystem access
  • easy to use: CLI and Node.js library

Usage

CLI

vsbx <command>                    # Run command sandboxed
vsbx --debug <command>            # Debug logging
vsbx --settings <file> <command>  # Custom config

Node.js Library

import { type SandboxRuntimeConfig } from "vsbx/core/sandbox/sandbox-config";
import { SandboxManager } from "vsbx/core/manager/sandbox-manager";
import { spawn } from "node:child_process";

const config: SandboxRuntimeConfig = {
  network: {
    allowedDomains: ["example.com", "api.github.com"],
    deniedDomains: [],
  },
  filesystem: {
    denyRead: ["~/.ssh"],
    allowWrite: [".", "/tmp"],
    denyWrite: [".env"],
  },
};

await SandboxManager.initialize(config);
const sandboxedCommand = await SandboxManager.wrapWithSandbox(
  "curl https://example.com",
);
const child = spawn(sandboxedCommand, { shell: true, stdio: "inherit" });

child.on("exit", (code) => console.log(`Command exited with code ${code}`));
await SandboxManager.reset();

Configuration

{
  "network": {
    "allowedDomains": [
      "api.github.com",
      "registry.npmjs.org",
      "objects.githubusercontent.com"
    ]
  },
  "filesystem": {
    "denyRead": ["~/.ssh", "~/.aws", "~/.config/gh"],
    "allowWrite": ["."]
  }
}

Configuration Options

{
  "network": {
    "allowedDomains":           string[],     // wildcards *. ok, empty = no network
    "deniedDomains":            string[],     // checked first, blocks even if in allowed
    "allowUnixSockets":         string[],     // macOS mostly - dangerous!
    "allowLocalBinding":        boolean       // default false - very dangerous
  },
  "filesystem": {
    "denyRead":                 string[],     // empty = read everywhere
    "allowWrite":               string[],     // empty = write nowhere ← most important!
    "denyWrite":                string[]      // exceptions inside allowWrite (stronger priority)
  },
  "ignoreViolations": {                       // rare - mostly for tooling workarounds
    "<command-pattern>":        string[]
  },
  "enableWeakerNestedSandbox":  boolean,      // only for running inside Docker (much weaker!)
  "mandatoryDenySearchDepth":   number        // Linux only - how deep to scan for dangerous files (default: 3)
}

Default Permissions

ResourceDefault StateRestriction StyleHow to open access
NetworkCompletely blockedAllow-list onlyallowedDomains: ["..."]
Filesystem - ReadAllowed everywhereDeny-list onlydenyRead: ["~/.ssh"]
Filesystem - WriteCompletely blockedAllow-list + deny-listallowWrite: ["."] + denyWrite: []
Unix sockets (Linux)Creation blocked (seccomp)Explicit allowallowUnixSockets: [...]

Comparison

AspectSandBox (sandbox-exec, bwrap)Node.js VMBun (Runtime/VM)microVM (Firecracker, Cloud Hypervisor)Docker Container
DefinitionSandbox that runs unprivileged processes in restrictive OS kernel sandboxesNode.js module for isolated V8 JS contextsJS/TS runtime with JSCore and Node.js-style vm moduleLightweight VMs for secure short-lived workloads with minimal guest OSContainer platform using OS virtualization sharing host kernel
PlatformsmacOS, LinuxCross-platformCross-platformLinux host (KVM); flexible guest OSLinux native; Windows/macOS via layers/VMs
Performance OverheadMinimal; near-native speeds with kernel namespaces/seccompNegligible; in-process V8 isolation, minor GC pausesLow; JSCore optimizations, up to 4x throughputModerate; <5% CPU penalty with KVMLow; 5-10% I/O slowdown vs native
Memory OverheadExtremely low; <1MB per processMinimal; shared process memory, small heap additionsLow; optimized JSCore memory managementLow; <5MB per microVM with minimal kernelModerate; 10-50MB per container
Resource EfficiencyHigh; reuses host resources directlyEfficient for JS; shares CPU/memory, no quotasSuperior to Node.js; better CPU utilizationStrong density; 1000s per serverExcellent sharing; high density with cgroups
Startup TimeNear-instant; millisecondsInstant; sub-millisecond contextsFast; microseconds for VM creationFast; 100-150ms bootQuick; 100ms-1s
Security for Untrusted CodeRobust kernel isolation; vulnerable to kernel bugsInadequate; context escapes possibleSimilar to Node.js; V8 vulnerabilitiesExcellent hardware isolationStrong with namespaces; kernel-sharing risks
Supported LanguagesAny executable on host OSJS onlyJS/TSAny supported by guest OSAny via container images
Privilege RequirementsUnprivileged; no root neededInherits host privilegesRuntime permissions; granular controlRequires root/KVM for hypervisorDocker needs root; Podman rootless
Network Access ControlFine-grained flags; allow/denyLimited; no native controlsPermission-based; default denyComplete isolation with virtual NICsAdvanced namespaces/bridges
Filesystem Access ControlPrecise bind-mounts/read-onlyWeak; shares host FSPermission-based grantsFull guest FS isolationVolumes/binds with permissions
LimitationsOS-specific; complex profilesNot secure; JS-only, easy escapesImmature; shares JS flawsHardware-dependent; higher overheadKernel-sharing risks; daemon vulns
Use CasesSandboxing AI scripts/binaries locallyEvaluating AI JS snippetsRunning AI JS/TSSecure untrusted AI code execution in serverlessContainerizing AI agents
↑↓ navigate openesc close