Skip to content

Repository files navigation

Local Memory

基于 Obsidian 双向关联的本地记忆系统,为 Claude Code 提供持久化记忆能力。

特性

  • Prompt 驱动:保存、搜索等操作由 AI 使用 Unix 命令执行,灵活且透明
  • 自动注入:通过 Hooks 自动注入知识库规则,用户无感知
  • Memory + Index 分层:Memory 自包含内容和关系,Index 轻量导航且自动演化
  • 项目/全局分离:项目记忆和全局记忆通过目录分离
  • 自组织演化:分类由使用模式驱动,无需预定义模板

快速开始

bash install.sh

脚本会自动完成:

  1. 复制记忆库到 ~/.localmemory/
  2. 配置 Claude Code Hook
  3. 写入版本号

重启 Claude Code 后生效。更新时再次执行 bash install.sh,只会覆盖 prompt 和 scripts,不会丢失已有的记忆数据。

工作原理

注入机制

每次用户输入时,inject-memory.sh 会输出:

  1. 知识库规则(目录结构、操作命令、触发条件)
  2. 当前记忆库状态(Memory 总数、分类列表、项目列表)

双层架构

Memory 层(~/.localmemory/memory/):

  • 自包含的记忆单元,一个文件 = 一条完整记忆
  • 承载内容、frontmatter 元数据(created, tags)和 wiki-link 关系
  • 读取一个文件即可获得完整信息,无需跨层拼装

Index 层(~/.localmemory/index/):

  • 纯导航层,帮 AI 决定「该读哪条记忆」
  • 不重复 Memory 的内容,只保留路径 + 一句话摘要
  • 随记忆量自动演化:单文件 → 分类拆分 → 多级目录
  • 可从 Memory 层随时重建,丢失不影响数据完整性

记忆分类

项目记忆(memory/projects/{project_name}/):

  • 项目代码相关的决策
  • 项目特定的配置和约定
  • 项目相关的人员关系

全局记忆(memory/{category}/,如 knowledge/、preferences/):

  • 通用技术知识
  • 个人偏好和习惯
  • 跨项目的最佳实践

记忆淘汰

不通过写入时标签判断,而是由实际使用模式决定。compact.sh 会检查每条记忆被其他记忆引用的次数,零引用的记忆会被标记供审查。

操作方式

Prompt 驱动(AI 使用 Unix 命令):

  • 搜索记忆:cat、grep、find
  • 保存记忆:mkdir、cat >、echo >>
  • 删除记忆:rm、sed

脚本执行(复杂逻辑):

  • 整理记忆:compact.sh(重建索引、合并碎片、淘汰过期、自动拆分)

目录结构

~/.localmemory/
├── memory/                        # Memory 层:自包含记忆
│   ├── {category}/
│   │   └── {slug}.md
│   └── projects/
│       └── {project_name}/
│           └── {slug}.md
├── index/                         # Index 层:轻量导航
│   └── root.md
├── prompt/
│   ├── inject.md                  # 基础规则(静态)
│   └── supplement.md              # 补充规则(动态,AI 可修改)
└── scripts/
    ├── inject-memory.sh           # 注入脚本
    └── compact.sh                 # 整理脚本

什么信息应该保存

判断标准

应该保存的(满足至少 2 个条件):

  1. 独立性:这条记忆是否可以独立存在?
  2. 持久性:这条记忆在 1 个月后还有价值吗?
  3. 可引用性:这条记忆是否可以被未来的对话引用?
  4. 信息密度:这条记忆是否包含足够的信息?

不应该保存的:

  • 临时性的操作记录
  • 片段化的信息
  • 无价值的闲聊
  • 可以从代码/文档中直接获取的信息

保存粒度

一个 Memory 文件 = 一个完整的记忆单元

好的示例:

  • 一次完整的决策过程及结论
  • 一个完整的方法论或最佳实践
  • 一个重要的用户偏好集合
  • 一个项目的关键上下文摘要

使用方式

自动行为

AI 会根据以下条件自动操作:

自动搜索记忆:

  • 用户提到之前的事情("上次"、"之前"、"记得")
  • 用户要求回忆或总结历史
  • 问题涉及已知的上下文

自动保存记忆:

  • 用户明确要求保存("记住"、"保存")
  • 对话中产生重要决策或结论
  • 用户表达偏好或习惯

手动操作

# 整理记忆库(重建索引、清理过期、自动拆分)
bash ~/.localmemory/scripts/compact.sh

自定义

编辑基础规则

可以编辑 ~/.localmemory/prompt/inject.md 自定义:

  • 操作规则:告诉 AI 如何搜索和保存记忆
  • 触发条件:定义什么情况下触发操作

补充规则

~/.localmemory/prompt/supplement.md 是动态规则层。AI 在使用过程中可根据用户需求和使用模式自动维护此文件。每条调整带原因,删除某条即可回退。补充规则优先级高于基础规则。

调整脚本

  • inject-memory.sh:修改注入的内容和格式
  • compact.sh:调整整理逻辑和策略(如 Index 拆分阈值)

常见问题

Q: 记忆库在哪里?

在用户目录下的 ~/.localmemory/ 文件夹。

Q: 如何查看记忆?

cat ~/.localmemory/index/root.md
grep -rl "关键词" ~/.localmemory/memory/

Q: 如何清理记忆库?

bash ~/.localmemory/scripts/compact.sh

Q: 项目记忆和全局记忆有什么区别?

  • 项目记忆:与特定项目相关,存储在 memory/projects/{project_name}/
  • 全局记忆:适用于所有项目,存储在 memory/{category}/

Q: 项目记忆可以提升到全局吗?

可以。在执行 compact.sh 时,系统会检查项目记忆是否有价值纳入全局。

Q: Index 丢失了怎么办?

Index 可以随时从 Memory 层重建,执行 compact.sh 即可。

设计文档

详细设计请参见 DESIGN.md。

License

MIT

About

基于 Obsidian 双向关联的本地记忆系统,为 Claude Code 提供持久化记忆能力

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages