
Grabadora de vuelo y escáner de secretos para agentes de codificación con IA. Lee lo que ejecutaron Claude Code, Codex, Gemini CLI y 9 más, y marca acciones de riesgo y claves filtradas. Se ejecuta localmente, sin telemetría, MIT.
Una caja negra para agentes de IA, y un escáner para la autoridad que ostentan. Seguridad de agentes de codificación de IA para Claude Code y otros once agentes de codificación, ejecutándose en tu propia máquina. Sin cuenta, sin telemetría, sin dependencias.
Sitio web y documentación: https://ranwhat.com
Tu agente de codificación tiene tu shell, tus claves y tu repositorio. ranwhat lee
lo que realmente ejecutó y saca a la superficie el puñado de acciones irreversibles que merece la pena conocer.
$ ranwhat watch --days 90
ranwhat watch · caja negra local de agentes
----------------------------------------------------------------------------
Leído Claude Code: 4 transcripciones, últimos 90 días
2 críticas 2 altas
* Acceso a material de credenciales 2026-09-30 18:13:00 Bash
cat ~/.ssh/id_rsa
-> El agente leyó un archivo cuyo único propósito es guardar secretos. Lo que
leyó está ahora en un contexto de modelo que no controlas.
* Borrado masivo o recursivo 2026-09-28 14:42:00 Bash
…rm -rf '@'
-> Borrado recursivo. Recuperable solo si algo más lo estaba respaldando.
* Paquete o release publicado 2026-09-21 11:05:00 Bash
npm publish
-> Algo se envió a un registro del que otras personas pueden instalar.
Alcance de cadena de suministro, y normalmente irreversible.
* Operación git destructiva 2026-09-15 17:30:00 Bash
git push --force origin main
-> Reescritura de historial o borrado de rama. Esta es la clase de acción
que destruye el registro de qué más ocurrió.
----------------------------------------------------------------------------
Leído localmente. No se transmitió nada.
Claude Code elimina la transcripción de una sesión que no has usado durante más de
cleanupPeriodDays,
30 días por defecto. Así que --days 90 encuentra más si lo aumentaste, si una sesión
que reanudaste dentro de ese periodo tiene acciones más antiguas, o para sesiones
iniciadas o continuadas por última vez en Claude Desktop o Cowork, que Claude Code
v2.1.248 y posteriores
conservan a cualquier edad por defecto.
Ejecútalo una vez, sin instalar nada:
uvx ranwhat check
O ponlo en tu PATH:
pipx install ranwhat
pip install ranwhat
Después ranwhat demo muestra un escaneo de autoridad sobre un ejemplo incluido.
Python 3.9+. Sin dependencias, y no se compila nada en tu máquina.
ranwhat check: todo lo que merece la pena saber, en una sola pasada de solo lecturaEjecuta watch y clean juntos y no cambia nada.
En una terminal, check, watch y clean mantienen una línea de estado en stderr mientras
leen, contando transcripciones en cada pasada: indexing secrets
((first run) la primera vez), checking actions, looking for secrets.
No se escribe nada ahí cuando stderr no es una terminal, o con --json.
ranwhat watch: audita lo que ejecutaron Claude Code y tus otros agentesLee lo que Claude Code y tus otros agentes de codificación ya escribieron en disco. Sin wrapper, sin proxy, nada en tu ruta crítica. Cada agente de abajo se lee por defecto, cada uno desde donde guarda su historial (la variable entre corchetes lo mueve, igual que mueve al propio agente); uno que no esté en tu máquina se omite.
| Fuente | Ubicación | Formato |
|---|---|---|
| Claude Code | ~/.claude/projects/*/*.jsonl y el subagents/**/agent-*.jsonl de cada sesión, o lo mismo bajo $CLAUDE_CONFIG_DIR/projects cuando está definida | JSONL |
| Codex (CLI, extensión de IDE, app de escritorio) | ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl y archived_sessions/ ($CODEX_HOME); history.jsonl, shell_snapshots/ y su índice de hilos SQLite se buscan en busca de secretos | JSONL; SQLite solo lectura; .jsonl.zst solo lectura, en Python 3.14 o con el comando zstd |
| Gemini CLI | ~/.gemini/tmp/<project>/chats/session-*.jsonl y los más antiguos session-*.json ($GEMINI_CLI_HOME) | JSONL, JSON |
| GitHub Copilot CLI | ~/.copilot/session-state/<session>/events.jsonl ($COPILOT_HOME) | JSONL |
| Qwen Code | ~/.qwen/projects/<project>/chats/*.jsonl y los más antiguos tmp/<hash>/chats/session-*.json ($QWEN_RUNTIME_DIR, $QWEN_HOME) | JSONL, JSON |
| Grok Build | ~/.grok/sessions/<folder>/<session>/updates.jsonl ($GROK_HOME) | JSONL |
| Droid | ~/.factory/sessions/*.jsonl, y -<cwd>/*.jsonl y btw/*.jsonl por debajo ($FACTORY_HOME_OVERRIDE) | JSONL |
| Kimi Code | ~/.kimi-code/sessions/<folder>/<session>/agents/*/wire.jsonl ($KIMI_CODE_HOME) | JSONL |
| Kimi CLI | ~/.kimi/sessions/<folder>/<session>/wire.jsonl y context*.jsonl ($KIMI_SHARE_DIR) | JSONL |
| Pi | ~/.pi/agent/sessions/--<cwd>--/*.jsonl ($PI_CODING_AGENT_DIR) | JSONL |
| Muse Code | ~/.local/share/muse/sessions/YYYY/MM/DD/<session>/session.jsonl ($XDG_DATA_HOME/muse) | JSONL |
| OpenClaw | $OPENCLAW_STATE_DIR/agents/*/agent/openclaw-agent.sqlite | SQLite, solo lectura |
Meta Muse se ejecuta en la nube de Meta y no guarda nada en tu máquina, así que no hay nada que leer; Muse Code, la CLI de codificación de Meta, es compatible. Grok Bot guarda su historial en la nube de xAI, incluso para comandos que ejecuta en tu máquina; Grok Build, la CLI de codificación de xAI, es compatible. El Amp actual guarda sus hilos en ampcode.com. Cursor es lo siguiente, una vez que su formato se verifique contra una fuente primaria.
Nueve reglas: acceso a credenciales, cadenas con forma de secreto en llamadas a herramientas, publicación de paquetes, cambios en recursos de nube, llamadas a API financieras, manipulación de logs, git destructivo, borrado recursivo, y archivos locales subidos con curl. Las llamadas a herramientas de cada agente se juzgan con las mismas reglas; cada acción dice qué agente la ejecutó.
ranwhat watch --days 30
ranwhat watch --source codex # un agente (repetible)
ranwhat watch --path codex=~/work/.codex # el historial de un agente en otro sitio
ranwhat watch --json
ranwhat sources # cada agente, dónde buscó, qué encontró
--root y --state-dir siguen funcionando, como nombres de
--path claude-code= y --path openclaw=.
ranwhat clean: encuentra secretos en las transcripciones de Claude Code y otros agentesCuando un agente ejecuta cat .env, la salida se escribe en la transcripción:
la contraseña de tu base de datos, tu secreto JWT, los tokens de tus proveedores, en texto plano,
en un archivo que Claude Code conserva 30 días por defecto.
ranwhat clean # informa, luego abre una sesión de revisión
ranwhat clean --apply # enmascara todo sin preguntar
clean busca en el historial de cada agente, y enmascara un valor solo en un archivo
que el agente le permita reescribir: un archivo JSONL, JSON o de texto plano al que nada haya
escrito en los últimos dos minutos. Las bases de datos (el índice de hilos de Codex,
las bases de datos de agentes de OpenClaw) y los archivos comprimidos son de solo lectura: el informe
nombra cada uno que contenga un secreto y cómo eliminarlo en el agente
en su lugar.
Escanear un historial real lleva un rato, así que la sesión permanece abierta sobre lo que acaba de encontrar en lugar de hacerte reescanear para actuar sobre ello:
ranwhat> list los hallazgos otra vez
ranwhat> show 3 dónde aparece, y en qué rotarlo
ranwhat> mask 3 enmascara solo ese
ranwhat> mask all enmascara todo lo listado
ranwhat> keep 3 déjalo en paz
ranwhat> rotate qué rotar, agrupado por proveedor