Claude Code 在会话结束时会自动清除所有上下文,关闭终端后,此前的决策路径、试错经验及“绝不再犯”的教训随之消失。新会话从零开始,用户不得不重复解释背景,付出额外的时间与 Token 成本。
为解决这一痛点,作者构建了一套由三层纯文本文件和四个小型 Python 钩子组成的系统,在关键节点自动移入和移出上下文。该方案无需插件或 MCP 服务器,已在包含 1,500 多条笔记的 Obsidian 知识库、170 个记忆文件及 186 项技能的环境中稳定运行。
核心架构:注入指针,而非内容
该系统遵循“注入指针,而非内容”的原则,钩子仅增加几百个 Token 的开销,其余信息按需通过 grep 获取。架构分为三个层级:
- 知识库(knowledge/):存储战略、SOP、人员信息及决策记录。按需加载,当 Claude 读取特定文件时触发。
- 记忆(memory/ + MEMORY.md):记录协作偏好、纠正事项及注意事项。每个会话启动时加载索引,具体文件按需读取。
- 钩子(Hooks):管理会话状态,包括上次交接点、习得的失败教训及技能提示。在会话开始及每次提示提交时执行。
会话流程如下:启动时读取交接状态并加载直觉;用户提交提示时建议相关技能;任务执行中 Claude 通过 grep 读取知识库;会话停止时写入交接状态并提取新直觉。
第一层:基于文件夹的知识库
Obsidian 本质是 Markdown 文件集合,将其置于工作区即可被 Claude Code 直接读取、grep 和编辑,无需 API 或认证。集成的关键在于根目录下的 CLAUDE.md 文件,它充当路由器,包含“查找位置”和“保存位置”两张表。
例如,查询人物背景指向 crm/{firstname}-{role}.md,记录战略决策则保存至 intelligence/decision-YYYY-MM-DD-topic.md。这种低成本集成得益于 Claude Code 的两个特性:
- 嵌套懒加载:子文件夹内的
CLAUDE.md仅在读取该文件夹时加载,平时不消耗资源。 - @ 导入机制:通过
@AGENTS.md集中管理规则,确保多智能体共享同一真理源。
“保存位置”表格至关重要,它引导 Claude 在任务结束后将决策、CRM 记录或经验教训写回正确路径,使知识库从单纯的读取源变为动态增长资产。笔记采用纯分类块开头,如 **Brand:**,以便通过 grep 区分不同品牌内容,避免混淆。
第二层:记忆文件与协作规范
记忆文件记录“如何与用户协作”,位于每项目文件夹下。规范为“每个事实对应一个文件”,并包含关键的 Why(原因)字段。单纯规则易被机械应用或辩驳,附带具体事件背景能让 Claude 更准确判断边缘情况。
MEMORY.md 作为索引文件,在每个会话启动时加载。为控制开销,其仅包含指向具体记忆文件的指针,且文件大小被严格限制在约 17 KB。定期修剪过时记忆是维持系统效率的必要维护成本。
第三层:四大钩子实现自动化
钩子在 Claude Code 生命周期事件中运行,接收 JSON 标准输入,并将标准输出注入上下文。配置简化如下:
{
"hooks": {
"SessionStart": ["session-handoff.py read", "load-instincts.py"],
"UserPromptSubmit": ["skill-suggest.py"],
"Stop": ["session-handoff.py write", "extract-instincts.py"]
}
}钩子 1:会话交接
会话停止时,脚本捕获修改文件、近期提交记录、草稿尾部及当前分支,写入快照文件。新会话启动时,若快照未超过 48 小时,则将其打印至上下文。为避免 git 锁文件残留导致阻塞,状态检查使用 --no-optional-locks 标志。
钩子 2:习得的直觉
会话期间的失败工具调用被记录为 JSONL。停止阶段,脚本将其转化为单行规则(上限 50 条),如“不要将 curl 输出管道传给 python”。新会话启动时,这些模式被加载,防止重蹈覆辙。
钩子 3:基于 TF-IDF 的技能建议
面对 186 项技能,自动触发易出错。该钩子在每次提示提交前,基于技能名称和描述进行 TF-IDF 检索,建议最多三项相关技能。它不使用嵌入模型或 API,仅依赖标准库,确保快速无依赖。阈值经过调整,以平衡噪音与相关性,输出明确标注为“建议”而非指令。
可靠性保障:绝不阻塞提示
每个钩子设有 3 秒硬超时,并吞没所有错误,防止因钩子崩溃导致提示停滞。在 Windows 上,通过 Node.js 包装器隐藏控制台窗口,并处理 Python 解释器路径问题,确保环境兼容性。
实际成效与建议
该架构带来了显著改变:会话始于上一轮的思考中途,同样的错误不再重演,知识库因双向读写而从 400 条笔记增长至 1,500 多条。
对于希望尝试的用户,建议从小处着手:
- 将知识库文件夹放入工作区,编写包含查找和保存路由的
CLAUDE.md。 - 添加写入和读取交接文件的 Stop/SessionStart 钩子。
- 在第二次纠正同一问题时,创建包含具体事件背景的记忆文件。
在技能数量庞大到难以管理之前,可暂时跳过复杂的 TF-IDF 检索钩子。