← Back to research
·11 min read·tool

Fence

Fence is an Apache-2.0, Go-based, container-free sandbox CLI that wraps any command — including coding agents like Claude Code and Codex — with network-blocked-by-default and write-restricted filesystem policy via native OS primitives (macOS Seatbelt, Linux bubblewrap). 794 stars in under six months, spun out of Tusk into its own GitHub org.

Key takeaways

  • 794 GitHub stars, 31 forks, and roughly 60 tagged releases in under six months (created December 18, 2025; pushed June 11, 2026) — an unusually fast cadence for a security tool, with a Show HN that drew 78 points
  • Container-free by design: macOS sandbox-exec (Seatbelt) and Linux bubblewrap enforce default-deny network and default-deny filesystem writes, with domain allowlisting layered on via local HTTP/SOCKS proxies
  • Positioned as a permission manager for CLI coding agents — Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory Droid — and explicitly framed as defense-in-depth, not hostile-code containment

FAQ

What is Fence?

Fence is an open-source CLI that wraps any command in a lightweight, container-free sandbox: outbound network is blocked by default, filesystem writes are denied by default, and dangerous commands can be blocked by policy — enforced with native OS primitives rather than Docker.

How much does Fence cost?

Free and open source under the Apache 2.0 license; there is no paid tier.

What platforms does Fence support?

macOS (via sandbox-exec/Seatbelt) and Linux (via bubblewrap plus socat for network bridging); Windows is reachable only through WSL via Nix.

How is Fence different from Anthropic's sandbox-runtime?

Fence credits sandbox-runtime as its inspiration but adds command deny rules, SSH command filtering, port exposure for inbound connections, and built-in templates, and it works with many agents beyond Claude Code.

Executive Summary

Fence is a lightweight, container-free sandbox: it wraps any command — fence -t code -- claude — in a policy boundary where outbound network is blocked by default, filesystem writes are denied by default, and specific commands like git push or rm -rf / can be denied outright, all enforced with native OS primitives (macOS sandbox-exec/Seatbelt, Linux bubblewrap) rather than Docker or VMs.[1] The README pitches it for semi-trusted code — package installs, build scripts, CI jobs, unfamiliar repos — and as defense-in-depth and a "permission manager" for CLI coding agents including Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, and Factory Droid.[1][2]

The project was built at Tusk, the AI testing company, where creator jy-tan needed to sandbox services under test during Tusk Drift traffic replays — blocking localhost outbound to Postgres and Redis to force the app onto mocks — and it has since moved from the Use-Tusk GitHub org into its own fencesandbox org with a dedicated docs site.[3][1][4] Created December 18, 2025, the repo sits at 794 stars and 31 forks as of June 11, 2026, with a commit pushed the same day and roughly 60 tagged releases (v0.1.60 shipped June 1, 2026) — a brisk pace for a six-month-old security tool.[1][5] It openly credits Anthropic's experimental sandbox-runtime as its inspiration.[1]

AttributeValue
Creatorjy-tan / Tusk; now an independent fencesandbox GitHub org[3][1]
FoundedDecember 18, 2025 (repo created)[1]
FundingNone disclosed for the project; built inside Tusk[3]
GitHub Stars794 (31 forks, 18 open issues) as of June 11, 2026[1]
LicenseApache-2.0[1]
LanguageGo[1]

Product Overview

Usage is a prefix: fence curl https://example.com returns 403 because no domains are allowed by default; fence -t code npm install applies the built-in code template that allowlists npm, PyPI, and similar registries; fence -- claude --dangerously-skip-permissions runs Claude Code in YOLO mode with the OS, not the agent, holding the guardrails.[1] Policy lives in a JSONC fence.jsonc resolved from the current directory upward (falling back to ~/.config/fence/), with template inheritance via extends, repo-local overrides on top of a user's base config, and fence config show to inspect the merged chain.[1]

Key Capabilities

CapabilityDescription
Network isolationAll outbound blocked by default; per-domain allowlists with wildcards; localhost inbound/outbound controlled separately[1][6]
Filesystem restrictionsWrites denied by default (allowWrite to opt in); denyWrite/denyRead overrides; always-protected targets like shell configs and git hooks[6]
Command blockingDeny rules for commands like rm -rf / and git push; preflight intent parsing plus runtime execve path-based enforcement[1][6]
SSH command filteringControl which hosts and commands are allowed over SSH[1]
Violation monitoring-m flag logs blocked requests in real time; -d for debug detail[1]
Agent integrationTemplates and hooks for Claude Code, Codex, Amp, Gemini CLI, Copilot, OpenCode, Factory Droid; fence import --claude converts existing Claude Code settings[2][1]
Go libraryUsable as a Go package, not just a CLI[1]

Technical Architecture

Fence is a policy-driven wrapper, not a container: on macOS it generates Seatbelt (sandbox-exec) profiles, on Linux it uses bubblewrap with socat for network bridging (bpftrace optionally adds filesystem-violation visibility), and repo topics also flag Landlock and seccomp.[1] Domain allowlisting is proxy-based — the OS sandbox blocks direct outbound, and local HTTP/SOCKS proxies plus HTTP_PROXY/HTTPS_PROXY/ALL_PROXY env vars selectively let allowed domains through, with an optional upstreamProxy (e.g. mitmproxy) for interactively inspecting grey-zone traffic.[6] Fence also sanitizes LD_* and DYLD_* environment variables to block library-injection persistence.[6]

Install is a one-liner on macOS/Linux (curl -fsSL https://cli.fencesandbox.com/install.sh | sh), Homebrew via the fencesandbox/tap, Nix, or go install.[1]

Key Technical Details

AspectDetail
DeploymentLocal CLI / Go library; macOS + Linux (Windows via WSL through Nix)[1]
IsolationmacOS Seatbelt, Linux bubblewrap + socat; no containers or VMs[1]
Model(s)None — Fence is model-agnostic; it wraps whatever agent CLI you run[2]
IntegrationsClaude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory Droid; mitmproxy upstream[2][6]
Open SourceApache-2.0, single repo on GitHub[1]

Strengths

  • Zero-container friction — no Docker daemon, no image builds, no mounted-volume ceremony; the sandbox is a command prefix, which is why it slots in front of any agent CLI without integration work.[1]
  • Default-deny on both axes — network and filesystem writes both start closed, the conservative posture most agent wrappers skip; allowlists are explicit and inspectable via fence config show.[1][6]
  • Honest, detailed threat model — the security docs explicitly disclaim hostile-code containment, resource limits, and exfiltration to allowed domains, and document exactly where the proxy approach fails (non-proxy-aware stacks, raw sockets).[6]
  • Goes beyond its inspiration — relative to Anthropic's sandbox-runtime, Fence adds command deny rules, SSH command filtering, inbound port exposure, and built-in templates, per the creator on HN.[3][1]
  • Battle-tested origin story — built to solve a real internal need at Tusk (isolating services under test during traffic replays), not as a speculative launch.[3]
  • Fast iteration — roughly 60 releases between December 2025 and June 2026, with five releases in May–June 2026 alone.[5]

Cautions

  • Not an isolation boundary against malice — Fence's own docs say it "is not designed to be a strong isolation boundary against actively malicious code that is attempting to escape"; kernel/OS exploits are out of scope.[6]
  • Proxy-based allowlisting has holes — programs that ignore proxy env vars (Node.js native http/https, raw sockets, custom protocol stacks) fail with connection errors rather than getting selective allow, and traffic to any allowed domain can carry exfiltrated data.[6]
  • No resource limits — CPU, memory, disk, and fork bombs are explicitly unaddressed, so it cannot safely host arbitrary untrusted user code the way microVM sandboxes can.[6]
  • Nested sandboxes break — the creator confirmed nested bubblewrap sandboxes fail with permission errors, so wrapping applications that do their own namespace-based sandboxing is a problem.[3]
  • Pre-1.0 with a fresh org move — version numbers are still v0.1.x, the repo just migrated from Use-Tusk to fencesandbox (requiring users to re-tap Homebrew and reinstall), and 18 issues are open against a small maintainer team.[1][5]
  • macOS dependency on a deprecated primitive — sandbox-exec has long been marked deprecated by Apple, the same foundation risk shared by every Seatbelt-based tool in this category.[1]

What Developers Say

Community discussion centers on the Show HN thread (78 points, 23 comments, early 2026); commenters mostly probed the boundaries of the tool rather than praising or panning it.[3]

"pretty close to anthropic's version, yes? or am I mistaken" — will_wright on Hacker News, questioning differentiation from sandbox-runtime[3]

"can i run user submitted untrusted code in this? and can it do a pip install if user wants?" — vivzkestrel on Hacker News[3]

"Is it also possible to block all filesystem access and only allow certain directories / files?" — uwemaurer on Hacker News[3]

"Unfortunately nested bubblewrap sandboxes don't work… Permission denied." — jy-tan, Fence creator, on a key limitation[3]

"Fence handles well supply-chain scripts that phone home, tools that write broadly across your filesystem, accidental secret leakage." — jy-tan, Fence creator (vendor voice, scoping the threat model)[3]

No substantive independent reviews beyond the HN thread exist as of June 2026; sentiment is curious-but-unproven rather than enthusiastic or critical.[3]


Pricing & Licensing

TierPriceIncludes
Open sourceFreeFull CLI, Go library, all templates, docs at fencesandbox.com[1][4]

Licensing model: Apache-2.0; no paid tier, no hosted service, no telemetry-based monetization disclosed.[1]

Hidden costs: Linux requires installing bubblewrap and socat (bpftrace optional); policy tuning time when agents legitimately need domains or paths the defaults deny.[1]


Competitive Positioning

Direct Competitors

CompetitorDifferentiation
nonoSame container-free, native-OS-primitive niche; Fence's distinguishing surface is proxy-based domain allowlisting plus command deny rules, SSH filtering, and per-agent templates[1]
LitterboxContainer-based (Podman, Linux-only) full GUI dev environments with a confirming SSH agent; Fence is container-free, cross-platform (macOS + Linux), and wraps single commands instead of whole desktops[1]
Anthropic sandbox-runtimeFence's acknowledged inspiration; Fence adds command deny rules, SSH command filtering, inbound port exposure, and templates, and targets agents beyond Claude Code[1][3]
Docker / devcontainersStronger isolation but heavyweight: daemons, images, volume mounts; Fence trades containment strength for zero-setup ergonomics[6]

When to Choose Fence Over Alternatives

  • Choose Fence when: you want one prefix command that puts default-deny network and filesystem policy around any coding agent or build script on macOS and Linux, with no container runtime installed.
  • Choose nono when: you prefer its specific enforcement approach or ergonomics for the same local, container-free job — the two are the closest pair in this category.
  • Choose Litterbox when: you are on Linux with Podman and want your entire GUI dev environment sandboxed, including SSH key confirmation prompts.
  • Choose a microVM/container sandbox when: the code is genuinely untrusted or user-submitted — Fence's own docs rule that workload out.[6]

Ideal Customer Profile

Best fit:

  • Developers running CLI coding agents (Claude Code, Codex, Amp, Gemini CLI) in permissive or auto-accept modes who want OS-level guardrails underneath[2]
  • Anyone routinely running npm install / pip install / build scripts from unfamiliar repos and worried about phone-home or filesystem-wide writes[6]
  • Teams wanting embeddable policy via the Go library or repo-local fence.jsonc committed alongside the code[1]

Poor fit:

  • Platforms executing arbitrary untrusted user code — no hostile-code containment, no resource limits[6]
  • Windows-native developers (WSL only)[1]
  • Workloads built on non-proxy-aware network stacks that need selective domain access rather than hard failure[6]

Viability Assessment

FactorAssessment
Financial HealthN/A as a free tool; backed by Tusk's internal need rather than project-specific funding[3]
Market PositionEarly leader among container-free local agent sandboxes — 794 stars in under six months is strong for the niche[1]
Innovation PaceHigh — ~60 releases since December 2025, active push on June 11, 2026[5][1]
Community/EcosystemThin but real — 78-point Show HN, 31 forks, 3 watchers, 18 open issues; no major independent reviews yet[3][1]
Long-term OutlookHinges on the spun-out org sustaining maintenance beyond Tusk's internal use case, and on Apple's deprecated sandbox-exec surviving as a foundation[1]

The spin-out from Use-Tusk into a dedicated fencesandbox org cuts both ways: it signals the maintainers see a project bigger than one company's testing pipeline, but it also resets distribution (Homebrew re-tap, new module path) and leaves governance and staffing undisclosed.[1] The release cadence and same-day pushes suggest healthy momentum as of June 2026.[5][1]


Bottom Line

Fence is the most fully-featured of the container-free local agent sandboxes: default-deny network and filesystem, command and SSH-level policy, per-agent templates, and an unusually honest security model, all behind a single command prefix. It is exactly the right tool for its stated job — reducing blast radius when a coding agent or install script does something surprising — and exactly the wrong tool for hosting hostile code, which its own docs say plainly.

Recommended for: developers running coding agents in auto-accept mode on macOS or Linux; anyone wanting supply-chain blast-radius reduction without adopting containers.

Not recommended for: untrusted user-code execution, Windows-native workflows, or anyone needing resource limits and kernel-grade isolation — use a microVM sandbox instead.

Outlook: Watch whether the independent fencesandbox org attracts contributors beyond Tusk, whether a v1.0 stabilizes the config surface, and how the project responds if Apple finally removes the deprecated sandbox-exec underpinning its macOS support.


Research by Ry Walker Research • methodology