个人记忆系统
Claude Code的跨会话存储系统。Claude Code没有持久内存——每次对话都从零开始。PMS通过4个钩子+1个MCP搜索服务+1个索引器改变了这一点,给出了Claude代码:
- 身份连续性 --每次会话自动加载您的个人资料、写作风格和首选项
- 经验积累 --从对话中吸取经验教训,并在整个会话中持续使用
- 知识检索 --通过统一界面搜索对话历史和结构化知识
- 分层可追溯性 --从摘要追溯到原始对话记录
为什么不是另一个内存框架?
GitHub上的每个Claude内存框架都做同样的事情:存储内存,搜索内存。索引对话历史、结构化存储、向量搜索——每个人都有。但它们都止步于此。没有人问下一个问题: 记住了,然后呢?
大多数框架将内存视为被动的——它坐在那里等待被搜索。即使被发现,它也只是塞进上下文的文本。代理人是否真的使用它取决于机会。
PMS的不同之处不在于底层(索引和搜索——每个人都可以这样做),而在于顶层: 如何将记忆转化为实际的代理行为变化。
- 你写的课程不只是放在一个文件里,而是写进
CLAUDE.md作为行为指示,代理人 必须 跟随 - 你的偏好不是被动检索的——它们是 自动注射 每个会话都会启动,因此代理从第一条消息中就知道你是谁
- 工作流程中需要检查的参考和遵循的SOP不是由代理人自行决定的——系统 力载荷 他们
架构:两层
┌─────────────────────────────────────────────────────┐
│ Memory Consumption Layer │
│ │
│ Three-layer progressive loading │
│ Experience → behavioral instruction pipeline │
│ Workflow-driven active memory consumption │
│ │
├─────────────────────────────────────────────────────┤
│ Memory Infrastructure Layer │
│ │
│ Index Claude Code conversation history │
│ Structured storage + unified search │
│ Session summaries with transcript traceability │
│ │
└─────────────────────────────────────────────────────┘底层:内存基础架构
基础设施层并没有重新发明轮子。Claude Code已将完整的对话记录存储在 ~/.claude/projects/ (JSONL格式,带有会话ID、时间戳和完整消息)。PMS对现有数据进行索引,将其与自己的结构化内存(课程、偏好、风格)相结合,并在两个来源之间提供统一的搜索。
索引器 --将知识文件和对话历史扫描并分块到SQLite中:
| 源 | 路径格式 | 内容 |
|---|---|---|
| 知识库 | _me/lessons.md, Growth/strategy.md等等。 | 结构化知识 |
| 会议摘要 | .claude/memory/sessions/*.md | 精选会议亮点 |
| 对话历史 | cc://{projectDir}/{session}.jsonl | 原始对话记录 |
索引是增量的(基于mtime),只处理更改的文件。
搜索引擎 --混合搜索 score = 0.7 * vector_score + 0.3 * fts_score:
- 英语为FTS5,中文为CJK双字词+LIKE
- PMS结构化内存在原始对话历史中的权重为1.2倍
- 零结果回退:二元组未命中→ 单字符搜索(0.5倍权重)
- 通过OpenAI嵌入进行可选的向量搜索(优雅地降级为仅FTS)
MCP工具 --通过stdio公开的三个工具:
| 工具 | 目的 | 示例 |
|---|---|---|
memory_search | 跨越知识+历史的模糊搜索 | memory_search("product design lessons") |
memory_search_context | 在特定文件中搜索 | memory_search_context(source="cc://...", query="...") |
memory_get | 读取文件或格式化对话 | memory_get(path="cc://project/session.jsonl") |
分层检索 --从摘要到源代码,分为三个步骤:
User: "What did I work on yesterday?"
│
▼ memory_search("yesterday")
│
├── Hit: session summary .claude/memory/sessions/20260306-1430.md
│ with transcript_ref: cc://project/abc.jsonl
│
▼ Need more detail?
│
├── memory_search_context(source="cc://...", query="...")
│ → chunk-level results within that conversation
│
└── memory_get(path="cc://...", from=5, lines=10)
→ formatted original conversation transcript顶层:内存消耗
这就是PMS的不同之处。消费层有三种机制:
1.三层渐进式上下文加载
Layer 0 (auto, every session) Layer 1 (on task identification) Layer 2 (on workflow entry)
───────────────────────────── ────────────────────────────────── ────────────────────────────
Profile, writing style, Domain-specific CLAUDE.md Project context,
preferences, experience index + content-index.md workflow SOPs,
reference materials- 第0层:SessionStart Hook注入标识(≤15000个字符)--代理从消息一中知道您
- 层1:CLAUDE.md指令强制代理在识别您的任务后加载域知识
- 层2:在输入定义的工作流时加载特定于工作流的上下文(例如,编写PRD)
2.经验→ 行为指导管道
经验教训不仅会被储存,还会被执行:
Conversation produces insight
→ on-stop Hook detects signal (6 pattern types: correction, insight, error, cognitive shift, method discovery, anti-pattern)
→ session-end Hook extracts + deduplicates
→ pending-learnings.json (staged)
→ next session: user confirms
→ written to lessons.md or domain CLAUDE.md as mandatory instructions
→ agent must follow them in future sessions3.工作流驱动的主动消费
在定义的工作流中(例如,编写PRD),系统不会等待代理“记住”——它会强制加载相关体验:
- 在写PRD之前→ 加载PRD体验规则+六题预思考框架
- 增长战略之前→ 负载增长领域知识+参考资料
- 加工新材料前→ 加载目标域的内容索引
四个钩子
PMS与Claude Code会话生命周期的四个时刻挂钩:
Session start Every user message After every AI reply Session end
│ │ │ │
▼ ▼ ▼ ▼
session-start.py user-prompt.py on-stop.py session-end.py
(inject identity) (prevent drift + (capture learning (generate summary +
match experience) signals) extract lessons)| 钩子 | 触发器 | 关键功能 |
|---|---|---|
| 会话开始 | 会话开始 | 加载配置文件/样式/首选项,扫描新文件,注入待定学习 |
| 用户提示 | 每条用户消息 | 重新注入格式规则(防漂移),关键字匹配相关课程 |
| 停止 | 每次AI回复 | 扫描输出学习信号(6种),跟踪文件更改,每7轮心跳检查一次 |
| 会话结束 | 会话结束 | 生成结构化摘要 transcript_ref,提取未决学习,触发索引同步 |
快速开始
选项1:一键自动安装(推荐)
git clone https://github.com/citrolabs/local-personal-memory-system.git
cd local-personal-memory-system
python3 scripts/auto-install.py --name "Your Name"运行:环境检测→ 配置文件设置→ 模板安装→ 吊钩安装→ 域设置→ 内存服务器构建→ 自举分析→ 安装后测试。
选项2:AI辅助安装
在克劳德代码中:
“请阅读INSTALL.md并帮助我安装此系统”
选项3:交互式向导
python3 scripts/init-wizard.py选项4:命令行(手动构建)
python3 scripts/install.py --name "Your Name" --domains "Product,Growth"
cd /.claude/memory-server && npm install && npm run build安装后结构
your-memory-dir/
├── CLAUDE.md # Agent instructions (system file)
├── config.json # System configuration
├── _me/ # Personal profile (user data — preserved on upgrade)
│ ├── profile.md # Who you are (name, role, stage, projects)
│ ├── writing-style.md # How you write (tone, patterns, banned expressions)
│ ├── preferences.md # How you work (tools, communication style)
│ ├── lessons.md # What you've learned (cross-project experience)
│ ├── workflows.md # How you operate (SOPs)
│ └── response-format.md # How you want responses formatted
│
├── Product/ # Domain workspaces (optional, role-based)
│ ├── PRD/
│ │ ├── CLAUDE.md # Domain-specific experience rules
│ │ ├── content-index.md # Reference material index
│ └── projects/
├── Growth/
│ └── projects/
├── Competitors/
│ └── projects/
├── [8 more domains...]
│
└── .claude/
├── hooks/ # 4 Hook scripts + shared libraries
├── memory/
│ ├── sessions/ # Session summaries (last 30)
│ ├── index.sqlite # FTS5 + optional vector index
│ └── pending-learnings.json # Staged experience awaiting confirmation
└── memory-server/ # MCP search service (TypeScript)根据您的角色安装的域——只安装与您相关的域。
数据库模式
files(path, mtime_ms) -- File-level change tracking
chunks(id, path, line_start, line_end, text) -- Text chunks
chunks_fts(text) -- FTS5 full-text index
vec_chunks(chunk_id, embedding) -- Vector index (optional)
session_refs(summary_path, transcript_ref) -- Summary → transcript mapping设计原则
| 原理 | 实施 |
|---|---|
| 故障打开 | 所有钩子都包裹在try-catch中——错误永远不会阻止对话 |
| 增量 | 索引器使用mtime检测,仅处理更改的文件 |
| 分层加载 | 第0层自动注入身份;第1/2层按需加载——无代币浪费 |
| 双路径降级 | 总结:首选结构化块,正则表达式回退;搜索:首选矢量,FTS5回退 |
| 指针,而不是副本 | 会议摘要参考成绩单通过 transcript_ref,切勿复制全文 |
| 用户/系统分离 | _me/ 和 projects/ 是用户数据吗?升级永远不会覆盖它们 |
系统要求
- Claude 代码命令行工具
- Python 3.8+
- Node.js 18+(用于内存服务器)
- 可选:OpenAI API密钥(启用矢量搜索)
验证
python3 scripts/verify-installation.py /path/to/install-dir支持 --fix 用于汽车维修和 --json 用于机器可读输出。
测试
# Python tests
pytest tests/ -v
# TypeScript tests
cd core/memory-server && npm test
# End-to-end
bash tests/test_e2e.sh与OpenClaw一起使用
PMS的内存消耗层可以完全集成到OpenClaw中——身份文件+技能+插件(4个自动挂钩)。完整的集成为您的OpenClaw代理提供了:
- 身份连续性 --从每次会话的第一条消息中就知道你是谁
- 搜索第一行为 --在回答实质性问题之前,先搜索积累的经验教训
- 自动体验捕捉 --检测到6种学习信号,并将其转化为行为规则
- 防漂移 --风格规则重新注入每条消息,心跳检查每7轮
- 会话总结 --会话结束时自动生成的结构化摘要
# 1. Install PMS
git clone https://github.com/citrolabs/local-personal-memory-system.git
cd local-personal-memory-system
python3 scripts/auto-install.py --name "Your Name"
# 2. Copy identity templates to your OpenClaw project
cp integrations/openclaw/templates/MEMORY.md /path/to/your/project/
cp -r integrations/openclaw/templates/_me/ /path/to/your/project/memory/
# 3. Install Skill + Plugin
cp integrations/openclaw/skill/SKILL.md /path/to/openclaw/skills/personal-memory-consumption/SKILL.md
python3 integrations/openclaw/plugin/setup.py --pms-home /path/to/your/pms-install完整指南: docs/integration-openclaw.md |设计原理: docs/philosophy.md
文档
- 安装.md --AI Agent安装指南
- 验证.md --安装后验证清单
- docs/architecture.md --系统内部构件
- docs/customization.md --扩展指南
- docs/upgrade.md --升级程序
- docs/philosophy.md --为什么存储的内存≠使用的内存
- docs/integration-openclaw.md --OpenClaw集成指南
