
Sandbox leve, sem contêiner, para executar comandos com restrições de rede e sistema de arquivos.

O Fence envolve comandos em um sandbox que bloqueia o acesso à rede por padrão e restringe operações do sistema de arquivos com base em regras configuráveis. É mais útil para executar código semiconfiável (instalações de pacotes, scripts de build, jobs de CI, repositórios desconhecidos) com efeitos colaterais controlados, e também pode complementar agentes de codificação de IA como defesa em profundidade.
# Bloquear todo o acesso à rede (padrão)
fence curl https://example.com # → 403 Forbidden
# Permitir domínios específicos
fence -t code npm install # → usa o template 'code' com npm/pypi/etc permitidos
# Bloquear comandos perigosos
fence -c "rm -rf /" # → bloqueado por regras de negação de comando
O Fence é também um gerenciador de permissões para seus agentes de CLI. Funciona com agentes de codificação populares como Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory (Droid) CLI e muitos mais – veja agents.md.
[!NOTE] O Fence foi movido de
github.com/Use-Tusk/fenceparagithub.com/fencesandbox/fence. Se você instalou com Homebrew a partir do antigo tap Tusk, mude para o novo tap:brew uninstall use-tusk/tap/fence brew untap use-tusk/tap brew tap fencesandbox/tap brew install fencesandbox/tap/fenceSe você instalou com
go install, reinstale a partir do novo caminho do módulo: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
Isso executa diretamente do repositório, sem instalar o fence. Se quiser instalá-lo, siga as orientações do NixOS ou nix-darwin.
Go install:
go install github.com/fencesandbox/fence/cmd/fence@latest
Build a partir do código-fonte:
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
Requisitos adicionais para Linux:
bubblewrap (para sandboxing)socat (para bridge de rede)bpftrace (opcional, para visibilidade de violações do sistema de arquivos ao monitorar com -m)# Executar comando com toda a rede bloqueada (nenhum domínio permitido por padrão)
fence curl https://example.com
# Executar com expansão do shell
fence -c "echo hello && ls"
# Habilitar registro de depuração
fence -d curl https://example.com
# Usar um template
fence -t code -- claude # Executa Claude Code usando a configuração do template 'code'
# Modo monitor (mostra violações)
fence -m npm install
# Enviar logs próprios de monitor/depuração do Fence para um arquivo
fence -m --fence-log-file /tmp/fence.log -- claude
tail -f /tmp/fence.log
# Inspecionar a cadeia de herança de configuração e a configuração mesclada ativa
fence config show
# Mostrar todos os comandos e opções
fence --help
[!TIP] Precisa passar flags para o comando que está executando? Use
--para separar flags do Fence das flags do comando, por exemplo:fence -- claude --dangerously-skip-permissions
Quando --settings não é fornecido, o Fence primeiro procura por fence.jsonc (ou fence.json) no diretório atual e diretórios pai. Se nenhum for encontrado, ele usa o fallback para ~/.config/fence/fence.{jsonc,json}. Ambas as extensões são tratadas como JSONC (comentários e vírgulas finais são permitidos). Veja a referência de configuração para mais detalhes.
{
"$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"] }
}
Para sobrescritas locais do repositório sobre a configuração normal do Fence de cada usuário, use:
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
Use fence --settings ./custom.json para especificar uma configuração diferente.
Inspecione a configuração ativa sem executar um comando:
fence config show
fence config show --settings ./custom.json
fence config show --template code
fence config show imprime a cadeia de configuração para stderr e a configuração totalmente resolvida como JSON simples para stdout, para que você possa canalizar o JSON para ferramentas como jq.
Crie uma configuração inicial com valores padrão sensatos:
# Cria configuração no caminho padrão com:
# { "extends": "code" }
fence config init
# Incluir arrays de scaffold como dicas editáveis
fence config init --scaffold
fence import --claude --save
rm -rf /, git push-m)O Fence pode ser usado como um pacote Go ou ferramenta de CLI.
A documentação completa está hospedada em fencesandbox.com/docs.
Links rápidos:
Inspirado pelo sandbox-runtime da Anthropic.