
fence v0.1.64
Ligero sandbox sin contenedores para ejecutar comandos con restricciones de red y sistema de archivos.

Fence envuelve comandos en un entorno aislado que bloquea el acceso a la red por defecto y restringe las operaciones del sistema de archivos según reglas configurables. Es muy útil para ejecutar código semiconfiable (instalaciones de paquetes, scripts de compilación, trabajos de CI, repositorios desconocidos) con efectos secundarios controlados, y también puede complementar a los agentes de codificación de IA como defensa en profundidad.
# Bloquear todo acceso a la red (por defecto)
fence curl https://example.com # → 403 Forbidden
# Permitir dominios específicos
fence -t code npm install # → usa la plantilla 'code' con npm/pypi/etc permitidos
# Bloquear comandos peligrosos
fence -c "rm -rf /" # → bloqueado por reglas de denegación de comandos
Fence también es un gestor de permisos para tus agentes de CLI. Funciona con agentes de codificación populares como Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory (Droid) CLI y muchos más — consulte agents.md.
Instalación
[!NOTA] Fence se ha trasladado de
github.com/Use-Tusk/fenceagithub.com/fencesandbox/fence. Si lo instaló con Homebrew desde el antiguo tap de Tusk, cambie al nuevo tap:brew uninstall use-tusk/tap/fence brew untap use-tusk/tap brew tap fencesandbox/tap brew install fencesandbox/tap/fenceSi lo instaló con
go install, reinstálelo desde la nueva ruta del 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
Esto lo ejecuta directamente desde el repositorio, sin instalar fence. Si desea instalarlo, siga las pautas de NixOS o nix-darwin.
Otros métodos de instalación
Instalar con Go:
go install github.com/fencesandbox/fence/cmd/fence@latest
Compilar desde el código fuente:
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
Requisitos adicionales para Linux:
bubblewrap(para el aislamiento)socat(para el puente de red)bpftrace(opcional, para visibilidad de violaciones del sistema de archivos al monitorear con-m)
Uso
Básico
# Ejecutar comando con toda la red bloqueada (ningún dominio permitido por defecto)
fence curl https://example.com
# Ejecutar con expansión del shell
fence -c "echo hello && ls"
# Habilitar registro de depuración
fence -d curl https://example.com
# Usar una plantilla
fence -t code -- claude # Ejecuta Claude Code usando la configuración de la plantilla `code`
# Modo monitoreo (muestra violaciones)
fence -m npm install
# Enviar los propios registros de monitoreo/depuración de Fence a un archivo
fence -m --fence-log-file /tmp/fence.log -- claude
tail -f /tmp/fence.log
# Inspeccionar la cadena de herencia de configuración y la configuración activa combinada
fence config show
# Mostrar todos los comandos y opciones
fence --help
[!CONSEJO] ¿Necesita pasar banderas al comando que está ejecutando? Use
--para separar las banderas de Fence de las del comando, por ejemplo:fence -- claude --dangerously-skip-permissions
Configuración
Cuando no se proporciona --settings, Fence primero busca fence.jsonc (o fence.json) en el directorio actual y directorios superiores. Si no encuentra ninguno, recurre a ~/.config/fence/fence.{jsonc,json}. Ambas extensiones se tratan como JSONC (se permiten comentarios y comas finales). Consulte la referencia de configuración para más detalles.
{
"$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 anulaciones locales del repositorio sobre la configuración normal de Fence de cada usuario, use:
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
Use fence --settings ./custom.json para especificar una configuración diferente.
Inspeccione la configuración activa sin ejecutar un comando:
fence config show
fence config show --settings ./custom.json
fence config show --template code
fence config show imprime la cadena de configuración en stderr y la configuración completamente resuelta como JSON plano en stdout, por lo que puede canalizar el JSON a herramientas como jq.
Cree una configuración inicial con valores predeterminados sensatos:
# Crea configuración en la ruta predeterminada con:
# { "extends": "code" }
fence config init
# Incluir arreglos de andamio como sugerencias editables
fence config init --scaffold
Importar desde Claude Code
fence import --claude --save
Características
- Aislamiento de red - Todo el tráfico saliente bloqueado por defecto; permita dominios mediante configuración
- Restricciones del sistema de archivos - Controle las rutas de acceso de lectura/escritura
- Bloqueo de comandos - Deniegue comandos peligrosos como
rm -rf /,git push - Filtrado de comandos SSH - Controle qué hosts y comandos están permitidos a través de SSH
- Plantillas integradas - Conjuntos de reglas preconfigurados para flujos de trabajo comunes
- Monitoreo de violaciones - Registro en tiempo real de solicitudes bloqueadas (
-m) - Multiplataforma - macOS (sandbox-exec) + Linux (bubblewrap)
Fence se puede usar como paquete Go o herramienta CLI.
Documentación
La documentación completa está alojada en fencesandbox.com/docs.
Enlaces rápidos:
- Inicio rápido (fuente)
- Referencia de Configuración (fuente)
- Hooks de Agente (fuente)
- Modelo de Seguridad (fuente)
- Uso como Biblioteca Go (fuente)
- Arquitectura (fuente)
Atribución
Inspirado en sandbox-runtime de Anthropic.