
Sandbox leggero, senza container, per eseguire comandi con restrizioni di rete e filesystem.

Fence racchiude i comandi in una sandbox che blocca l'accesso alla rete per impostazione predefinita e limita le operazioni sul filesystem in base a regole configurabili. È particolarmente utile per eseguire codice semi-affidabile (installazioni di pacchetti, script di build, job CI, repository sconosciuti) con effetti collaterali controllati, e può anche integrare gli agenti di codifica AI come difesa in profondità.
# Blocca tutto l'accesso alla rete (default)
fence curl https://example.com # → 403 Forbidden
# Consenti domini specifici
fence -t code npm install # → usa il template 'code' con npm/pypi/etc consentiti
# Blocca comandi pericolosi
fence -c "rm -rf /" # → bloccato dalle regole di divieto dei comandi
Fence è anche un gestore di permessi per i tuoi agenti CLI. Funziona con agenti di codifica popolari come Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory (Droid) CLI e molti altri - vedi agents.md.
[!NOTE] Fence è stato spostato da
github.com/Use-Tusk/fenceagithub.com/fencesandbox/fence. Se lo hai installato con Homebrew dal vecchio tap Tusk, passa al nuovo tap:brew uninstall use-tusk/tap/fence brew untap use-tusk/tap brew tap fencesandbox/tap brew install fencesandbox/tap/fenceSe lo hai installato con
go install, reinstallalo dal nuovo percorso del modulo: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
Questo lo esegue direttamente dal repository, senza installare fence. Se desideri installarlo, segui le linee guida da NixOS o nix-darwin.
Go install:
go install github.com/fencesandbox/fence/cmd/fence@latest
Compila dal sorgente:
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
Requisiti aggiuntivi per Linux:
bubblewrap (per la sandbox)socat (per il bridging di rete)bpftrace (opzionale, per la visibilità delle violazioni del filesystem durante il monitoraggio con -m)# Esegui comando con rete bloccata (nessun dominio consentito di default)
fence curl https://example.com
# Esegui con espansione della shell
fence -c "echo hello && ls"
# Abilita log di debug
fence -d curl https://example.com
# Usa un template
fence -t code -- claude # Esegue Claude Code usando la configurazione del template 'code'
# Modalità monitor (mostra le violazioni)
fence -m npm install
# Invia i log di monitoraggio/debug di Fence a un file
fence -m --fence-log-file /tmp/fence.log -- claude
tail -f /tmp/fence.log
# Ispeziona la catena di ereditarietà della configurazione e la configurazione attiva unita
fence config show
# Mostra tutti i comandi e le opzioni
fence --help
[!TIP] Devi passare flag al comando che stai eseguendo? Usa
--per separare i flag di Fence dai flag del comando, ad esempio:fence -- claude --dangerously-skip-permissions
Quando --settings non viene fornito, Fence cerca prima fence.jsonc (o fence.json) nella directory corrente e nelle directory padre. Se non ne trova nessuno, torna a ~/.config/fence/fence.{jsonc,json}. Entrambe le estensioni sono trattate come JSONC (commenti e virgole finali consentiti). Vedi riferimento configurazione per maggiori dettagli.
{
"$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"] }
}
Per sovrascritture locali al repository sopra la normale configurazione di Fence di ogni utente, usa:
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
Usa fence --settings ./custom.json per specificare una configurazione diversa.
Ispeziona la configurazione attiva senza eseguire un comando:
fence config show
fence config show --settings ./custom.json
fence config show --template code
fence config show stampa la catena di configurazione su stderr e la configurazione completamente risolta come JSON semplice su stdout, in modo da poter reindirizzare il JSON a strumenti come jq.
Crea una configurazione iniziale con impostazioni predefinite ragionevoli:
# Crea la configurazione nel percorso predefinito con:
# { "extends": "code" }
fence config init
# Includi array di scaffold come suggerimenti modificabili
fence config init --scaffold
fence import --claude --save
rm -rf /, git push-m)Fence può essere utilizzato come pacchetto Go o strumento CLI.
La documentazione completa è ospitata su fencesandbox.com/docs.
Collegamenti rapidi:
Ispirato da sandbox-runtime di Anthropic.