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

<div align="center">

[](https://github.com/fencesandbox/fence/actions/workflows/main.yml)
[](https://fencesandbox.com/docs)
[](https://deepwiki.com/fencesandbox/fence)
[](https://opensource.org/licenses/Apache-2.0)
</div>
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.
```bash
# 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
```
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/11239/fcd1fc039e748ec60455ad0f3f2cba244840824dc0d96362d18fd29500e46206.gif" alt="Fence Claude Code demo" width="800">
</p>
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](https://github.com/fencesandbox/fence/blob/main/docs/agents.md).
## Installieren
> [!NOTE]
> Fence wurde von `github.com/Use-Tusk/fence` nach `github.com/fencesandbox/fence` verschoben.
> Wenn Sie es mit Homebrew aus dem alten Tusk-Tap installiert haben, wechseln Sie zum neuen Tap:
>
> ```bash
> brew uninstall use-tusk/tap/fence
> brew untap use-tusk/tap
> brew tap fencesandbox/tap
> brew install fencesandbox/tap/fence
> ```
>
> Wenn Sie es mit `go install` installiert haben, installieren Sie es erneut mit dem neuen Modulpfad:
>
> ```bash
> go install github.com/fencesandbox/fence/cmd/fence@latest
> ```
**macOS / Linux:**
```bash
curl -fsSL https://cli.fencesandbox.com/install.sh | sh
```
**Homebrew (macOS):**
```bash
brew tap fencesandbox/tap
brew install fencesandbox/tap/fence
```
**Nix (macOS, Linux, Windows (WSL)):**
```sh
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](https://nix.dev) oder [nix-darwin](https://github.com/nix-darwin/nix-darwin).
<details>
<summary>Andere Installationsmethoden</summary>
**Go install:**
```bash
go install github.com/fencesandbox/fence/cmd/fence@latest
```
**Aus dem Quellcode bauen:**
```bash
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
```
</details>
**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
```bash
# 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:
>
> ```bash
> 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](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md) für weitere Details.
```json
{
"$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:
```json
{
"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:
```bash
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:
```bash
# 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
```bash
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 push` ablehnen
- **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](https://fencesandbox.com/docs)** verfügbar.
Schnellzugriff:
- [Schnellstart](https://fencesandbox.com/docs/quickstart) ([Quelle](https://github.com/fencesandbox/fence/blob/main/docs/quickstart.md))
- [Konfigurationsreferenz](https://fencesandbox.com/docs/reference/configuration) ([Quelle](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md))
- [Agent-Hooks](https://fencesandbox.com/docs/guides/hooks) ([Quelle](https://github.com/fencesandbox/fence/blob/main/docs/hooks.md))
- [Sicherheitsmodell](https://fencesandbox.com/docs/reference/security-model) ([Quelle](https://github.com/fencesandbox/fence/blob/main/docs/security-model.md))
- [Go-Bibliotheksnutzung](https://fencesandbox.com/docs/reference/library) ([Quelle](https://github.com/fencesandbox/fence/blob/main/docs/library.md))
- [Architektur](https://fencesandbox.com/docs/reference/architecture) ([Quelle](https://github.com/fencesandbox/fence/blob/main/ARCHITECTURE.md))
## Namensnennung
Inspiriert von Anthropics [sandbox-runtime](https://github.com/anthropic-experimental/sandbox-runtime).