
Бортовой самописец и сканер секретов для ИИ-агентов программирования. Читает, что запускали Claude Code, Codex, Gemini CLI и ещё 9 инструментов, и отмечает рискованные действия и утёкшие ключи. Работает локально, без телеметрии, MIT.
Бортовой самописец для ИИ-агентов и сканер их полномочий. Безопасность ИИ-агентов для программирования: Claude Code и ещё одиннадцати агентов, работающих на вашей машине. Без аккаунта, без телеметрии, без зависимостей.
Сайт и документация: https://ranwhat.com
Ваш агент для программирования имеет доступ к вашей оболочке, вашим ключам и вашему репозиторию. ranwhat читает,
что он на самом деле выполнял, и выявляет те несколько необратимых действий, о которых стоит знать.
$ 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.
Claude Code удаляет расшифровку сессии, которую вы не использовали дольше
cleanupPeriodDays,
по умолчанию 30 дней. Поэтому --days 90 находит больше, если вы увеличили этот срок, если в сессии,
которую вы возобновили в этот период, есть более старые действия, или для сессий,
начатых или последний раз продолженных в Claude Desktop или Cowork, которые Claude Code
v2.1.248 и новее
хранит в любом возрасте по умолчанию.
Запустите один раз, ничего не устанавливая:
uvx ranwhat check
Или добавьте в PATH:
pipx install ranwhat
pip install ranwhat
Затем ranwhat demo показывает сканирование полномочий на встроенном примере.
Python 3.9+. Без зависимостей, и ничего не собирается на вашей машине.
ranwhat check: всё, что стоит знать, за один проход только для чтенияЗапускает watch и clean вместе и ничего не меняет.
В терминале check, watch и clean держат одну строку состояния в stderr, пока
они читают, подсчитывая расшифровки на каждом проходе: indexing secrets
((first run) при первом запуске), checking actions, looking for secrets.
Туда ничего не пишется, когда stderr не является терминалом, или с --json.
ranwhat watch: аудит того, что выполняли Claude Code и другие ваши агентыЧитает то, что Claude Code и другие ваши агенты для программирования уже записали на диск. Без обёртки, без прокси, ничего в вашем критическом пути. Каждый агент ниже читается по умолчанию, каждый из места, где он хранит свою историю (переменная в скобках перемещает его, как она перемещает самого агента); тот, которого нет на вашей машине, пропускается.
| Источник | Расположение | Формат |
|---|---|---|
| Claude Code | ~/.claude/projects/*/*.jsonl и subagents/**/agent-*.jsonl каждой сессии, или то же самое под $CLAUDE_CONFIG_DIR/projects, когда задано | JSONL |
| Codex (CLI, расширение IDE, десктопное приложение) | ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl и archived_sessions/ ($CODEX_HOME); history.jsonl, shell_snapshots/ и его индекс потоков SQLite проверяются на секреты | JSONL; SQLite только для чтения; .jsonl.zst только для чтения, на Python 3.14 или с командой zstd |
| Gemini CLI | ~/.gemini/tmp/<project>/chats/session-*.jsonl и более старые 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 и более старые 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, а также -<cwd>/*.jsonl и btw/*.jsonl ниже ($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 и 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, только для чтения |
Meta Muse работает в облаке Meta и ничего не хранит на вашей машине, поэтому читать нечего; Muse Code, CLI для программирования от Meta, поддерживается. Grok Bot хранит свою историю в облаке xAI, даже для команд, которые он выполняет на вашей машине; Grok Build, CLI для программирования от xAI, поддерживается. Текущий Amp хранит свои потоки на ampcode.com. Cursor — следующий, как только его формат будет проверен по первоисточнику.
Девять правил: доступ к учётным данным, строки, похожие на секреты, в вызовах инструментов, публикация пакетов, изменения облачных ресурсов, вызовы финансовых API, подмена логов, разрушительные операции git, рекурсивное удаление и загрузка локальных файлов через curl. Вызовы инструментов каждого агента оцениваются по одним и тем же правилам; каждое действие указывает, какой агент его выполнил.
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 и --state-dir по-прежнему работают как имена
--path claude-code= и --path openclaw=.
ranwhat clean: поиск секретов в расшифровках Claude Code и других агентовКогда агент выполняет cat .env, вывод записывается в расшифровку:
пароль вашей базы данных, ваш JWT-секрет, ваши токены провайдеров, в открытом виде,
в файл, который Claude Code хранит 30 дней по умолчанию.
ranwhat clean # report, then open a review session
ranwhat clean --apply # mask everything without asking
clean ищет по истории каждого агента и маскирует значение только в файле,
который агент позволяет ему перезаписать: обычный JSONL, JSON или текстовый файл, в который ничего не
писалось последние две минуты. Базы данных (индекс потоков Codex,
базы данных агентов OpenClaw) и сжатые файлы доступны только для чтения: отчёт
называет каждый из них, содержащий секрет, и как удалить его в самом агенте.
Сканирование реальной истории занимает время, поэтому сессия остаётся открытой на том, что только что найдено, вместо того чтобы заставлять вас пересканировать для действий по этому:
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
Каждая находка указывает, в каком проекте она найдена и, когда расшифровка
называет его, файл, из которого она была прочитана, потому что строка из 64 символов
бесполезна без знания того, из какого .env она утекла: