Claude Code пишет каждую сессию в ~/.claude/projects/<путь-проекта>/<uuid>.jsonl. Формат машинный: thinking, tool_use и результаты инструментов лежат разными типами блоков, связи между сообщениями идут через parentUuid, а tool_result формально приходит ролью user. Через jq это читается, но недолго.
Claude Code History Viewer (jhlee0409/claude-code-history-viewer, MIT, Rust + Tauri) собирает из этих файлов интерфейс: диалоги с тулколлами, глобальный поиск, статистику по токенам и стоимости. Кроме Claude Code он понимает историю ещё 27 клиентов — Codex CLI, Gemini CLI, Cursor, Cline, Copilot, Goose, Zed и прочих.
Транскрипты обрабатываются локально, телеметрии проект не заявляет (десктопная версия при этом ходит на GitHub за обновлениями). Режима два: обычное приложение (.dmg, .exe, .AppImage, .deb, .rpm, brew install --cask jhlee0409/tap/claude-code-history-viewer) и headless-сервер, который отдаёт тот же интерфейс в браузер. Дальше — про второй: история у меня живёт на Linux-сервере без иксов. Версия на момент проверки — 1.22.0.
Запуск в Docker