chore: persist memories and excerpts under knowledge/ instead of .claude/

Move documented and skill paths to knowledge/memories and knowledge/files
(project root, mappable to @knowledge) to reduce sandbox issues on .claude/.
Update CLAUDE.md memory protocol, update-mykb-* skills, and settings.local.json
bootstrap check for core.json.

Made-with: Cursor
This commit is contained in:
Zhengshou Lai
2026-04-09 10:36:00 +08:00
parent d63ce56e3f
commit 1bead9a6d8
5 changed files with 25 additions and 23 deletions
+1 -1
View File
@@ -94,7 +94,7 @@
}, },
{ {
"type": "command", "type": "command",
"command": "test -f .claude/memories/core.json && echo '[Agent] memory ready' || true" "command": "test -f knowledge/memories/core.json && echo '[Agent] memory ready' || true"
} }
] ]
} }
+8 -8
View File
@@ -1,7 +1,7 @@
--- ---
name: update-mykb-files name: update-mykb-files
description: | description: |
Local filesystem RAG-style retrieval: user path, @ files, or workspace—no fixed KB root; prefer data_structure.md then grep/limited Read; PDF/Excel only after this skill's references. Save reusable clips to project .claude/files/; one-line pointers in memories via update-mykb-memories. Sandbox/permissions apply. Local filesystem RAG-style retrieval: user path, @ files, or workspace—no fixed KB root; prefer data_structure.md then grep/limited Read; PDF/Excel only after this skill's references. Save reusable clips to project knowledge/files/ (Cursor @knowledge); pointers in knowledge/memories via update-mykb-memories. Avoid writing under .claude/ when restricted.
Triggers: update-mykb-files; 检索/查资料/找文件/在某目录/摘录/存档; local search, find in folder, read my PDF, grep project, save excerpt, knowledge base on disk. Triggers: update-mykb-files; 检索/查资料/找文件/在某目录/摘录/存档; local search, find in folder, read my PDF, grep project, save excerpt, knowledge base on disk.
--- ---
@@ -17,19 +17,19 @@ description: |
- **检索根目录怎么定**(优先级): - **检索根目录怎么定**(优先级):
- 用户在对话里**写明路径**(最优先)。 - 用户在对话里**写明路径**(最优先)。
- 否则从上下文推断:`@` 引用、已打开文件所在目录、问题中的路径、当前工作区根等;推断仍模糊时**追问用户**,勿臆造目录。 - 否则从上下文推断:`@` 引用、已打开文件所在目录、问题中的路径、当前工作区根等;推断仍模糊时**追问用户**,勿臆造目录。
- **读与写分离**:读的是上面确定的任意路径;**摘录落盘**默认写到**当前项目**下的 `.claude/files/`(见下文),勿与「被读的资料目录」混为一谈。 - **读与写分离**:读的是上面确定的任意路径;**摘录落盘**默认写到**当前项目**下的 `knowledge/files/`(见下文;可用 `@knowledge`),勿与「被读的资料目录」混为一谈。
- 单个业务文件可能很大: - 单个业务文件可能很大:
- 不要直接用 Read 读取整文件 - 不要直接用 Read 读取整文件
- 对 PDF、Excel 使用对应 Skill 进行结构化处理后,再结合 grep/局部读取做精细检索 - 对 PDF、Excel 使用对应 Skill 进行结构化处理后,再结合 grep/局部读取做精细检索
## 摘录池:`.claude/files/` ## 摘录池:`knowledge/files/`
- **用途**:在日常对话或阅览任意被检索文件时,若出现**以后还可能引用**的内容(定义、结论、命令、表格摘要、长引用片段),写入当前项目下的 `.claude/files/`,便于后续用 Grep/Read 复用;**不要**把整本 PDF/整表原样拷入,优先摘要 + 来源路径。 - **用途**:在日常对话或阅览任意被检索文件时,若出现**以后还可能引用**的内容(定义、结论、命令、表格摘要、长引用片段),写入当前项目下的 `knowledge/files/`,便于后续用 Grep/Read 复用;**不要**把整本 PDF/整表原样拷入,优先摘要 + 来源路径。
- **与 update-mykb-memories 分工**:极短、稳定的事实与偏好写入 `.claude/memories/`(见 skill `update-mykb-memories`);**较长说明、摘录、结构化笔记**放 `.claude/files/` - **与 update-mykb-memories 分工**:极短、稳定的事实与偏好写入 `knowledge/memories/`(见 skill `update-mykb-memories`);**较长说明、摘录、结构化笔记**放 `knowledge/files/`
- **路径**:根目录为仓库内 `.claude/files/`(不存在则创建)。可选子目录:`clips/`(原文摘录)`notes/`(整理笔记)`exports/`(脚本导出的小文件) - **路径**:根目录为仓库内 `knowledge/files/`(不存在则创建;父级 `knowledge/` 与 Cursor `@knowledge` 对应)。可选子目录:`clips/``notes/``exports/`
- **命名**`YYYY-MM-DD_<主题简写>.md``<domain>_<topic>.md`;单文件控制体量,必要时拆篇。 - **命名**`YYYY-MM-DD_<主题简写>.md``<domain>_<topic>.md`;单文件控制体量,必要时拆篇。
- **内容建议**:每条摘录开头用简短元信息(来源文件/URL、日期、一两句用途),正文用 Markdown;避免敏感凭证。 - **内容建议**:每条摘录开头用简短元信息(来源文件/URL、日期、一两句用途),正文用 Markdown;避免敏感凭证。
- **检索**:回答后续问题时,若与已存摘录相关,可对 `.claude/files/` 做 Grep 或 Read,与对原始资料的检索同一套渐进式原则。 - **检索**:回答后续问题时,若与已存摘录相关,可对 `knowledge/files/` 做 Grep 或 Read,与对原始资料的检索同一套渐进式原则。
### 定位检索根目录与存在性 ### 定位检索根目录与存在性
@@ -151,7 +151,7 @@ description: |
- 禁止用 Glob 的「有无匹配文件」代替目录存在性判断;目录是否存在应通过 shell(如 `test -d`)检查。 - 禁止用 Glob 的「有无匹配文件」代替目录存在性判断;目录是否存在应通过 shell(如 `test -d`)检查。
- 使用本 skill 做本地文件检索时,禁止使用网络搜索等其他工具替代磁盘上的资料 - 使用本 skill 做本地文件检索时,禁止使用网络搜索等其他工具替代磁盘上的资料
- 若用户明确要求「记住」且是**短事实**,交给 **update-mykb-memories**;若需保存**可检索的长摘录**,写入 `.claude/files/`(见上文)。 - 若用户明确要求「记住」且是**短事实**,交给 **update-mykb-memories**;若需保存**可检索的长摘录**,写入 `knowledge/files/`(见上文)。
## 针对不同文件类型的具体策略 ## 针对不同文件类型的具体策略
+9 -9
View File
@@ -1,7 +1,7 @@
--- ---
name: update-mykb-memories name: update-mykb-memories
description: | description: |
Cross-session personal memory: write short, verifiable facts, preferences, and project conventions to .claude/memories (CLAUDE.md protocol); long excerpts go to .claude/files via update-mykb-files. Tone: concise, deduped, no secrets/credentials—matches 简洁直接. Evolves with corrections ("纠正偏好", "以后别…"). Cross-session personal memory: write short, verifiable facts, preferences, and project conventions to knowledge/memories at project root (CLAUDE.md; Cursor @knowledge). Long excerpts go to knowledge/files via update-mykb-files. Avoid .claude/ for writes (sandbox). Tone: concise, deduped, no secrets—matches 简洁直接.
Triggers: update-mykb-memories; 记住/记下来/默认/偏好/沉淀/跨会话; remember this, save preference, persist this, update how you work with me. Triggers: update-mykb-memories; 记住/记下来/默认/偏好/沉淀/跨会话; remember this, save preference, persist this, update how you work with me.
--- ---
@@ -10,17 +10,17 @@ description: |
## 目标 ## 目标
- 让 Agent 在**不依赖超长上下文**的情况下,在后续会话中仍能利用已确认有用的信息。 - 让 Agent 在**不依赖超长上下文**的情况下,在后续会话中仍能利用已确认有用的信息。
- **短而稳**:一句话事实、用户偏好、命令别名、项目内约定 → `.claude/memories/` - **短而稳**:一句话事实、用户偏好、命令别名、项目内约定 → `knowledge/memories/`
- **长而可搜**:段落、摘录、整理稿 → `.claude/files/`(见 **update-mykb-files**),不要用 `core.json` 塞长文。 - **长而可搜**:段落、摘录、整理稿 → `knowledge/files/`(见 **update-mykb-files**),不要用 `core.json` 塞长文。
- **随使用收敛**:用户纠正或补充时更新既有条目,避免堆叠矛盾记录,使行为逐渐贴近固定偏好与做事方式。 - **随使用收敛**:用户纠正或补充时更新既有条目,避免堆叠矛盾记录,使行为逐渐贴近固定偏好与做事方式。
## 写哪里 ## 写哪里
| 类型 | 位置 | 说明 | | 类型 | 位置 | 说明 |
|------|------|------| |------|------|------|
| 核心记忆、偏好、稳定事实 | `.claude/memories/core.json` | 若文件不存在,可创建;必须保持合法 JSON | | 核心记忆、偏好、稳定事实 | `knowledge/memories/core.json` | 若文件不存在,可创建;必须保持合法 JSON |
| 当前模式等状态 | `.claude/memories/current_mode.json` | 仅在与模式切换相关时更新 | | 当前模式等状态 | `knowledge/memories/current_mode.json` | 仅在与模式切换相关时更新 |
| 单主题若干句补充 | `.claude/memories/notes/<slug>.md` | 避免把 `core.json` 撑得过大;`slug` 用小写连字符 | | 单主题若干句补充 | `knowledge/memories/notes/<slug>.md` | 避免把 `core.json` 撑得过大;`slug` 用小写连字符 |
## 何时写入 ## 何时写入
@@ -35,12 +35,12 @@ description: |
- 顶层对象含 `facts`(字符串数组)与 `preferences`(字符串键值对),或沿用已有键名,**不要**破坏已有字段含义。 - 顶层对象含 `facts`(字符串数组)与 `preferences`(字符串键值对),或沿用已有键名,**不要**破坏已有字段含义。
2. 合并新条目:去重(同一事实不重复追加);必要时更新而非复制多条矛盾记录。 2. 合并新条目:去重(同一事实不重复追加);必要时更新而非复制多条矛盾记录。
3. 写回前校验 JSON(引号、逗号、尾随逗号);写回后用 Read 抽查。 3. 写回前校验 JSON(引号、逗号、尾随逗号);写回后用 Read 抽查。
4. 若当前仓库将 `.claude/memories` 排除在版本控制外,仍按同样路径写入,便于本机 Agent 加载 4. `knowledge/` 常被 gitignore;仍向上述路径写入,便于本机 Agent 加载。若有旧数据在 `.claude/memories/`,可手工迁移到 `knowledge/memories/`
## 与 update-mykb-files 配合 ## 与 update-mykb-files 配合
- 从 PDF/Excel/长文档抽出的**大段原文或详细笔记**:写入 `.claude/files/` 并在 `core.json``notes` 里只保留**一行指针**(文件名 + 用途)。 - 从 PDF/Excel/长文档抽出的**大段原文或详细笔记**:写入 `knowledge/files/` 并在 `core.json``notes` 里只保留**一行指针**(文件名 + 用途)。
- 检索时:先 Grep/Read `.claude/files`,短事实读 `core.json` / `notes/` - 检索时:先 Grep/Read `knowledge/files`,短事实读 `core.json` / `notes/`
## 回答风格 ## 回答风格
+1
View File
@@ -5,6 +5,7 @@ __pycache__/
dist/ dist/
build/ build/
workspace/ workspace/
knowledge/
.claude/ .claude/
.obsidian/ .obsidian/
+6 -5
View File
@@ -99,11 +99,12 @@
## 5. 记忆协议 ## 5. 记忆协议
### 自动记忆位置 ### 自动记忆位置
- `.claude/memories/` - 持久化记忆(自动加载到上下文) - 根目录:项目根下 `knowledge/`(在 Cursor 中可用 `@knowledge` 引用);**不**写入 `.claude/`,以减少沙盒/权限限制。
- `.claude/memories/core.json` - 核心记忆文件 - `knowledge/memories/` - 持久化记忆(自动加载到上下文)
- `.claude/memories/current_mode.json` - 当前模式状态 - `knowledge/memories/core.json` - 核心记忆文件
- `.claude/files/` - 较长摘录、笔记,供后续 Grep/Readskill`update-mykb-files` - `knowledge/memories/current_mode.json` - 当前模式状态
- 沉淀操作指引:短事实/偏好用 skill `update-mykb-memories`,长材料用 `update-mykb-files` 写入 `.claude/files/` - `knowledge/files/` - 较长摘录、笔记,供后续 Grep/Readskill`update-mykb-files`
- 沉淀操作指引:短事实/偏好用 skill `update-mykb-memories`,长材料用 `update-mykb-files` 写入 `knowledge/files/`
### 触发记录 ### 触发记录
- 用户说"记住..." / "记下来..." - 用户说"记住..." / "记下来..."