Install
openclaw skills install init-memory为任意项目初始化 Claude 持久化记忆系统(v3.0 搜索引擎模型)。自动扫描项目结构、技术栈、代码规范,生成完整的记忆文件和 CLAUDE.md 指令。
openclaw skills install init-memory记忆系统 v3.0 — "搜索引擎"模型:启动只读摘要,详情按需检索
核心理念: Claude 不需要"记住一切",只需要"知道去哪找"。
用户输入参数: $ARGUMENTS
解析参数:
--force: 覆盖已有的记忆文件(默认跳过已存在的文件)--minimal: 只创建核心文件(SUMMARY.md, architecture.json, conventions.json, semantic-index.json, changelog.json)--lang zh: 注释和描述使用中文(默认)--lang en: 注释和描述使用英文如果 .claude/memory/SUMMARY.md 已存在且没有 --force 参数,停止执行并提示用户:
⚠️ 记忆系统已存在。使用
--force覆盖,或手动删除.claude/memory/目录后重试。
Glob "**/{package.json,tsconfig.json,Cargo.toml,go.mod,pyproject.toml,setup.py,requirements.txt,pom.xml,build.gradle,Gemfile,composer.json,CMakeLists.txt,Makefile,.csproj,pubspec.yaml,mix.exs,deno.json}" (忽略 node_modules、vendor、target、dist、build、.git)
读取找到的配置文件,提取:
find . -maxdepth 3 -type d \
! -path '*/node_modules/*' ! -path '*/.git/*' ! -path '*/dist/*' \
! -path '*/build/*' ! -path '*/.next/*' ! -path '*/target/*' \
! -path '*/vendor/*' ! -path '*/__pycache__/*' ! -path '*/.claude/*' \
! -path '*/.venv/*' ! -path '*/venv/*' ! -path '*/.tox/*' \
| head -80 | sort
根据项目语言类型选择合适的扫描模式:
TypeScript/JavaScript 项目:
Grep "^export (class|function|const|interface|type|enum)" --type ts,tsx,js,jsx
Python 项目:
Grep "^(class |def )" --type py
Go 项目:
Grep "^(func |type .* struct)" --type go
Rust 项目:
Grep "^(pub fn |pub struct |pub enum |pub trait )" --type rs
Java/Kotlin 项目:
Grep "^(public class|public interface|public enum|class |fun )" --type java,kt
取前 100 个结果,识别核心模块和它们的位置。
find . \( -name '*.ts' -o -name '*.tsx' -o -name '*.js' -o -name '*.jsx' \
-o -name '*.py' -o -name '*.go' -o -name '*.rs' -o -name '*.java' \
-o -name '*.kt' -o -name '*.vue' -o -name '*.svelte' -o -name '*.rb' \
-o -name '*.ex' -o -name '*.exs' -o -name '*.dart' -o -name '*.swift' \
-o -name '*.cpp' -o -name '*.c' -o -name '*.h' \) \
! -path '*/node_modules/*' ! -path '*/dist/*' ! -path '*/build/*' \
! -path '*/target/*' ! -path '*/vendor/*' ! -path '*/.git/*' \
-exec wc -l {} + 2>/dev/null | sort -rn | head -20
对超过 500 行的文件进行逻辑分区扫描(扫描 function/class/section 定义及其行号)。 如果项目源文件较少,可降低阈值到 300 行。
读取 3-5 个核心源文件的前 50 行,推断:
同时检查是否存在以下配置文件:
.eslintrc*, .prettierrc*, rustfmt.toml, .editorconfig, pyproject.toml [tool.black], setup.cfg [flake8], .rubocop.yml, biome.json
检查是否已有:
CLAUDE.md — 已有的 Claude 指令.claude/ 目录 — 已有的 Claude 配置CONTRIBUTING.md — 贡献指南中的规范.github/ — CI/CD 配置中的约束创建 .claude/memory/ 目录,然后基于 Step 1 的扫描结果创建以下文件。
重要规则:
$schema 字段使用实际项目名称(从配置文件推断),不要硬编码{
"$schema": "<项目名> Architecture",
"$version": "1.0.0",
"$updated": "<今天日期>",
"$description": "项目架构概览",
"project": {
"name": "<项目名>",
"description": "<从配置文件推断的项目描述>",
"monorepo": false,
"packageManager": "<npm|yarn|pnpm|pip|cargo|go modules|...>"
},
"techStack": {
"language": "<主要语言及版本>",
"framework": "<主要框架及版本>",
"buildTool": "<构建工具>",
"runtime": "<运行时环境>",
"uiLibrary": "<UI 库(如适用)>",
"testFramework": "<测试框架>"
},
"packages": {
"<包名>": {
"path": "<路径>",
"role": "<职责描述>",
"entry": "<入口文件>",
"format": "<ESM|CJS|mixed>"
}
},
"mainModules": {
"<模块名>": {
"file": "<文件路径>",
"lines": "<行数>",
"role": "<职责描述>",
"warning": "<注意事项(可选)>",
"keyDataStructures": ["<核心数据结构>"]
}
},
"keyDependencies": [
{ "name": "<包名>", "version": "<版本>", "purpose": "<用途>" }
]
}
monorepo 项目: packages 字段列出所有子包及其角色。
单包项目: packages 只有一个条目或省略。
{
"$schema": "<项目名> Code Conventions",
"$version": "1.0.0",
"$updated": "<今天日期>",
"$description": "代码规范和约定。新增代码必须遵守这些规范",
"codeStyle": {
"language": "<TypeScript (strict)|Python 3.x|Go|...>",
"indent": "<2 spaces|4 spaces|tabs>",
"quotes": "<single|double>",
"semicolons": "<true|false|N/A>",
"trailingComma": "<none|es5|all|N/A>",
"formatter": "<Prettier|Black|gofmt|rustfmt|...>",
"linter": "<ESLint|Ruff|golint|clippy|...>"
},
"namingConventions": {
"files": { "<类型>": "<命名规则>" },
"code": {
"classes": "<PascalCase>",
"interfaces": "<规则>",
"functions": "<camelCase|snake_case>",
"constants": "<UPPER_SNAKE_CASE>",
"variables": "<camelCase|snake_case>"
}
},
"patterns": {
"<模式名>": {
"description": "<描述>",
"template": "<代码模板(可选)>",
"steps": ["<步骤>"]
}
},
"commitMessageStyle": {
"language": "<项目注释语言>",
"prefix": "feat:/fix:/refactor:/chore:/docs:/test:",
"examples": ["<示例>"]
},
"importOrder": ["<导入分组规则>"],
"criticalRules": [
"<从代码和配置中推断出的关键规则>"
]
}
{
"$schema": "<项目名> Semantic Index",
"$version": "1.0.0",
"$updated": "<今天日期>",
"$description": "关键词索引——从功能域/关键词到相关文件的映射",
"index": {
"<关键词|别名|同义词>": {
"description": "<功能域描述>",
"files": [
{ "path": "<文件路径>", "sections": ["<逻辑区域>"], "lineRange": [0, 0] }
],
"quickRules": ["<该领域的快速提示/规则>"]
}
}
}
基于 Step 1.3 的扫描结果填充。将相关的导出按功能域分组。
每个索引条目可以有多个关键词别名(用 | 分隔)。
{
"$schema": "<项目名> Hotspot Map",
"$version": "1.0.0",
"$updated": "<今天日期>",
"$description": "热点文件的逻辑分区图。修改大文件前先查此文件定位行号范围",
"files": {
"<文件名>": {
"path": "<完整相对路径>",
"totalLines": 0,
"touchFrequency": 0,
"sections": [
{
"name": "<逻辑分区名>",
"lineRange": [0, 0],
"description": "<该分区的功能描述>",
"keySymbols": ["<重要函数/类名>"],
"touchCount": 0,
"subSections": []
}
]
}
}
}
仅包含超过 500 行(小项目 300 行)的文件。每个文件最多 15 个分区。
{
"$schema": "<项目名> Task Context",
"$version": "1.0.0",
"$updated": "<今天日期>",
"$description": "当前任务上下文。帮助 Claude 理解未完成的工作",
"currentTasks": [],
"recentCompleted": [],
"pendingIssues": [],
"completedTasks": [],
"knownLimitations": []
}
{
"$schema": "<项目名> Session Changelog",
"$version": "1.0.0",
"$updated": "<今天日期>",
"$description": "增量变更日志。每次会话修改代码后追加记录",
"sessions": [
{
"id": "SESSION-001",
"date": "<今天日期>",
"summary": "初始化 Claude 记忆系统",
"changes": [
{
"action": "create",
"files": [".claude/memory/*", "CLAUDE.md"],
"reason": "建立持久化记忆系统,实现跨会话知识保持"
}
],
"decisions": ["采用 v3.0 搜索引擎模型:启动只读 SUMMARY.md,详情按需 Grep 检索"],
"lessonsLearned": [],
"ripples": { "description": "纯新增文件,无代码影响", "affectedModules": [], "sideEffects": [] },
"rejectedAlternatives": []
}
]
}
{
"$schema": "<项目名> Bug & Fix Registry",
"$version": "1.0.0",
"$updated": "<今天日期>",
"$description": "已知 Bug 和修复记录。避免相同问题重复犯错",
"bugs": [],
"commonMistakes": [],
"predictions": []
}
{
"$schema": "<项目名> Causality Graph",
"$version": "1.0.0",
"$updated": "<今天日期>",
"$description": "因果图谱——记录 Bug 的完整因果链。新 Bug 出现时沿已知链反向推导",
"chains": [],
"chainIndex": {}
}
如果使用了 --minimal 参数,跳过: hotspot-map.json, task-context.json, bugs-and-fixes.json, causality-graph.json
# <项目名> — Claude 记忆摘要
> 记忆系统 v3.0 — 本文件是固定大小的"缓存",详细数据在各 JSON 文件中
## 🏗️ 架构速览
- **技术栈**: <语言 + 框架 + 构建工具>
- **项目结构**: <简要描述目录布局>
- **核心模块**: <列出 3-5 个最重要的模块>
## 📊 热点文件
<列出行数最多的 3-5 个文件及其行数>
## 🔄 最近 3 次变更
1. SESSION-001: 初始化 Claude 记忆系统
## 📋 当前状态
- **进行中**: 无
- **待处理**: 无
## ⚠️ 高频陷阱(Top 5)
暂无记录
## 🔍 检索指南
| 需要什么 | 怎么查 |
|----------|--------|
| 功能域→文件映射 | `Grep "关键词" .claude/memory/semantic-index.json` |
| 大文件行号定位 | `Grep "section名" .claude/memory/hotspot-map.json` |
| Bug 因果链 | `Grep "症状" .claude/memory/causality-graph.json` |
| 已知 Bug/预判 | `Grep "症状" .claude/memory/bugs-and-fixes.json` |
| 历史决策 | `Grep "功能" .claude/memory/changelog.json` |
| 代码规范 | `Read .claude/memory/conventions.json` |
| 完整架构 | `Read .claude/memory/architecture.json` |
以下内容用 <!-- MEMORY-SYSTEM-START --> 和 <!-- MEMORY-SYSTEM-END --> 标记包裹:
<!-- MEMORY-SYSTEM-START -->
## 📖 启动时只读一个文件
\```
Read .claude/memory/SUMMARY.md
\```
**不要**在启动时读取其他记忆文件。SUMMARY.md 包含架构速览、当前状态、高频陷阱和检索指南。
## 🔍 按需检索(改代码/修 Bug 前查询)
需要详情时,用 Grep/Read **精准查询**对应文件,不要全量加载:
| 场景 | 做什么 |
|------|--------|
| **改代码前** — 定位文件和行号 | `Grep "关键词" .claude/memory/semantic-index.json` |
| **改核心文件** — 查逻辑分区行号 | `Grep "section名" .claude/memory/hotspot-map.json` |
| **修 Bug 前** — 匹配已知症状 | `Grep "症状关键词" .claude/memory/causality-graph.json` |
| **修 Bug 前** — 查是否已预判 | `Grep "症状" .claude/memory/bugs-and-fixes.json` |
| **查历史决策** — 为什么这样做 | `Grep "功能关键词" .claude/memory/changelog.json` |
| **查代码规范** — 命名/风格/模式 | `Read .claude/memory/conventions.json` |
| **查完整架构** — 模块/IPC/技术栈 | `Read .claude/memory/architecture.json` |
## ⚡ 关键规则
> 以下规则从项目扫描中自动生成,请根据实际情况补充
1. **热点文件** — 修改超过 500 行的文件前,必须先 Grep semantic-index + hotspot-map 定位
2. **修 Bug** — 先 Grep causality-graph 的 chainIndex 匹配症状
3. 提交信息推荐 `feat:/fix:/refactor:/chore:` 前缀
## 🔄 任务完成后必须更新
每次完成代码修改后,按需更新以下文件(只更新涉及到的):
### 必更新
- **changelog.json** — 在 `sessions` 数组末尾追加:
```json
{
"id": "SESSION-xxx", "date": "YYYY-MM-DD", "summary": "...",
"changes": [{ "action": "create|modify|delete", "files": [...], "reason": "..." }],
"decisions": [...], "lessonsLearned": [...],
"ripples": { "description": "...", "affectedModules": [...], "sideEffects": [...] },
"rejectedAlternatives": [{ "option": "...", "reason": "..." }]
}
从各详细文件中提取最新信息,重写(非追加)SUMMARY.md:
最近 3 次变更 ← changelog.json 最后 3 条的 summary当前状态 ← task-context.json 的 currentTasks + pendingIssues高频陷阱 ← bugs-and-fixes.json 的 commonMistakes(Top 5)<!-- MEMORY-SYSTEM-END -->💡 设计理念:SUMMARY.md 是固定大小的"缓存",详细数据永远保留在原文件中。 Claude 不需要"记住一切",只需要"知道去哪找"。
### 注入逻辑
1. **如果 CLAUDE.md 不存在**:
创建新文件,内容为:
```markdown
# <项目名> — Claude 工程指令
> 记忆系统 v3.0 — "搜索引擎"模型:启动只读摘要,详情按需检索
<记忆系统指令块>
<!-- MEMORY-SYSTEM-START --> 标记,替换标记之间的内容扫描创建的所有文件,统计大小,输出如下格式的报告:
✅ Claude 记忆系统初始化完成!
📁 创建的文件:
.claude/memory/SUMMARY.md (xxx bytes)
.claude/memory/architecture.json (xxx bytes)
.claude/memory/conventions.json (xxx bytes)
.claude/memory/semantic-index.json (xxx bytes)
.claude/memory/hotspot-map.json (xxx bytes)
.claude/memory/task-context.json (xxx bytes)
.claude/memory/changelog.json (xxx bytes)
.claude/memory/bugs-and-fixes.json (xxx bytes)
.claude/memory/causality-graph.json(xxx bytes)
CLAUDE.md (已更新/已创建)
📊 项目分析摘要:
- 技术栈: <语言> + <框架>
- 核心模块: <数量>个
- 热点文件(>500行): <数量>个
- 语义索引域: <数量>个
🧠 记忆系统设计:
- 启动加载: ~3KB(仅 SUMMARY.md)
- 详情存储: 按需 Grep 检索
- 增长模型: 启动负载永远 O(1)
💡 下一步建议:
1. 审查 architecture.json 中的模块描述是否准确
2. 检查 conventions.json 是否符合团队规范
3. 在 task-context.json 中添加当前进行中的任务
4. 将 .claude/memory/ 加入版本控制(推荐)
5. 根据项目特点补充 CLAUDE.md 中的关键规则
关键规则 部分应自适应生成(如 Go 项目不需要 IPC 规则)