Un agente de codificación de IA ejecutó printenv para depurar un despliegue y colocó un token de sesión de AWS activo en su ventana de contexto. Nadie hizo nada malo. Por eso creamos ctxcop, una CLI de código abierto que elimina los secretos del contexto del agente antes de que el modelo los vea.
Tu agente de codificación de IA no necesita tus credenciales para hacer su trabajo. Creamos un hook de CLI que deja de entregárselas y lo publicamos como código abierto.
Hace unos meses vi a un agente de codificación de IA depurar un despliegue fallido. Ejecutó printenv, que es lo que yo también habría hecho. El problema es que printenv en esa máquina imprimió un token de sesión de AWS activo. Ese token terminó en la ventana de contexto del modelo, luego en la transcripción de la conversación guardada en texto plano en el portátil y, finalmente, en la computadora de alguien más. Podría haber terminado fácilmente en un montón de registros.
Nadie hizo nada malo. El agente estaba siendo útil y el ingeniero estaba siendo productivo. Una credencial de producción simplemente terminó donde ninguno de nosotros decidió que debía ir.
Esa es la razón de este post.
El reflejo
Cuando aparece una herramienta nueva y potente, el movimiento de seguridad reflejo es bloquearla. Escribir una política, prohibirla en el manual, enviarla a través de un comité de revisión. Se siente como tener el control.
No lo es. Los ingenieros adoptaron los agentes de codificación de IA más rápido que cualquier otra herramienta que haya visto, y lo hicieron con o sin la aprobación de seguridad. Prohíbe la herramienta y no obtendrás seguridad. Obtendrás la misma exposición de credenciales ocurriendo fuera de un flujo de trabajo sancionado, y un equipo de seguridad que ya no puede ver nada de eso. Pierdes productividad y visibilidad al mismo tiempo.
Así que estar "en contra" nunca fue la postura ganadora. El movimiento que funciona es encontrarse con la herramienta donde se ejecuta e integrar la barrera de seguridad en ella.
Necesidad de saber
La barrera de seguridad proviene de una vieja idea: necesidad de saber.
Quiero ser cuidadoso con esta afirmación, porque la versión exagerada de esta historia es incorrecta. No digo que no puedas confiar en Anthropic u OpenAI (o Deepinfra, etc.). La mayoría de los proveedores son contractualmente sólidos y varios de ellos no entrenan con tu contexto. Pero aun así tendrán registros, a veces en múltiples lugares por múltiples razones con múltiples proveedores propios. No, mi afirmación es más pequeña y difícil de refutar: No deberías darle a ningún tercero más información de la necesaria para hacer el trabajo. Nadie tiene que actuar de mala fe para que eso importe. Mantener el radio de explosión pequeño es simplemente una buena práctica, y la ventana de contexto de un agente de codificación es un nuevo lugar para practicarla.
Un agente necesita razonar sobre tu código y el mundo en el que opera. No necesita el valor literal de tu contraseña de base de datos para hacerlo. Necesita la forma del problema, no el secreto. Así que dejamos de dárselo.
Un policía para la ventana de contexto
Eso es ctxcop, abreviatura de "context cop" (policía de contexto).
Es una herramienta CLI sencilla que se instala en cualquier agente que utilices: Claude Code, Cursor, Codex, Pi, OpenCode, Aider, o lo que sea que estemos usando mañana. Se conecta en los momentos en que un secreto podría pasar de tu máquina al contexto del modelo. Cuando el agente ejecuta un comando, lee un archivo o llama a una herramienta, ctxcop analiza la salida antes de que el modelo la vea y reemplaza cualquier cosa que parezca una credencial:
AWS_ACCESS_KEY_ID=<REDACTED:aws-access-key:OLIA>El modelo recibe un marcador de posición donde estaba el secreto. El comando se ejecutó con el valor real en tu terminal. El modelo simplemente nunca lo vio. Nada sale de tu máquina. No hay proxy ni puerta de enlace que ejecutar ni cuenta que crear. Ejecutas ctxcop install, encuentra tus agentes y se conecta. Es de código abierto bajo licencia MIT, porque la fe ciega es siempre la decisión equivocada cuando trabajas con secretos.
La redacción es solo la mitad. Cuando ctxcop extrae un secreto, también le deja una nota al agente: eso era una credencial, la eliminamos y, si necesitas el valor, haz referencia a él indirectamente. También prepara al agente al inicio de una sesión, para que las convenciones no sean una sorpresa después. De esa manera, el agente no recibe un marcador de posición misterioso y empieza a adivinar. No intenta decodificar la redacción en base64 ni vuelve a ejecutar el comando para obtener el valor real. Se le informa lo que sucedió y sigue trabajando.
Esa parte es deliberada: no solo intentamos dejar de pelear con nuestros desarrolladores, también intentamos dejar de pelear con el agente. Una barrera de seguridad que altera silenciosamente las entradas de un agente es algo que eventualmente aprenderá a evitar. Si una herramienta se explica a sí misma, el agente puede cooperar con ella.
La parte difícil (la búsqueda real de secretos) no es nuestra. ctxcop se basa en betterleaks, el sucesor con mantenimiento de gitleaks; sin él, este proyecto habría sido un dolor de cabeza. Obtenemos todo su motor de detección y conjunto de reglas gratis. Lo que más aprovechamos es su extensibilidad. Las reglas son solo configuración, así que puedes ajustar las nuestras, añadir patrones para tus propios datos confidenciales internos o cargar un paquete adicional completo con una variable de entorno. Así es exactamente como ctxcop ofrece un conjunto de reglas opcional para criptografía y datos financieros personales (PII): desactivado por defecto, y una variable para activarlo. Tus secretos no son nuestros secretos, y betterleaks facilita dejarlo claro.
Cómo funciona
Cada arnés tiene su propio enfoque de extensibilidad, así que esto varía de uno a otro. Consulta https://github.com/webflow/ctxcop/blob/main/docs/harnesses.md para más detalles, pero analicemos los hooks de Claude Code como ejemplo:
En SessionStart, ctxcop guía al agente dándole un preámbulo mediante hookSpecificOutput.additionalContext, que le indica a Claude que ctxcop está conectado a la sesión, cómo es un patrón redactado y qué hacer si encuentra uno.
Cuando el agente decide usar la herramienta Bash, ctxcop intercepta PreToolUse y reescribe el comando previsto por el agente:
cat .env ⇒ ctxcop run -- bash -c ‘cat .env’
Cuando ctxcop envuelve un comando, analiza la salida estándar (stdout) y redacta según las reglas configuradas, dejando lo suficiente para que el agente pueda razonar, junto con un recordatorio sobre cómo trabajar con secretos sin contaminar el contexto:
ANTHROPIC_API_KEY=<REDACTED:anthropic-api-key:DwAA>
API_URL='https://test.example.com'
SLACK_BOT_TOKEN=<REDACTED:slack-bot-token:ItGB>
SLACK_DEPLOY_WEBHOOK_URL=<REDACTED:slack-webhook-url:UxPp>Existen otras superficies para Claude Code: si un usuario pega un secreto en el prompt, el agente lee un archivo o utiliza servidores MCP, ctxcop también se conecta a esos eventos, cuidando de preservar el valor de la operación mientras mantiene la confidencialidad donde sea posible.
Lo que no hace
Una herramienta de seguridad que promete más de lo que ofrece es peor que no tener ninguna, así que esto es lo que ctxcop no hace.
Trabaja sobre el contenido. Redacta lo que ve el modelo. No es un firewall, un proxy de salida ni un monitor de comportamiento. No detendrá un SSRF. No sabe ni le importa si una herramienta MCP está comprometida o si hay una exfiltración lenta de varios pasos. Esos son problemas reales que ocurren en otra capa. ctxcop se sitúa junto a un control de salida de red, no lo reemplaza.
Pipelock y Runlayer son buenos ejemplos de esa otra capa. Trabajan en la red en lugar de en la vista del modelo, y actúan en el punto de salida en lugar de en tu equipo. Es un modelo operativo diferente con sus propias ventajas reales, y merece la pena echarle un vistazo. Los responsables de Pipelock también publican un benchmark externo y neutral llamado agent-egress-bench. Ejecutamos las partes aplicables a ctxcop y pusimos los resultados en el repositorio, incluyendo cada categoría que no cubrimos. Si quieres saber dónde están los límites, están documentados.
Trabajando con la herramienta
Creo que así es como un equipo de seguridad evoluciona junto a una nueva herramienta en lugar de ponerse en su camino.
Los agentes llegaron para quedarse, al igual que la presión sobre cada ingeniero para usarlos. El trabajo de seguridad no es ser el departamento del "no", sino integrar la seguridad en los flujos de trabajo de los usuarios. Usar una herramienta de forma segura debería ser fácil, intuitivo y transparente respecto a dónde están los riesgos.
ctxcop es una barrera de protección para un límite. Es abierto y está disponible en github.com/webflow/ctxcop. Léelo, pruébalo y dinos si te ayuda a dormir más tranquilo.








