
Gravador de voo e scanner de segredos para agentes de codificação com IA. Lê o que o Claude Code, Codex, Gemini CLI e mais 9 executaram, e sinaliza ações de risco e chaves vazadas. Executa localmente, sem telemetria, MIT.
Um gravador de voo para agentes de IA, e um scanner para a autoridade que eles detêm. Segurança de agentes de codificação de IA para o Claude Code e outros onze agentes de codificação, executado na sua própria máquina. Sem conta, sem telemetria, sem dependências.
Website e documentação: https://ranwhat.com
O seu agente de codificação tem a sua shell, as suas chaves e o seu repositório. O ranwhat lê
o que ele realmente executou e revela o punhado de ações irreversíveis que vale a pena conhecer.
$ ranwhat watch --days 90
ranwhat watch · local agent flight recorder
----------------------------------------------------------------------------
Read Claude Code: 4 transcripts, last 90 days
2 critical 2 high
* Credential material accessed 2026-09-30 18:13:00 Bash
cat ~/.ssh/id_rsa
-> The agent read a file whose only purpose is to hold secrets. Whatever
it read is now in a model context you do not control.
* Bulk or recursive deletion 2026-09-28 14:42:00 Bash
…rm -rf '@'
-> Recursive deletion. Recoverable only if something else was backing it
up.
* Package or release published 2026-09-21 11:05:00 Bash
npm publish
-> Something was pushed to a registry other people may install from.
Supply-chain reach, and usually irreversible.
* Destructive git operation 2026-09-15 17:30:00 Bash
git push --force origin main
-> History rewriting or branch deletion. This is the class of action
that destroys the record of what else happened.
----------------------------------------------------------------------------
Read locally. Nothing was transmitted.
O Claude Code elimina a transcrição de uma sessão que não usa há mais de
cleanupPeriodDays,
30 dias por predefinição. Por isso --days 90 encontra mais se o tiver aumentado, se uma sessão
que retomou dentro desse período tiver ações mais antigas, ou para sessões
iniciadas ou continuadas pela última vez no Claude Desktop ou Cowork, que o Claude Code
v2.1.248 e posteriores
mantêm em qualquer idade por predefinição.
Execute-o uma vez, sem instalar nada:
uvx ranwhat check
Ou coloque-o no seu path:
pipx install ranwhat
pip install ranwhat
Depois ranwhat demo mostra uma análise de autoridade num exemplo incluído.
Python 3.9+. Sem dependências, e nada é compilado na sua máquina.
ranwhat check: tudo o que vale a pena saber, numa única passagem só de leituraExecuta watch e clean em conjunto e não altera nada.
Num terminal, check, watch e clean mantêm uma linha de estado em stderr enquanto
leem, contando transcrições em cada passagem: indexing secrets
((first run) na primeira vez), checking actions, looking for secrets.
Nada é escrito lá quando stderr não é um terminal, ou com --json.
ranwhat watch: auditar o que o Claude Code e os seus outros agentes executaramLê o que o Claude Code e os seus outros agentes de codificação já escreveram no disco. Sem wrapper, sem proxy, nada no seu caminho crítico. Cada agente abaixo é lido por predefinição, cada um de onde guarda o seu histórico (a variável entre parênteses retos move-o, tal como move o próprio agente); um que não esteja na sua máquina é ignorado.
| Fonte | Localização | Formato |
|---|---|---|
| Claude Code | ~/.claude/projects/*/*.jsonl e o subagents/**/agent-*.jsonl de cada sessão, ou o mesmo sob $CLAUDE_CONFIG_DIR/projects quando definido | JSONL |
| Codex (CLI, extensão IDE, aplicação desktop) | ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl e archived_sessions/ ($CODEX_HOME); history.jsonl, shell_snapshots/ e o seu índice de threads SQLite são pesquisados por segredos | JSONL; SQLite só de leitura; .jsonl.zst só de leitura, em Python 3.14 ou com o comando zstd |
| Gemini CLI | ~/.gemini/tmp/<project>/chats/session-*.jsonl e os mais antigos 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 e os mais antigos 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, e -<cwd>/*.jsonl e btw/*.jsonl abaixo dele ($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 e 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, só de leitura |
O Meta Muse é executado na cloud da Meta e não guarda nada na sua máquina, por isso não há nada para ler; o Muse Code, a CLI de codificação da Meta, é suportado. O Grok Bot guarda o seu histórico na cloud da xAI, mesmo para comandos que executa na sua máquina; o Grok Build, a CLI de codificação da xAI, é suportado. O Amp atual mantém as suas threads em ampcode.com. O Cursor é o próximo, assim que o seu formato for verificado contra uma fonte primária.
Nove regras: acesso a credenciais, strings com forma de segredo em chamadas de ferramentas, publicação de pacotes, alterações a recursos de cloud, chamadas a APIs financeiras, adulteração de logs, git destrutivo, eliminação recursiva, e ficheiros locais enviados com curl. As chamadas de ferramentas de cada agente são julgadas pelas mesmas regras; cada ação indica qual agente a executou.
ranwhat watch --days 30
ranwhat watch --source codex # one agent (repeatable)
ranwhat watch --path codex=~/work/.codex # an agent's history elsewhere
ranwhat watch --json
ranwhat sources # every agent, where it looked, what it found
--root e --state-dir continuam a funcionar, como os nomes de
--path claude-code= e --path openclaw=.
ranwhat clean: encontrar segredos nas transcrições do Claude Code e de outros agentesQuando um agente executa cat .env, a saída é escrita na transcrição:
a sua palavra-passe da base de dados, o seu segredo JWT, os seus tokens de fornecedor, em texto simples,
num ficheiro que o Claude Code guarda durante 30 dias por predefinição.
ranwhat clean # report, then open a review session
ranwhat clean --apply # mask everything without asking
clean pesquisa o histórico de cada agente, e mascara um valor apenas num ficheiro
que o agente lhe permita reescrever: um ficheiro JSONL, JSON ou de texto simples em que nada
tenha escrito nos últimos dois minutos. Bases de dados (o índice de threads do Codex,
as bases de dados de agentes do OpenClaw) e ficheiros comprimidos são só de leitura: o relatório
nomeia cada um que contém um segredo e como removê-lo no próprio
agente.
Analisar um histórico real demora algum tempo, por isso a sessão mantém-se aberta sobre o que acabou de encontrar em vez de o obrigar a reanalisar para agir sobre isso:
ranwhat> list the findings again
ranwhat> show 3 where it appears, and what to roll it at
ranwhat> mask 3 mask just that one
ranwhat> mask all mask everything listed
ranwhat> keep 3 leave it alone
ranwhat> rotate what to rotate, grouped by provider
Cada descoberta indica em que projeto foi encontrada e, quando a transcrição
o nomeia, o ficheiro de onde foi lida, porque uma string de 64 caracteres é
inútil sem saber de que .env escapou: