Voltar às atualizações
New releaseJul 26, 2026

fence v0.1.64

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

Compartilhar

Banner Fence

GitHub Release Build and test Docs Ask DeepWiki License

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

Demonstração do Fence Claude Code

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/fence para github.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/fence

Se 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:

Atribuição

Inspirado pelo sandbox-runtime da Anthropic.

Categorias