La capa de seguridad de ejecución para la Era de los Agentes. Proporcionando gobernanza determinista "Sudo" y registros de auditoría para agentes de IA autónomos.
¿Qué hizo realmente tu agente de IA? Descúbrelo.
Node9 se sitúa entre tu agente de IA y las herramientas que puede usar: lo que ya ha estado haciendo, contra acciones arriesgadas en tiempo real y lo que ocurrió en cualquier ventana de tiempo.
```bash node9 monitor # press [2] for Report view node9 report --period 7d # CLI form, no TUI ``` ## Instalación```bash # macOS / Linux brew tap node9-ai/node9 && brew install node9Funciona con Claude Code · Codex CLI · Antigravity (agy) · GitHub Copilot CLI · Gemini CLI · Cursor · Windsurf · VSCode · Claude Desktop · Opencode · Pi · Hermes Agent · cualquier servidor MCP.
rm -rf, git push --force, DROP TABLE, lecturas de credenciales, curl | bash, fugas de claves de AWS/GitHub/StripeEsta es mi propia máquina — 90 días mientras construía Node9. Puntuación 25/100, 5 archivos de credenciales a los que un agente de IA podría acceder ahora mismo.```bash npx node9-ai scan # before installation, runs in ~10s, nothing uploads node9 scan # after installation, same output
<p align="center">
Node9 scan scorecard
</p>
## Panel de puntuación de la postura de seguridad
`node9 posture` evalúa el grado de exposición de esta máquina ante un agente comprometido — aislamiento, salida de red, secretos en disco, cadena de suministro, privilegios — y te entrega el comando exacto para corregir cada hallazgo.```bash
node9 posture # scorecard with the #1 risk and a fix for every finding
node9 posture --ship # send a redacted snapshot to your node9 dashboard (fleet view)
Los hallazgos se agrupan según quién puede solucionarlos: 🔒 los que node9 reduce (solo ejecuta el comando) y 🧱 los que solo tú puedes. Cada uno incluye un qué / por qué / quién en lenguaje sencillo y una remediación real — p. ej., el hallazgo de "el agente se ejecuta sin sandbox en el host" apunta directamente a node9 sandbox run (abajo).```text
🛡️ Node9 Posture — agent on this host Score: 100/100 (Good)
2 advisories below don't affect the score — OS-level exposure, yours to weigh.
🟢 node9 is already protecting you ✅ Secrets node9 DLP is blocking this ✅ Egress node9 egress is approval-gating this ✅ Approval gate node9 is blocking this ✅ Privilege node9 is approval-gating this
🔒 node9 reduces these — run the command, the rest is yours ⚠️ Isolation Running directly on the host — no container The agent runs loose on your whole machine, not in a sandbox. → node9 sandbox run — jail it: kernel egress + scoped mounts + node9 inside → node9 shield enable project-jail — or shrink the blast radius, keep host access ⚠️ Network exposure 4 services on 0.0.0.0 (node :3000/:4000, PostgreSQL :5432, Redis :6379) Reachable from your whole network, not just this laptop. → node9 shield enable postgres|redis — node9 blocks DROP TABLE / FLUSHALL → bind to 127.0.0.1 / firewall the port (your part)
✅ Supply chain no issues found ✅ Coverage no issues found
Track this across your fleet & keep it green → node9.ai
## Escanear un repositorio — seguridad de agentes-CI
`node9 scan-repo` comprueba cualquier repositorio (o una carpeta local) en busca de formas en las que un agente de IA conectado a GitHub Actions podría ser **secuestrado por un externo**: flujos de trabajo inyectables, secretos accesibles por el agente, servidores MCP sin fijar, configuración de agente demasiado amplia y archivos de instrucciones envenenados. Solo análisis estático y de parseo: lee únicamente la configuración confirmada, nunca ejecuta el código del repositorio. No se necesita instalación ni token para repositorios públicos.```bash
npx node9-ai scan-repo <owner/repo> # any public repo, no install
node9 scan-repo . # a local checkout — no network
node9 scan-repo <owner/repo> --json # machine-readable
Aquí tienes la traducción al español del contenido:
Nota: El chunk proporcionado está vacío. No hay texto que traducir.```text 🛡️ node9 scan-repo · node9-ai/agent-security-demo · ⚠️ agent-security risk found inspected 2 config file(s), 2 finding(s)
🔴 CRITICAL Injectable agent workflow — untrusted input reaches a tool-using agent with secrets .github/workflows/vulnerable-example.yml · CI-2 • runs with base-repo secrets (pull_request_target) • checks out the untrusted PR head into the workspace root • allowed_non_write_users: "*" — any user can trigger the agent • no effective actor gate
🔴 CRITICAL Exfiltratable secrets reachable by an injectable agent .github/workflows/vulnerable-example.yml · CI-4 • agent has arbitrary shell (bare Bash) → can read env and exfiltrate
Qué comprueba:
| Verificación | Indicadores |
| ------------ | --------------------------------------------------------------------------- |
| **CI-1** | configuración de agente confirmada que preautoriza herramientas amplias o ejecuta hooks remotos |
| **CI-2** | flujos de trabajo de agente inyectables: un externo puede activar el agente y secuestrarlo |
| **CI-3** | servidores MCP sin fijar o con `@latest`, o credenciales en línea (cadena de suministro) |
| **CI-4** | secretos que un agente inyectado podría exfiltrar |
| **CI-6** | instrucciones envenenadas o peligrosas en `CLAUDE.md` / `AGENTS.md` / skills |
**Aplica un gate a cada PR** — el mismo motor que una GitHub Action, para que una configuración secuestrable no pueda fusionarse:```yaml
# .github/workflows/agent-security.yml
- uses: node9-ai/node9-proxy@v2
with:
fail-on: high # or 'never' to just comment
Marketplace: node9 Agent Security
¿Lo estás usando? Añade la insignia scanned by node9 a tu README.
Node9 monitor dashboard
node9 monitor abre un panel interactivo de terminal con dos vistas:
[1] Tiempo real — actividad en vivo, aprobaciones, alertas de seguridad, puntuación de riesgo actual[2] Informe — resumen por ventana de tiempo: coste, herramientas principales, escudos activados, radio de impactoPulsa [2] en el monitor para obtener un resumen por ventana de tiempo. Cambia la ventana con [H]oy · [S]emana · [M]es · [N]oventa — los mismos paneles que el escaneo anterior, basados en tu registro de auditoría posterior a la instalación.
Node9 monitor [2] Informe
npm install -g node9-ai
node9 init # auto-wires all detected agents + MCP servers
node9 login # connect this machine to your workspace (approve it in the browser)
node9 doctor # verify everything is wired and reporting
```
Requiere Node.js 18+.
`init` por sí solo te brinda aplicación local completa: reglas, shields, DLP y
aprobaciones funcionan sin conexión, en esta máquina.
`login` es lo que conecta la máquina a tu panel. Imprime un código, abre
el navegador, y apruebas la máquina allí; si aún no tienes una cuenta,
registrarte a mitad del flujo te devuelve a la misma aprobación con el código
intacto. Hasta que lo ejecutes, todo se aplica localmente pero nada llega a
Mission Control, por lo que el panel permanece vacío.
`node9 logout` desconecta una máquina nuevamente. Revoca la clave de esa máquina;
la aplicación local sigue funcionando.
## Shields — paquetes de reglas curados
Cada shield es un conjunto de reglas curado para un servicio o dominio. Habilita solo lo que necesites.
| Shield | Qué detecta | Habilitar |
| ----------------- | ----------------------------------------------------------------------------- | -------------------------------------- |
| `project-jail` | Bloquea lecturas de `~/.ssh`, `~/.aws`, `.env`, credenciales vía Bash y Read tool | `node9 shield enable project-jail` |
| `bash-safe` | `curl \| bash`, `rm -rf /`, sobrescritura de disco, `eval` de remoto | `node9 shield enable bash-safe` |
| `postgres` | `DROP TABLE`, `TRUNCATE`, `DROP COLUMN`, `DELETE` sin `WHERE` | `node9 shield enable postgres` |
| `mongodb` | `dropDatabase`, `drop()`, `deleteMany({})`, eliminación de índices | `node9 shield enable mongodb` |
| `redis` | `FLUSHALL`, `FLUSHDB`, `CONFIG SET` en un servidor en vivo | `node9 shield enable redis` |
| `aws` | Eliminación S3, terminación EC2, cambios IAM, destrucción RDS | `node9 shield enable aws` |
| `k8s` | Eliminación de namespace, `helm uninstall`, borrado de roles de clúster | `node9 shield enable k8s` |
| `docker` | `system prune`, `volume prune`, contenedores `rm -f` | `node9 shield enable docker` |
| `github` | `gh repo delete`, eliminación de ramas remotas, cambios de configuración | `node9 shield enable github` |
| `filesystem` | `chmod 777`, escrituras bajo `/etc/`, `/boot/`, `/usr/` | `node9 shield enable filesystem` |
| `mcp-tool-gating` | Herramientas MCP no aprobadas que activan silenciosamente nuevas capacidades | `node9 shield enable mcp-tool-gating` |```bash
node9 shield list # show all shields + status
```
## Siempre activo — sin configuración necesaria
- **Git** — detecta `git push --force`, `git reset --hard`, `git clean -fd`
- **SQL** — detecta `DELETE` / `UPDATE` sin `WHERE`, `DROP TABLE`, `TRUNCATE`
- **Shell** — detecta `curl | bash`, `sudo` no autorizado
- **DLP** — marca claves de AWS, tokens de GitHub, claves de Stripe, claves privadas PEM en cualquier argumento de herramienta, contenido de archivos o configuración de shell (`~/.zshrc`, `~/.bashrc`)
- **DLP de respuestas** — un escáner en segundo plano lee el historial de conversación de Claude y te alerta si Claude _escribió_ un secreto en el texto de su respuesta
- **Fijación de skills** — verificación SHA-256 de los skills/plugins de Claude instalados entre sesiones
## Prompts de revisión — aprueba en línea, dentro de tu agente
Cuando node9 marca una acción para **revisión** (p. ej. `git push --force`, un `DROP TABLE`), el prompt de aprobar/rechazar se renderiza **en línea dentro de la conversación del agente** — sin sesión congelada, sin terminal separado, sin carrera de timeout del hook. node9 sigue ejecutando el evaluador completo y toma la decisión; solo la _superficie_ del prompt se mueve al agente.
- **Activado por defecto** para **Claude Code** y **GitHub Copilot CLI** — los agentes cuyo contrato de hooks admite un `ask` nativo. Cualquier otro agente (Codex, Gemini, Antigravity, Hermes, Cursor, OpenCode, Pi) usa el aprobador propio de node9.
- **Contrólalo** con `reviewChannel` en `~/.node9/config.json` (o `--no-ask` en el hook):```jsonc
{
"settings": {
"reviewChannel": "ask", // "ask" = inline agent prompt (default) | "approver" = node9's own approver
},
}
```
- **Configuraciones de equipo:** cuando se configura un aprobador de nube/equipo (`approvers.cloud: true`), las revisiones se enrutan a ese aprobador en su lugar — node9 no permitirá que una autoaprobación en línea omita la aprobación enrutada/de segunda parte.
## Sandbox — ejecutar un agente en una jaula
Cuando observar no es suficiente, **`node9 sandbox`** ejecuta el agente dentro de un contenedor desechable con una **lista de permitidos de salida impuesta por el kernel** y **montajes con alcance limitado** — mientras que los hooks de node9 gobiernan y auditan cada llamada de herramienta _dentro_ de la caja. La versión dura de la protección: el agente solo puede tocar la carpeta que montas y alcanzar los hosts que permites; todo lo demás se descarta en el kernel.```bash
cd ~/my-project
node9 sandbox new # write node9.sandbox.yaml — what to mount + which hosts to allow
node9 sandbox run # build + boot the jailed agent (your project at /workspace)
node9 sandbox tail # watch the agent's actions live, from the host
```
- **Desechable** — el contenedor se destruye al salir; tus ediciones del proyecto aterrizan en tu disco real, nada más sobrevive.
- **Misma política** — tus reglas existentes de shields / egress / aprobaciones se aplican dentro de la caja, transmitidas al mismo registro de auditoría y panel de control.
- **Cierra el bucle de postura** — ejecutarlo pone en verde los hallazgos de Isolation / Egress.
Alcance honesto (Fase 1): contenedor único, **Claude primero** (Codex después); el agente aún conserva sus _propias_ credenciales dentro de la caja (el muro de egress las confina a los hosts permitidos) — _"el agente nunca posee un secreto"_ es la fase del broker de credenciales en la hoja de ruta. Requiere Docker.
## Puerta de enlace MCP
Envuelve cualquier servidor MCP de forma transparente. El agente ve el mismo servidor — Node9 intercepta cada llamada de herramienta.```json
{
"mcpServers": {
"postgres": {
"command": "node9",
"args": ["mcp", "--upstream", "npx -y @modelcontextprotocol/server-postgres postgresql://..."]
}
}
}
```
O simplemente ejecuta `node9 init` — envuelve tus servidores MCP existentes automáticamente.
<details>
<summary><strong>🔐 Fijación de herramientas MCP — defensa contra tirones de alfombra</strong></summary>
Los servidores MCP pueden cambiar sus definiciones de herramientas entre sesiones. Un servidor comprometido o malicioso podría añadir, eliminar o modificar herramientas silenciosamente después de que confiaras en él por primera vez — un ataque de **tirón de alfombra**.
Node9 fija las definiciones de herramientas en el primer uso:
1. **Primera conexión** — la puerta de enlace registra un hash SHA-256 del nombre, descripción y esquema de cada herramienta
2. **Conexiones posteriores** — se compara el hash; si las herramientas han cambiado, la sesión se **pone en cuarentena** y cada llamada a herramienta se bloquea hasta que un humano revise y apruebe el cambio
3. **Estado de fijación corrupto** — falla de forma segura (bloquea), nunca vuelve a confiar silenciosamente```bash
node9 mcp pin list # show all pinned servers and hashes
node9 mcp pin update <serverKey> # remove pin, re-pin on next connection
node9 mcp pin reset # clear all pins
```
</details>
## Otros comandos
Más allá de los tres comandos de flujo anteriores (`scan` / `monitor` / `report`):
| Comando | Qué muestra | Cuándo usarlo |
| ---------------- | --------------------------------------------------------- | --------------------------------------- |
| `node9 blast` | A qué puede acceder un agente de IA en este momento — archivos, credenciales, entorno | Lo primero que se ejecuta en cualquier máquina |
| `node9 tail` | Transmisión en vivo de cada llamada de herramienta (solo texto, sin TUI) | Para canalizar a otras herramientas, CI, registros |
| `node9 sessions` | Historial de sesiones con prompt, rastro de herramientas y costo | Para revisar una transferencia o trabajo pasado |
| `node9 dlp` | Hallazgos de fuga de credenciales en el texto de respuesta de Claude | Cada vez que se active una alerta de escritorio DLP |
| `node9 mask` | Redactar secretos en texto plano de los archivos locales de historial de sesiones | Después de un hallazgo DLP — limpia el disco local |
Además, un **HUD en vivo** en la barra de estado de tu Claude Code:```
🛡 node9 | standard | [bash-safe] | ✅ 12 allowed 🛑 2 blocked 🚨 0 dlp | ~$0.43
📊 claude-opus-4-7 | ctx [████████░░░] 54% | 5h [██░░░░░░░░] 12% | 7d [█░░░░░░░] 7%
🗂 2 CLAUDE.md | 8 rules | 3 MCPs | 4 hooks
```
## Lectura de los datos — qué significan los números
Node9 saca a la superficie la señal. Estos son los patrones que vale la pena conocer:
| Señal | Significado probable |
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| `Would have blocked` ≥ 5 en una semana | El agente está intentando operaciones de alto impacto; vale la pena revisar los escudos |
| Una sola regla `review-git-push` >50% de los hallazgos | Tu propia regla está actuando como se espera — no es un riesgo, solo supervisión |
| Hallazgo de DLP en la herramienta `user-prompt` | Pegaste un secreto en tu propio prompt — rota la clave |
| Bucle del agente ×50+ en el mismo archivo | El agente está atascado en un ciclo de editar/probar/arreglar — revisa el contexto o ralentízalo |
| Desajuste de pin de herramienta MCP | El servidor cambió sus herramientas — revisa antes de volver a confiar |
| Advertencia de respuesta MCP grande | Ese servidor está inflando tu ventana de contexto en cada turno posterior |
| Alerta de `Response DLP` | Claude escribió un secreto en el texto de su respuesta — no bloqueado, rota inmediatamente |
| Hallazgo de DLP en `tool-result` | Claude leyó un archivo que contenía un secreto (`.env`, credenciales) — rota la clave y ejecuta `node9 mask` |
| Hallazgo de DLP en `[Shell]` | Secreto en texto plano en `~/.zshrc` o `~/.bashrc` — cada sesión de IA puede verlo |
Las señales puntuales son normales; los patrones persistentes son sobre los que actúas.
## SDK de Python — gobierna cualquier agente de Python```python
from node9 import configure, protect
configure(agent_name="my-agent", policy="require_approval")
@protect("bash")
def run_command(cmd: str) -> str:
...
```
**[Python SDK →](https://github.com/node9-ai/node9-python)** · **[Ejemplo de agente de revisión de código CI →](https://github.com/node9-ai/node9-pr-agent)**
## Bajo el capó
- **Scan** lee el historial bruto del agente desde `~/.claude/projects/`, `~/.gemini/tmp/`, `~/.gemini/antigravity-*/brain/`, `~/.copilot/session-state/`, `~/.codex/sessions/` — sin llamadas a API, totalmente offline
- **Runtime** intercepta las llamadas a herramientas mediante hooks de pre-ejecución (Claude Code, Codex, Antigravity, GitHub Copilot CLI, Gemini CLI, Opencode, Pi) o mediante la puerta de enlace MCP (Cursor, Windsurf, VSCode, Claude Desktop). Todas las decisiones se registran atómicamente en `~/.node9/audit.log`.
- **La puerta de enlace MCP** es un proxy stdio; intercepta `tools/list` + `tools/call` JSON-RPC, reenvía el resto
- **El motor de políticas** usa [mvdan-sh](https://github.com/mvdan/sh) para el análisis AST de bash — frustra la ofuscación mediante escapes con barras invertidas, sustitución de variables y eval de descargas remotas
- **Sandbox** genera un Dockerfile + entrypoint que sellan un muro de egreso deny-by-default con `ipset`/`iptables`, y luego descienden a un agente no root con el daemon y los hooks de node9 ejecutándose dentro; solo se monta el archivo de credenciales del agente, nunca todo tu `~/.claude`
## Documentación completa
Referencia de configuración, reglas inteligentes, reglas con estado, hosts de confianza, modos de aprobación, referencia CLI — en **[node9.ai/docs](https://node9.ai/docs)**.
## Proyectos relacionados
- **[node9-python](https://github.com/node9-ai/node9-python)** — SDK de Python
- **[node9-pr-agent](https://github.com/node9-ai/node9-pr-agent)** — Acción de GitHub que revisa PRs a través de Node9
## Empresarial
**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 paranoia saludable.</sub>
</p>