Unified full-text search across Claude Code, Codex, Cursor CLI and Antigravity CLI history. Every transcript is ingested into one SQLite database, searchable from a web UI, an MCP server, or the command line. Ingest and search are zero-dependency.
Three JSONL formats plus protobuf-in-SQLite for Antigravity CLI, normalised into one schema.
FTS5 with the trigram tokenizer, so Japanese substrings match — the default unicode61 tokenizer cannot.
Unchanged files skipped by mtime + size; changed ones resume from a byte offset, verified against a hash of the first 4 KB.
MCP 2026-07-28 over stdio or streamable HTTP, read-only: search_history, list_sessions, get_session.
Each machine ingests locally and pushes deltas; project_key from the git remote groups a project across machines and tools.
Masked on display locally and before storage on the aggregation server — known prefixes, labelled values and credential-bearing commands.
No Docker needed locally. Run the aggregation server in Docker behind your reverse proxy only when several machines share an index.
python3 -m chist ingest # 増分インポート
python3 -m chist search 'trigram' # 全文検索
python3 -m chist show <ext_id> # 会話を読む
# MCP として登録する
claude mcp add --transport http chist https://chist.example.com/mcp
| Security | Never expose the app directly: /mcp and the browser routes are protected by the proxy, and the server refuses to start without CHIST_TOKEN. |
|---|---|
| Pruning | chist prune deletes by time range, source, session or body match. With no condition it does nothing, and prune is not exposed over MCP. |
| Search limits | Queries under 3 characters fall back to LIKE. tool_call / tool_result are stored but not indexed. |
| Limitations | Cursor CLI has no timestamps or model names, Codex reasoning is usually encrypted, and Antigravity CLI is decoded without a .proto. |