CCH is a local desktop app for exploring AI coding session history across multiple providers:
- Claude (
~/.claude/projects) - Codex (
~/.codex/sessions) - Gemini (
~/.gemini/tmp)
It discovers session files, normalizes messages into a shared schema, indexes them into SQLite + FTS5, and provides a fast PySide6 UI for browsing, filtering, and searching.
This project is coded mostly by Codex, with additional contributions from Claude Code.
Provider logs are spread across different directories and formats. CCH unifies them so you can:
- inspect sessions/project activity in one place
- run full-text search across providers
- filter by provider and message category consistently
- review detailed conversations with consistent metadata context
- Multi-provider ingestion for Claude/Codex/Gemini.
- Canonical message categories:
userassistanttool_usetool_resultthinkingsystem
- Incremental indexing with forced full reindex support.
- Automatic DB schema-version detection and full reindex trigger when needed.
- Fast SQLite FTS5 search with filters:
- providers
- project name/path query
- message categories
- Search chips show per-category counts (faceted counts).
- Project and session list views with provider-aware grouping.
- Session detail view with:
- rich web rendering
- persistent category filters across session navigation
- focus mode (
Focus/Unfocus) for detail-first reading - zoom controls
- Context menus to open project/session locations in Finder (macOS).
src/layout (src/cch) for packaging hygiene and import safety.- Layered architecture:
data/: discovery, parsing, indexing, SQLservices/: query/use-case APIs for UIui/: Qt views/panels/widgets
- Provider-specific parsing + canonical normalization:
- parser converts provider-specific payloads into one message model.
- SQLite as the local source of truth:
- WAL mode for responsive reads/writes
- FTS5 for scalable full-text search
- UI rendering strategy:
- session detail uses
QWebEngineViewfor modern HTML rendering - large payload fallback to temporary file-backed loading
- defensive startup cleanup for stale webview temp directories
- session detail uses
src/cch/
cli.py # Typer CLI entrypoints
config.py # directory + DB config
data/ # discovery/parser/indexer/db/search
models/ # pydantic/domain models
services/ # service layer
ui/ # app shell, panels, views, widgets
tests/ # unit/integration tests
- Python 3.13+
uv(recommended) or equivalent virtualenv/pip workflow- macOS/Linux desktop environment for the UI
uv sync
uv run cchOptional provider path overrides:
uv run cch \
--claude-dir /path/to/.claude \
--codex-dir /path/to/.codex \
--gemini-dir /path/to/.geminiReindex always performs a full rebuild:
uv run cch reindexRun checks:
uv run ruff check src tests
uv run basedpyright
uv run pytest -qCtrl+1Projects viewCtrl+2Search viewCtrl+Shift+MorF11Focus/Unfocus session detailEscExit focus modeCtrl++/Ctrl+=Zoom in (session detail)Ctrl+-Zoom out (session detail)Ctrl+0Reset zoom (session detail)
MIT. See LICENSE.