
Sandbox léger, sans conteneur, pour exécuter des commandes avec des restrictions réseau et de système de fichiers.

Fence encapsule les commandes dans un bac à sable qui bloque l'accès réseau par défaut et restreint les opérations sur le système de fichiers en fonction de règles configurables. Il est très utile pour exécuter du code semi‑fiable (installations de paquets, scripts de build, jobs CI, dépôts inconnus) avec des effets de bord contrôlés, et peut également compléter les agents de codage IA comme défense en profondeur.
# Bloquer tout accès réseau (par défaut)
fence curl https://example.com # → 403 Interdit
# Autoriser des domaines spécifiques
fence -t code npm install # → utilise le modèle 'code' qui autorise npm/pypi/etc.
# Bloquer les commandes dangereuses
fence -c "rm -rf /" # → bloqué par les règles d'interdiction de commandes
Fence est aussi un gestionnaire de permissions pour vos agents CLI. Fonctionne avec les agents de codage populaires comme Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory (Droid) CLI et bien d'autres – voir agents.md.
[!NOTE] Fence a été déplacé de
github.com/Use-Tusk/fenceversgithub.com/fencesandbox/fence. Si vous avez installé avec Homebrew depuis l'ancien dépôt Tusk, basculez vers le nouveau dépôt :brew uninstall use-tusk/tap/fence brew untap use-tusk/tap brew tap fencesandbox/tap brew install fencesandbox/tap/fenceSi vous avez installé avec
go install, réinstallez depuis le nouveau module :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
Cette commande exécute Fence directement depuis le dépôt, sans l'installer. Pour l'installer, suivez les instructions de NixOS ou nix-darwin.
Go install :
go install github.com/fencesandbox/fence/cmd/fence@latest
Compiler depuis les sources :
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
Prérequis supplémentaires pour Linux :
bubblewrap (pour le bac à sable)socat (pour le pont réseau)bpftrace (optionnel, pour la visibilité des violations du système de fichiers lors de la surveillance avec -m)# Exécuter une commande avec tout le réseau bloqué (aucun domaine autorisé par défaut)
fence curl https://example.com
# Exécuter avec expansion du shell
fence -c "echo hello && ls"
# Activer les logs de débogage
fence -d curl https://example.com
# Utiliser un modèle
fence -t code -- claude # Exécute Claude Code avec la configuration du modèle `code`
# Mode surveillance (affiche les violations)
fence -m npm install
# Envoyer les logs de surveillance/débogage de Fence vers un fichier
fence -m --fence-log-file /tmp/fence.log -- claude
tail -f /tmp/fence.log
# Inspecter la chaîne d'héritage de la configuration et la configuration active fusionnée
fence config show
# Afficher toutes les commandes et options
fence --help
[!TIP] Besoin de passer des options à la commande que vous exécutez ? Utilisez
--pour séparer les options de Fence des options de la commande, par exemple :fence -- claude --dangerously-skip-permissions
Lorsque --settings n'est pas fourni, Fence cherche d'abord fence.jsonc (ou fence.json) dans le répertoire courant et les répertoires parents. Si aucun n'est trouvé, il utilise ~/.config/fence/fence.{jsonc,json} par défaut. Les deux extensions sont traitées comme du JSONC (les commentaires et les virgules finales sont autorisés). Voir la référence de configuration pour plus de détails.
{
"$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"] }
}
Pour des surcharges locales à un dépôt au‑dessus de la configuration normale de chaque utilisateur, utilisez :
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
Utilisez fence --settings ./custom.json pour spécifier une configuration différente.
Inspectez la configuration active sans exécuter de commande :
fence config show
fence config show --settings ./custom.json
fence config show --template code
fence config show affiche la chaîne de configuration sur stderr et la configuration entièrement résolue en JSON brut sur stdout, afin que vous puissiez rediriger le JSON vers des outils comme jq.
Créez une configuration de démarrage avec des valeurs par défaut raisonnables :
# Crée une configuration au chemin par défaut avec :
# { "extends": "code" }
fence config init
# Inclut des tableaux d'échafaudage comme indications modifiables
fence config init --scaffold
fence import --claude --save
rm -rf /, git push-m)Fence peut être utilisé comme paquet Go ou outil CLI.
La documentation complète est hébergée sur fencesandbox.com/docs.
Liens rapides :
Inspiré par le sandbox-runtime d'Anthropic.