Torna agli aggiornamenti
New releaseJul 26, 2026

fence v0.1.64

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

Condividi

Fence Banner

GitHub Release Build and test Docs Ask DeepWiki License

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

Demo di Fence con Claude Code

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.

Installazione

[!NOTE] Fence è stato spostato da github.com/Use-Tusk/fence a github.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/fence

Se 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.

Altri metodi di installazione

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)

Utilizzo

Base

# 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

Configurazione

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

Importa da Claude Code

fence import --claude --save

Funzionalità

  • Isolamento di rete - Tutto il traffico in uscita bloccato di default; domini consentiti tramite configurazione
  • Restrizioni del filesystem - Controllo dei percorsi di lettura/scrittura
  • Blocco dei comandi - Impedisci comandi pericolosi come rm -rf /, git push
  • Filtraggio dei comandi SSH - Controlla quali host e comandi sono consentiti tramite SSH
  • Template integrati - Set di regole preconfigurate per flussi di lavoro comuni
  • Monitoraggio delle violazioni - Log in tempo reale delle richieste bloccate (-m)
  • Multipiattaforma - macOS (sandbox-exec) + Linux (bubblewrap)

Fence può essere utilizzato come pacchetto Go o strumento CLI.

Documentazione

La documentazione completa è ospitata su fencesandbox.com/docs.

Collegamenti rapidi:

Attribuzione

Ispirato da sandbox-runtime di Anthropic.

Categorie