Skip to content

Transcript record inspection

hansard doctor records surveys the types of records in local harness history. It reports unknown record, event, content, attachment, and subtype labels by source and recorded producer version. It does not change provider stores.

Terminal window
hansard doctor records --json
hansard doctor records --catalog
hansard doctor records --source cursor-cli

The catalog lists every registered source type, its catalog size, and its historical review status. Select an exact source type from that list when inspecting a copied file or directory:

Terminal window
hansard doctor records --source-type gemini-cli-history --path ./saved-history --json

Reports contain labels and counts, not message bodies or source paths. SQLite inspection uses a temporary copy of the database and its write-ahead log.

Exit status 1 means that the survey found unknown types or could not finish a complete inspection. Missing roots, unreadable or changing files, malformed records, unsupported media, and exhausted limits remain explicit gaps. --catalog exits with status 0 without scanning history.

An empty input or a quiet report does not establish complete historical support. Some formats have only partial catalogs. A catalog of known labels does not prove that every field or attachment is preserved.

Limit Default
--max-files 10,000 per discovery source
--max-records 250,000 per discovery source
--max-bytes 268,435,456 bytes per discovery source
--max-file-bytes 67,108,864 bytes, including a SQLite write-ahead log
--timeout-ms 30,000 milliseconds across the survey

Source-specific adapters can impose stricter limits. The report names the effective limits and any uninspected input.

Source Inspection boundary
Claude Code and Codex Local record catalogs classify internal records and unknown types. Unknown records containing explicit user or assistant text remain readable.
Cursor CLI JSON history blobs. Undecoded protobuf remains a coverage gap.
NotebookLM Extracted Takeout HTML. Extract a ZIP before scanning its contents.
Augment Session JSON and exact IDE webview state, including dictionary-compressed histories. Other extensions’ records are excluded. LevelDB remains a gap.
Aider Configured chat Markdown and LLM sidecars, with separate framing rules. Input-history sidecars remain unsupported.
Windsurf Supported Cascade Markdown frames and section headings. Unsupported framing remains incomplete.
Antigravity Step labels in saved trajectory and step response files. Select the recovery source type explicitly. Uninspected fields remain gaps.
Cline SDK Known blocks and unknown-type counts follow the transcript catalog. Explicit text survives unknown blocks. Blocks without visible text stay hidden.

Generic JSON inspection cannot decode arbitrary compressed or binary cells. Catalog coverage and import coverage are different. See the import coverage reference for preservation details.

The watcher reads the conversations in its import window again with the current importers. After an update, its archive refresh parses the conversations whose provider files are gone again from preserved originals. To parse preserved originals yourself without reading the provider again, use hansard rebuild --from-raw for a supported source. Preview it with --dry-run. See Choose the right refresh.