Cursor CLI¶
The cursor-agent terminal CLI, modelled as its own backend
(cursor-cli) separate from the desktop IDE. Its
data spans two home directories: the original ~/.cursor/ tree
(transcripts, plans, AI-tracking) and the newer lowercase
~/.config/cursor/ tree (prompt history and chat store.db blobs).
Stores¶
- Role:
primary_chat- Format:
jsonl- Coverage:
default_search- Adapter:
cursor_cli.transcripts_jsonl.v1
- Role:
supplementary_chat- Format:
jsonl- Coverage:
default_search- Adapter:
cursor_cli.transcripts_jsonl.v1
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
plan- Format:
md_frontmatter- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
source_tree- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
supplementary_chat- Format:
sqlite- Coverage:
default_search- Adapter:
cursor_cli.ai_tracking_sqlite.v1
- Role:
prompt_history- Format:
json_array- Coverage:
default_search- Adapter:
cursor_cli.prompt_history_json.v1
- Role:
primary_chat- Format:
sqlite- Coverage:
inspectable- Adapter:
cursor_cli.chats_protobuf.v1
cursor-cli.transcripts¶
JSONL Anthropic-style: role, message.content[] with text/tool_use/tool_result. No native timestamp — agentgrep infers from the file’s mtime. Tool outputs sometimes [REDACTED] in older cursor-agent versions.
- Agent:
Cursor CLI
- Role:
primary_chat- Format:
jsonl- Coverage:
default_search- Path:
${HOME}/.cursor/projects/<id>/agent-transcripts/<session_uuid>/<session_uuid>.jsonl- Adapter:
cursor_cli.transcripts_jsonl.v1- Data version:
-- Version strategies:
-- Observed:
cursor-agent (version not surfaced publicly) (2026-05-17)
- Default search:
yes
Parsed by agentgrep via parse_cursor_cli_transcript (cursor_cli.transcripts_jsonl.v1).
cursor-cli.subagent_transcripts¶
Same JSONL Anthropic-style shape as cursor-cli.transcripts, nested under a session’s subagents/ directory.
- Agent:
Cursor CLI
- Role:
supplementary_chat- Format:
jsonl- Coverage:
default_search- Path:
${HOME}/.cursor/projects/<id>/agent-transcripts/<session_uuid>/subagents/<agent>.jsonl- Adapter:
cursor_cli.transcripts_jsonl.v1- Data version:
-- Version strategies:
-- Observed:
cursor-agent 2026.05.28-a70ca7c (2026-05-29)
- Default search:
yes
Subagent transcript files are conversation content, not primary sessions.
cursor-cli.repo_meta¶
Project tree/manifest metadata.
- Agent:
Cursor CLI
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${HOME}/.cursor/projects/<id>/repo.json- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
cursor-agent (version not surfaced publicly) (2026-05-17)
- Default search:
no
cursor-cli.tools¶
MCP tool registry and approval records.
- Agent:
Cursor CLI
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${HOME}/.cursor/projects/<id>/{mcps/*/SERVER_METADATA.json,tools/*.json,mcp-approvals.json}- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
cursor-agent (version not surfaced publicly) (2026-05-17)
- Default search:
no
cursor-cli.terminals¶
Terminal output logs.
- Agent:
Cursor CLI
- Role:
app_state- Format:
opaque- Coverage:
catalog_only- Path:
${HOME}/.cursor/projects/<id>/terminals/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
cursor-agent (version not surfaced publicly) (2026-05-17)
- Default search:
no
cursor-cli.canvases¶
Cursor canvas state.
- Agent:
Cursor CLI
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${HOME}/.cursor/projects/<id>/canvases/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
cursor-agent (version not surfaced publicly) (2026-05-17)
- Default search:
no
cursor-cli.plans¶
YAML frontmatter (name, overview, todos[], isProject) plus markdown body.
- Agent:
Cursor CLI
- Role:
plan- Format:
md_frontmatter- Coverage:
catalog_only- Path:
${HOME}/.cursor/plans/*.plan.md- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
cursor-agent (version not surfaced publicly) (2026-05-17)
- Default search:
no
cursor-cli.state¶
UI tip-shown flags and legacy-cleanup markers.
- Agent:
Cursor CLI
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${HOME}/.cursor/agent-cli-state.json- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
cursor-agent (version not surfaced publicly) (2026-05-17)
- Default search:
no
cursor-cli.worktrees¶
Full git worktrees used as code context by the CLI agent. Not chat — catalogued so future adapter PRs do not index source code as history.
- Agent:
Cursor CLI
- Role:
source_tree- Format:
opaque- Coverage:
catalog_only- Path:
${HOME}/.cursor/worktrees/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
cursor-agent (version not surfaced publicly) (2026-05-17)
- Default search:
no
Source trees, not transcripts; would drown real hits.
cursor-cli.ai_tracking¶
SQLite with conversation_summaries(conversationId, title, tldr, overview, summaryBullets, model, mode, updatedAt) — title and prose summaries of CLI agent chats, not raw transcripts. Some installs have the table empty even when the CLI agent runs — the tracker may be disabled or unused; agentgrep tolerates that silently.
- Agent:
Cursor CLI
- Role:
supplementary_chat- Format:
sqlite- Coverage:
default_search- Path:
${HOME}/.cursor/ai-tracking/ai-code-tracking.db- Adapter:
cursor_cli.ai_tracking_sqlite.v1- Data version:
-- Version strategies:
-- Observed:
cursor-agent (version not surfaced publicly) (2026-05-17)
- Default search:
yes
cursor-cli.prompt_history¶
Flat JSON array of strings — one entry per prompt typed into cursor-agent, oldest first. The CLI’s up-arrow recall buffer; no per-entry timestamps, so agentgrep stamps records with the file mtime. Lives under the lowercase ~/.config/cursor home, separate from the ~/.cursor transcript tree.
- Agent:
Cursor CLI
- Role:
prompt_history- Format:
json_array- Coverage:
default_search- Path:
${HOME}/.config/cursor/prompt_history.json- Adapter:
cursor_cli.prompt_history_json.v1- Data version:
-- Version strategies:
-- Observed:
cursor-agent 2026.05.27-fe9a6e2 (2026-05-30)
- Default search:
yes
Cursor’s prompt-history store, parity with claude.history / codex.history / grok.prompt_history. Parsed via parse_cursor_prompt_history (cursor_cli.prompt_history_json.v1).
cursor-cli.chats¶
Per-session SQLite with meta(key, value) and blobs(id, data) tables. meta holds session metadata (agentId, latestRootBlobId); blobs holds content-addressed protobuf messages forming a Merkle graph from the root blob. Cursor publishes no schema, so agentgrep walks the protobuf wire format generically and surfaces readable UTF-8 runs — best-effort and date-versioned, not an official format.
- Agent:
Cursor CLI
- Role:
primary_chat- Format:
sqlite- Coverage:
inspectable- Path:
${HOME}/.config/cursor/chats/<project_hash>/<session_uuid>/store.db- Adapter:
cursor_cli.chats_protobuf.v1- Data version:
-- Version strategies:
catalog_observation- Observed:
cursor-agent 2026.05.27-fe9a6e2 (2026-05-30)
- Default search:
no
Opt-in (inspectable), not searched by default: the protobuf extraction is best-effort and overlaps the cleaner cursor-cli.transcripts JSONL. Parsed via parse_cursor_cli_chats_db (cursor_cli.chats_protobuf.v1) when the store is explicitly included.
Record schemas¶
cursor-cli.transcripts¶
Anthropic-style JSONL: role, message.content[] with
text/tool_use/tool_result content blocks. No native per-turn
timestamp — agentgrep infers from the file’s mtime.
Sub-agent dispatches nest below a session’s subagents/ directory and
share the same JSONL record shape. agentgrep reports them as the
distinct store cursor-cli.subagent_transcripts so nested sub-agent
files do not collapse into cursor-cli.transcripts.
cursor-cli.ai_tracking¶
SQLite with conversation_summaries table: conversationId,
title, tldr, overview, summaryBullets, model, mode,
updatedAt.
cursor-cli.prompt_history¶
~/.config/cursor/prompt_history.json is a flat JSON array of
strings — one entry per prompt typed into cursor-agent, oldest
first. This is the CLI’s up-arrow recall buffer and gives Cursor the
same prompt-history store the Claude, Codex, and Grok backends expose.
There are no per-entry timestamps, so records share the file’s mtime.
cursor-cli.chats¶
~/.config/cursor/chats/<project_hash>/<session_uuid>/store.db is a
per-session SQLite database with a meta table (agentId,
latestRootBlobId) and a blobs table of content-addressed protobuf
messages forming a graph from the root blob. Cursor publishes no
schema, so agentgrep walks the protobuf wire format generically and
surfaces the readable UTF-8 runs it finds — a best-effort, date-versioned
adapter. Because the extraction is noisier than and overlaps the JSONL
transcripts, the store is inspectable (opt-in) rather than searched
by default; include it explicitly to parse it.