memory-bank-skill 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,108 @@
1
+ # Memory Bank Skill
2
+
3
+ 项目记忆系统 - 自动读取上下文、自动沉淀发现、追踪需求与技术变更。
4
+
5
+ ## 简介
6
+
7
+ Memory Bank 是一个纯 Markdown 的项目记忆系统。通过结构化文档将 AI 的"记忆"外化,解决 AI 编码助手 session 间失忆的问题。
8
+
9
+ ### 核心能力
10
+
11
+ - **自动读取**: Session 开始时自动加载项目上下文
12
+ - **自动写入**: 在关键时刻自动沉淀发现和决策
13
+ - **需求追踪**: 管理需求池,记录需求变更历史
14
+ - **技术文档**: 三层技术文档(架构/模块/细节),追踪实现变更
15
+ - **经验沉淀**: 分类管理 bug/性能/集成经验
16
+
17
+ ## 目录结构
18
+
19
+ ```
20
+ memory-bank/
21
+ ├── brief.md # 项目概述
22
+ ├── tech.md # 技术栈 + 环境
23
+ ├── active.md # 当前焦点(高频更新)
24
+ ├── progress.md # 进度状态
25
+ ├── patterns.md # 决策 + 约定
26
+
27
+ ├── requirements/ # 需求池
28
+ │ └── REQ-{ID}-{slug}.md
29
+
30
+ ├── docs/ # 技术文档
31
+ │ ├── architecture.md # L1: 架构层
32
+ │ ├── modules/ # L2: 模块层
33
+ │ └── specs/ # L3: 细节层
34
+
35
+ └── learnings/ # 经验沉淀
36
+ ├── bugs/
37
+ ├── performance/
38
+ └── integrations/
39
+ ```
40
+
41
+ ## 使用方法
42
+
43
+ ### 初始化
44
+ ```
45
+ 初始化记忆
46
+ init memory bank
47
+ ```
48
+
49
+ ### 更新
50
+ ```
51
+ 更新记忆
52
+ update memory bank
53
+ ```
54
+
55
+ ### 新建需求
56
+ ```
57
+ 新需求: 用户登录功能
58
+ new req: user login
59
+ ```
60
+
61
+ ### 记录经验
62
+ ```
63
+ 记录经验: bug Safari兼容问题
64
+ log learning: bug safari-compat
65
+ ```
66
+
67
+ ### 新建模块文档
68
+ ```
69
+ 新模块文档: scanner
70
+ new module doc: scanner
71
+ ```
72
+
73
+ ### 查看状态
74
+ ```
75
+ 项目状态
76
+ project status
77
+ ```
78
+
79
+ ## 文件说明
80
+
81
+ | 文件 | 用途 | 更新频率 |
82
+ |------|------|----------|
83
+ | brief.md | 项目是什么 | 低 |
84
+ | tech.md | 技术栈和环境 | 低 |
85
+ | active.md | 当前工作焦点 | 高 |
86
+ | progress.md | 完成状态 | 中 |
87
+ | patterns.md | 技术决策和约定 | 中 |
88
+ | requirements/*.md | 需求文档 | 按需求变更 |
89
+ | docs/*.md | 技术文档 | 按实现变更 |
90
+ | learnings/*/*.md | 经验记录 | 按事件 |
91
+
92
+ ## 设计原则
93
+
94
+ 1. **纯 Markdown**: 无数据库,无外部服务,可 git 管理
95
+ 2. **人类可读**: 所有文档可直接阅读和编辑
96
+ 3. **简洁优先**: 核心 5 文件 + 3 目录
97
+ 4. **追加优先**: patterns 和 learnings 只追加不重写
98
+ 5. **变更内聚**: 变更历史放在对应文档内
99
+
100
+ ## 安全提示
101
+
102
+ ⚠️ **不要在 Memory Bank 中存储敏感信息**:
103
+ - API 密钥、Token、密码
104
+ - 数据库连接字符串
105
+ - 私钥或证书
106
+ - 任何凭证信息
107
+
108
+ Memory Bank 设计为可 git 管理和团队共享,请确保不包含敏感数据。
@@ -0,0 +1,338 @@
1
+ ---
2
+ name: memory-bank
3
+ description: 项目记忆系统 - 自动读取上下文、自动沉淀发现、追踪需求与技术变更
4
+ ---
5
+
6
+ # Memory Bank Skill
7
+
8
+ ## 概述
9
+
10
+ Memory Bank 是一个纯 Markdown 的项目记忆系统。通过结构化文档将"记忆"外化,实现:
11
+
12
+ - **自动读取**:基于语义理解,智能加载相关上下文
13
+ - **自动写入**:工作中沉淀发现、决策、经验
14
+ - **变更追踪**:需求变更、技术实现变更全程记录
15
+ - **零初始化**:无需手动 init,随项目推进自动创建
16
+
17
+ ---
18
+
19
+ ## 目录结构
20
+
21
+ ```
22
+ memory-bank/
23
+ ├── _index.md # 索引文件(AI 用于智能检索)
24
+ ├── brief.md # 项目概述(稳定)
25
+ ├── tech.md # 技术栈 + 环境 + 命令
26
+ ├── active.md # 当前焦点 + 下一步 + 阻塞项(高频更新)
27
+ ├── progress.md # 完成状态
28
+ ├── patterns.md # 技术决策 + 代码约定
29
+
30
+ ├── requirements/ # 需求池
31
+ │ ├── _index.md
32
+ │ └── REQ-{ID}-{slug}.md
33
+
34
+ ├── docs/ # 技术文档
35
+ │ ├── _index.md
36
+ │ ├── architecture.md
37
+ │ ├── modules/
38
+ │ └── specs/
39
+
40
+ └── learnings/ # 经验沉淀
41
+ ├── _index.md
42
+ ├── bugs/
43
+ ├── performance/
44
+ └── integrations/
45
+ ```
46
+
47
+ ---
48
+
49
+ ## Bootstrap 流程(零初始化)
50
+
51
+ **每次用户对话时**:
52
+
53
+ ```
54
+ 1. 检测 memory-bank/ 目录是否存在
55
+
56
+ ├─ 存在 → 读取 _index.md + brief.md + active.md
57
+ │ 继续正常工作
58
+
59
+ └─ 不存在 → 检测是否有代码库
60
+
61
+ ├─ 有代码库 → 扫描项目结构(package.json, README 等)
62
+ │ 生成 brief.md + tech.md 草稿
63
+ │ 创建 _index.md
64
+
65
+ └─ 空目录 → 等用户开始工作后按需创建
66
+ ```
67
+
68
+ **扫描预算**:最多 10 个文件,每个最多 200 行。
69
+
70
+ ---
71
+
72
+ ## 索引系统
73
+
74
+ ### 根索引格式(_index.md)
75
+
76
+ ```markdown
77
+ | path | title | summary | updated | size |
78
+ |------|-------|---------|---------|------|
79
+ | brief.md | Project Brief | 电商后台,核心是订单管理 | 2024-01-20 | 45 |
80
+ | tech.md | Tech Stack | Go + Gin + PostgreSQL | 2024-01-20 | 80 |
81
+ ```
82
+
83
+ ### 索引维护
84
+ - 创建/修改文件后自动更新索引
85
+ - 用户可手动编辑 summary 提升检索精度
86
+ - size 字段用于 context 预算控制
87
+
88
+ ---
89
+
90
+ ## 智能检索
91
+
92
+ ### 每轮对话流程
93
+
94
+ ```
95
+ 1. 固定加载:brief.md + active.md(如存在)
96
+
97
+ 2. 语义判断:
98
+ - 读取 _index.md
99
+ - 基于用户消息选择相关文件
100
+ - 输出决策:{ files: [...], reason: "..." }
101
+
102
+ 3. 按预算加载选中文件
103
+ ```
104
+
105
+ ### 预算限制
106
+ - 每轮最多加载 5 个额外文件
107
+ - 总行数限制 500 行
108
+ - 超出时优先加载小文件、新文件
109
+
110
+ ### 风险提示
111
+ - 如果 learnings/ 下有相关历史经验
112
+ - 主动提醒:"注意:历史上有类似问题 → {file}"
113
+
114
+ ---
115
+
116
+ ## 自动写入规则
117
+
118
+ ### 触发时机
119
+
120
+ | 事件类型 | 触发条件 | 创建/更新 |
121
+ |---------|---------|----------|
122
+ | **New Entity** | 确定新需求/模块/API | requirements/REQ-xxx.md 或 docs/modules/xxx.md |
123
+ | **Decision** | 技术选型确定,用户认可 | patterns.md |
124
+ | **Learning** | Bug 修复/性能优化/集成踩坑 | learnings/{type}/{date}-{slug}.md |
125
+
126
+ ### 不写入的情况
127
+ - 普通代码修改
128
+ - 探索性调研(未形成结论)
129
+ - 临时 debug(未确认根因)
130
+
131
+ ### 写入前确认
132
+
133
+ ```
134
+ [Memory Bank 更新计划]
135
+ - 创建: requirements/REQ-004-refund.md
136
+ - 更新: active.md
137
+ - 更新: _index.md
138
+
139
+ 是否执行?
140
+ ```
141
+
142
+ ---
143
+
144
+ ## 区块分离
145
+
146
+ 每个文件分为两个区块:
147
+
148
+ ```markdown
149
+ <!-- MACHINE_BLOCK_START -->
150
+ (AI 自动维护,用户不要改)
151
+ <!-- MACHINE_BLOCK_END -->
152
+
153
+ <!-- USER_BLOCK_START -->
154
+ (用户自由编辑,AI 不覆盖)
155
+ <!-- USER_BLOCK_END -->
156
+ ```
157
+
158
+ 冲突处理:检测到用户修改机器区块时,提示用户选择保留哪个版本。
159
+
160
+ ---
161
+
162
+ ## 命令
163
+
164
+ | 触发 | 动作 |
165
+ |------|------|
166
+ | `更新记忆` / `update memory bank` | 全面检查并更新所有文件 |
167
+ | `新需求: {标题}` / `new req: {title}` | 创建需求文档 |
168
+ | `新模块文档: {名称}` / `new module doc: {name}` | 创建模块文档 |
169
+ | `记录经验: {类型}` / `log learning: {type}` | 创建经验文档(bug/performance/integration) |
170
+ | `项目状态` / `project status` | 汇总输出当前状态 |
171
+
172
+ ---
173
+
174
+ ## 设计原则
175
+
176
+ 1. **零初始化**:不需要手动 init
177
+ 2. **语义检索**:纯 AI 理解,不用关键词匹配
178
+ 3. **索引驱动**:通过 _index.md 支撑快速检索
179
+ 4. **区块分离**:机器区块自动维护,用户区块自由编辑
180
+ 5. **写前确认**:重要写入前输出计划
181
+ 6. **预算控制**:每轮加载有上限
182
+ 7. **人类可读**:所有文档可直接阅读、编辑、git 管理
183
+
184
+ ---
185
+
186
+ ## 自动提交模式
187
+
188
+ 当用户回复"更新并提交"或"初始化并提交"时,执行以下流程:
189
+
190
+ ### Preflight 检查(必须全部通过)
191
+
192
+ 执行以下检查,任一失败则中止并解释原因:
193
+
194
+ 1. **确认是 git 仓库**:`git rev-parse --is-inside-work-tree`
195
+ 2. **确认不在 merge/rebase/cherry-pick 中**:
196
+ - `git rev-parse --git-path MERGE_HEAD` 返回的文件不存在
197
+ - `git rev-parse --git-path rebase-merge` 返回的目录不存在
198
+ - `git rev-parse --git-path rebase-apply` 返回的目录不存在
199
+ - `git rev-parse --git-path CHERRY_PICK_HEAD` 返回的文件不存在
200
+ 3. **确认无冲突文件**:`git diff --name-only --diff-filter=U` 必须为空
201
+ 4. **确认有 git 身份**:`git config user.name` 和 `git config user.email` 非空
202
+ 5. **确认有变更可提交**:`git status --porcelain` 非空
203
+
204
+ ### 执行流程
205
+
206
+ 1. **输出计划**,包含:
207
+ - 将要更新的 memory-bank 文件
208
+ - 将要提交的所有变更(`git status --porcelain`)
209
+ - **风险检查提醒**:确认没有 `.env`、凭证、大文件会被提交
210
+ - 如果已有 staged 变更,明确告知"将包含已 staged 的文件"
211
+
212
+ 2. **等待用户确认**
213
+
214
+ 3. **执行更新**:
215
+ - 写入 memory-bank 文件
216
+ - 执行 `git add -A`
217
+ - 执行 `git diff --cached --name-only` 显示将提交的文件
218
+ - 执行 `git commit -m "chore(memory-bank): update <files>"`
219
+
220
+ ### Commit Message 格式
221
+
222
+ ```
223
+ chore(memory-bank): update active.md
224
+
225
+ Auto-committed by Memory Bank.
226
+ ```
227
+
228
+ 多文件时:
229
+ ```
230
+ chore(memory-bank): update memory bank
231
+
232
+ Files updated:
233
+ - memory-bank/active.md
234
+ - memory-bank/_index.md
235
+ ```
236
+
237
+ ### 失败处理
238
+
239
+ - **Preflight 失败**:不执行任何操作,解释原因和修复方法
240
+ - **Commit 失败**(如 hook 拒绝):报告错误,memory-bank 文件已写入但未提交,用户手动处理
241
+
242
+ ---
243
+
244
+ ## 安全护栏
245
+
246
+ ### 禁止写入
247
+ - API 密钥、密码、token
248
+ - 客户隐私数据
249
+ - 任何凭证信息
250
+
251
+ ### 防止幻觉
252
+ - AI 只能选择 _index.md 中列出的文件
253
+ - 创建新文件后必须同步更新索引
254
+
255
+ ---
256
+
257
+ ## 每轮行为规范
258
+
259
+ ```
260
+ 1. Bootstrap 检查(每次用户对话)
261
+ └─ 检测 memory-bank/ 是否存在
262
+
263
+ 2. 固定加载
264
+ └─ 读取 brief.md + active.md
265
+
266
+ 3. 读取索引
267
+ └─ 读取 _index.md
268
+
269
+ 4. 语义选择文件
270
+ └─ 基于用户消息选择相关文件
271
+ └─ 按预算限制加载
272
+
273
+ 5. 处理用户请求
274
+ └─ 创建 todo 时:
275
+ - 已有 memory-bank/ → 最后一项必须是"更新 Memory Bank"
276
+ - 没有 memory-bank/ → 第一项是"初始化 Memory Bank",最后一项是"更新 Memory Bank"
277
+ └─ 正常工作
278
+
279
+ 6. 执行"更新 Memory Bank" todo 时
280
+ └─ 检查触发场景:
281
+ - 修改了代码/配置文件 → 更新 active.md
282
+ - 修复了 bug / 踩坑经验 → 创建 learnings/xxx.md
283
+ - 做了技术决策 → 追加 patterns.md
284
+ - 新需求确认 → 创建 requirements/REQ-xxx.md
285
+ └─ 命中任一条件 → 输出 memory_ops 计划
286
+
287
+ 7. 执行写入
288
+ └─ 用户确认后执行
289
+ ```
290
+
291
+ ---
292
+
293
+ ## 读取行为规范
294
+
295
+ 当系统提示 `[Memory Bank]` 通知加载了上下文时,遵循以下规范:
296
+
297
+ ### 1. 显式声明上下文来源
298
+
299
+ 回答问题时,简短说明参考了哪些 Memory Bank 文件:
300
+
301
+ ```
302
+ 基于 brief.md 和 active.md,当前项目是...
303
+ ```
304
+
305
+ ### 2. 不把 Memory Bank 当真理
306
+
307
+ Memory Bank 可能过时。如果与代码/配置矛盾:
308
+ - **优先以仓库实际内容为准**
309
+ - 建议更新 Memory Bank(走写入流程)
310
+
311
+ ### 3. 引用驱动的继续阅读
312
+
313
+ 如果 `active.md` 或 `_index.md` 提到:
314
+ - `REQ-xxx` → 读取对应需求文档
315
+ - `patterns.md` → 读取技术决策
316
+ - 某模块文档 → 读取该文档
317
+
318
+ 将这些当作**高优先级读取目标**。
319
+
320
+ ### 4. 陈旧检测
321
+
322
+ 当 `active.md` 的"当前焦点"与用户最新目标明显不一致时:
323
+ - 先澄清:"active.md 记录的焦点是 X,你现在想做 Y,是否需要更新?"
324
+ - 或直接建议更新(走写入流程)
325
+
326
+ ### 5. 输出边界
327
+
328
+ 上下文不足时:
329
+ - **先用工具**(grep/read)查找相关文件
330
+ - **禁止**仅凭 Memory Bank 缺失就断言"不存在"或"没有"
331
+
332
+ ---
333
+
334
+ ## 详细参考
335
+
336
+ - [文件模板](references/templates.md) - 各文件的标准模板
337
+ - [高级规则](references/advanced-rules.md) - 冲突处理、阈值规则、预算控制
338
+ - [结构化输出 Schema](references/schema.md) - JSON 输出格式定义
@@ -0,0 +1,189 @@
1
+ # Memory Bank 高级规则
2
+
3
+ > 此文件包含索引规范、冲突处理、阈值规则、预算控制等详细规则。
4
+
5
+ ---
6
+
7
+ ## 索引字段规范
8
+
9
+ ### 字段定义
10
+
11
+ | 字段 | 类型 | 说明 |
12
+ |------|------|------|
13
+ | `path` | string | 相对于 memory-bank/ 的文件路径(唯一键) |
14
+ | `title` | string | 文件第一个 # 标题 |
15
+ | `summary` | string | 2-4 句话摘要,强调"何时该读它" |
16
+ | `updated` | date | ISO 8601 日期格式:YYYY-MM-DD |
17
+ | `size` | number | 文件行数(用于预算计算) |
18
+
19
+ ### 子索引额外字段
20
+
21
+ | 字段 | 适用于 | 说明 |
22
+ |------|--------|------|
23
+ | `status` | requirements | Proposed / Accepted / Implementing / Done / Deprecated |
24
+ | `type` | learnings | bug / performance / integration |
25
+
26
+ ### 格式示例
27
+
28
+ ```markdown
29
+ | path | title | summary | updated | size |
30
+ |------|-------|---------|---------|------|
31
+ | brief.md | Project Brief | 电商后台,核心是订单管理,技术约束见 tech.md | 2024-01-20 | 45 |
32
+ ```
33
+
34
+ ---
35
+
36
+ ## 索引逃生门(自愈机制)
37
+
38
+ ### 问题场景
39
+ - 索引文件丢失或损坏
40
+ - 新文件未被收录到索引
41
+ - 用户明确要求读取某个路径
42
+
43
+ ### 逃生规则
44
+
45
+ **场景 1:索引缺失**
46
+ ```
47
+ 检测到 _index.md 不存在或为空
48
+ → 扫描 memory-bank/ 下所有 .md 文件
49
+ → 自动重建索引
50
+ → 提示用户"索引已重建,请检查"
51
+ ```
52
+
53
+ **场景 2:用户明确指定路径**
54
+ ```
55
+ 用户说"读取 memory-bank/xxx.md"
56
+ → 允许读取(即使不在索引中)
57
+ → 读取后自动添加到 _index.md
58
+ → 提示用户"已添加到索引"
59
+ ```
60
+
61
+ **场景 3:Bootstrap 时的固定 Allowlist**
62
+ ```
63
+ Bootstrap 扫描时允许读取(不依赖索引):
64
+ - README.md
65
+ - package.json / go.mod / Cargo.toml / pyproject.toml
66
+ - 目录树(前两层)
67
+ ```
68
+
69
+ ---
70
+
71
+ ## 机器区块冲突处理
72
+
73
+ ### 冲突检测机制
74
+
75
+ 每个机器区块开头包含元信息:
76
+ ```markdown
77
+ <!-- MACHINE_BLOCK_START -->
78
+ <!-- blockVersion: 3 | lastUpdated: 2024-01-22T10:30:00Z -->
79
+ ```
80
+
81
+ **检测流程**:
82
+ 1. 读取机器区块的 `blockVersion` 和 `lastUpdated`
83
+ 2. 计算当前机器区块内容的 hash
84
+ 3. 与上次写入时保存的 hash 对比
85
+ 4. 如果 hash 不同 → 检测到用户修改
86
+
87
+ ### 冲突处理策略
88
+
89
+ **发现冲突时**:
90
+ ```
91
+ 检测到 active.md 机器区块被手动修改:
92
+ - 上次更新: 2024-01-22T10:30:00Z
93
+ - 当前内容与预期不符
94
+
95
+ 选择处理方式:
96
+ 1. 保留你的修改,跳过本次更新
97
+ 2. 用 AI 更新覆盖你的修改
98
+ 3. 合并:AI 更新追加到你的修改后面
99
+
100
+ 请选择 (1/2/3):
101
+ ```
102
+
103
+ **不产生冲突副本**:避免文件污染,让用户明确选择。
104
+
105
+ ---
106
+
107
+ ## 触发阈值硬规则
108
+
109
+ ### Decision(技术决策)必须满足
110
+
111
+ 写入 patterns.md 的决策必须包含:
112
+ - ✅ **决策内容**:选了什么
113
+ - ✅ **原因**:为什么选它
114
+ - ✅ **取舍**:放弃了什么选项
115
+ - ✅ **适用范围**:什么场景用
116
+ - ❌ **不适用**:什么场景不用(可选)
117
+
118
+ **格式示例**:
119
+ ```markdown
120
+ | 日期 | 决策 | 原因 | 取舍 | 适用范围 |
121
+ |------|------|------|------|----------|
122
+ | 2024-01-22 | 错误处理用 pkg/errors | 支持 wrap + stack trace | 放弃标准 errors | 所有业务逻辑层 |
123
+ ```
124
+
125
+ ### Learning(经验教训)必须包含
126
+
127
+ 写入 learnings/ 的经验必须包含:
128
+ - ✅ **症状**:如何发现问题
129
+ - ✅ **根因**:根本原因是什么
130
+ - ✅ **解决方案**:怎么修的
131
+ - ✅ **预防措施**:如何避免再次发生(断言/监控/测试)
132
+
133
+ **不合格示例**(拒绝写入):
134
+ ```
135
+ 问题:支付超时
136
+ 解决:改了超时时间
137
+ ```
138
+
139
+ **合格示例**:
140
+ ```
141
+ 问题:支付超时
142
+ 症状:高峰期支付成功率下降到 60%
143
+ 根因:默认超时 3s,支付宝网关响应 P99 = 4.2s
144
+ 解决:超时改为 10s + 增加重试 2 次
145
+ 预防:添加支付耗时监控告警,P99 > 5s 时报警
146
+ ```
147
+
148
+ ---
149
+
150
+ ## 预算控制详细规则
151
+
152
+ ### 行数计算方式
153
+ - `size` 字段 = 文件总行数(wc -l)
154
+ - 机器区块和用户区块都计入
155
+ - 空行计入
156
+
157
+ ### 预算分配
158
+ | 类型 | 预算 |
159
+ |------|------|
160
+ | 固定加载(brief + active) | 不限 |
161
+ | 每轮额外加载 | 最多 5 个文件 |
162
+ | 额外加载总行数 | 最多 500 行 |
163
+
164
+ ### 超预算降级策略
165
+
166
+ 当候选文件总 size 超过 500 行时:
167
+ ```
168
+ 1. 固定加载 brief.md + active.md(不计入预算)
169
+ 2. 按相关性排序候选文件
170
+ 3. 按 size 从小到大依次加载
171
+ 4. 累计 size 达到 500 行时停止
172
+ 5. 未加载的文件提示用户:"以下文件相关但未加载(预算限制):..."
173
+ ```
174
+
175
+ ### 大文件处理
176
+ - 如果单个文件 > 200 行
177
+ - 只读取前 100 行 + 最后 50 行
178
+ - 中间插入 `[... 省略 {n} 行 ...]`
179
+
180
+ ---
181
+
182
+ ## 扩展点
183
+
184
+ | 情况 | 动作 |
185
+ |------|------|
186
+ | 需求 > 20 个 | 索引自动分页 或 添加 status 筛选 |
187
+ | learnings > 30 条 | 按 type 分子索引 |
188
+ | 多人协作 | 添加 author 字段到索引 |
189
+ | 大仓库 | bootstrap 扫描增加更多预算限制 |