claude-code-memory-setup源码解读:session_autosave.py零LLM调用的SessionEnd Hook实现原理

发布时间:2026/10/17 1:38:13
claude-code-memory-setup源码解读:session_autosave.py零LLM调用的SessionEnd Hook实现原理 【免费下载链接】claude-code-memory-setupUp to 71.5x fewer tokens per session on Claude Code with Obsidian Graphify. Persistent memory, codebase knowledge graphs, and chat import pipeline. PT-BR included.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-memory-setup点击查看免费下载claude-code-memory-setup是一个把 Claude Code 与 Obsidian、Graphify 结合的开源项目用持久记忆和代码知识图谱为 Claude Code 提供第二大脑。它的scripts/session_autosave.py通过注册SessionEnd Hook在会话结束时自动把关键信息写入 Obsidian 笔记——全程零 LLM 调用、毫秒级完成、不花一分钱 token。本文带你逐段解读这个 Hook 的实现原理。为什么需要零 LLM 调用的会话自动保存 Hook先理解它要解决的痛点问题表现session_autosave.py 的对策跨会话失忆每次新会话都要重新解释项目背景会话结束时自动落盘日志下次/resume可恢复/save靠自觉忘了执行/save整场会话就消失Hook 作为安全网兜底记录每个会话LLM 调用成本高用 LLM 总结会话要消耗 token纯 JSONL 解析零 token、无需 API key项目 README.md 中将其定位为Auto-Save Hook (Safety Net)——它不是/save的替代品而是补漏机制/save产出的是包含决策和待办的富日志而自动日志保证被遗忘的会话也留下痕迹。 核心思想能机械解析的绝不调 LLM。这是整个脚本最值得关注的设计取向。项目全景session_autosave.py 在记忆架构中的位置claude-code-memory-setup由四层组成session_autosave.py负责其中连续性的最后一道防线层级工具解决的问题项目记忆Obsidian Zettelkasten 库跨会话失忆代码地图Graphify 知识图谱重复读取源码浪费 token对话历史scripts/claude_to_obsidian.py 导入管线聊天记录中的洞察丢失自动兜底scripts/session_autosave.py忘记/save时会话消失文件资料索引方便对照阅读源码Hook 主脚本scripts/session_autosave.py聊天导入脚本scripts/claude_to_obsidian.py、scripts/sync_claude_obsidian.shHook 使用文档README.md Part 5 章节版本记录CHANGELOG.md1.0.0 版本新增该 Hook第一步SessionEnd Hook 如何接收会话负载当 Claude Code 会话结束退出、/clear、登出时会触发SessionEnd事件并把一段 JSON 通过stdin传给 Hook 脚本。文件头注释 scripts/session_autosave.py 明确列出了负载结构session_id会话唯一标识transcript_path本次会话的 JSONL 转录文件路径关键输入cwd会话所在的工作目录用于推导项目名hook_event_name固定为SessionEndreason结束原因exit/clear/logout入口函数main()L211-L221的流程非常克制json.load(sys.stdin)读取负载解析失败只写日志、直接return校验transcript_path存在找不到转录文件就跳过调用parse_transcript提取事实再走过滤与写盘流程注意一个细节cwd缺失时会回退到os.getcwd()L219保证极端情况下项目名仍有来源。第二步从 JSONL 转录中机械提取会话事实parse_transcript()L59-L136是零 LLM 调用的核心——逐行读取 JSONL 转录把一场会话压缩为 6 个字段first_prompt 用户消息数 触碰的文件 执行的命令 起始时间 结束时间防御式解析兼容不同版本函数注释直言格式可能随 Claude Code 版本变化因此每次访问都加守卫。具体做法包括单行json.loads失败即continue不因坏行中断L76-L79role兼容两种来源message.role或顶层typeL88文件以errorsreplace打开编码异常也不会崩L71三个关键提取逻辑① 统计真实用户消息含去噪content可能是字符串或 block 列表脚本只取type text的块并且用text.startswith()过滤掉伪装成用户轮次的工具结果tool result 以开头L92-L106。第一条真实用户消息即被记录为first_prompt作为会话目标。② 追踪被编辑的文件扫描 assistant 消息中的tool_use块只对编辑类工具计数Edit、Write、MultiEdit、NotebookEdit及str_replace系列L116-L121。用seen_files集合去重文件路径优先取file_path、回退path字段。③ 采样执行的命令仅捕获Bash类工具兼容bash、bash_tool命名且只保留多行命令的第一行并截断到 120 字符L123-L127——目的是在日志里够用即可避免笔记被长命令刷屏。第三步零 token 成本生成 Obsidian 笔记并智能路由路由规则日志该写进哪个目录resolve_logs_dir()L148-L154用cwd的目录名作为项目名规则很简洁条件日志写入位置vault/project/目录存在vault/project/logs/否则回退到vault/logs/仓库目录名与 vault 文件夹名不一致时例如 monorepo官方建议建一个软链接解决见 README.md How routing works 一节。笔记长什么样build_note()L157-L208输出带标准 YAML frontmatter 的 Markdown 笔记--- title: Auto session log — 项目名 — 日期 时间 tags: - session-log - auto-log ← 关键标记用于 Obsidian 过滤 - 项目名 status: imported session_id: xxx end_reason: exit ---正文包含四个板块目标首条 prompt截断 300 字符、触碰的文件最多 20 条、执行命令采样最多 10 条、统计信息轮数 / 文件数 / 起止时间。这些最多 N 条的约束来自顶部配置常量 L33-L44MAX_FILES 20、MAX_COMMANDS 10、FIRST_PROMPT_MAX_CHARS 300——从源头控制笔记体积。防冲突的文件命名写入时若两个会话在同一分钟内结束脚本会自动追加-1、-2后缀避免覆盖L247-L254。四大设计原则为什么这个 Hook 从不破坏你的会话对照 README.md Part 5 的设计说明源码里一一对应设计原则源码体现⚡零 LLM 调用全程只有json、os、pathlib、datetime标准库毫秒级运行️安全网而非替代笔记末尾提示要富日志请运行/saveL206-L207静默失败log()函数自身也包了try/except passL49-L56main()每个可能出错的环节都只写~/scripts/autosave.log后returnClaude Code 完全无感知噪声过滤用户消息少于MIN_USER_MESSAGES 2的开了就关会话直接跳过L233-L235静默失败尤其值得注意Hook 运行在用户主流程上任何异常都不能让会话崩掉。所以从读 stdin、解析转录到写文件每一步都是出错→记日志→安全退出。三步实操安装在 settings.json 中注册 Hook第 1 步复制脚本mkdir -p ~/scripts # 将仓库中的 scripts/session_autosave.py 复制到 ~/scripts/ chmod x ~/scripts/session_autosave.py第 2 步在~/.claude/settings.json注册若文件已存在合并hooks键即可不要删除其他配置{ hooks: { SessionEnd: [ { hooks: [ { type: command, command: VAULT_DIR$HOME/vault python3 $HOME/scripts/session_autosave.py } ] } ] } }VAULT_DIR环境变量指向你的 Obsidian 库路径脚本默认值见 L33。第 3 步验证是否生效随便开一个项目与 Claude Code 交互 2~3 轮含一次文件编辑后退出然后检查tail -5 ~/scripts/autosave.log看到OK: wrote /path/to/vault/.../logs/YYYY-MM-DD-HHMM-auto-session.md即安装成功。之后在 Obsidian 中用tag:auto-log只看自动日志-tag:auto-log则隐藏它们。小结这个 Hook 教会我们的工程模式回看 scripts/session_autosave.py 全文仅约 260 行却浓缩了几个可复用的模式能用确定性解析解决就不调用模型——零 token、零延迟、零依赖防御式解析——对上游数据格式JSONL 转录保持最大兼容静默失败——旁路组件绝不污染主流程配置常量化——截断阈值、条数上限集中在文件顶部易于调参这正是claude-code-memory-setup整体哲学的缩影Obsidian 记住决定过什么Graphify 记住代码长什么样而session_autosave.py用最小的成本保证没有任何一场会话无声无息地消失。赞分享【免费下载链接】claude-code-memory-setupUp to 71.5x fewer tokens per session on Claude Code with Obsidian Graphify. Persistent memory, codebase knowledge graphs, and chat import pipeline. PT-BR included.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-memory-setup点击查看免费下载相关推荐新范式源码解读source-code-hunterDubbo异步调用实现原理新范式源码解读source code hunterDubbo异步调用实现原理 引言异步调用的时代价值 在微服务架构盛行的今天服务间的远程调用RPC性能文档教程技术博客知识库LLOneBot源码架构解析从Hook机制到API调用的实现原理LLOneBot源码架构解析从Hook机制到API调用的实现原理 LLOneBot是一款基于NTQQ的OneBot11协议实现通过巧妙的Hook机制和模块化后端即时通讯claude-code-memory-setup对话管线教程把Claude Code与Web聊天记录自动归档进Obsidianclaude code memory setup对话管线教程把Claude Code与Web聊天记录自动归档进Obsidian claude code mem上一篇10款提升编码效率的Hyper终端插件推荐从新手到高手的必备工具集下一篇探索创新动画工具UniGif - 动态图像生成器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询