Fatos Principais
- Fence é uma ferramenta de linha de comando que envolve qualquer comando em um sandbox, bloqueando o acesso à rede por padrão e restringindo escritas no sistema de arquivos.
- A ferramenta utiliza tecnologias de sandboxing nativas do sistema operacional, especificamente sandbox-exec do macOS e bubblewrap do Linux, para impor o isolamento.
- O filtragem de rede é tratada através de um proxy local HTTP/SOCKS, que exige que as aplicações respeitem a variável de ambiente HTTP_PROXY.
- Originalmente foi desenvolvida para isolar serviços em teste durante replay de testes de API, bloqueando conexões localhost para forçar o uso de mocks.
- Fence oferece um modo de monitoramento que permite aos desenvolvedores ver o que seria bloqueado sem impor as restrições.
- A ferramenta pode importar conjuntos de permissões existentes de outras ferramentas, como Claude Code, usando um comando de importação específico.
Uma Nova Camada de Segurança para a Linha de Comando
Desenvolvedores frequentemente executam comandos que carregam riscos inerentes, desde instalar novos pacotes até executar scripts de repositórios desconhecidos. Uma nova ferramenta de linha de comando visa mitigar esses riscos envolvendo qualquer comando em um ambiente isolado.
Chamada Fence, a ferramenta bloqueia o acesso à rede por padrão e restringe escritas no sistema de arquivos. Isso cria um ambiente controlado para executar código, prevenindo efeitos colaterais não intencionais ou transmissão de dados não autorizada.
O objetivo principal é proporcionar uma rede de segurança para executar código semi-confiável. Seja um script de build, uma instalação de pacote ou uma ferramenta que possa "telefonar para casa", Fence oferece uma forma de executar esses comandos com comportamento previsível e limitado.
Funcionalidade Principal e Modos
Fence opera interceptando chamadas de sistema e solicitações de rede, isolando efetivamente o comando alvo do sistema hospedeiro. Por padrão, bloqueia todas as conexões de rede de saída e impede operações de escrita fora de um diretório designado.
A ferramenta oferece vários modos operacionais para diferentes cenários:
- Modo Padrão: Bloqueia todo o tráfego de rede e restringe escritas no sistema de arquivos.
- Modo de Modelo: Aplica regras pré-configuradas, como permitir registros específicos para gerenciadores de pacotes.
- Modo de Monitoramento: Executa o comando enquanto registra o que seria bloqueado, proporcionando visibilidade sem impor restrições.
Por exemplo, executar fence curl https://example.com resulta em uma conexão bloqueada. Em contraste, usando um modelo com fence -t code -- npm install permite acesso aos registros npm necessários enquanto mantém outras restrições.
"Percebi rapidamente que isso poderia ser uma ferramenta de propósito geral que também seria útil como um gerenciador de permissões entre agentes de CLI."
— Desenvolvedor do Fence
Arquitetura Técnica
A ferramenta aproveita tecnologias de isolação nativa do sistema operacional para impor o isolamento. No macOS, utiliza sandbox-exec, enquanto no Linux, depende de bubblewrap. Esses mecanismos subjacentes fornecem uma base sólida para restringir as capacidades do processo.
Para filtragem de rede, Fence emprega um proxy local HTTP/SOCKS. Este proxy intercepta solicitações de rede e aplica regras de filtragem baseadas em domínio. No entanto, essa abordagem tem uma limitação específica: exige que os programas sendo isolados respeitem a variável de ambiente HTTP_PROXY.
A arquitetura é projetada para ser leve e não intrusiva, usando utilitários do sistema padrão em vez de exigir módulos do kernel ou camadas de virtualização complexas.
Casos de Uso e Aplicações
A ferramenta foi originalmente concebida para resolver um problema específico em testes de API. O desenvolvedor por trás do Fence trabalha no Tusk Drift, um sistema para gravar e reproduzir tráfego real como testes de API. Durante a reprodução de testes, era necessário isolar o serviço em teste para bloquear conexões de saída localhost para bancos de dados como Postgres e Redis, forçando o aplicativo a usar mocks em vez de serviços reais.
Essa utilidade se estende a casos de uso mais amplos, especialmente com agentes de codificação de IA. Executar agentes com menos prompts interativos de permissão pode ser arriscado. Fence permite que desenvolvedores isolem esses agentes, reduzindo o risco de ações não intencionais.
Por exemplo, um agente pode ser executado com um comando como: fence -t code -- claude --dangerously-skip-permissions. Além disso, Fence pode importar conjuntos de permissões existentes, como os do Claude Code, usando o comando fence import --claude.
"Percebi rapidamente que isso poderia ser uma ferramenta de propósito geral que também seria útil como um gerenciador de permissões entre agentes de CLI."
Limitações e Considerações
Embora Fence forneça uma camada valiosa de segurança, não é uma bala de prata. A documentação afirma explicitamente que não é uma contenção forte contra malware. Código malicioso sofisticado pode encontrar maneiras de contornar a filtragem baseada em proxy ou explorar outras vulnerabilidades do sistema.
A dependência da filtragem baseada em proxy significa que aplicações que não honram a variável de ambiente HTTP_PROXY não terão seu tráfego de rede filtrado. Esta é uma consideração crítica para desenvolvedores avaliando a ferramenta para sua pilha específica.
Apesar dessas limitações, Fence representa um passo prático em direção a uma execução de linha de comando mais segura. Ela oferece um equilíbrio entre segurança e usabilidade, permitindo que desenvolvedores executem comandos necessários, mas potencialmente arriscados, com maior confiança.
Olhando para o Futuro
Fence aborda um ponto de dor comum nos fluxos de trabalho de desenvolvimento modernos: a necessidade de executar código não confiável ou semi-confiável sem comprometer a integridade do sistema. Ao fornecer uma interface simples de linha de comando para tecnologias de sandboxing poderosas, reduz a barreira de entrada para uma execução segura de código.
A ferramenta está atualmente disponível para macOS e Linux, cobrindo a maioria dos ambientes de desenvolvimento. Sua natureza de código aberto convida feedback da comunidade e contribuições potenciais para expandir suas capacidades.
À medida que os fluxos de trabalho de desenvolvimento incorporam cada vez mais agentes de IA e scripts de terceiros, ferramentas como Fence provavelmente se tornarão componentes essenciais de um kit de ferramentas de desenvolvimento seguro. O desenvolvedor está ativamente buscando feedback e casos de uso da comunidade.
Perguntas Frequentes
Qual é o principal propósito da ferramenta Fence?
Fence é projetada para executar comandos em um ambiente isolado, bloqueando o acesso à rede por padrão e restringindo escritas no sistema de arquivos. Isso permite que desenvolvedores executem código semi-confiável, como instalações de pacotes ou scripts de build, com efeitos colaterais controlados.
Como Fence realiza seu isolamento?
Ela aproveita tecnologias de isolamento nativas do sistema operacional: sandbox-exec do macOS e bubblewrap do Linux. Para filtragem de rede, usa um proxy local HTTP/SOCKS para bloquear ou permitir domínios específicos, embora isso exija que a aplicação alvo respeite as configurações de proxy.
Quais são os principais casos de uso para Fence?
A ferramenta é útil para executar agentes de codificação de IA com risco reduzido, executar repositórios desconhecidos com segurança e bloquear ferramentas que telefonam para casa. Foi especificamente criada para isolar serviços durante replay de testes de API, impedindo conexões com bancos de dados locais.
Quais são as limitações de Fence?
Não é considerada uma contenção forte contra malware sofisticado. Além disso, sua filtragem baseada em proxy só funciona se o programa sendo isolado respeitar a variável de ambiente HTTP_PROXY, o que não é universal.










