Cómo saber qué hizo tu agente de código tras un prompt injection: Stroq lo audita y bloquea la siguiente llamada ✅ yoDEV Tested

Para saber qué hizo tu agente de código en tu máquina, y por qué, necesitas un registro que conecte cada comando con lo que el agente acababa de leer. Stroq es una CLI open source que lleva ese registro: vigila cada archivo, página web y resultado de herramienta que lee tu agente y, cuando detecta un prompt injection, bloquea la siguiente llamada riesgosa y te dice exactamente de dónde salió la orden.

:white_check_mark: yoDEV Tested · 6 de noviembre de 2026
Probamos Stroq 0.30.0 con Node 22 en Linux, ejecutando su hook de Claude Code directamente en un proyecto de prueba. Los resultados que reportamos como nuestros salen de esa prueba.

Es contención de prompt injection (prompt injection containment), no un simple log. La mayoría de las protecciones se hacen una sola pregunta: ¿este comando es peligroso? Stroq se hace una segunda: ¿al agente le ordenó ejecutarlo algo que acaba de leer? Se instala con un comando, corre en local y tiene licencia Apache-2.0. Lo instalamos y lo atacamos nosotros mismos; los resultados están más abajo.

¿Qué es un prompt injection y por qué afecta a tu agente de código?

Un prompt injection es una instrucción escondida en contenido que el modelo lee —una página web, un issue, un README, la respuesta de un servidor MCP— y que el modelo termina obedeciendo como si viniera de ti. En un chat el daño se limita a una mala respuesta. En un agente de código que puede ejecutar comandos, leer tu .env y hacer git push, esa misma instrucción puede convertirse en una filtración de credenciales o en un curl | sh contra un servidor ajeno.

El patrón clásico tiene dos pasos: el agente lee algo envenenado y, acto seguido, ejecuta lo que ese contenido le pidió. Stroq está diseñado para cortar justo entre esos dos pasos.

¿Qué es Stroq y cómo funciona?

Stroq es una capa de seguridad local que se engancha a las llamadas de herramientas de tu agente. Al momento de publicar esta nota, el paquete de npm @stroq/cli está en la versión 0.30.0, publicada el 5 de noviembre de 2026, y requiere Node 22 o superior. Funciona con Claude Code, Cursor, Codex CLI, Copilot CLI, Windsurf y Google Antigravity mediante sus hooks nativos, con OpenClaw como plugin y con cualquier cliente MCP a través de un proxy stdio.

Actúa en dos momentos:

  • Después de que el agente lee algo (PostToolUse): normaliza la salida —elimina caracteres de ancho cero y homoglifos, decodifica base64, hex y URL anidados— y la compara con su conjunto de reglas. En nuestra instalación, doctor reportó 622 reglas cargadas, la mayoría tomadas del proyecto Agent Threat Rules, con licencia MIT.
  • Antes de que el agente actúe (PreToolUse): clasifica la acción (red, shell destructivo, ejecución codificada, acceso a secretos, push externo, manipulación de su propia configuración) y aplica una política ordenada en la que gana la primera regla que coincide.

Cada decisión queda en un log de auditoría encadenado por hash en ~/.stroq/audit.jsonl, con los valores secretos redactados.

¿Cómo se instala Stroq en Claude Code?

Desde la raíz de tu proyecto:

npx @stroq/cli init
npx @stroq/cli doctor

En nuestra prueba, init escribió los hooks en el .claude/settings.json del proyecto (PreToolUse, PostToolUse y PostToolUseFailure). Como npm limpia su caché de npx, Stroq se copia a ~/.stroq/cli/<versión>/ y apunta los hooks ahí. ¿Quieres ver el cambio antes de aplicarlo? Agrega --dry-run. ¿Lo quieres en todos tus proyectos? Agrega --user. Para quitarlo: stroq uninstall.

Si usas Claude Code, también puedes instalarlo como plugin con /plugin marketplace add AGGIB/Stroq y luego /plugin install stroq@stroq. El README advierte que la instalación como plugin no toca .claude/settings.json, así que doctor reportará esos hooks como ausentes.

¿Funciona con Cursor, Codex, Copilot o servidores MCP?

Sí. Para otros agentes, usa --agent:

npx @stroq/cli init --agent cursor
npx @stroq/cli init --agent codex
npx @stroq/cli init --agent copilot
npx @stroq/cli init --agent windsurf
npx @stroq/cli init --agent antigravity
npx @stroq/cli init --agent mcp --client claude-desktop

La última opción envuelve tus servidores MCP stdio con un proxy que evalúa cada tools/call y escanea lo que devuelve. Si la seguridad MCP es tu frente principal, este análisis complementa bien: MCP Gateway: la próxima gran categoría de seguridad para agentes.

¿Cómo decide Stroq qué bloquear?

La clave es de dónde vino el contenido, y fue lo más útil que aprendimos al probarlo.

El contenido externo a tu proyecto (una página web, un resultado de MCP) contamina la sesión. Le pasamos al hook una “guía de instalación” descargada que les pedía a los asistentes de IA leer el .env y enviarlo a una URL externa. Desde ese momento:

Acción después de la página envenenada Decisión de Stroq
curl a un host inofensivo Bloqueado (deny-network-when-tainted)
Leer .env Bloqueado (deny-secrets-when-tainted)
curl con la clave de AWS del .env Bloqueado (deny-secret-egress), valor redactado en el log
git push a la URL del repo de un atacante Bloqueado (deny-origin-suspect)
ls -la Permitido
git push origin main (tu remoto configurado) Permitido

El contenido de tu propio proyecto solo se marca. Escondimos un comentario HTML en un README que les pedía a los agentes ejecutar curl … | sh y subir ~/.ssh/id_rsa. Stroq le advirtió al agente que tratara ese texto como datos no confiables, pero no restringió la sesión: su propio mensaje dice que es un archivo del proyecto. Aun así, bloqueó el curl | sh exacto que venía inyectado y citó como evidencia el README y los segundos transcurridos. Los curl normales siguieron funcionando.

Esa división tiene sentido: tus propios archivos son ruidosos, y contaminar la sesión por cada comentario sospechoso en node_modules haría la herramienta inutilizable. El contenido externo es de donde realmente viene la inyección.

¿Cómo saber qué hizo tu agente de código y por qué?

Stroq trae varios comandos de auditoría para responder exactamente esa pregunta (en inglés, audit what AI coding agent did):

  • stroq log: las decisiones recientes, una por línea.
  • stroq why: explica la última acción bloqueada o consultada: qué se bloqueó, con qué regla y de qué archivo o URL salió la instrucción.
  • stroq replay <sesión>: reconstruye la cadena. En nuestra prueba dibujó el WebFetch envenenado, una flecha hacia el curl que llevaba el secreto, “DENIED … 1 s later” y el resumen “1 of 6 judged actions traced back to content the agent read”. Con --html lo exporta como una sola página.
  • stroq replay --last: lee la transcripción del propio agente, así que funciona con sesiones de antes de instalar Stroq. --all repite todas las sesiones de los últimos 30 días contra la política actual.
  • stroq sent: reporta qué credenciales locales ya llegaron a un proveedor de modelos en sesiones pasadas.
  • stroq verify: comprueba que la cadena de auditoría no fue alterada.

Si Stroq se equivocó, stroq untaint --session=<id> limpia la contaminación; ejecútalo tú, fuera del agente. Lo hicimos y el curl bloqueado pasó en la siguiente llamada.

¿Stroq detiene ataques reales de prompt injection?

Trae su propia prueba: stroq attack repite escenarios contra tu política. En la versión 0.30.0 obtuvimos 36 escenarios: 26 basados en incidentes públicos (el ataque a la cadena de suministro de Nx conocido como s1ngularity, RoguePilot, GitPwned, Clinejection y varios reportes de issues de Claude Code sobre rm -rf y force-pushes) y 10 sintéticos. Resultado: 15 bloqueados, 21 enviados a aprobación, ninguno pasó.

Ten en cuenta que son escenarios del propio proyecto contra su propia política: demuestran que las reglas hacen lo que prometen, no que cubran todos los ataques posibles. La sobrecarga que medimos fue de unos 150 milisegundos por llamada al hook, en línea con los 100–250 ms que indica el README.

¿Stroq es un sandbox?

No, y el propio proyecto lo dice. El README aclara que los hooks no son una barrera de seguridad: los hooks de Claude Code se pueden desactivar o esquivar, y los de Stroq también. En Hacker News, su autor lo describió como “a filter, not a sandbox”. El único modo que impone el sistema operativo es el opcional stroq run --sandbox, que envuelve al agente en srt de Anthropic (sandbox-exec en macOS, bubblewrap en Linux).

Otros límites que conviene conocer:

  • La protección depende de tu agente. Claude Code tiene allow/deny/ask completo (verificado por el proyecto en la versión 2.1.271). Codex deja pasar todo si el hook no arranca y no tiene “ask”; Copilot CLI deja pasar todo si el hook excede su tiempo; los hooks de Windsurf no ven la salida de comandos ni las descargas web; Cursor no escanea sus propias lecturas web.
  • La detección de secretos es exacta. Los secretos partidos, concatenados o codificados se escapan, y trucos de comillas en shell como c"u"rl no se analizan del todo.
  • La contaminación es gruesa. Una vez contaminada la sesión, hasta una llamada de red inofensiva se bloquea hasta que ejecutes untaint.
  • Es un proyecto joven. El paquete de npm se creó en septiembre de 2026 y publica una versión nueva cada pocos días. El repo y npm solo muestran alias (AGGIB, agybay_07), sin un mantenedor identificado por nombre.

¿Vale la pena instalar Stroq?

Si dejas que tu agente de código lea páginas web, issues o resultados de MCP y ejecute comandos de shell en la misma sesión, Stroq te da dos cosas que probablemente hoy no tienes: un bloqueo sobre la cadena clásica de “leer una página y luego exfiltrar”, y un registro reproducible de qué hizo el agente y por qué. Combínalo con un aislamiento real —un contenedor, un usuario separado, --sandbox— en lugar de depender solo de él.


¿Y tú? ¿Alguna vez tu agente de código intentó ejecutar algo que no le pediste? Cuéntanos qué fue.

¿Cómo limitas hoy lo que tu agente de código puede hacer en tu máquina?
  • Apruebo cada comando a mano
  • Lo ejecuto en un contenedor o una VM
  • Uso hooks o reglas de permisos
  • Prefiero otra opción (cuéntanos cuál)
0 votantes

Comenta abajo o, si este artículo te llegó por correo, responde directamente al email: tu respuesta se publica aquí.

Relacionado: ¿Cómo saber si un plugin de Claude Code es seguro? Probamos ModVet, el escáner que lo revisa antes de instalarlo :white_check_mark: yoDEV Tested