Claude Code¶
Claude Code stores a small global prompt history and per-project transcript
logs. agentgrep searches the global prompt history by default and adds
selected transcripts under targeted effort when a history sessionId resolves
uniquely inside the projects tree. --exhaustive adds transcript-backed
prompts from every eligible project transcript. Memory, todo, and plugin/skill
stores may join explicit broad-scope search. Settings and shell snapshots
remain inventory-only.
Base path: ~/.claude (env override: CLAUDE_CONFIG_DIR).
observed_version: claude-code v2.1.310 (observed 2026-10-25).
Stores¶
Default-search coverage marks eligibility, not an unconditional read. Fast prompt effort opens only prompt-history roles; exhaustive effort and broad scopes may add searchable chat stores. Catalog-only stores remain outside search, and private stores are not enumerated. Some catalog stores expose safe structural samples for explicit inspection.
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
source_tree- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
prompt_history- Format:
jsonl- Coverage:
default_search- Adapter:
claude.history_jsonl.v1
- Role:
primary_chat- Format:
jsonl- Coverage:
default_search- Adapter:
claude.projects_jsonl.v1
- Role:
supplementary_chat- Format:
jsonl- Coverage:
default_search- Adapter:
claude.projects_jsonl.v1
- Role:
persistent_memory- Format:
md_frontmatter- Coverage:
inspectable- Adapter:
claude.projects_memory_text.v1
- Role:
persistent_memory- Format:
text- Coverage:
inspectable- Adapter:
claude.memory_text.v1
- Role:
todo- Format:
json_object- Coverage:
inspectable- Adapter:
claude.tasks_json.v1
- Role:
todo- Format:
json_object- Coverage:
inspectable- Adapter:
claude.todos_json.v1
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
claude.app_state_json_summary.v1
- Role:
app_state- Format:
sqlite- Coverage:
inspectable- Adapter:
claude.store_sqlite.v1
- Role:
plan- Format:
text- Coverage:
inspectable- Adapter:
claude.plans_text.v1
- Role:
app_state- Format:
text- Coverage:
inspectable- Adapter:
claude.workflow_scripts_text.v1
- Role:
app_state- Format:
json_object- Coverage:
inspectable- Adapter:
claude.usage_facets_json.v1
- Role:
persistent_memory- Format:
text- Coverage:
inspectable- Adapter:
claude.session_memory_text.v1
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
claude.settings_json.v1
- Role:
app_state- Format:
json_object- Coverage:
private- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
claude.app_state_json_summary.v1
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Adapter:
claude.app_state_json_summary.v1
- Role:
app_state- Format:
text- Coverage:
catalog_only- Adapter:
claude.file_metadata_summary.v1
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
text- Coverage:
catalog_only- Adapter:
claude.file_metadata_summary.v1
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
claude.app_state_json_summary.v1
- Role:
app_state- Format:
json_object- Coverage:
private- Adapter:
-
- Role:
instruction- Format:
text- Coverage:
inspectable- Adapter:
claude.skills_text.v1
- Role:
instruction- Format:
text- Coverage:
inspectable- Adapter:
claude.commands_text.v1
- Role:
instruction- Format:
text- Coverage:
inspectable- Adapter:
claude.project_instruction_text.v1
- Role:
instruction- Format:
json_object- Coverage:
inspectable- Adapter:
claude.teams_json.v1
- Role:
app_state- Format:
opaque- Coverage:
private- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
claude.app_state_json_summary.v1
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
claude.app_state_json_summary.v1
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
claude.app_state_json_summary.v1
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
claude.app_state_json_summary.v1
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
cache- Format:
opaque- Coverage:
inspectable- Adapter:
claude.plugin_manifest_json.v1,claude.plugin_instruction_text.v1,claude.plugin_hooks_json.v1
- Role:
instruction- Format:
md_frontmatter- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
opaque- Coverage:
private- Adapter:
-
- Role:
app_state- Format:
text- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Adapter:
-
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Adapter:
-
- Role:
app_state- Format:
opaque- Coverage:
catalog_only- Adapter:
-
claude.global_config¶
Sibling file of the Claude home, not a member of it, so no path pattern rooted at ${CLAUDE_CONFIG_DIR or ${HOME}/.claude} reaches it. A projects object keyed by absolute project root records per-project state including lastSessionId, lastSessionFirstPrompt, lastSessionModified, and per-project MCP server lists; the top level carries oauthAccount, userID, machineID, and usage counters. lastSessionFirstPrompt is the only prompt text, and it duplicates the transcript, so the row is an inventory of which projects Claude knows rather than a search surface. Older versions kept per-project history arrays here; those are now empty.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${HOME}/.claude.json- Adapter:
-
- Data version:
-- Version strategies:
shape_inference- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.projects.subagent_meta¶
Sidecar beside each subagent transcript, carrying spawnDepth, agentType, and — when the dispatch came from the Task tool — toolUseId, description, model, and parentAgentId. description is the dispatch text, the only record of why a subagent was spawned; agentgrep reads it, else name, as the title of every record in the transcript beside it. model is only the requested alias (sonnet, inherit); the transcript’s assistant turns carry the resolved model, which is what records report. Worktree-scoped runs also carry worktreePath and spawnedWithWorktree.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/projects/<encoded_project>/<session_uuid>/subagents/<agent>.meta.json- Adapter:
-
- Data version:
-- Version strategies:
shape_inference- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.worktrees¶
Git worktrees Claude Code creates with -w/--worktree, checked out inside the repository on a branch named worktree-<name>. There is no index file: the record is git’s own .git/worktrees/ registry plus the cwd and gitBranch fields every transcript line repeats. Each worktree mints its own encoded directory under projects/, so one repository’s history splits across several store keys — see the worktree section of the backends index. Catalogued so the adapter never indexes a working tree as chat, parity with cursor-cli.worktrees.
- Agent:
Claude
- Role:
source_tree- Format:
opaque- Coverage:
catalog_only- Path:
<project_root>/.claude/worktrees/<name>- Adapter:
-
- Data version:
-- Version strategies:
catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.history¶
Global prompt history JSONL. Each line carries display, pastedContents, timestamp (Unix milliseconds), project, and sessionId. Large text pastes may be content-addressed through paste-cache/<contentHash>.txt.
- Agent:
Claude
- Role:
prompt_history- Format:
jsonl- Coverage:
default_search- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/history.jsonl- Adapter:
claude.history_jsonl.v1- Data version:
claude.history_jsonl.log_entry.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
yes
Record keys observed (2.1.310, 2026-10-25)
- Keys:
display,pastedContents,project,timestamp
User-prompt audit log used by Claude Code prompt history; project transcripts remain the full conversation replay.
claude.projects.session¶
JSONL; stream fragments grouped by uuid, dedup across /resume, skip isCompactSummary: true. Keys: type, uuid, parentUuid, timestamp, sessionId, cwd, gitBranch, version, message.role, message.content[] (text/thinking/tool_use/tool_result), message.usage. Non-message record types also appear — queue-operation (queued prompt text in content, no role), mode, permission-mode, ai-title, last-prompt, agent-name, pr-link, attachment, file-history-snapshot, system, bridge-session, and the api-request, api-request-shape, and api-request-blob snapshots — only role-bearing message records are indexed, and api-request-blob, which copies each message sent to the API, is skipped. Each record takes the event’s top-level timestamp; the nested message carries none. custom-title (set by /rename) and ai-title name the session: agentgrep reads the last of each from the file’s final 64 KiB and titles every record with the custom name, else the AI one.
- Agent:
Claude
- Role:
primary_chat- Format:
jsonl- Coverage:
default_search- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/projects/<encoded_project>/<session_uuid>.jsonl- Adapter:
claude.projects_jsonl.v1- Data version:
claude.projects_jsonl.message.v1- Version strategies:
embedded_metadata, shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
yes
Record keys by type observed (2.1.310, 2026-10-25)
- agent-name:
agentName,sessionId,type- ai-title:
aiTitle,sessionId,type- api-request:
base,cacheControl,id,keep,params,querySource,requestDigest,sessionId,shapeHash,tail,timestamp,type,version- api-request-blob:
hash,message,sessionId,type- api-request-shape:
sessionId,shape,shapeHash,timestamp,type,version- assistant:
advisorModel,apiBlockIndex,apiErrorStatus,attributionMcpServer,attributionMcpTool,attributionPlugin,attributionSkill,cwd,effort,entrypoint,error,forkedFrom,gitBranch,isApiErrorMessage,isSidechain,message,parentUuid,perTurnEffort,requestId,requestRef,requestedModel,resendCannotCure,sessionId,session_id,thinkingDisplay,thinkingDurationMs,timestamp,type,userType,uuid,version,wireIngestContext,wireToolInputs- atis-latch:
atis,sessionId,type- attachment:
attachment,cwd,entrypoint,forkedFrom,gitBranch,isSidechain,parentUuid,rendered,renderedBesideToolResult,renderedInHumanTurn,renderedRole,sessionId,session_id,timestamp,type,userType,uuid,version- bridge-session:
bridgeSessionId,lastSequenceNum,ownerAccountUuid,ownerOrganizationUuid,sessionId,type- cost-state:
hasUnknownModelCost,modelUsage,sessionId,startTime,totalAPIDuration,totalAPIDurationWithoutRetries,totalCostUSD,totalDuration,totalLinesAdded,totalLinesRemoved,totalToolDuration,type- custom-title:
customTitle,sessionId,type- file-history-delta:
backup,messageId,snapshotMessageId,timestamp,trackingPath,type- file-history-snapshot:
isSnapshotUpdate,messageId,snapshot,type- last-prompt:
lastPrompt,leafUuid,sessionId,type- mode:
mode,sessionId,type- permission-mode:
permissionMode,sessionId,type- queue-operation:
commandUuid,content,deliveryId,operation,reason,sessionId,timestamp,type- system:
commandRun,content,cwd,durationMs,entrypoint,forkedFrom,gitBranch,hasOutput,hookAdditionalContext,hookCount,hookErrors,hookInfos,isMeta,isSidechain,level,messageCount,parentUuid,pendingBackgroundAgentCount,preventedContinuation,sessionId,session_id,stopReason,subtype,timestamp,toolUseID,type,userType,uuid,version- user:
cwd,entrypoint,forkedFrom,gitBranch,interruptedMessageId,isMeta,isSidechain,message,origin,parentUuid,permissionDecision,permissionMode,promptId,promptSource,queueSkipAttachments,queueSkipSlashCommands,sandboxed,sessionId,session_id,sourceToolAssistantUUID,sourceToolUseID,timestamp,toolEndsTurn,toolUseResult,turnCompanion,turnOrigin,turnPosition,type,userType,uuid,version
claude.projects.subagent¶
Same JSONL line format as the parent session. Each file is one sub-agent dispatch from the Task tool.
- Agent:
Claude
- Role:
supplementary_chat- Format:
jsonl- Coverage:
default_search- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/projects/<encoded_project>/<session_uuid>/subagents/<agent>.jsonl- Adapter:
claude.projects_jsonl.v1- Data version:
claude.projects_jsonl.message.v1- Version strategies:
embedded_metadata, shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
yes
Record keys by type observed (2.1.310, 2026-10-25)
- api-request:
agentId,base,cacheControl,id,keep,params,querySource,requestDigest,sessionId,shapeHash,tail,timestamp,type,version- api-request-blob:
agentId,hash,message,sessionId,type- api-request-shape:
agentId,sessionId,shape,shapeHash,timestamp,type,version- assistant:
advisorModel,agentId,apiBlockIndex,apiError,apiErrorParams,apiErrorStatus,attributionAgent,attributionPlugin,attributionSkill,cwd,effort,entrypoint,error,gitBranch,isApiErrorMessage,isSidechain,message,parentUuid,perTurnEffort,quotaLimits,requestId,requestRef,requestedModel,sessionId,slug,thinkingDisplay,thinkingDurationMs,timestamp,type,userType,uuid,version,wireIngestContext,wireToolInputs- attachment:
agentId,attachment,cwd,entrypoint,gitBranch,isSidechain,parentUuid,rendered,renderedInHumanTurn,renderedRole,sessionId,slug,timestamp,type,userType,uuid,version- user:
agentId,cwd,entrypoint,gitBranch,isMeta,isSidechain,joinedNoticeLengths,joinedNoticeOwn,joinedNoticeRunIds,message,origin,parentUuid,permissionDecision,promptId,sandboxed,sessionId,slug,sourceToolAssistantUUID,timestamp,toolDenialKind,toolUseResult,type,userType,uuid,version
Sub-agent transcripts are conversation content; de-duplicate with the parent session by uuid.
claude.projects.memory¶
Markdown files with YAML frontmatter; the auto-memory feature. Each file holds one fact/feedback/project/reference memory.
- Agent:
Claude
- Role:
persistent_memory- Format:
md_frontmatter- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/projects/<encoded_project>/memory/*.md- Adapter:
claude.projects_memory_text.v1- Data version:
claude.projects.memory.markdown.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.memory_files¶
Persistent user and project memory Markdown loaded into Claude Code. Project-root files are discovered only from roots already referenced by local Claude project transcripts.
- Agent:
Claude
- Role:
persistent_memory- Format:
text- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/CLAUDE.md and known project roots/{CLAUDE.md,.claude.md}- Adapter:
claude.memory_text.v1- Data version:
claude.memory.markdown.v1, claude.project_memory.markdown.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.tasks¶
Claude Code task JSON with id, subject, description, status, blocks, blockedBy, and optional activeForm / metadata fields.
- Agent:
Claude
- Role:
todo- Format:
json_object- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/tasks/<task_list>/<task_id>.json- Adapter:
claude.tasks_json.v1- Data version:
claude.tasks.json.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.todos¶
Persistent todo lists keyed by agent UUID.
- Agent:
Claude
- Role:
todo- Format:
json_object- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/todos/*.json- Adapter:
claude.todos_json.v1- Data version:
claude.todos.json.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.sessions¶
Shell environment snapshots; rarely contains conversation text.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/sessions/- Adapter:
claude.app_state_json_summary.v1- Data version:
claude.sessions.json.v1- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.store_db¶
SQLite conversation/app state. Observed tables include base_messages, user_messages, assistant_messages, and conversation_summaries; message tables can duplicate JSONL transcript content, so this stays opt-in.
- Agent:
Claude
- Role:
app_state- Format:
sqlite- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/__store.db- Adapter:
claude.store_sqlite.v1- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.plans¶
Markdown plans stored under the configured Claude Code root. Project settings may redirect plan creation, but this root is the global default observed in current installs.
- Agent:
Claude
- Role:
plan- Format:
text- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/plans/*.md- Adapter:
claude.plans_text.v1- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.projects.workflows¶
Orchestration-workflow driver scripts emitted by the Workflow tool, each carrying an embedded meta = {name, description} that names the workflow intent. Machine-generated driver code; inspectable opt-in, not searched by default.
- Agent:
Claude
- Role:
app_state- Format:
text- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/projects/<encoded_project>/<session_uuid>/workflows/scripts/<name>.js- Adapter:
claude.workflow_scripts_text.v1- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.usage_data¶
Claude Code’s own derived per-session reflection summaries. The readable natural-language fields are brief_summary, underlying_goal, and friction_detail; counts and category fields are metadata. Derived state, not transcript — inspectable opt-in, not searched by default.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/usage-data/facets/<session>.json- Adapter:
claude.usage_facets_json.v1- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.projects.session_memory¶
Per-session memory summary Markdown plus optional session-memory template/prompt configuration. It can contain prompt context but is not part of the default transcript search surface.
- Agent:
Claude
- Role:
persistent_memory- Format:
text- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/projects/<encoded_project>/<session_uuid>/session-memory/summary.md- Adapter:
claude.session_memory_text.v1- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.settings¶
User configuration, local overrides, keybindings, policy limits, and update/auth cache state. Documented for inventory, not searched as prompt history.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/{settings*.json,keybindings.json}- Adapter:
claude.settings_json.v1- Data version:
claude.settings.json.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.credentials¶
Authentication and account credentials. Documented but never enumerated.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
private- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/.credentials.json- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.update_state¶
Update and cleanup marker files; not prompt history.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/{.last-*,.last-update-result.json}- Adapter:
claude.app_state_json_summary.v1- Data version:
claude.update_state.json.v1- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.stats_cache¶
Cached usage and statistics state; not conversation content.
- Agent:
Claude
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/stats-cache.json- Adapter:
claude.app_state_json_summary.v1- Data version:
claude.stats_cache.json.v3- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.debug_logs¶
Debug output and diagnostics. Catalogued separately from transcripts.
- Agent:
Claude
- Role:
app_state- Format:
text- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/debug/- Adapter:
claude.file_metadata_summary.v1- Data version:
claude.debug_logs.text.v1- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.backups¶
Backup files retained by Claude Code; opaque inventory only.
- Agent:
Claude
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/backups/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.generic_cache¶
General cache directory; not a prompt/history source.
- Agent:
Claude
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/cache/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.file_history¶
Content-addressed file-history backups referenced by transcript snapshots. This can be large and is not conversation history.
- Agent:
Claude
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/file-history/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.shell_snapshots¶
Shell integration snapshots; runtime state rather than prompt history.
- Agent:
Claude
- Role:
app_state- Format:
text- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/shell-snapshots/*.sh- Adapter:
claude.file_metadata_summary.v1- Data version:
claude.shell_snapshot.text.v1- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.image_cache¶
Base64/image payload cache for pasted image references.
- Agent:
Claude
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/image-cache/<session>/<image>- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.context_mode¶
Context-mode counters and local app state, sometimes backed by SQLite.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/context-mode/- Adapter:
claude.app_state_json_summary.v1- Data version:
claude.context_mode.json.v1- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.security_state¶
Security warning and repository baseline state.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
private- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/{security/,security_warnings_state_*.json}- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.skills¶
User and managed skill instructions loaded into Claude Code behavior.
- Agent:
Claude
- Role:
instruction- Format:
text- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/skills/- Adapter:
claude.skills_text.v1- Data version:
claude.skills.markdown.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.commands¶
Legacy custom slash-command Markdown loaded through the skill loader.
- Agent:
Claude
- Role:
instruction- Format:
text- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/commands/- Adapter:
claude.commands_text.v1- Data version:
claude.commands.markdown.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.project_instructions¶
Project-local commands, agents, and skills. Roots are bounded to projects already observed in local Claude transcript metadata.
- Agent:
Claude
- Role:
instruction- Format:
text- Coverage:
inspectable- Path:
${HOME}/<known_project_root>/.claude/{commands,agents,skills}/- Adapter:
claude.project_instruction_text.v1- Data version:
claude.project_commands.markdown.v1, claude.project_agents.markdown.v1, claude.project_skills.markdown.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.teams¶
Team config JSON with member prompts and coordination metadata.
- Agent:
Claude
- Role:
instruction- Format:
json_object- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/teams/- Adapter:
claude.teams_json.v1- Data version:
claude.teams.config_json.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.session_env¶
Environment state captured for active or resumed sessions.
- Agent:
Claude
- Role:
app_state- Format:
opaque- Coverage:
private- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/session-env/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.ide¶
IDE integration state and bridge metadata.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/ide/- Adapter:
claude.app_state_json_summary.v1- Data version:
claude.ide.json.v1- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.chrome¶
Claude-in-Chrome native-host and browser bridge state.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/chrome/- Adapter:
claude.app_state_json_summary.v1- Data version:
claude.chrome.json.v1- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.native_install¶
Native installer and local binary-management state.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/local/- Adapter:
claude.app_state_json_summary.v1- Data version:
claude.native_install.json.v1- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.jobs¶
Background job state and metadata, summarized without raw values.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/jobs/- Adapter:
claude.app_state_json_summary.v1- Data version:
claude.jobs.json.v1- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.uploads¶
Attachment upload staging; documented as opaque cache inventory.
- Agent:
Claude
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/uploads/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.paste_cache¶
Transient clipboard staging.
- Agent:
Claude
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/paste-cache/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.plugins_cache¶
Installed plugin bundles. Manifest, command, agent, skill, and hook instruction surfaces are inspectable; runtime/cache payloads remain opaque.
- Agent:
Claude
- Role:
cache- Format:
opaque- Coverage:
inspectable- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/plugins/cache/- Adapter:
claude.plugin_manifest_json.v1, claude.plugin_instruction_text.v1, claude.plugin_hooks_json.v1- Data version:
claude.plugin_manifest.json.v1, claude.plugin_instruction.markdown.v1, claude.plugin_hooks.json.v1- Version strategies:
shape_inference, catalog_observation- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.plugins_marketplaces¶
Cloned plugin-marketplace repos under plugins/marketplaces/<repo>/ holding agent/command/skill instruction Markdown, including plugins not installed; installed plugins also resolve under plugins/cache/ (inspected by claude.plugins_cache).
- Agent:
Claude
- Role:
instruction- Format:
md_frontmatter- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/plugins/marketplaces/<repo>/<plugin>/{agents,commands,skills}/<name>.md- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.telemetry¶
First-party analytics events Claude Code failed to send, kept for a later retry. Usage telemetry, not conversation content.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/telemetry/1p_failed_events.<session_uuid>.<event_uuid>.json- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.daemon_status¶
State of the background daemon: supervisorPid, supervisorProcStart, workers, and writtenAt. Runtime state, not conversation content.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/daemon.status.json- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.mcp_auth_cache¶
MCP servers waiting for authentication, each server name mapped to {id, timestamp}. Names and times only; no tokens.
- Agent:
Claude
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/mcp-needs-auth-cache.json- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.daemon¶
Working directory of the background daemon whose state claude.daemon_status records: attach-journal/, dispatch/, a roster.json, and a control.key. The key makes it private: documented, never enumerated.
- Agent:
Claude
- Role:
app_state- Format:
opaque- Coverage:
private- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/daemon/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.hooks¶
User-written hook scripts that the settings point at. Code, not conversation content.
- Agent:
Claude
- Role:
app_state- Format:
text- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/hooks/<hook_script>- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.policy_limits¶
Organisation policy synced from the server. policy-limits.json has compliance_taints, defaults, monitoring_notice, and restrictions; the .signature.json copy has jws and receivedAt; the .stamp.json copy has confirmed_at, hipaa_seen, identity, kind, sha, and v. Not conversation content.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/{policy-limits.json,policy-limits.json.signature.json,policy-limits.json.stamp.json}- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.remote_settings¶
Remote settings synced from the server: remote-settings.json, an object that was empty when observed, and remote-settings.json.synced-at, a bare number for when it last synced. Not conversation content.
- Agent:
Claude
- Role:
app_state- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/{remote-settings.json,remote-settings.json.synced-at}- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.remote¶
Program and runtime files for remote sessions: ccd-cli/ holds one build per version, named <version>-<hash>; run/ and srv/ hold runtime files named by hash; plugins/ was empty when observed. Not conversation content.
- Agent:
Claude
- Role:
cache- Format:
opaque- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/remote/<component>/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.plugin_directory_cache¶
The plugin directory fetched from the marketplace: entryNameClaims, entryNames, fetchedAt, listings, and schemaVersion. Several megabytes, rebuilt on fetch, and not conversation content.
- Agent:
Claude
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/plugins/plugin-directory-cache-v2.json- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.plugins_synced¶
Server-synced marketplace state, one directory per account and organisation pair (two UUIDs joined by an underscore), each with a matching .bucket-<account_org> directory. The names identify an account, so the observer lists the directory once. Not conversation content.
- Agent:
Claude
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/plugins/synced/<account_org>/{.marketplaces.json,.last-complete-round}- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.mcp_discover_verdicts¶
A map from an MCP server id to {modernProtocolVersion, observedAt}: what discovery learned about each server. Not conversation content.
- Agent:
Claude
- Role:
cache- Format:
json_object- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/state/mcp-discover-verdicts.json- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
claude.scratch_dirs¶
Five directories that appear as Claude Code runs and were empty when observed: .cc-writes, bridge-spawn, dev-mods, seed-admin, and ssh. Their names suggest the features that fill them, which agentgrep has not seen in use.
- Agent:
Claude
- Role:
app_state- Format:
opaque- Coverage:
catalog_only- Path:
${CLAUDE_CONFIG_DIR or ${HOME}/.claude}/{.cc-writes,bridge-spawn,dev-mods,seed-admin,ssh}/- Adapter:
-
- Data version:
-- Version strategies:
-- Observed:
claude-code v2.1.310 (2026-10-25)
- Default search:
no
Version detection¶
Claude Code source discovery reports data-shape versions from concrete
record evidence. Global history records with display, timestamp,
and project are reported as claude.history_jsonl.log_entry.v1.
Project and sub-agent transcripts use embedded transcript version
metadata when present; otherwise their type, sessionId, and
message keys identify the JSONL message shape.
Task files with id, subject, description, and status are
reported as claude.tasks.json.v1. Todo, team, app-state, skill,
command, plugin, project instruction, user/project memory, and
auto-memory stores use path and key-shape inference for their
non-default adapters. Settings and app-state files use
medium-confidence key/type summaries because their values are
deliberately not indexed. Debug logs and shell snapshots expose
metadata-only summaries, not raw file content.
Catalog observation stamps remain the fallback for discovered stores whose concrete shape cannot be sampled safely.
Record schemas¶
Global prompt history¶
claude.history is the global JSONL prompt-history audit log at
${CLAUDE_CONFIG_DIR or ~/.claude}/history.jsonl. Each line carries
display, pastedContents, timestamp as Unix milliseconds, project, and
sessionId. display is the user-facing prompt text; when it contains
[Pasted text #N] placeholders, agentgrep expands inline text from
pastedContents or the external paste-cache/<contentHash>.txt file when
present. Missing or non-text paste entries keep their original placeholder
text.
{"display": "Review [Pasted text #1]",
"pastedContents": {"1": {"type": "text", "content": "..."}},
"timestamp": 1700000000000,
"project": "/repo",
"sessionId": "..."}
Project transcripts¶
claude.projects.session is JSONL with stream fragments grouped by
uuid. Keys: type, uuid, parentUuid, timestamp, sessionId, cwd,
gitBranch, version, message.role, message.content[]
(text/thinking/tool_use/tool_result), message.usage.
{"type": "user", "uuid": "...", "timestamp": "2026-05-17T...",
"message": {"role": "user", "content": [{"type": "text", "text": "..."}]}}
Each record takes the timestamp of the event around its message; the
nested message carries none.
A session’s records take their title from the transcript’s own title
records: the last custom-title (the name given with /rename), else the
last ai-title Claude Code generated. agentgrep looks for them only in the
file’s final 64 KiB, where Claude Code keeps re-appending them; a session
renamed once and never re-titled after a long stretch would carry no title.
A title is searchable text, so a term in it matches every record of the
session.
Sub-agent dispatches nest under <session_uuid>/subagents/ and use
the same record parser. agentgrep reports them as the distinct runtime store
claude.projects_subagents so main session files and nested sub-agent files do
not collapse into one source. Each sub-agent transcript titles its records
from the claude.projects.subagent_meta sidecar beside it:
the dispatch description, else its name. A title is searchable text, so a
term in it matches every record of that transcript.
Store database¶
claude.store_db is Claude Code’s __store.db under the config
root. Observed tables include base_messages, user_messages,
assistant_messages, and conversation_summaries. The message tables can
duplicate JSONL transcript content, so agentgrep catalogs and discovers the DB
for explicit inventory but does not search it by default.
Session memory¶
claude.projects.session_memory summaries live under
projects/<encoded_project>/<session_uuid>/session-memory/summary.md. They
can contain prompt context and summaries, but they are derived state rather
than the primary transcript.
Tasks, Plans, And Configuration¶
Tasks are JSON files under tasks/<task_list>/<task_id>.json with
id, subject, description, status, blocks, blockedBy, and
optional metadata fields. agentgrep emits one inspectable task sample
from the subject and description plus status/blocking metadata. Plans
are Markdown files under plans/*.md. Orchestration-workflow driver
scripts written by the Workflow tool live under
projects/<encoded_project>/<session_uuid>/workflows/scripts/*.js,
each carrying an embedded meta = {name, description}; they are
inspectable (opt-in), not searched by default.
Settings and keybindings expose only top-level key summaries for
explicit inspection, so raw values such as environment variables are
not indexed. Auto-memory Markdown, CLAUDE.md memory files,
persistent todos, user skills, legacy commands, project-local
commands/agents/skills, plugin instructions, and team member prompts
are inspectable because they can steer future Claude Code behavior.
Project-local files are discovered only from roots already referenced
by local Claude transcript metadata; agentgrep does not recursively
scan $HOME for every possible project.
Claude’s own derived per-session reflection summaries under
usage-data/facets/*.json are inspectable: agentgrep emits the
natural-language brief_summary, underlying_goal, and
friction_detail fields and leaves the count/category metadata aside.
This is derived state, not transcript, so it is opt-in.
Context-mode files, IDE bridge state, Chrome/native integration state, native installer metadata, jobs, stats/update cache, and session state expose only key/type summaries. Debug logs and shell snapshots expose file metadata such as name, suffix, byte size, and line count. Security state, session environment, uploads, file history, backups, generic cache, credentials, and image/paste caches stay catalogued or private so storage audits can identify them without treating them as default prompt history.
Changes by version¶
Each entry brackets a change between the observation that first saw it and the last one that did not; see Observed record shapes.
2.1.310¶
Seen in 2.1.310 (2026-10-25); absent in 2.1.269 (2026-09-11).
Session and subagent transcripts add three request-snapshot record types:
api-request,api-request-shape, andapi-request-blob. A blob’smessagecopies a message the request sent, the system prompt and the injected context among them. Search had read blobs as turns, so it returned each message twice and returned the system prompt; it now skips them.Session transcripts add
bridge-sessionrecords, carrying abridgeSessionId, alastSequenceNum, and the owning account and organization ids. None holds message text.Assistant records add
requestRef,requestedModel,resendCannotCure,thinkingDisplay,thinkingDurationMs,wireIngestContext, andwireToolInputs. User records addinterruptedMessageId,permissionDecision,queueSkipSlashCommands,sandboxed,turnOrigin, andturnPosition. Search reads none of them.The sample carries no
slug, which the 2.1.226 through 2.1.269 manifests list on assistant, attachment, system, and user records. Transcripts written by 2.1.299 still carry it, so it went between 2.1.299 and 2.1.310.The rest of the diff is sample turnover:
pr-link,compactMetadata,logicalParentUuid,isCompactSummary, andisVisibleInTranscriptOnlystill occur in recent transcripts.Paths appear that no row covered, catalogued since as
claude.hooks,claude.policy_limits,claude.remote_settings,claude.remote,claude.plugin_directory_cache,claude.plugins_synced, andclaude.mcp_discover_verdicts. Five directories,.cc-writes,bridge-spawn,dev-mods,seed-admin, andssh, were empty when observed and areclaude.scratch_dirs.
2.1.269¶
Observed 2026-09-11, the same day as 2.1.268; no storage change.
The sample adds four keys that mark a compacted session:
compactMetadataandlogicalParentUuidon system records, andisCompactSummaryandisVisibleInTranscriptOnlyon user records. Transcripts written by 2.1.259 through 2.1.268 carry them as well; the 2.1.268 sample simply held no compacted session. Search skipsisCompactSummaryrecaps, which restate a conversation rather than record a turn.The rest is sample turnover rather than a schema change, because a manifest reads each store’s newest files.
pendingBackgroundAgentCount,slug,attributionPlugin, andtoolEndsTurnappear in the 2.1.226 manifest;turnCompanionstays on session records, where 2.1.268 first saw it; and the subagentresultandstartedrecord types this sample misses appear in the 2.1.268 one.
2.1.268¶
Seen in 2.1.268 (2026-09-11); absent in 2.1.226 (2026-08-08).
Session transcripts add three record types:
custom-titleholds the name you give a session with/rename,cost-stateholds cost, duration, and line-count totals, andatis-latchholds anatisobject. None carries message text, so none becomes a result;custom-titletitles the session’s records instead (see Project transcripts).Assistant records add
advisorModel,perTurnEffort, andapiBlockIndex; user records addturnCompanionandqueueSkipAttachments. Search reads none of them.Three paths appear, catalogued since as
claude.telemetry,claude.daemon_status, andclaude.mcp_auth_cache:telemetry/holds1p_failed_events.*.jsonanalytics payloads,daemon.status.jsonrecords the background daemon’s supervisor and workers, andmcp-needs-auth-cache.jsonnames MCP servers waiting for authentication. None holds conversation text.