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

<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 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à.
```bash
# 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
```
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/11239/fcd1fc039e748ec60455ad0f3f2cba244840824dc0d96362d18fd29500e46206.gif" alt="Demo di Fence con Claude Code" width="800">
</p>
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](https://github.com/fencesandbox/fence/blob/main/docs/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:
>
> ```bash
> 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:
>
> ```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
```
Questo lo esegue direttamente dal repository, senza installare `fence`. Se desideri installarlo, segui le linee guida [da NixOS](https://nix.dev) o [nix-darwin](https://github.com/nix-darwin/nix-darwin).
<details>
<summary>Altri metodi di installazione</summary>
**Go install:**
```bash
go install github.com/fencesandbox/fence/cmd/fence@latest
```
**Compila dal sorgente:**
```bash
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
```
</details>
**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
```bash
# 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:
>
> ```bash
> 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](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md) per maggiori dettagli.
```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"] }
}
```
Per sovrascritture locali al repository sopra la normale configurazione di Fence di ogni utente, usa:
```json
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
```
Usa `fence --settings ./custom.json` per specificare una configurazione diversa.
Ispeziona la configurazione attiva senza eseguire un comando:
```bash
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:
```bash
# 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
```bash
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](https://fencesandbox.com/docs)**.
Collegamenti rapidi:
- [Guida rapida](https://fencesandbox.com/docs/quickstart) ([sorgente](https://github.com/fencesandbox/fence/blob/main/docs/quickstart.md))
- [Riferimento configurazione](https://fencesandbox.com/docs/reference/configuration) ([sorgente](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md))
- [Hook per agenti](https://fencesandbox.com/docs/guides/hooks) ([sorgente](https://github.com/fencesandbox/fence/blob/main/docs/hooks.md))
- [Modello di sicurezza](https://fencesandbox.com/docs/reference/security-model) ([sorgente](https://github.com/fencesandbox/fence/blob/main/docs/security-model.md))
- [Utilizzo della libreria Go](https://fencesandbox.com/docs/reference/library) ([sorgente](https://github.com/fencesandbox/fence/blob/main/docs/library.md))
- [Architettura](https://fencesandbox.com/docs/reference/architecture) ([sorgente](https://github.com/fencesandbox/fence/blob/main/ARCHITECTURE.md))
## Attribuzione
Ispirato da [sandbox-runtime](https://github.com/anthropic-experimental/sandbox-runtime) di Anthropic.