Cursor Conversation Import

Cursor joins Claude Code and Codex as an importable coding agent, with per-folder consent that fails closed and metadata-only detection before you approve.

Cursor is now the third coding agent Dots imports conversations from, joining Claude Code and Codex. The same two commands cover all three: dots coding-agents sync for a one-shot backfill, and dots coding-agents watch to catch up and then keep tailing. Nothing about the command surface changed to make room for it.

What The Importer Reads

Cursor does not keep conversations as loose files the way the other two agents do. It keeps them in SQLite databases under its own user-data directory — one store per workspace plus a shared global store — and opens those read-only, never writing to Cursor's state. A single conversation is identified by the pair of store file and conversation id, and a conversation that appears in both a workspace store and the global store is counted once rather than twice.

Because usage figures are optional in what Cursor records, a session carrying none produces empty token metrics and no cost estimate rather than a zero. Titles fall back through the stored conversation name, your first prompt, the assistant's first sentence, and the working directory before settling for a generic label.

Consent is not granted for "Cursor" as a whole. Every session-bearing folder Dots detects gets its own stable key of the form <platform>:<folder-hash>, and that key is the unit of consent. Approving one project's history therefore does not approve the project beside it.

The gate fails closed. A folder with no recorded decision is refused, a dismissed offer is refused, and an unreachable consent authority refuses everything rather than defaulting to open — absence is never read as permission. Record consent with the --consent flag, bare to attest every detected folder, or narrowed with a repeatable --source naming specific keys.

Detection before consent is metadata-only. It opens the SQLite store to read the conversation index — ids, names, and timestamps — and leaves the content-bearing records closed until you have said yes. Secrets are scrubbed on the way through as well, both as sessions are normalized on your machine and again server-side before anything persists.

Re-importing Is Safe

Every imported conversation is identified by its platform plus Cursor's own conversation id, and each row carries a hash of the content it was built from. A re-run compares that hash: an unchanged session is skipped without a write, a session that has grown updates the row it already owns, and only a session never seen before creates a new row. An overlapping backfill and tail converge on one row rather than racing into two.

A Cursor fault stays contained. A missing runtime feature, a corrupt store, or an unknown conversation id is counted as a failure for that one session and never blocks the Claude Code and Codex sessions sharing the same batch.

What Does Not Carry Over

The automatic question-and-answer extraction that mines conversations into structured question rows admits Claude Code and Codex sessions only, and Cursor conversations are filtered out before their bodies are read. The pass reads the interactive-question tool calls those two agents record in their transcripts, and Cursor's transcripts carry only user and assistant turns with no tool calls to read. Imported Cursor conversations are complete, searchable, connectable rows; they do not feed that one derivation.

Import Your Coding-agent Conversations covers the end-to-end flow across all three agents.

Cursor Conversation Import · This page in the graph

Connected Records9

Documented by
Mentions
DOT
References
9 connections.

Where To Go Next

Reading this as an agent?For Agents
Something wrong on this page?Dots On GitHub