
Claude Subconscious状态文件完全解读conversations.json与session-*.json里有什么【免费下载链接】claude-subconsciousGive Claude Code a subconscious项目地址: https://gitcode.com/GitHub_Trending/cl/claude-subconsciousClaude Subconscious 是一个为 Claude Code 提供潜意识的背景智能体插件它在后台观看你的会话、读取代码、积累跨会话记忆并在每次提示前低语回引导建议。这个插件把本地的会话状态保存在两个小文件里——conversations.json和session-*.json它们就藏在项目的.letta/claude/目录中。本文带你完整读懂这两个文件里到底存了什么、由哪个脚本写入以及它们如何配合让智能体实现跨会话记忆。状态文件存放在哪里这两个文件属于持久化状态Durable State统一存放在当前项目目录下的.letta/claude/文件夹中。如果你设置了LETTA_HOME环境变量路径会改为{LETTA_HOME}/.letta/claude/方便把所有项目的状态集中到一处。路径的生成逻辑见 getDurableStateDir项目目录/ └── .letta/ └── claude/ ├── conversations.json ← 会话 → 对话 的映射表一个项目一个 └── session-{sessionId}.json ← 每个 Claude Code 会话一份同步状态需要注意的是这里的.letta/claude/只是会话记账把 Claude Code 会话映射到 Letta 对话不是独立的智能体记忆。真正的长期记忆块存在 Letta 服务端由 README 的 State Management 章节 明确说明。conversations.json会话到对话的映射表conversations.json 是整个插件的通讯录它把每个 Claude Code 的session_id映射到对应的 LettaconversationId并记录当时使用的agentId。结构定义见 ConversationEntry 接口一个典型内容长这样{ abc123def456: { conversationId: conv-xxxxxxxx, agentId: agent-yyyyyyyy }, old789session: conv-zzzzzzzz }几个值得了解的行为首次会话由 session_start.ts 调用 Letta API 创建新对话后写入映射老格式兼容早期版本只存一个字符串sessionId: conv-xxx新版会检测并自动升级为带agentId的对象格式见 getOrCreateConversation智能体变更自愈如果你换了LETTA_AGENT_ID插件发现映射里的agentId对不上会自动清掉旧条目并创建新对话只查不建同步脚本在需要时也会用 lookupConversation 从该文件找回conversationId例如 sync_letta_memory.ts 中的兜底恢复。session-*.json每个会话的同步进度状态session-{sessionId}.json是逐会话的同步游标字段定义见 SyncState 接口{ lastProcessedIndex: 12, sessionId: abc123def456, conversationId: conv-xxxxxxxx, lastBlockValues: { user_preferences: 用户偏好显式类型标注……, pending_items: Phase 1 测试完成…… }, lastSeenMessageId: msg-01J9K7... }字段作用lastProcessedIndex记录会话记录JSONL已发送到后台智能体的位置实现增量同步不重复发送conversationId缓存该会话对应的 Letta 对话省去查映射表lastBlockValues缓存上次同步时的记忆块内容用于做差异对比diff只把变化的块注入上下文lastSeenMessageId记住最后一次已展示的消息 ID防止后台低语消息重复注入该文件的读写由 loadSyncState 与 saveSyncState 完成会话开始时由 saveSessionState 以lastProcessedIndex: -1初始化代表从头开始。一次完整的状态流转 三个钩子按顺序协作把这两个文件串成闭环SessionStartsession_start.ts读conversations.json查缓存 → 没有则创建新对话并写回 → 落盘新的session-{id}.jsonStopsend_messages_to_letta.ts每次 Claude Code 响应结束后按lastProcessedIndex截取增量记录交给后台 SDK 工作进程成功后更新状态文件UserPromptSubmit / PreToolUsesync_letta_memory.ts、pretool_sync.ts对比lastBlockValues和lastSeenMessageId只把新增/变化的记忆块与消息通过 stdout 注入给 Claude。换句话说conversations.json回答这个会话属于哪段对话session-*.json回答这段对话同步到哪了。两者都很小、纯 JSON可以直接打开查看。排查与清理建议状态文件异常或缺失时插件会回退到从头开始lastProcessedIndex: -1或重新创建对话不会阻塞使用调试钩子行为请看临时日志目录$TMPDIR/letta-claude-sync-$UID/里面有session_start.log、send_messages.log等命令见 README 的 Debugging 章节想重置某个会话的记忆同步进度只需让对应会话的session-*.json与conversations.json中的条目重新生成即可——它们都只是本地缓存真正的记忆在 Letta 服务端。 理解这两个状态文件后你基本就掌握了 Claude Subconscious 的记忆链路本地文件负责记账Letta 智能体负责记住而钩子脚本负责把两者缝合在一起。【免费下载链接】claude-subconsciousGive Claude Code a subconscious项目地址: https://gitcode.com/GitHub_Trending/cl/claude-subconscious创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考