
fence v0.1.64
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.
Instalação
[!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.
Outros métodos de instalação
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)
Uso
Básico
# 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
Configuração
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
Importar do Claude Code
fence import --claude --save
Funcionalidades
- Isolamento de rede – Todo tráfego de saída bloqueado por padrão; domínios na lista de permissões via configuração
- Restrições do sistema de arquivos – Controle caminhos de acesso de leitura/escrita
- Bloqueio de comandos – Negue comandos perigosos como
rm -rf /,git push - Filtragem de comandos SSH – Controle quais hosts e comandos são permitidos via SSH
- Modelos integrados – Conjuntos de regras pré‑configurados para fluxos de trabalho comuns
- Monitoramento de violações – Registro em tempo real de requisições bloqueadas (
-m) - Multiplataforma – macOS (sandbox-exec) + Linux (bubblewrap)
O Fence pode ser usado como um pacote Go ou ferramenta de CLI.
Documentação
A documentação completa está hospedada em fencesandbox.com/docs.
Links rápidos:
- Guia Rápido (fonte)
- Referência de Configuração (fonte)
- Hooks do Agente (fonte)
- Modelo de Segurança (fonte)
- Uso da Biblioteca Go (fonte)
- Arquitetura (fonte)
Atribuição
Inspirado pelo sandbox-runtime da Anthropic.