
fence v0.1.64
Leichtgewichtige, containerfreie Sandbox zum Ausführen von Befehlen mit Netzwerk- und Dateisystemeinschränkungen.

Fence kapselt Befehle in einer Sandbox, die standardmäßig den Netzwerkzugriff blockiert und Dateisystemoperationen basierend auf konfigurierbaren Regeln einschränkt. Es ist am nützlichsten, um halbvertrauenswürdigen Code auszuführen (Paketinstallationen, Build-Skripte, CI-Jobs, unbekannte Repos) mit kontrollierten Seiteneffekten, und es kann auch als Defense-in-Depth für KI-Codierungsagenten eingesetzt werden.
# Block all network access (default)
fence curl https://example.com # → 403 Forbidden
# Allow specific domains
fence -t code npm install # → uses 'code' template with npm/pypi/etc allowed
# Block dangerous commands
fence -c "rm -rf /" # → blocked by command deny rules
Fence ist auch ein Berechtigungsmanager für Ihre CLI-Agenten. Funktioniert mit beliebten Codierungsagenten wie Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory (Droid) CLI und vielen mehr – siehe agents.md.
Installieren
[!NOTE] Fence wurde von
github.com/Use-Tusk/fencenachgithub.com/fencesandbox/fenceverschoben. Wenn Sie es mit Homebrew aus dem alten Tusk-Tap installiert haben, wechseln Sie zum neuen Tap:brew uninstall use-tusk/tap/fence brew untap use-tusk/tap brew tap fencesandbox/tap brew install fencesandbox/tap/fenceWenn Sie es mit
go installinstalliert haben, installieren Sie es erneut mit dem neuen Modulpfad:go install github.com/fencesandbox/fence/cmd/fence@latest
macOS / Linux:
curl -fsSL https://cli.fencesandbox.com/install.sh | sh
Homebrew (macOS):
brew tap fencesandbox/tap
brew install fencesandbox/tap/fence
Nix (macOS, Linux, Windows (WSL)):
nix run nixpkgs#fence -- --help
Dies führt es direkt aus dem Repository aus, ohne fence zu installieren. Wenn Sie es installieren möchten, folgen Sie den Richtlinien von NixOS oder nix-darwin.
Andere Installationsmethoden
Go install:
go install github.com/fencesandbox/fence/cmd/fence@latest
Aus dem Quellcode bauen:
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
Zusätzliche Anforderungen für Linux:
bubblewrap(für die Sandbox)socat(für Netzwerkbrücken)bpftrace(optional, für die Sichtbarkeit von Dateisystemverstößen bei Überwachung mit-m)
Verwendung
Grundlegend
# Run command with all network blocked (no domains allowed by default)
fence curl https://example.com
# Run with shell expansion
fence -c "echo hello && ls"
# Enable debug logging
fence -d curl https://example.com
# Use a template
fence -t code -- claude # Runs Claude Code using `code` template config
# Monitor mode (shows violations)
fence -m npm install
# Send Fence's own monitor/debug logs to a file
fence -m --fence-log-file /tmp/fence.log -- claude
tail -f /tmp/fence.log
# Inspect the config inheritance chain and active merged config
fence config show
# Show all commands and options
fence --help
[!TIP] Müssen Sie Flags an den auszuführenden Befehl übergeben? Verwenden Sie
--, um Fence-Flags von Befehlsflags zu trennen, zum Beispiel:fence -- claude --dangerously-skip-permissions
Konfiguration
Wenn --settings nicht angegeben ist, sucht Fence zunächst nach fence.jsonc (oder fence.json) im aktuellen Verzeichnis und in übergeordneten Verzeichnissen. Wird keine gefunden, wird auf ~/.config/fence/fence.{jsonc,json} zurückgegriffen. Beide Erweiterungen werden als JSONC behandelt (Kommentare und nachgestellte Kommas sind erlaubt). Siehe Konfigurationsreferenz für weitere Details.
{
"$schema": "https://raw.githubusercontent.com/fencesandbox/fence/main/docs/schema/fence.schema.json",
"extends": "code",
"network": { "allowedDomains": ["private.company.com"] },
"filesystem": { "allowWrite": ["."] },
"command": { "deny": ["git push", "npm publish"] }
}
Für repo-lokale Überschreibungen zusätzlich zur normalen Fence-Konfiguration jedes Benutzers verwenden Sie:
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
Verwenden Sie fence --settings ./custom.json, um eine andere Konfiguration anzugeben.
Überprüfen Sie die aktive Konfiguration, ohne einen Befehl auszuführen:
fence config show
fence config show --settings ./custom.json
fence config show --template code
fence config show gibt die Konfigurationskette an stderr und die vollständig aufgelöste Konfiguration als einfaches JSON an stdout aus, sodass Sie das JSON an Tools wie jq weiterleiten können.
Erstellen Sie eine Startkonfiguration mit sinnvollen Standardeinstellungen:
# Creates config at the default path with:
# { "extends": "code" }
fence config init
# Include scaffold arrays as editable hints
fence config init --scaffold
Import aus Claude Code
fence import --claude --save
Funktionen
- Netzwerkisolation – Alle ausgehenden Verbindungen standardmäßig blockiert; Domains über Konfiguration auf die Whitelist setzen
- Dateisystemeinschränkungen – Lese-/Schreibzugriffspfade steuern
- Befehlsblockierung – Gefährliche Befehle wie
rm -rf /,git pushablehnen - SSH-Befehlsfilterung – Steuern, welche Hosts und Befehle über SSH erlaubt sind
- Integrierte Vorlagen – Vorkonfigurierte Regelsets für gängige Arbeitsabläufe
- Verstoßüberwachung – Echtzeit-Protokollierung blockierter Anfragen (
-m) - Plattformübergreifend – macOS (sandbox-exec) + Linux (bubblewrap)
Fence kann als Go-Paket oder CLI-Tool verwendet werden.
Dokumentation
Die vollständige Dokumentation ist unter fencesandbox.com/docs verfügbar.
Schnellzugriff:
- Schnellstart (Quelle)
- Konfigurationsreferenz (Quelle)
- Agent-Hooks (Quelle)
- Sicherheitsmodell (Quelle)
- Go-Bibliotheksnutzung (Quelle)
- Architektur (Quelle)
Namensnennung
Inspiriert von Anthropics sandbox-runtime.