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

<div align="center">

[](https://github.com/fencesandbox/fence/actions/workflows/main.yml)
[](https://fencesandbox.com/docs)
[](https://deepwiki.com/fencesandbox/fence)
[](https://opensource.org/licenses/Apache-2.0)
</div>
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.
```bash
# 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
```
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/11239/fcd1fc039e748ec60455ad0f3f2cba244840824dc0d96362d18fd29500e46206.gif" alt="Demonstração do Fence Claude Code" width="800">
</p>
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](https://github.com/fencesandbox/fence/blob/main/docs/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:
>
> ```bash
> 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:
>
> ```bash
> go install github.com/fencesandbox/fence/cmd/fence@latest
> ```
**macOS / Linux:**
```bash
curl -fsSL https://cli.fencesandbox.com/install.sh | sh
```
**Homebrew (macOS):**
```bash
brew tap fencesandbox/tap
brew install fencesandbox/tap/fence
```
**Nix (macOS, Linux, Windows (WSL)):**
```sh
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](https://nix.dev) ou [nix-darwin](https://github.com/nix-darwin/nix-darwin).
<details>
<summary>Outros métodos de instalação</summary>
**Go install:**
```bash
go install github.com/fencesandbox/fence/cmd/fence@latest
```
**Build a partir do código-fonte:**
```bash
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
```
</details>
**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
```bash
# 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:
>
> ```bash
> 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](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md) para mais detalhes.
```json
{
"$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:
```json
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
```
Use `fence --settings ./custom.json` para especificar uma configuração diferente.
Inspecione a configuração ativa sem executar um comando:
```bash
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:
```bash
# 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
```bash
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](https://fencesandbox.com/docs)**.
Links rápidos:
- [Guia Rápido](https://fencesandbox.com/docs/quickstart) ([fonte](https://github.com/fencesandbox/fence/blob/main/docs/quickstart.md))
- [Referência de Configuração](https://fencesandbox.com/docs/reference/configuration) ([fonte](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md))
- [Hooks do Agente](https://fencesandbox.com/docs/guides/hooks) ([fonte](https://github.com/fencesandbox/fence/blob/main/docs/hooks.md))
- [Modelo de Segurança](https://fencesandbox.com/docs/reference/security-model) ([fonte](https://github.com/fencesandbox/fence/blob/main/docs/security-model.md))
- [Uso da Biblioteca Go](https://fencesandbox.com/docs/reference/library) ([fonte](https://github.com/fencesandbox/fence/blob/main/docs/library.md))
- [Arquitetura](https://fencesandbox.com/docs/reference/architecture) ([fonte](https://github.com/fencesandbox/fence/blob/main/ARCHITECTURE.md))
## Atribuição
Inspirado pelo [sandbox-runtime](https://github.com/anthropic-experimental/sandbox-runtime) da Anthropic.