Skip to content

Cursor

Hansard reads current Cursor agent transcripts and historical SQLite records. The optional cloud source is a separate API surface and does not merge with local Composer session IDs.

Source Use it for
cursor Current agent transcripts and historical local SQLite history.
cursor-cloud Explicit, read-only Cursor cloud-agent import.

For current local history, Hansard scans Cursor’s per-project agent transcript directories. It groups the files by session, reads messages, tool calls and results, errors, models, usage, and subagent relationships, then assigns the conversation to a project from the recorded path or decoded project directory. For older history, it also reads Cursor’s workspace and global SQLite stores, including Composer, chat, and bubble records. Those rows are ordered into the best transcript the older database can provide; a session with only prompt or apply breadcrumbs remains a clearly partial conversation.

Cursor can leave the same Composer session in several local stores. Hansard reconciles those records only when they share the exact Composer identifier. The current agent transcript wins over global SQLite, which wins over workspace or breadcrumb recovery; lower-ranked copies may still add a title, working directory, timestamps, usage, or raw provenance. Similar text with different identifiers is never merged. This rule prevents one conversation from appearing several times without collapsing unrelated work.

The normal watcher follows current transcript files as they change. A full local backfill also performs conservative recovery from the historical SQLite stores, so it is the appropriate first import after installing Hansard. The separate cursor-cloud command reads cloud-agent metadata, usage, and any message text exposed by Cursor’s read-only APIs. Local and cloud identifiers belong to different namespaces and remain separate conversations.

hansard init and hansard doctor inventory legacy SQLite keys without decoding Composer or bubble payloads. Their displayed legacy count is a candidate count; import resolves the exact conversation count. During import, Hansard applies --since before reading bubble rows, reads large stores in bounded batches, and prints progress for non-interactive callers. A --since all recovery can still take time when state.vscdb is several gigabytes because every selected conversation must be decoded once.

Terminal window
hansard import --source cursor --since all
hansard import cursor-cloud --since all
hansard index rebuild

cursor-cloud uses CURSOR_API_KEY or cursor.apiKey in Hansard config.

After the import finishes, open Conversations and selectFilter & sort. Set Source toCursor or Cursor cloud agents, choose the backfill window underTime, and use Folder when the same harness appears in several projects. Select a result to inspect its messages, tool calls and results, files, commits, model and usage fields, and source provenance in one conversation view.

For a local source that should stay current, open Settings → Indexing & Imports. Automatic follows detected local harnesses; Custom lets Sources scannedselect an explicit set. Explicit cloud and account-export sources do not turn into background network jobs here. If the expected result is absent after resetting the conversation filters, return to the terminal import in this guide and add --explain-skips where supported.

  • Rich modern transcripts, tools, errors, model settings, and workspace context when Cursor wrote them.
  • Historical SQLite context snapshots and provider cost buckets without converting them into directional input or output tokens.
  • Cloud-agent status, run timing, duration, branch, pull request, token totals, and available message text.
  • Raw model and harness identity so Composer remains visible in model views and Cursor remains visible in harness views.
  • promptTokenBreakdown, contextTokensUsed, and contextTokenLimit describe context-window state, not billed request usage.
  • Cursor cloud exposes no tool calls or model ID and no per-message timestamps through its non-streaming APIs. Missing conversations import as metadata shells with the final reply when available.
  • Local Composer IDs and cloud-agent IDs are disjoint, so Hansard does not guess that two records are the same session.
  • The legacy Cursor CLI is historical import material, not a current runtime integration target.
Terminal window
hansard import --source cursor --since all
hansard index rebuild

A full source reimport is the clean migration when older Cursor metadata was normalized under an earlier parser.