Retour aux mises à jour
New releaseJul 26, 2026

fence v0.1.64

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

Partager

Bannière Fence

GitHub Release Build and test Docs Ask DeepWiki License

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

Démonstration de Fence avec Claude Code

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.

Installer

[!NOTE] Fence a été déplacé de github.com/Use-Tusk/fence vers github.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/fence

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

Autres méthodes d'installation

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)

Utilisation

De base

# 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

Configuration

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

Importer depuis Claude Code

fence import --claude --save

Fonctionnalités

  • Isolement réseau – Tout le trafic sortant bloqué par défaut ; liste blanche de domaines via la configuration
  • Restrictions du système de fichiers – Contrôle des chemins d'accès en lecture/écriture
  • Blocage de commandes – Interdire les commandes dangereuses comme rm -rf /, git push
  • Filtrage des commandes SSH – Contrôle des hôtes et des commandes autorisés via SSH
  • Modèles intégrés – Ensembles de règles préconfigurés pour les flux de travail courants
  • Surveillance des violations – Journalisation en temps réel des requêtes bloquées (-m)
  • Multi‑plateforme – macOS (sandbox-exec) + Linux (bubblewrap)

Fence peut être utilisé comme paquet Go ou outil CLI.

Documentation

La documentation complète est hébergée sur fencesandbox.com/docs.

Liens rapides :

Attribution

Inspiré par le sandbox-runtime d'Anthropic.

Catégories