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

<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>
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.
```bash
# 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
```
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/11239/fcd1fc039e748ec60455ad0f3f2cba244840824dc0d96362d18fd29500e46206.gif" alt="Demostración de Fence Claude Code" width="800">
</p>
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](https://github.com/fencesandbox/fence/blob/main/docs/agents.md).
## Instalación
> [!NOTA]
> Fence se ha trasladado de `github.com/Use-Tusk/fence` a `github.com/fencesandbox/fence`.
> Si lo instaló con Homebrew desde el antiguo tap de Tusk, cambie al nuevo tap:
>
> ```bash
> brew uninstall use-tusk/tap/fence
> brew untap use-tusk/tap
> brew tap fencesandbox/tap
> brew install fencesandbox/tap/fence
> ```
>
> Si lo instaló con `go install`, reinstálelo desde la nueva ruta del 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
```
Esto lo ejecuta directamente desde el repositorio, sin instalar `fence`. Si desea instalarlo, siga las pautas de [NixOS](https://nix.dev) o [nix-darwin](https://github.com/nix-darwin/nix-darwin).
<details>
<summary>Otros métodos de instalación</summary>
**Instalar con Go:**
```bash
go install github.com/fencesandbox/fence/cmd/fence@latest
```
**Compilar desde el código fuente:**
```bash
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
```
</details>
**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
```bash
# 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:
>
> ```bash
> 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](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md) para más detalles.
```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 anulaciones locales del repositorio sobre la configuración normal de Fence de cada usuario, use:
```json
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
```
Use `fence --settings ./custom.json` para especificar una configuración diferente.
Inspeccione la configuración activa sin ejecutar un comando:
```bash
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:
```bash
# 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
```bash
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](https://fencesandbox.com/docs)**.
Enlaces rápidos:
- [Inicio rápido](https://fencesandbox.com/docs/quickstart) ([fuente](https://github.com/fencesandbox/fence/blob/main/docs/quickstart.md))
- [Referencia de Configuración](https://fencesandbox.com/docs/reference/configuration) ([fuente](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md))
- [Hooks de Agente](https://fencesandbox.com/docs/guides/hooks) ([fuente](https://github.com/fencesandbox/fence/blob/main/docs/hooks.md))
- [Modelo de Seguridad](https://fencesandbox.com/docs/reference/security-model) ([fuente](https://github.com/fencesandbox/fence/blob/main/docs/security-model.md))
- [Uso como Biblioteca Go](https://fencesandbox.com/docs/reference/library) ([fuente](https://github.com/fencesandbox/fence/blob/main/docs/library.md))
- [Arquitectura](https://fencesandbox.com/docs/reference/architecture) ([fuente](https://github.com/fencesandbox/fence/blob/main/ARCHITECTURE.md))
## Atribución
Inspirado en [sandbox-runtime](https://github.com/anthropic-experimental/sandbox-runtime) de Anthropic.