Hechos Clave
- Fence es una herramienta de línea de comandos que envuelve cualquier comando en un sandbox, bloqueando el acceso a la red por defecto y restringiendo las escrituras en el sistema de archivos.
- La herramienta utiliza tecnologías de sandboxing nativas del sistema operativo, específicamente sandbox-exec de macOS y bubblewrap de Linux, para aplicar el aislamiento.
- El filtrado de red se maneja a través de un proxy local HTTP/SOCKS, que requiere que las aplicaciones respeten la variable de entorno HTTP_PROXY.
- Fue desarrollado originalmente para sandboxizar servicios bajo prueba durante las repeticiones de pruebas de API, bloqueando conexiones localhost para forzar el uso de mocks.
- Fence ofrece un modo de monitor que permite a los desarrolladores ver qué se bloquearía sin aplicar realmente las restricciones.
- La herramienta puede importar conjuntos de permisos existentes de otras herramientas, como Claude Code, usando un comando de importación específico.
Una Nueva Capa de Seguridad para la Línea de Comandos
Los desarrolladores frecuentemente ejecutan comandos que conllevan riesgos inherentes, desde instalar nuevos paquetes hasta ejecutar scripts de repositorios desconocidos. Una nueva herramienta de línea de comandos busca mitigar estos riesgos envolviendo cualquier comando en un entorno sandbox.
Conocida como Fence, la herramienta bloquea el acceso a la red por defecto y restringe las escrituras en el sistema de archivos. Esto crea un entorno controlado para ejecutar código, previniendo efectos secundarios no deseados o transmisiones de datos no autorizadas.
El objetivo principal es proporcionar una red de seguridad para ejecutar código semi-confiable. Ya sea un script de construcción, una instalación de paquete o una herramienta que podría "llamar a casa", Fence ofrece una manera de ejecutar estos comandos con un comportamiento predecible y limitado.
Funcionalidad Central y Modos
Fence opera interceptando llamadas del sistema y solicitudes de red, aislando efectivamente el comando objetivo del sistema anfitrión. Por defecto, bloquea todas las conexiones de red salientes y previene operaciones de escritura fuera de un directorio designado.
La herramienta ofrece varios modos operativos para adaptarse a diferentes escenarios:
- Modo Predeterminado: Bloquea todo el tráfico de red y restringe las escrituras en el sistema de archivos.
- Modo de Plantilla: Aplica reglas preconfiguradas, como permitir registros específicos para gestores de paquetes.
- Modo de Monitor: Ejecuta el comando mientras registra lo que se bloquearía, proporcionando visibilidad sin aplicar restricciones.
Por ejemplo, ejecutar fence curl https://example.com resulta en una conexión bloqueada. En contraste, usar una plantilla con fence -t code -- npm install permite el acceso a los registros de npm necesarios mientras mantiene otras restricciones.
"Me di cuenta rápidamente de que esto podría ser una herramienta de propósito general que también sería útil como un gestor de permisos para agentes de CLI."
— Desarrollador de Fence
Arquitectura Técnica
La herramienta aprovecha tecnologías de sandboxing nativas del sistema operativo para aplicar el aislamiento. En macOS, utiliza sandbox-exec, mientras que en Linux, depende de bubblewrap. Estos mecanismos subyacentes proporcionan una base sólida para restringir las capacidades del proceso.
Para el filtrado de red, Fence emplea un proxy local HTTP/SOCKS. Este proxy intercepta las solicitudes de red y aplica reglas de filtrado basadas en dominios. Sin embargo, este enfoque tiene una limitación específica: requiere que los programas que se sandboxan respeten la variable de entorno HTTP_PROXY.
La arquitectura está diseñada para ser ligera y no intrusiva, utilizando utilidades del sistema estándar en lugar de requerir módulos del kernel o capas de virtualización complejas.
Casos de Uso y Aplicaciones
La herramienta fue concebida originalmente para resolver un problema específico en las pruebas de API. El desarrollador detrás de Fence trabaja en Tusk Drift, un sistema para grabar y reproducir tráfico real como pruebas de API. Durante las repeticiones de pruebas, era necesario sandboxizar el servicio bajo prueba para bloquear conexiones salientes de localhost a bases de datos como Postgres y Redis, forzando a la aplicación a usar mocks en lugar de servicios reales.
Esta utilidad se extiende a casos de uso más amplios, particularmente con agentes de codificación de IA. Ejecutar agentes con menos solicitudes de permisos interactivas puede ser arriesgado. Fence permite a los desarrolladores sandboxizar estos agentes, reduciendo el riesgo de acciones no deseadas.
Por ejemplo, un agente puede ejecutarse con un comando como: fence -t code -- claude --dangerously-skip-permissions. Además, Fence puede importar conjuntos de permisos existentes, como los de Claude Code, usando el comando fence import --claude.
"Me di cuenta rápidamente de que esto podría ser una herramienta de propósito general que también sería útil como un gestor de permisos para agentes de CLI."
Limitaciones y Consideraciones
Aunque Fence proporciona una valiosa capa de seguridad, no es una solución mágica. La documentación afirma explícitamente que no es un contenedor fuerte contra malware. El código malicioso sofisticado puede encontrar formas de eludir el filtrado basado en proxy o explotar otras vulnerabilidades del sistema.
La dependencia del filtrado basado en proxy significa que las aplicaciones que no respeten la variable de entorno HTTP_PROXY no tendrán su tráfico de red filtrado. Esta es una consideración crítica para los desarrolladores que evalúan la herramienta para su pila específica.
A pesar de estas limitaciones, Fence representa un paso práctico hacia una ejecución más segura de la línea de comandos. Ofrece un equilibrio entre seguridad y usabilidad, permitiendo a los desarrolladores ejecutar comandos necesarios pero potencialmente riesgosos con mayor confianza.
Viendo Hacia el Futuro
Fence aborda un punto de dolor común en los flujos de trabajo de desarrollo modernos: la necesidad de ejecutar código no confiable o semi-confiable sin comprometer la integridad del sistema. Al proporcionar una interfaz simple de línea de comandos a tecnologías de sandboxing poderosas, reduce la barrera de entrada para una ejecución segura de código.
La herramienta está actualmente disponible para macOS y Linux, cubriendo la mayoría de los entornos de desarrollo. Su naturaleza de código abierto invita a la retroalimentación de la comunidad y a posibles contribuciones para expandir sus capacidades.
A medida que los flujos de trabajo de desarrollo incorporan cada vez más agentes de IA y scripts de terceros, herramientas como Fence probablemente se convertirán en componentes esenciales de un kit de herramientas de desarrollo seguro. El desarrollador está buscando activamente retroalimentación y casos de uso de la comunidad.
Preguntas Frecuentes
¿Cuál es el propósito principal de la herramienta Fence?
Fence está diseñada para ejecutar comandos en un entorno sandbox, bloqueando el acceso a la red por defecto y restringiendo las escrituras en el sistema de archivos. Esto permite a los desarrolladores ejecutar código semi-confiable, como instalaciones de paquetes o scripts de construcción, con efectos secundarios controlados.
¿Cómo logra Fence su sandboxing?
Aprovecha tecnologías de sandboxing nativas del sistema operativo: sandbox-exec de macOS y bubblewrap de Linux. Para el filtrado de red, utiliza un proxy local HTTP/SOCKS para bloquear o permitir dominios específicos, aunque esto requiere que la aplicación objetivo respete la configuración del proxy.
¿Cuáles son los casos de uso principales para Fence?
La herramienta es útil para ejecutar agentes de codificación de IA con menor riesgo, ejecutar repositorios desconocidos de forma segura y bloquear herramientas que "llaman a casa". Fue creada específicamente para sandboxizar servicios durante las repeticiones de pruebas de API, previniendo conexiones a bases de datos locales.
¿Cuáles son las limitaciones de Fence?
No se considera un contenedor fuerte contra malware sofisticado. Además, su filtrado basado en proxy solo funciona si el programa que se sandboxa respeta la variable de entorno HTTP_PROXY, lo cual no es universal.










