open-memex 0.6.0 → 0.6.1-alpha.3
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.
- package/AGENTS.md +3 -0
- package/README.md +546 -387
- package/README.zh-CN.md +381 -447
- package/dist/cli.js +71 -7
- package/dist/doctor.js +23 -1
- package/dist/init.js +3 -0
- package/dist/retrieve/cjk.js +14 -2
- package/dist/retrieve/query.js +54 -0
- package/dist/retrieve/search.js +20 -19
- package/dist/store/audit.js +101 -0
- package/dist/store/db.js +5 -0
- package/dist/store/markdown.js +6 -1
- package/dist/tools/memory.js +9 -1
- package/dist/tools/ops.js +6 -6
- package/docs/CONCEPTS.md +181 -0
- package/docs/CONCEPTS.zh-CN.md +163 -0
- package/docs/V2-DESIGN.md +80 -0
- package/package.json +1 -1
- package/scripts/smoke-pure.ts +36 -0
- package/src/cli.ts +78 -7
- package/src/doctor.ts +23 -1
- package/src/init.ts +3 -0
- package/src/retrieve/cjk.ts +18 -2
- package/src/retrieve/query.ts +58 -0
- package/src/retrieve/search.ts +27 -19
- package/src/store/audit.ts +136 -0
- package/src/store/db.ts +5 -0
- package/src/store/markdown.ts +6 -1
- package/src/tools/memory.ts +16 -1
- package/src/tools/ops.ts +6 -6
- package/docs/USER-GUIDE.md +0 -196
- package/docs/USER-GUIDE.zh-CN.md +0 -160
package/README.zh-CN.md
CHANGED
|
@@ -1,238 +1,176 @@
|
|
|
1
1
|
# open-memex
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 给你的 AI 编程助手装一个长期记忆——在本机上、用纯 Markdown 保存、你用的每个工具共享同一份。
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/open-memex)
|
|
6
6
|
[](./LICENSE)
|
|
7
7
|
|
|
8
|
-
[English](./README.md)
|
|
8
|
+
[English README](./README.md)
|
|
9
|
+
|
|
10
|
+
每次打开 AI 编程会话都是从零开始:你得重新解释项目背景,助手把同样的坑再踩一遍,昨天的决策在聊天结束时就消失了。open-memex 让你的助手拥有跨会话的记忆:说一次"记住:我们周五发布",下周不管你用 Copilot、Cursor、opencode 还是 Claude Code,它都已经知道——因为它们读写的是同一台机器上的同一份本地记忆。
|
|
11
|
+
|
|
12
|
+
- **免费开源**(Apache-2.0)。无账号、无云端、无遥测——一切都在你本机,都是你能打开、能编辑的文件。
|
|
13
|
+
- **本地优先**:记忆是纯 Markdown 文件(事实来源),外加一个可重建的 SQLite 关键词索引。除非你明确要分享,否则任何东西都不会离开你的机器。
|
|
14
|
+
- **一份记忆,所有助手**:一条命令把几个编辑器都接上,它们共享同一份记忆,不再各存一份互不可见。
|
|
15
|
+
|
|
16
|
+
第一次接触?这份 README 带你在一分钟左右从安装走到"记忆生效"。跑通之后,[概念指南](./docs/CONCEPTS.zh-CN.md)会把心智模型讲透。
|
|
17
|
+
|
|
18
|
+
## 目录
|
|
19
|
+
|
|
20
|
+
- [快速开始](#快速开始)
|
|
21
|
+
- [核心概念](#核心概念)
|
|
22
|
+
- [编辑器与功能对照](#编辑器与功能对照)
|
|
23
|
+
- [安装](#安装)
|
|
24
|
+
- [为你的编辑器做设置](#为你的编辑器做设置)
|
|
25
|
+
- [init 到底改了你机器上的什么](#init-到底改了你机器上的什么)
|
|
26
|
+
- [捕获:记忆是怎么存下来的](#捕获记忆是怎么存下来的)
|
|
27
|
+
- [助手拿到的工具](#助手拿到的工具)
|
|
28
|
+
- [记忆类型](#记忆类型)
|
|
29
|
+
- [团队工作流:通过 Git 共享记忆](#团队工作流通过-git-共享记忆)
|
|
30
|
+
- [回想:记忆是怎么回来的](#回想记忆是怎么回来的)
|
|
31
|
+
- [安全与数据](#安全与数据)
|
|
32
|
+
- [局限性](#局限性)
|
|
33
|
+
- [升级](#升级)
|
|
34
|
+
- [存储布局](#存储布局)
|
|
35
|
+
- [配置](#配置)
|
|
36
|
+
- [CLI 参考](#cli-参考)
|
|
37
|
+
- [MCP 服务器](#mcp-服务器)
|
|
38
|
+
- [作用域详解](#作用域详解)
|
|
39
|
+
- [故障排查](#故障排查)
|
|
40
|
+
- [常见问题](#常见问题)
|
|
41
|
+
- [项目状态](#项目状态)
|
|
42
|
+
|
|
43
|
+
## 快速开始
|
|
44
|
+
|
|
45
|
+
需要 **Node.js ≥ 22.6**(用 `node -v` 检查)。然后:
|
|
9
46
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
47
|
+
```sh
|
|
48
|
+
npm install -g open-memex
|
|
49
|
+
open-memex init
|
|
50
|
+
```
|
|
14
51
|
|
|
15
|
-
|
|
16
|
-
每个新的 AI 编程会话都从零开始——同样的项目背景要反复讲,同样的坑要反复踩,
|
|
17
|
-
同样的事故教训在聊天结束时就消失了。
|
|
52
|
+
`init` 会检测你已安装的编辑器(VS Code、Cursor、opencode,以及项目里有 solution 文件时的 Visual Studio),把每个编辑器都接到 open-memex 上。之后重启编辑器。
|
|
18
53
|
|
|
19
|
-
|
|
20
|
-
并在下一次会话开始时自动注入回去。
|
|
54
|
+
**亲眼看它生效**(30 秒):
|
|
21
55
|
|
|
22
|
-
|
|
56
|
+
```sh
|
|
57
|
+
open-memex add "这个项目在周五发布"
|
|
58
|
+
```
|
|
23
59
|
|
|
24
|
-
|
|
60
|
+
然后在编辑器里开一个新聊天,问你的助手:*"这个项目什么时候发布?"*它已经知道了——不用你再解释一遍。这个"存一次、永久回想"的往返,就是这个产品的全部。下面都是细节。
|
|
25
61
|
|
|
26
|
-
|
|
27
|
-
Cursor、opencode、Claude Code。但每个工具的记忆都是孤岛:在 A 里定好的决策,B 一无所知。
|
|
62
|
+
可选但推荐——检查一切都接好了:
|
|
28
63
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
在 Cursor 里学到的教训,Claude Code 也看得到。
|
|
64
|
+
```sh
|
|
65
|
+
open-memex doctor
|
|
66
|
+
```
|
|
33
67
|
|
|
34
|
-
|
|
68
|
+
## 核心概念
|
|
35
69
|
|
|
36
|
-
|
|
37
|
-
plan 产出决策,verify 产出规则——open-memex 是让它们跨会话留存的记忆层,
|
|
38
|
-
而不是每次从头重新推导。
|
|
70
|
+
三个概念能解释 open-memex 几乎所有的事。
|
|
39
71
|
|
|
40
|
-
|
|
72
|
+
**1. 两种作用域:`project` 和 `personal`。**
|
|
73
|
+
每条记忆属于两个地方之一:
|
|
41
74
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
| 数据在哪 | 你的机器 + 你的仓库 | 服务商服务器 | 中心服务器 | 聊天结束就没了 |
|
|
45
|
-
| 分享前 review | 有——outbox + PR | 不一定 | 有 | 没有 |
|
|
46
|
-
| Agent 回忆 | 会话开始注入 + 搜索 | 调 API | 人工去查 | 没有 |
|
|
47
|
-
| 人类可读 | 纯 Markdown 文件 | 后台 / API | 有 | 没有 |
|
|
48
|
-
| 跨 AI 工具通用 | 可以——同一台机器上的任何 MCP 客户端 | 按集成逐个对接 | 不可以 | 不可以 |
|
|
75
|
+
- **project(项目)**——关于某个代码库的知识(决策、约束、教训)。按当前仓库自动归属,你永远不需要手动设置。
|
|
76
|
+
- **personal(个人)**——关于*你*的知识(偏好、习惯),在每个项目里都适用。它只存在于这台机器上,永远进不了任何仓库。
|
|
49
77
|
|
|
50
|
-
|
|
51
|
-
- **SQLite FTS5** 做可重建索引(BM25 关键词检索,`better-sqlite3`)
|
|
52
|
-
- **零云端**、零账号、零第三方 API
|
|
53
|
-
- 直接跑在 opencode 内嵌的 Bun 运行时里;CLI 和 MCP server 跑在 Node 下——开发时无需构建(发布的 npm 包带预编译好的 JS)、无需安装 Bun
|
|
78
|
+
关于你的事实("我喜欢简洁的 diff")进 `personal`;其他默认进当前项目。
|
|
54
79
|
|
|
55
|
-
|
|
80
|
+
**2. 捕获 → 回想。**
|
|
81
|
+
记忆以小型 Markdown 文件保存,一条事实一个文件。每个新会话的第一轮,open-memex 自动把最相关的若干条交给你的助手,它一开场就已经知道。助手也能随时搜全量记忆。你永远不需要自己去"加载"任何东西。
|
|
56
82
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
│ AI agent │
|
|
60
|
-
│ Copilot / Cursor │
|
|
61
|
-
│ Claude / opencode│
|
|
62
|
-
└────────┬─────────┘
|
|
63
|
-
│ MCP (stdio) — 11 tools
|
|
64
|
-
│ session-start injection
|
|
65
|
-
┌────────▼─────────┐
|
|
66
|
-
│ open-memex │
|
|
67
|
-
│ MCP server │
|
|
68
|
-
└──┬────────────┬──┘
|
|
69
|
-
│ │
|
|
70
|
-
┌────────────▼───┐ ┌─────▼──────────┐
|
|
71
|
-
│ Markdown files │ │ SQLite FTS5 │
|
|
72
|
-
│ source of truth│ │ rebuildable │
|
|
73
|
-
│ local-first │ │ index (BM25) │
|
|
74
|
-
└─────────────┬──┘ └────────────────┘
|
|
75
|
-
│ submit (explicit,
|
|
76
|
-
│ local commit)
|
|
77
|
-
┌───────▼────────┐
|
|
78
|
-
│ Git repo │
|
|
79
|
-
│ .ai/open-memex/│
|
|
80
|
-
│ PR-reviewed │
|
|
81
|
-
│ team memory │
|
|
82
|
-
└────────────────┘
|
|
83
|
-
|
|
84
|
-
personal scope:只属于这台机器——永不同步,永远进不了仓库。
|
|
85
|
-
```
|
|
83
|
+
**3. 你的文件,你做主。**
|
|
84
|
+
Markdown 文件是事实来源——打开、编辑、删除、用 grep 搜都行。旁边的 SQLite 索引只是搜索加速器,随时可以从文件重建(`open-memex reindex`)。团队共享(当你需要时)走的是和代码一样的评审流程:没有任何东西会被自动分享(见[团队工作流](#团队工作流通过-git-共享记忆))。
|
|
86
85
|
|
|
87
|
-
##
|
|
86
|
+
## 编辑器与功能对照
|
|
88
87
|
|
|
89
|
-
|
|
88
|
+
open-memex 用两种方式接编辑器:原生的 **opencode 插件**,和标准的 **MCP 服务器**(任何支持 MCP 的编辑器都能用)。(MCP,即 Model Context Protocol,是编辑器给助手加工具的开放标准;open-memex 在你的编辑器里表现为一组 `memory_*` 工具。)你能得到什么,取决于编辑器走哪条路:
|
|
90
89
|
|
|
91
|
-
|
|
90
|
+
| 编辑器 | 设置方式 | 工具 | 会话开始时回想 | 关键词自动捕获 |
|
|
91
|
+
|---|---|---|---|---|
|
|
92
|
+
| opencode(原生插件,推荐) | `open-memex init --client opencode --global` | 5 个核心工具 | 内置——每个会话第一轮 | 有——`remember …`、`记住…` |
|
|
93
|
+
| VS Code(Copilot) | `open-memex init --client vscode` | 经 MCP 全 11 个 | 经 MCP 握手引导* | 无——你开口让助手保存 |
|
|
94
|
+
| Cursor | `open-memex init --client cursor` | 经 MCP 全 11 个 | 经 MCP 握手引导* | 无——你开口让助手保存 |
|
|
95
|
+
| Claude Code | `claude mcp add open-memex -- open-memex mcp` | 经 MCP 全 11 个 | 经 MCP 握手引导* | 无——你开口让助手保存 |
|
|
96
|
+
| Visual Studio 2022 17.14+ / 2026 | `open-memex init --client visualstudio` | 经 MCP 全 11 个 | 经 MCP 握手引导* | 无——你开口让助手保存 |
|
|
97
|
+
| Codex 与其他 MCP 客户端 | `open-memex mcp --print-config` | 经 MCP 全 11 个 | 经 MCP 握手引导* | 无——你开口让助手保存 |
|
|
92
98
|
|
|
93
|
-
|
|
99
|
+
\* MCP 没有硬性的会话开始钩子,所以 open-memex 在 MCP 握手中把引导发给助手(包括有多少草稿在等同步),`init` 还会把完整版写进编辑器的指令文件。实践中助手会遵循这些引导;只有 opencode 插件是真正的内置第一轮注入。[助手拿到的工具](#助手拿到的工具)一节列出了 5 个核心工具和另外 6 个工作流工具,"5 个 vs 11 个"的切分在那里写明白。
|
|
94
100
|
|
|
95
|
-
|
|
101
|
+
同一台机器上的所有编辑器读写的是**同一份**记忆——在 VS Code 里捕获的一条约束,在 opencode 里会被遵守;在 Cursor 里学到的教训,会出现在 Claude Code 面前。(不同机器之间不自动同步,见[常见问题](#常见问题)。)
|
|
96
102
|
|
|
97
|
-
|
|
103
|
+
`init` 还会给 VS Code 和 Cursor(以及 per-project MCP 模式下的 opencode)安装一个 **Agent Skill**(一份教懂 skill 的助手用 CLI 的短指令文件)。opencode 原生插件接好时,那里不装 skill——插件已经提供了记忆工具,再加一套指令只会让助手变话痨。
|
|
98
104
|
|
|
99
|
-
|
|
100
|
-
npm install -g open-memex
|
|
101
|
-
```
|
|
105
|
+
## 和别的方案比
|
|
102
106
|
|
|
103
|
-
|
|
107
|
+
| | open-memex | 指令文件(`CLAUDE.md`、`AGENTS.md` 等) | 云记忆服务 | 聊天记录 |
|
|
108
|
+
|---|---|---|---|---|
|
|
109
|
+
| 存在哪 | 你的机器 + 你的仓库 | 仓库里 | 服务商服务器 | 聊天结束就没了 |
|
|
110
|
+
| 谁维护 | 工作中顺手捕获、你评审 | 你手写并手动更新 | 服务商 | — |
|
|
111
|
+
| 跨 AI 工具 | 可以——任何 MCP 客户端(同机) | 每个工具有自己的约定文件 | 按集成逐个接 | 不行 |
|
|
112
|
+
| 分享前评审 | 有——outbox + Pull Request | 有——就是文件 | 看服务商 | 没有 |
|
|
113
|
+
| 人类可读 | 纯 Markdown 文件 | 可以 | 面板 / API | 不行 |
|
|
104
114
|
|
|
105
|
-
|
|
115
|
+
指令文件适合放少数常驻规则——继续用它(open-memex 甚至能从你的记忆里给它起草,见下文 `distill-agents`)。open-memex 管的是那堆不断增长的、没人记得要写下来的决策、教训和偏好。
|
|
106
116
|
|
|
107
|
-
|
|
108
|
-
npm install -g open-memex@alpha
|
|
109
|
-
```
|
|
117
|
+
## 安装
|
|
110
118
|
|
|
111
|
-
|
|
112
|
-
open-memex init
|
|
113
|
-
```
|
|
119
|
+
### 环境要求
|
|
114
120
|
|
|
115
|
-
|
|
121
|
+
- **Node.js ≥ 22.6**(`open-memex doctor` 会替你核查)
|
|
116
122
|
|
|
117
|
-
|
|
123
|
+
### 安装 CLI
|
|
118
124
|
|
|
119
125
|
```sh
|
|
120
|
-
npm
|
|
121
|
-
npm view open-memex@alpha version # 最新 alpha 版
|
|
126
|
+
npm install -g open-memex
|
|
122
127
|
```
|
|
123
128
|
|
|
124
|
-
|
|
129
|
+
这是稳定版。装包时可能会打印一行提醒让你运行 `open-memex init`——编辑器接线是单独的一步(下面第 2 步),没看到这行提醒也不用担心,直接运行 `init` 就行。
|
|
125
130
|
|
|
126
|
-
|
|
131
|
+
另有两种方式:
|
|
127
132
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
133
|
+
- **免安装,用 npx 直接跑**:`npx -y open-memex <command>` 免安装运行任意命令(如 `npx -y open-memex init --client vscode`)。启动慢一些,但无需安装卸载。
|
|
134
|
+
- **Alpha 版**(功能最新、毛边更多,给测试者):`npm install -g open-memex@alpha`。用 `npm view open-memex version`(稳定版)和 `npm view open-memex@alpha version`(alpha 版)看当前发布了什么。
|
|
135
|
+
|
|
136
|
+
装完找不到 `open-memex` 命令,是 PATH 的问题——见[故障排查](#故障排查)。
|
|
132
137
|
|
|
133
|
-
|
|
138
|
+
### 从源码安装(给贡献者)
|
|
134
139
|
|
|
135
140
|
```sh
|
|
136
141
|
git clone -b main https://github.com/stoneskin/open-memex.git
|
|
137
142
|
cd open-memex
|
|
138
143
|
npm install
|
|
139
|
-
node --experimental-strip-types src/cli.ts
|
|
144
|
+
node --experimental-strip-types src/cli.ts <command>
|
|
140
145
|
```
|
|
141
146
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
`npm install -g` 会把 `open-memex` 启动器放到 npm 的全局 bin 目录。
|
|
145
|
-
如果终端找不到它,说明该目录不在你的 `PATH` 里:
|
|
146
|
-
|
|
147
|
-
1. 先找到这个目录:`npm config get prefix`
|
|
148
|
-
- **Windows:** 启动器(`open-memex.cmd`)就在该目录下,例如
|
|
149
|
-
`C:\Users\<你>\AppData\Roaming\npm`
|
|
150
|
-
- **macOS / Linux:** 在 `<prefix>/bin` 下,例如 `/usr/local/bin`
|
|
151
|
-
或 `~/.nvm/versions/node/v22.x.x/bin`
|
|
152
|
-
2. 把它加进 `PATH`:
|
|
153
|
-
- **Windows:** 设置 → 系统 → 关于 → 高级系统设置 → 环境变量 →
|
|
154
|
-
把该目录加到*用户*的 `Path` 里 → **重启终端**。用 `where open-memex` 验证。
|
|
155
|
-
- **macOS / Linux:** 在 `~/.zshrc`(或 `~/.bashrc`)里加一行
|
|
156
|
-
`export PATH="$(npm prefix -g)/bin:$PATH"`,重启 shell,
|
|
157
|
-
用 `command -v open-memex` 验证。
|
|
158
|
-
3. 没有管理员权限 / 不想动 `PATH`?用上面的 npx 形式——npx 自己解析包,
|
|
159
|
-
不需要改 `PATH`。
|
|
160
|
-
|
|
161
|
-
#### Windows 重装报 "`EBUSY` / `EPERM`(`better_sqlite3.node`)"
|
|
162
|
-
|
|
163
|
-
Windows 下被进程加载的 DLL 是锁死的:如果 open-memex MCP server 正在运行
|
|
164
|
-
(VS Code MCP 面板、Cursor 等),`npm install -g open-memex` 替换不了
|
|
165
|
-
`better_sqlite3.node`,就会报 `EBUSY` / `EPERM`。先停掉 MCP server
|
|
166
|
-
(或退出编辑器),再重跑安装。还不行的话,手动删掉全局 npm 目录下的
|
|
167
|
-
`node_modules/open-memex` 和 `node_modules/.open-memex-*` 临时目录,再装。
|
|
168
|
-
|
|
169
|
-
### 第二步——给你的编辑器一键配置
|
|
147
|
+
## 为你的编辑器做设置
|
|
170
148
|
|
|
171
|
-
|
|
149
|
+
在**项目根目录**(你正在工作的仓库顶层文件夹)运行 `init`,让项目作用域正好落到这个仓库上:
|
|
172
150
|
|
|
173
151
|
```sh
|
|
174
152
|
open-memex init --yes
|
|
175
|
-
#
|
|
153
|
+
# ……或者不先装包,直接:
|
|
176
154
|
npx -y open-memex init --yes
|
|
177
155
|
```
|
|
178
156
|
|
|
179
|
-
|
|
180
|
-
支持用户级的编辑器走用户级(VS Code / Cursor 的 MCP 配置、opencode 原生插件),
|
|
181
|
-
一次 init,所有项目通用;项目里有 solution 文件时 Visual Studio 也会一起配。
|
|
182
|
-
同时会给每个编辑器装一个 **Agent Skill**(`open-memex`,opencode 用原生插件时除外——
|
|
183
|
-
插件已经提供了记忆工具),懂 skill 的 agent
|
|
184
|
-
不用配 MCP 也能通过 CLI 用你的记忆。
|
|
185
|
-
想只配某一个编辑器?加 `--client`:
|
|
186
|
-
|
|
187
|
-
> **两个"全局"不是一回事,别搞混。**
|
|
188
|
-
> - `npm install -g open-memex` 是把*包*装到全局:让 `open-memex` 命令出现在
|
|
189
|
-
> 你的 PATH 里。
|
|
190
|
-
> - `init --global` 是把*编辑器配置*写到用户级而不是项目里:init 一次,
|
|
191
|
-
> 每个项目都生效。不管包是全局安装的还是用 npx 临时跑的,效果一样。
|
|
192
|
-
|
|
193
|
-
装完包还会打印一句提醒,让你跑 `open-memex init`——接线是独立的一步。
|
|
194
|
-
如果你在从没跑过 init 的机器上直接敲 `open-memex`,它会问你要不要现在
|
|
195
|
-
init(只在交互终端里问;脚本和 CI 里看到的还是原来的 usage)。
|
|
196
|
-
init 跑完会打印一个具体的下一步——用 `open-memex add` 存一条记忆,再让
|
|
197
|
-
agent 回忆它——让第一次用的用户一眼看到"跑起来了"是什么样子。
|
|
157
|
+
`--yes` 表示接受 `init` 每个问题的推荐默认值(要接哪些编辑器、自动捕获、第一轮回想)。想逐题回答就去掉它。不带 `--client` 时,`init` 检测你已装的编辑器并全部接上——初始化一次,所有项目通用。只想接一个编辑器,就传 `--client`:
|
|
198
158
|
|
|
199
159
|
**VS Code**(Copilot):
|
|
200
160
|
|
|
201
161
|
```sh
|
|
202
162
|
open-memex init --client vscode
|
|
203
|
-
# ……没先装包的话:
|
|
204
|
-
npx -y open-memex init --client vscode
|
|
205
163
|
```
|
|
206
164
|
|
|
207
|
-
|
|
208
|
-
在 Copilot Chat 的 MCP 面板里确认 `open-memex` server 已启动。终端交互模式下
|
|
209
|
-
`init` 会问你要配到项目级还是用户级,而不是替你猜;`--global` 直接强制
|
|
210
|
-
用户级。
|
|
165
|
+
写入 MCP 服务器配置并可干净重载;重载窗口,确认 Copilot Chat 的 MCP 面板里 `open-memex` 服务器已启动。默认把配置写到 VS Code 的*用户级*配置(每个项目都生效);也可以写到项目级 `.vscode/mcp.json`。
|
|
211
166
|
|
|
212
|
-
**Cursor
|
|
167
|
+
**Cursor**:
|
|
213
168
|
|
|
214
169
|
```sh
|
|
215
170
|
open-memex init --client cursor
|
|
216
171
|
```
|
|
217
172
|
|
|
218
|
-
|
|
219
|
-
(或终端里 `init` 问你时选用户级)就写用户级,外加用户级 Copilot
|
|
220
|
-
instructions。
|
|
221
|
-
|
|
222
|
-
**一次配置、所有项目通用(VS Code / Cursor):**
|
|
223
|
-
|
|
224
|
-
```sh
|
|
225
|
-
open-memex init --client vscode --global --yes
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
把 server 条目写到编辑器的*用户级* MCP 配置(Windows 下是
|
|
229
|
-
`%APPDATA%\Code\User\mcp.json`,macOS 是
|
|
230
|
-
`~/Library/Application Support/Code/User/mcp.json`,Linux 是
|
|
231
|
-
`~/.config/Code/User/mcp.json`;Cursor 是 `~/.cursor/mcp.json`),
|
|
232
|
-
而不是写到项目里——init 一次,每个项目打开自动启动 server。
|
|
233
|
-
如果某个项目自己定义了 `.vscode/mcp.json`,项目级的优先。
|
|
234
|
-
如果用户级文件里带注释(VS Code 接受 JSONC),`init` 不会碰这个文件,
|
|
235
|
-
只打印可直接手贴的配置片段。
|
|
173
|
+
形态和 VS Code 一样:默认用户级 MCP 配置,可选项目级 `.cursor/mcp.json`,外加 Copilot 风格的指令文件。
|
|
236
174
|
|
|
237
175
|
**opencode**(原生插件——推荐):
|
|
238
176
|
|
|
@@ -240,178 +178,198 @@ open-memex init --client vscode --global --yes
|
|
|
240
178
|
open-memex init --client opencode --global --yes
|
|
241
179
|
```
|
|
242
180
|
|
|
243
|
-
|
|
244
|
-
`~/.config/opencode/opencode.json`(如果你用的是 `opencode.jsonc`,就合并进那个)
|
|
245
|
-
——一次配置,每个项目自动生效,不用逐个项目
|
|
246
|
-
init。在 tools 之外还能获得关键词自动捕获和首轮上下文注入。(带注释的配置文件
|
|
247
|
-
不会被改动——那种情况请手动加 `plugin` 这一行。)
|
|
181
|
+
把原生插件并入你的用户级 `~/.config/opencode/opencode.json`(如果你已有的是 `opencode.jsonc`,就并进那个)——一次设置,每个项目都生效,不用逐项目 init。你会得到 5 个核心工具、关键词自动捕获和第一轮上下文注入。(配置文件里有注释时它不会动,`init` 会打印要手动加的那一行。)
|
|
248
182
|
|
|
249
|
-
**opencode**(作为普通 MCP
|
|
183
|
+
**opencode**(作为普通 MCP 消费者):
|
|
250
184
|
|
|
251
185
|
```sh
|
|
252
186
|
open-memex init --client opencode
|
|
253
187
|
```
|
|
254
188
|
|
|
255
|
-
|
|
256
|
-
插件时才需要。
|
|
189
|
+
写一个项目级 `opencode.jsonc`,里面放 MCP 服务器。只有当你偏好普通 MCP、不要原生插件时才需要——代价是没有关键词捕获和内置注入。
|
|
257
190
|
|
|
258
|
-
**Claude Code
|
|
191
|
+
**Claude Code**(在项目根目录):
|
|
259
192
|
|
|
260
193
|
```sh
|
|
261
194
|
claude mcp add open-memex -- open-memex mcp
|
|
262
|
-
#
|
|
195
|
+
# ……或者打印配置片段:open-memex mcp --print-config claude
|
|
263
196
|
```
|
|
264
197
|
|
|
265
|
-
**Visual Studio**(在 solution
|
|
198
|
+
**Visual Studio**(在 solution 目录):
|
|
266
199
|
|
|
267
200
|
```sh
|
|
268
201
|
open-memex init --client visualstudio
|
|
269
202
|
```
|
|
270
203
|
|
|
271
|
-
写 solution 级 `.mcp.json`
|
|
272
|
-
Visual Studio 2022 17.14+ 或 Visual Studio 2026(**仅 Windows**)。
|
|
273
|
-
Visual Studio 也会自动发现 `.vscode/mcp.json` 和 `.cursor/mcp.json`,
|
|
274
|
-
所以上面的 VS Code 配置同样可用。
|
|
204
|
+
写 solution 级 `.mcp.json`。需要 Visual Studio 2022 17.14+ 或 Visual Studio 2026(仅 Windows)。Visual Studio 也会自动发现 `.vscode/mcp.json` 和 `.cursor/mcp.json`,所以上面的 VS Code 设置同样有效。
|
|
275
205
|
|
|
276
|
-
**Codex
|
|
277
|
-
(`config.toml` 的 `[mcp_servers]`,或 `codex mcp add`)。
|
|
206
|
+
**Codex**:暂时没有 `init` 客户端——用 `open-memex mcp --print-config` 的输出手动加服务器(`config.toml` 里的 `[mcp_servers]`,或 `codex mcp add`)。
|
|
278
207
|
|
|
279
|
-
|
|
208
|
+
### 一次设置、所有项目通用(VS Code / Cursor)
|
|
209
|
+
|
|
210
|
+
```sh
|
|
211
|
+
open-memex init --client vscode --global --yes
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
> **两个"全局"不是一回事,别搞混。**
|
|
215
|
+
> - `npm install -g open-memex` 是把*软件包*装到全局:让 `open-memex` 命令进 PATH。
|
|
216
|
+
> - `init --global` 是把*编辑器配置*写到用户级而不是项目级:一次初始化,所有项目都能用。包是全局装还是 npx 跑,它的效果都一样。
|
|
217
|
+
|
|
218
|
+
`--global` 形式把服务器配置写进编辑器的*用户级* MCP 配置(Windows 上是 `%APPDATA%\Code\User\mcp.json`,macOS 上是 `~/Library/Application Support/Code/User/mcp.json`,Linux 上是 `~/.config/Code/User/mcp.json`;Cursor 是 `~/.cursor/mcp.json`),而不是项目里——初始化一次,服务器在每个项目都会启动。项目自己定义了 `.vscode/mcp.json` 时,项目级的仍然优先。如果用户级文件里有注释(编辑器接受 JSONC),`init` 不会动它,会打印出需要手动粘贴的那段确切片段。
|
|
219
|
+
|
|
220
|
+
### `init` 的行为说明
|
|
221
|
+
|
|
222
|
+
- 已有配置文件是**合并、永不覆盖**——重复运行 `init` 是安全的。`--force` 会重写我们写入的条目。
|
|
223
|
+
- 当 PATH 上没有可持久使用的 `open-memex`(例如一次性 npx 运行时),`init` 会往配置里写一条 `npx -y open-memex mcp` 服务器命令,让设置之后照样能用。之后 `npm i -g open-memex` + `open-memex init --force` 可以切到更快的直连命令。
|
|
224
|
+
- 在交互终端上,`init` 会列出检测到的编辑器并请你确认;脚本和 CI 环境从不提问,会接上所有检测到的编辑器。
|
|
225
|
+
- 如果你在一台从未完成 init 的机器上只运行 `open-memex`(不带任何参数),它会问你要不要顺手跑 init(仅限交互终端)。
|
|
226
|
+
|
|
227
|
+
### 移除接线
|
|
280
228
|
|
|
281
229
|
```sh
|
|
282
230
|
open-memex uninstall --yes
|
|
283
231
|
```
|
|
284
232
|
|
|
285
|
-
`init
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
`init`
|
|
290
|
-
|
|
291
|
-
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
-
|
|
306
|
-
|
|
307
|
-
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
- 如果 `PATH` 上没有可用的 `open-memex`(比如一次性 npx),`init` 会把
|
|
311
|
-
`npx -y open-memex mcp` 写进配置,配置照样能用。
|
|
312
|
-
以后 `npm i -g open-memex` + `open-memex init --force` 可切换到更快
|
|
313
|
-
的直接调用。
|
|
314
|
-
|
|
315
|
-
### 第三步——验证
|
|
233
|
+
撤销 `init`——移除 MCP 服务器条目、opencode 插件行、Agent Skill,以及编辑器指令文件里的 open-memex 段落。不带 `--client` 时会清理所有检测到的编辑器;`--global` 把清理范围限定在用户级接线。你的记忆数据永不触碰。
|
|
234
|
+
|
|
235
|
+
## init 到底改了你机器上的什么
|
|
236
|
+
|
|
237
|
+
`init` 写入的所有东西,一处列清:
|
|
238
|
+
|
|
239
|
+
- **记忆数据**(首次使用时创建,不是 `init` 本身写的):Windows 上是 `%APPDATA%\open-memex\`,macOS/Linux 上是 `~/.local/share/open-memex/`——你的记忆文件和搜索索引。`uninstall` 永不修改这里的任何东西。
|
|
240
|
+
- **编辑器接线**(由 `open-memex uninstall` 移除):
|
|
241
|
+
- opencode:一条 `"plugin"` 条目,并入 `~/.config/opencode/opencode.json`(或 `.jsonc`)。改名之前遗留的 `my-o-memory` 旧条目会同时被清掉。
|
|
242
|
+
- VS Code / Cursor:用户级或项目级 MCP 配置里的一条 `open-memex` 服务器条目,外加 Copilot 指令文件里的一段 open-memex 内容(默认是用户级 `~/.copilot/copilot-instructions.md`;`--instructions project` 改为写进仓库的 `.github/copilot-instructions.md`,适合团队全员都用 open-memex 的情况)。
|
|
243
|
+
- Visual Studio:solution 旁边的 `.mcp.json`。
|
|
244
|
+
- Agent Skill:VS Code(`~/.copilot/skills/`)、Cursor(`~/.cursor/skills/`)或 per-project MCP 模式下的 opencode(`~/.config/opencode/skills/`)各自一个 `skills/open-memex/` 文件夹。
|
|
245
|
+
- **你的仓库**:什么都不写。只有你明确运行 `submit` 时(见团队工作流),文件才会落进仓库——且只是本地提交,永不自动推送。
|
|
246
|
+
|
|
247
|
+
带注释(JSONC)或无法安全解析的文件永不被重写:`init` 会打印需要手动粘贴的那段确切片段。
|
|
248
|
+
|
|
249
|
+
## 捕获:记忆是怎么存下来的
|
|
250
|
+
|
|
251
|
+
三种存入方式:
|
|
252
|
+
|
|
253
|
+
- **关键词触发**(仅 opencode 原生插件):说 `remember …`、`note that …`、`don't forget …`、`TIL …`、`save this …`——中文 `记住…` / `记一下` / `记录一下` / `别忘了…`——这句话就被存下来,不需要任何工具调用。捕获默认进当前 **project**;`remember for me …`、`记住我…`、`替我记…`、`我觉得…`、`我喜欢…` 这类"这是关于我"的信号会改为进 **personal**;`我们决定…`、`帮我们记住…` 等团队语境仍留在项目里。
|
|
254
|
+
- **助手主动保存**:在任何编辑器里,你让助手记住某件事(或者你陈述了一个值得记的事实、它自己判断该保存),它会调用 `memory_add`。上面的路由是启发式规则;你可以明说"存到我的个人记忆",或用 CLI 加 `--scope` 明确指定。
|
|
255
|
+
- **CLI**:`open-memex add "…"`,可选 `--scope` / `--tags` / `--type`。
|
|
256
|
+
|
|
257
|
+
**脱敏。** 把敏感内容包在 `<private>…</private>` 里,它在保存前会被整段剥离。识别出的密钥(API key、token、高熵凭证)会被就地掩码——保留前 4 个字符(让你能认出是哪个 key),其余替换——记忆仍会保存。随时安全地预览一句话会被捕获成什么样:
|
|
316
258
|
|
|
317
259
|
```sh
|
|
318
|
-
open-memex
|
|
260
|
+
open-memex capture --dry-run "…"
|
|
319
261
|
```
|
|
320
262
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
263
|
+
万一密钥还是溜进了记忆,`open-memex forget <id>` 把它删掉。
|
|
264
|
+
|
|
265
|
+
## 助手拿到的工具
|
|
324
266
|
|
|
325
|
-
|
|
267
|
+
MCP 服务器暴露十一个工具;opencode 原生插件暴露其中五个核心的(标 ●)。另外六个是团队评审工作流工具——只有当你通过 Git 共享记忆时才用得上。
|
|
326
268
|
|
|
327
|
-
|
|
|
269
|
+
| 工具 | 做什么 |
|
|
328
270
|
|---|---|
|
|
329
|
-
| `memory_add` |
|
|
330
|
-
| `memory_search` | BM25
|
|
331
|
-
| `memory_list` |
|
|
332
|
-
| `memory_supersede` |
|
|
333
|
-
| `memory_forget` | 按 id 删除一条记忆 |
|
|
334
|
-
| `memory_status`
|
|
335
|
-
| `memory_submit`
|
|
336
|
-
| `memory_propose`
|
|
337
|
-
| `memory_promote`
|
|
338
|
-
| `memory_resolve`
|
|
339
|
-
| `memory_pr_status`
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
**project** scope(`我们认为…`、`我们决定…`、`帮我们记住…`)。
|
|
349
|
-
- **Agent 主动调用** `memory_add`
|
|
350
|
-
- **脱敏**:`<private>…</private>` 标签内的内容会被剥离;检测到的密钥
|
|
351
|
-
(API key、token、高熵凭据)就地打码——保留前 4 个字符,其余替换为 `x`——
|
|
352
|
-
然后照常保存。用 `open-memex capture --dry-run "…"` 预览一条消息会被如何捕获。
|
|
353
|
-
|
|
354
|
-
## 记忆类型(Memory types)
|
|
355
|
-
|
|
356
|
-
11 种类型——`type` 说明这条记忆是什么,`tags` 说明它和什么有关:
|
|
357
|
-
|
|
358
|
-
| 类型 | 记录什么 |
|
|
271
|
+
| ● `memory_add` | 保存一条事实、偏好、决策、笔记 |
|
|
272
|
+
| ● `memory_search` | 关键词搜索(BM25),横跨项目 + 个人记忆 |
|
|
273
|
+
| ● `memory_list` | 列出某个作用域的记忆,最新在前 |
|
|
274
|
+
| ● `memory_supersede` | 用新版本替换一条记忆(保留 supersede 链) |
|
|
275
|
+
| ● `memory_forget` | 按 id 删除一条记忆 |
|
|
276
|
+
| `memory_status` | 显示同步队列:outbox 草稿、仓库评审状态、未提交文件 |
|
|
277
|
+
| `memory_submit` | 把指定的草稿移进仓库记忆目录(本地分支 + 提交) |
|
|
278
|
+
| `memory_propose` | 把个人记忆复制到项目作用域,作为评审候选 |
|
|
279
|
+
| `memory_promote` | 推进 `proposed → approved → published`(或拒绝 / 重新提交) |
|
|
280
|
+
| `memory_resolve` | 列出冲突的记忆文件 / 对某个做三方合并 |
|
|
281
|
+
| `memory_pr_status` | 把分支 PR 的 GitHub 状态映射到每条记忆的评审状态 |
|
|
282
|
+
|
|
283
|
+
所以 MCP 接入的编辑器永远是全套;opencode 插件主攻捕获与回想,工作流类的事走 CLI 或 MCP 接入的编辑器。
|
|
284
|
+
|
|
285
|
+
## 记忆类型
|
|
286
|
+
|
|
287
|
+
每条记忆有一个 `type`(它是什么)和 `tags`(它关于什么)。内置十一种类型:
|
|
288
|
+
|
|
289
|
+
| 类型 | 捕获什么 |
|
|
359
290
|
|---|---|
|
|
360
291
|
| `fact` | 关于项目或世界的稳定事实 |
|
|
361
|
-
| `preference` |
|
|
362
|
-
| `decision` |
|
|
363
|
-
| `constraint` |
|
|
364
|
-
| `todo` |
|
|
365
|
-
| `knowledge` |
|
|
366
|
-
| `howto` |
|
|
292
|
+
| `preference` | 某人喜欢怎么做事 |
|
|
293
|
+
| `decision` | 一个已做的选择——为什么选、代价是什么 |
|
|
294
|
+
| `constraint` | 不可违反的规则 |
|
|
295
|
+
| `todo` | 承诺以后要做的事 |
|
|
296
|
+
| `knowledge` | 耐久的领域或架构知识 |
|
|
297
|
+
| `howto` | 一个验证可行的步骤 |
|
|
367
298
|
| `gotcha` | 要避开的坑 |
|
|
368
|
-
| `lesson` |
|
|
299
|
+
| `lesson` | 一次事故或错误教会我们的东西 |
|
|
369
300
|
| `observation` | 注意到的现象,还不是结论 |
|
|
370
301
|
| `reference` | 指向权威文档的指针(不复制内容) |
|
|
371
302
|
|
|
372
|
-
|
|
303
|
+
`--type` 接受任意字符串,但坚持用内置这十一种,会让会话开始时的标签、搜索和 `distill-agents` 的输出保持可预期。
|
|
304
|
+
|
|
305
|
+
## 团队工作流:通过 Git 共享记忆
|
|
373
306
|
|
|
374
|
-
|
|
307
|
+
**一个人用?你可以跳过这一节**——上面就是单人使用的全部产品。下面的事永远不会自动发生。
|
|
308
|
+
|
|
309
|
+
个人笔记保持私密。项目知识当你选择分享时,走一条显式、可评审的流水线,形状和代码评审一样:
|
|
375
310
|
|
|
376
311
|
```
|
|
377
|
-
|
|
312
|
+
捕获 → outbox(草稿,本地)→ submit → 仓库(.ai/open-memex/)→ PR 评审 → 已发布 → 回想
|
|
378
313
|
```
|
|
379
314
|
|
|
380
|
-
1.
|
|
381
|
-
2.
|
|
382
|
-
3.
|
|
383
|
-
4. **PR
|
|
384
|
-
5.
|
|
315
|
+
1. **捕获**——日常工作中随手存下决策、坑、教训,都是草稿。
|
|
316
|
+
2. **评审**——草稿停在本地 outbox 里(你机器上,git 看不见);`open-memex sync-status`——或者直接在聊天里说"sync memory"("同步记忆")——看有啥待处理的。
|
|
317
|
+
3. **提交**——由你点名记忆;它们进入 `<仓库>/.ai/open-memex/` 并在当前分支形成一个本地提交。open-memex 永不自动推送;它会打印推送和建 PR 的命令,拿到你明确许可的助手可以替你执行。
|
|
318
|
+
4. **PR 评审**——记忆是纯 Markdown;评审者走正常分支/PR 流程批准、要求修改或拒绝。
|
|
319
|
+
5. **回想**——已发布的记忆在会话开始时注入,平时也能随时搜,人和助手都一样。
|
|
320
|
+
|
|
321
|
+
看护共享记忆的人遵循 [维护者约定](./docs/CURATOR.md):什么该批准、什么该打回、哪些卫生规则让共享记忆不腐烂。
|
|
322
|
+
|
|
323
|
+
## 回想:记忆是怎么回来的
|
|
324
|
+
|
|
325
|
+
每个会话的第一轮,open-memex 把一个 `[OPEN-MEMEX]` 块注入助手的上下文:最新的项目记忆(默认前 8 条)和你的个人偏好(默认前 5 条)。长这样:
|
|
326
|
+
|
|
327
|
+
```text
|
|
328
|
+
[OPEN-MEMEX]
|
|
329
|
+
|
|
330
|
+
User profile / preferences:
|
|
331
|
+
- I prefer concise diffs
|
|
385
332
|
|
|
386
|
-
|
|
333
|
+
Project knowledge (my-repo):
|
|
334
|
+
- [decision] We deploy on Fridays; the release train leaves at 10:00
|
|
335
|
+
|
|
336
|
+
Use the `memory_search` tool to look up more. Use `memory_add` to save new facts.
|
|
337
|
+
Do not mention this block to the user unless asked.
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
这是一个快照,不是全量记忆——其余的随时用 `memory_search` 就能查。两个前 N 的数都可以配(见[配置](#配置))。对 MCP 客户端,这个块以握手引导的形式送达、由助手遵循;opencode 插件则在第一轮直接注入。
|
|
387
341
|
|
|
388
342
|
## 安全与数据
|
|
389
343
|
|
|
390
|
-
- **本地优先:**
|
|
391
|
-
-
|
|
392
|
-
-
|
|
393
|
-
- **分享可审计:**
|
|
394
|
-
- **文件是你的:** Markdown
|
|
344
|
+
- **本地优先:** 一切住在你机器上(Windows 是 `%APPDATA%\open-memex`,macOS/Linux 是 `~/.local/share/open-memex`),外加你自己选择的仓库。零云调用、零账号、零第三方 API、零遥测。
|
|
345
|
+
- **密钥不进记忆:** `<private>…</private>` 包住的内容会被剥离;识别出的 API key/token 在保存前就地掩码。用 `open-memex capture --dry-run "…"` 预览。
|
|
346
|
+
- **个人永不同步:** `personal` 作用域只存在于这台机器——导出时默认排除,永远进不了仓库。
|
|
347
|
+
- **分享可审计:** 团队记忆只能靠显式 `submit` 移动,走分支/PR 评审,每次 `promote` 状态迁移都记进该记忆的 `review_history`(谁 / 何时 / 为什么)。
|
|
348
|
+
- **文件是你的:** Markdown 是事实来源——手工查看、编辑、删除都行;SQLite 索引从文件重建。
|
|
395
349
|
|
|
396
|
-
##
|
|
350
|
+
## 局限性
|
|
397
351
|
|
|
398
|
-
|
|
399
|
-
- **personal** — 跨所有项目全局,**仅本机,永不上传/同步**。放个人偏好。(v1 叫 `user`,`migrate --to-v2` 会自动改名。)
|
|
352
|
+
把边界写明白,免得你事后意外:
|
|
400
353
|
|
|
401
|
-
|
|
402
|
-
|
|
354
|
+
- **关键词搜索,不是语义搜索。** 回想走 BM25 关键词匹配:搜的是你存下的词,不是近义改写。(用自然问句没问题——"如何/请问"这类提问词会在匹配前过滤掉,不会稀释结果。)任何 embedding 模型没经你明确同意,永不下载。
|
|
355
|
+
- **单台机器。** 同一台机器上的编辑器共享记忆;没有跨机器同步。用 `export` / `import` 压缩包(见下)手动搬家。
|
|
356
|
+
- **快照,不是全部。** 会话开始的回想是前 N 条快照(默认项目 8 + 个人 5);更老的记忆 `memory_search` 一步就能到,但不会同时全在上下文里。
|
|
357
|
+
- **MCP 的引导是建议性的。** opencode 之外,主动捕获和回想靠助手遵循握手指令——MCP 里没有硬性的会话开始钩子。工具本身在被调用时永远可靠。
|
|
358
|
+
- **捕获路由是启发式的。** 带"个人"信号的短语(`remember for me …`、`我喜欢…`)进个人作用域;其余默认进当前项目。猜错时,把作用域说出声,或者 CLI 加 `--scope`。
|
|
403
359
|
|
|
404
|
-
##
|
|
360
|
+
## 升级
|
|
361
|
+
|
|
362
|
+
```sh
|
|
363
|
+
npm install -g open-memex@latest # 或 @alpha
|
|
364
|
+
```
|
|
405
365
|
|
|
406
|
-
|
|
407
|
-
包含 top-N 最新 project 记忆 + top-N 个人偏好。Agent 也可以随时调用
|
|
408
|
-
`memory_search` 按需检索。
|
|
366
|
+
编辑器配置指向已安装的 `open-memex` 命令,所以升级不需要重新接线。大版本升级后跑一次 `open-memex init --force`,把已装的 Agent Skill 和指令文件刷新到最新文案。如果你是从源码安装或挪过包的位置,`--force` 也会把 opencode 插件路径重新指好。
|
|
409
367
|
|
|
410
368
|
## 存储布局
|
|
411
369
|
|
|
412
370
|
```
|
|
413
371
|
%APPDATA%\open-memex\ (Windows)
|
|
414
|
-
|
|
372
|
+
~/.local/share/open-memex/ (macOS/Linux; 设置了 $XDG_DATA_HOME 则用它)
|
|
415
373
|
├── index.db # SQLite FTS5 索引(可重建)
|
|
416
374
|
└── memories/
|
|
417
375
|
├── personal/
|
|
@@ -420,250 +378,226 @@ $XDG_DATA_HOME/open-memex/ (Linux/macOS)
|
|
|
420
378
|
└── <id>.md
|
|
421
379
|
```
|
|
422
380
|
|
|
423
|
-
每个 `.md`
|
|
424
|
-
type, importance, status, tags, created_at, updated_at, schema_version` 等)+
|
|
425
|
-
记忆正文。可以手工编辑——插件启动时按文件 mtime 重新同步。
|
|
426
|
-
Markdown 是 source of truth,SQLite 索引是派生的、可重建的
|
|
427
|
-
(`open-memex reindex`)。
|
|
381
|
+
每个 `.md` 文件是一条记忆:YAML frontmatter(`id, scope, type, tags, created_at, schema_version` 等)后跟正文。你可以手工编辑——索引会从文件重新同步,Markdown 永远是事实来源(`open-memex reindex` 从零重建索引)。
|
|
428
382
|
|
|
429
|
-
|
|
383
|
+
一旦你 `submit`,项目记忆还会以 Markdown 文件的形式住进 `<仓库>/.ai/open-memex/`(由 `memoryDir` 配置),跟着分支和 PR 像其他文件一样流转。
|
|
430
384
|
|
|
431
|
-
|
|
432
|
-
|
|
385
|
+
## 配置
|
|
386
|
+
|
|
387
|
+
设置放在 `~/.config/opencode/open-memex.jsonc`——路径里的 `opencode` 是历史名;这一个文件由所有客户端共享。用 `MY_O_MEMORY_CONFIG` 覆盖配置路径,用 `MY_O_MEMORY_HOME` 覆盖存储根目录(改名之前留下的旧环境变量名,仍然有效)。
|
|
433
388
|
|
|
434
389
|
默认值:
|
|
435
390
|
|
|
436
391
|
```jsonc
|
|
437
392
|
{
|
|
438
|
-
"maxProjectMemories": 8, //
|
|
439
|
-
"maxProfileItems": 5, //
|
|
440
|
-
"injectOnFirstTurn": true, // [OPEN-MEMEX]
|
|
393
|
+
"maxProjectMemories": 8, // 第一轮注入的项目记忆条数上限
|
|
394
|
+
"maxProfileItems": 5, // 第一轮注入的个人条数上限
|
|
395
|
+
"injectOnFirstTurn": true, // [OPEN-MEMEX] 系统提示块
|
|
441
396
|
"keywordCaptureEnabled": true,
|
|
442
397
|
"logLevel": "info", // info | debug
|
|
443
|
-
"memoryDir": ".ai/open-memex" //
|
|
398
|
+
"memoryDir": ".ai/open-memex" // 仓库内项目记忆目录,相对于仓库根
|
|
444
399
|
}
|
|
445
400
|
```
|
|
446
401
|
|
|
447
|
-
|
|
448
|
-
`<仓库>/<memoryDir>/`(默认 `.ai/open-memex/`)下,可经 git 共享;
|
|
449
|
-
personal 记忆只存本地 appdata,永不离开本机。已有的 appdata 项目文件会在
|
|
450
|
-
首次写入/同步时自动搬进仓库目录。
|
|
451
|
-
|
|
452
|
-
`open-memex config` 打印生效配置(默认值 + 文件)。
|
|
453
|
-
安装后改设置:
|
|
402
|
+
`open-memex config` 打印生效配置(默认值 + 文件)。安装后改设置:
|
|
454
403
|
|
|
455
404
|
```sh
|
|
456
405
|
open-memex config set keywordCaptureEnabled false
|
|
457
406
|
open-memex config set maxProjectMemories 12
|
|
407
|
+
open-memex config set sync.autoPull true # MCP 会话开始时尽力而为地 pull
|
|
458
408
|
```
|
|
459
409
|
|
|
460
|
-
|
|
461
|
-
`keywordCaptureEnabled`、`logLevel`、`memoryDir`。完整设计见
|
|
462
|
-
[docs/V2-DESIGN.md](./docs/V2-DESIGN.md)。
|
|
410
|
+
可设置的键:`maxProjectMemories`、`maxProfileItems`、`injectOnFirstTurn`、`keywordCaptureEnabled`、`logLevel`、`memoryDir`,以及 `sync.autoPull`(带点的键,写入嵌套的 `sync` 对象)。完整设计:[docs/V2-DESIGN.md](./docs/V2-DESIGN.md)。
|
|
463
411
|
|
|
464
412
|
## CLI 参考
|
|
465
413
|
|
|
466
|
-
|
|
414
|
+
设置与健康:
|
|
467
415
|
|
|
468
416
|
```sh
|
|
469
417
|
open-memex init [--client vscode|cursor|opencode|visualstudio]
|
|
470
418
|
[--instructions personal|project] [--global] [--force] [--yes]
|
|
471
419
|
open-memex uninstall [--client vscode|cursor|opencode|visualstudio] [--global] [--yes]
|
|
472
420
|
open-memex config # 打印生效配置
|
|
473
|
-
open-memex config set <key> <value> #
|
|
421
|
+
open-memex config set <key> <value> # 改一个设置
|
|
474
422
|
open-memex doctor # 环境健康检查
|
|
423
|
+
open-memex audit # 记忆健康检查(近重复、陈旧、断链)
|
|
475
424
|
open-memex capture --dry-run "记住我喜欢简洁的回答" # 预览关键词捕获
|
|
476
425
|
open-memex mcp --print-config vscode|cursor|claude|opencode|visualstudio
|
|
477
|
-
open-memex --help #
|
|
478
|
-
open-memex <command> --help #
|
|
426
|
+
open-memex --help # 这份参考
|
|
427
|
+
open-memex <command> --help # 某个命令的帮助
|
|
479
428
|
open-memex --version # 已安装版本
|
|
480
429
|
```
|
|
481
430
|
|
|
482
431
|
记忆操作:
|
|
483
432
|
|
|
484
433
|
```sh
|
|
485
|
-
open-memex add "This repo uses better-sqlite3" --type
|
|
434
|
+
open-memex add "This repo uses better-sqlite3" --type fact
|
|
486
435
|
open-memex search "auth flow"
|
|
436
|
+
open-memex search "auth flow" --explain # 显示 FTS 表达式、分数、被生命周期藏掉的计数
|
|
487
437
|
open-memex list --scope project
|
|
488
438
|
open-memex supersede <id> "Updated content"
|
|
489
439
|
open-memex status <id> deprecated
|
|
490
440
|
open-memex forget <id>
|
|
491
441
|
```
|
|
492
442
|
|
|
493
|
-
|
|
443
|
+
团队评审工作流(两个家,一个阶段一个):
|
|
494
444
|
|
|
495
|
-
|
|
496
|
-
点名批准的草稿,才会被移入 `<repo>/.ai/open-memex/`,之后随分支和 PR 走。
|
|
497
|
-
没经过你点名,什么都不会动。
|
|
498
|
-
|
|
499
|
-
在接了 MCP 服务器的 AI 对话里,直接说 **"同步记忆"**(或 "sync memory")——
|
|
500
|
-
agent 会查状态、把 outbox 草稿逐条摘要、问你同步哪几条。服务器也会主动告诉
|
|
501
|
-
agent:新对话开始时握手里带待审草稿数,每次改记忆的 tool 返回里也带当前数(为零时不带)。
|
|
445
|
+
项目草稿住在 **appdata outbox** 里(git 看不见、与分支无关);只有你批准的草稿才进 `<仓库>/.ai/open-memex/`,在那里跟随分支和 PR。你不点名,什么都不动。在接了 MCP 服务器的 AI 聊天里,直接说 **"sync memory"**(或"同步记忆")——助手会跑状态检查、把 outbox 草稿摘要给你、问你要同步哪些。服务器也会主动告知助手:会话开始的握手里报当前等待的草稿数,每个改记忆的工具结果在非零时也带这个数。
|
|
502
446
|
|
|
503
447
|
```sh
|
|
504
448
|
open-memex sync-status
|
|
505
|
-
#
|
|
506
|
-
#
|
|
507
|
-
#
|
|
449
|
+
# 显示索引上次同步的时间(和触发源)、outbox
|
|
450
|
+
# (待同步)、仓库评审状态
|
|
451
|
+
# (draft / proposed / approved / published / rejected)、
|
|
452
|
+
# 以及任何未提交的仓库记忆文件。
|
|
508
453
|
|
|
509
454
|
open-memex submit <id...> [--branch <name>] [--base <branch>]
|
|
510
|
-
#
|
|
511
|
-
#
|
|
512
|
-
#
|
|
513
|
-
#
|
|
514
|
-
# 打印 push + gh pr
|
|
515
|
-
# --branch <name>
|
|
516
|
-
# PR
|
|
455
|
+
# 把你点名的草稿移进 .ai/open-memex/,标为 "proposed":
|
|
456
|
+
# 复制、翻转 review_state、在当前分支本地 git 提交。
|
|
457
|
+
# 永不自己建分支——建分支是你(或拿到完整链路明确许可的助手)的事。
|
|
458
|
+
# 全有全無;冲突(同 id 不同内容)干净地中止。
|
|
459
|
+
# 打印 push + gh pr 命令;持有你 Yes 的助手可以一并执行 push/PR。
|
|
460
|
+
# --branch <name> 先建分支(助手全链路路径)。PR base 默认是当前分支
|
|
461
|
+
# (记忆 PR 叠在你的工作分支上);--base 可改指到 main 或你的评审分支。
|
|
517
462
|
|
|
518
463
|
open-memex pr-status [--apply]
|
|
519
|
-
# 读分支的 GitHub PR
|
|
520
|
-
# PR
|
|
521
|
-
#
|
|
464
|
+
# 读分支的 GitHub PR,把状态映射到每条仓库内记忆:
|
|
465
|
+
# PR 合并 → published,PR 批准 → approved(approved_by = 评审者),
|
|
466
|
+
# 要求修改 → 只给建议。默认只报告;--apply 在本地执行映射的迁移(不推送)。
|
|
522
467
|
|
|
523
468
|
open-memex pull
|
|
524
|
-
# 从 git
|
|
525
|
-
#
|
|
526
|
-
#
|
|
527
|
-
#
|
|
528
|
-
#
|
|
469
|
+
# 从 git 远程拉共享记忆:fetch + 純 fast-forward。
|
|
470
|
+
# 分支分叉则明确报错失败——open-memex 永不强制合并;手工解决后再 pull。
|
|
471
|
+
# 成功后本地索引重新同步。pull 默认显式触发;设置
|
|
472
|
+
# `open-memex config set sync.autoPull true` 可在 MCP 会话开始时尽力拉一次
|
|
473
|
+
# (拉失败永不阻塞会话)。
|
|
529
474
|
|
|
530
475
|
open-memex push
|
|
531
|
-
#
|
|
532
|
-
#
|
|
476
|
+
# 把当前分支(连同已提交的记忆)推送到 git 远程。
|
|
477
|
+
# 只能显式触发——open-memex 永不自作主张推送。
|
|
533
478
|
|
|
534
479
|
open-memex export [--scope project|personal|both] [--type T] [--tag t] [--all] [-o <file>]
|
|
535
|
-
#
|
|
536
|
-
#
|
|
537
|
-
# --all / -a
|
|
480
|
+
# 把记忆打包成可移植的 .tar.gz(markdown + manifest.json),用于
|
|
481
|
+
# 搬到另一台机器或另一个应用。默认排除 visibility:private 的记忆;
|
|
482
|
+
# --all / -a 包含全部(完整迁移)。
|
|
538
483
|
|
|
539
484
|
open-memex import <bundle.tar.gz> [--dry-run]
|
|
540
|
-
#
|
|
541
|
-
#
|
|
542
|
-
#
|
|
485
|
+
# 恢复一个包:个人记忆进个人目录;项目记忆
|
|
486
|
+
# 重新键到当前项目、作为草稿落进 outbox。
|
|
487
|
+
# 同 id 的跳过;冲突的 id 只报告、永不覆写。
|
|
543
488
|
|
|
544
489
|
open-memex distill-agents [--scope project|personal] [--type t1,t2] [--limit N] [-o <file>]
|
|
545
|
-
#
|
|
546
|
-
#
|
|
547
|
-
# open-memex
|
|
548
|
-
#
|
|
490
|
+
# 从项目记忆中提炼出一段 AGENTS.md 片段
|
|
491
|
+
# (决策、约束、教训、坑、howto)。打印 markdown;
|
|
492
|
+
# -o 写进文件。你评审后手工并入——open-memex
|
|
493
|
+
# 永不自己改写你的 AGENTS.md。片段末尾带一节
|
|
494
|
+
# “记忆卫生”内容,让读 AGENTS.md 的助手在任务结束时学会主动提出提炼捕获。
|
|
549
495
|
|
|
550
496
|
open-memex propose <id...> --to project [--local-approve]
|
|
551
|
-
#
|
|
552
|
-
#
|
|
553
|
-
#
|
|
554
|
-
#
|
|
497
|
+
# 一次提议一条或多条个人记忆(一个分支、一个 PR);
|
|
498
|
+
# 每条复制并生成新 id。全有全無:任何一条 id 出错,整批中止,绝不半途。
|
|
499
|
+
# 把一条个人记忆复制到项目作用域作为评审候选
|
|
500
|
+
# (是复制不是移动——个人原件保留)。结果落进 outbox;
|
|
501
|
+
# 准备进仓库时再跑 sync-status / submit。
|
|
555
502
|
open-memex promote <id> [--reject] [--resubmit] [--note "..."] [--by NAME]
|
|
556
|
-
#
|
|
557
|
-
#
|
|
558
|
-
#
|
|
559
|
-
# 或留着当 [rejected] 记录。
|
|
503
|
+
# 向前推进一步:proposed → approved → published(或带说明拒绝)。
|
|
504
|
+
# 每次迁移都记进该记忆的 review_history(谁/何时/为什么)。
|
|
505
|
+
# 被拒绝不会删除文件——由你决定:接受(关掉 PR、删分支)、改完 --resubmit 再来一轮,或留着做 [rejected] 记录。
|
|
560
506
|
open-memex resolve [id-or-path]
|
|
561
|
-
#
|
|
562
|
-
#
|
|
507
|
+
# 列出冲突的记忆文件,或对某一个做字段级三方合并。
|
|
508
|
+
# 语义冲突只报告、永不自动解决。
|
|
563
509
|
```
|
|
564
510
|
|
|
565
|
-
|
|
566
|
-
批什么、退回什么,以及防止共享记忆腐烂的卫生规则。
|
|
511
|
+
看护共享记忆的人遵循维护者约定——`docs/CURATOR.md`:什么该批准、什么该打回、哪些卫生规则让共享记忆不腐烂。
|
|
567
512
|
|
|
568
513
|
维护:
|
|
569
514
|
|
|
570
515
|
```sh
|
|
571
|
-
open-memex where #
|
|
572
|
-
open-memex scopes #
|
|
516
|
+
open-memex where # 显示存储与配置路径
|
|
517
|
+
open-memex scopes # 列出各项目作用域及记忆计数
|
|
573
518
|
open-memex reindex # 从 markdown 重建 SQLite 索引
|
|
574
|
-
open-memex
|
|
519
|
+
open-memex audit # 记忆健康检查:近重复对、陈旧记忆、断裂的取代链
|
|
520
|
+
open-memex migrate --to-v2 [--dry-run] # v1 数据 → v2(把 user 作用域改名为 personal)
|
|
575
521
|
```
|
|
576
522
|
|
|
577
|
-
CLI
|
|
578
|
-
发布的 npm 包带预编译好的 JS(发布时间执行 `npm run build`)。
|
|
579
|
-
从源码 checkout 使用时,每条命令前加
|
|
580
|
-
`node --experimental-strip-types src/cli.ts`(简单场景也可用
|
|
581
|
-
`npm run cli -- <命令>`——但 npm 会吞掉未知的 `--flag` 参数,
|
|
582
|
-
所以推荐直接用 `node`)。
|
|
523
|
+
CLI 在 Node 22 下运行。从源码 checkout 跑时用内置的实验性 TypeScript 加载器(免构建步骤);发布到 npm 的包是预编译好的 JS(发版时 `npm run build`)。从源码 checkout 时,每条命令前面加 `node --experimental-strip-types src/cli.ts`(简单情况可用 `npm run cli -- <command>`——npm 会吞掉不认识的 `--flag` 参数,所以优先用直连 `node`)。
|
|
583
524
|
|
|
584
|
-
## MCP
|
|
525
|
+
## MCP 服务器
|
|
585
526
|
|
|
586
|
-
|
|
587
|
-
不需要宿主专属插件,任何 MCP 客户端都能用 open-memex。
|
|
527
|
+
同一组记忆工具,走 Model Context Protocol、经 stdio 服务器提供——不需要任何宿主专用插件。任何 MCP 客户端都能用 open-memex。
|
|
588
528
|
|
|
589
529
|
```sh
|
|
590
530
|
open-memex mcp # 全局安装后
|
|
591
|
-
npx -y open-memex mcp
|
|
531
|
+
npx -y open-memex mcp # 无需安装
|
|
592
532
|
```
|
|
593
533
|
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
`
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
**`
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
`"plugin": ["file:///absolute/path/to/open-memex/src/index.ts"]`
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
只打印可直接手贴的配置片段。空文件会被当作空白直接写入。
|
|
662
|
-
|
|
663
|
-
**怎么拆掉编辑器接线?**
|
|
664
|
-
`open-memex uninstall` 就是 `init` 的逆操作:删掉 MCP server 条目、opencode
|
|
665
|
-
插件行和 Copilot instructions 里的 open-memex 段。不带 `--client` 时把检测
|
|
666
|
-
到的编辑器全清掉;`--global` 只清用户级。你的记忆数据永远不会被碰。
|
|
534
|
+
项目作用域由进程当前工作目录解析,所以配置服务器时把 cwd 设到项目根(`init` 会替你处理)。
|
|
535
|
+
|
|
536
|
+
> **注意:** MCP 是请求/响应模型——它给助手的是工具,不是 opencode 插件那种自动关键词捕获或第一轮注入。主动用记忆靠助手的指令:服务器在 MCP 握手 `instructions` 里发会话开始引导(包括会话开始时的 outbox 草稿实时数、以及每个改记忆的工具结果非零时附带的待处理数),`init` 把完整版写进编辑器的指令文件。两者都是建议性的——没有任何 MCP 消费者提供硬性的会话开始钩子。
|
|
537
|
+
|
|
538
|
+
## 作用域详解
|
|
539
|
+
|
|
540
|
+
- **project(项目)**——限定在当前仓库,键由 git origin URL 的 hash 派生(所以同一仓库的多个 clone 共享一个作用域),没有远程时退回到当前工作目录路径。新记忆的默认作用域。
|
|
541
|
+
- **personal(个人)**——横跨你的所有项目,仅限本机,永不向外同步。放个人偏好用。(v1 里叫 `user`;`migrate --to-v2` 会改名。)
|
|
542
|
+
|
|
543
|
+
完整的 scope 模型(键派生、迁移、可见性、保留名)见 [docs/SCOPES.md](./docs/SCOPES.md)。[概念指南](./docs/CONCEPTS.zh-CN.md)把心智模型完整走了一遍。
|
|
544
|
+
|
|
545
|
+
## 故障排查
|
|
546
|
+
|
|
547
|
+
**`open-memex` 无法识别 / 命令找不到。**
|
|
548
|
+
全局 `npm install -g` 把 `open-memex` 启动器放在 npm 的全局 bin 文件夹里。终端找不到命令,就是这个文件夹不在 PATH 上:
|
|
549
|
+
|
|
550
|
+
1. 找到这个文件夹:`npm config get prefix`
|
|
551
|
+
- **Windows:** 启动器(`open-memex.cmd`)直接在这个文件夹里,如 `C:\Users\<你>\AppData\Roaming\npm`
|
|
552
|
+
- **macOS / Linux:** 在 `<prefix>/bin`,如 `/usr/local/bin` 或 `~/.nvm/versions/node/v22.x.x/bin`
|
|
553
|
+
2. 把它加进 PATH:
|
|
554
|
+
- **Windows:** 设置 → 系统 → 关于 → 高级系统设置 → 环境变量 → 把文件夹加到*用户*的 `Path` → **重启终端**。用 `where open-memex` 验证。
|
|
555
|
+
- **macOS / Linux:** 往 `~/.zshrc`(或 `~/.bashrc`)加 `export PATH="$(npm prefix -g)/bin:$PATH"`,重启 shell,用 `command -v open-memex` 验证。
|
|
556
|
+
3. 没有管理员权限 / 不想动 PATH?用 npx 形式——`npx -y open-memex <command>` 自己解析包,不需要改 PATH。
|
|
557
|
+
|
|
558
|
+
**`EBUSY` / `EPERM` 报错落在 `better_sqlite3.node` 上(Windows)。**
|
|
559
|
+
Windows 上已加载的 DLL 是锁定的:如果 open-memex 的 MCP 服务器正在运行(VS Code 的 MCP 面板、Cursor 等),`npm install -g open-memex` 换不掉 `better_sqlite3.node`,会以 `EBUSY` / `EPERM` 失败。先停掉 MCP 服务器(或退出编辑器),再重装。若仍失败,删掉全局 npm 根目录下的 `node_modules/open-memex` 和任何 `node_modules/.open-memex-*` 临时文件夹,再装一次。
|
|
560
|
+
|
|
561
|
+
**`init` 说某个配置文件它没动。**
|
|
562
|
+
你的编辑器配置里有注释(JSONC)或 JSON 不合法,open-memex 永不重写它无法安全解析的文件。`init` 已经把要加的确切片段打印出来了——手动粘贴进去就好。opencode 配置同理:有注释时,手动把 `"plugin"` 那一行加上。
|
|
563
|
+
|
|
564
|
+
**感觉有问题——跑 `open-memex doctor`。**
|
|
565
|
+
它检查 Node 版本、配置来源、当前目录的作用域解析、存储可写性,并确认 VS Code 没有把 MCP 禁用;然后启动一个真实 MCP 服务器,对它跑 `initialize` + `tools/list`——十一个工具必须全部出现。它还会报告改名之前遗留的 `my-o-memory` 引用(如果某编辑器配置里还留着旧包名的话)。
|
|
566
|
+
|
|
567
|
+
## 常见问题
|
|
568
|
+
|
|
569
|
+
**需要用 git 吗?**
|
|
570
|
+
不需要。捕获和回想在任何文件夹里都能用——没有 git 仓库时,项目作用域就按文件夹路径键。只有团队工作流(`submit` / PR 评审)需要 git,而且它是可选的。
|
|
571
|
+
|
|
572
|
+
**我用好几个编辑器,它们真共享一份记忆吗?**
|
|
573
|
+
真的——在同一台机器上。每个接好的编辑器读写的是同一份本地记忆;每个编辑器具体能得到什么,见[编辑器与功能对照](#编辑器与功能对照)。在 VS Code 里存的决策,到 opencode 里会被遵守。
|
|
574
|
+
|
|
575
|
+
**我在公司和家里两台电脑工作,记忆能同步吗?**
|
|
576
|
+
不能自动同步——记忆按设计是逐机器存的,你的个人作用域永远不离开它被创建的那台机器。手动搬家:在一个机器跑 `open-memex export`,在另一台跑 `open-memex import`。通过 Git 共享的项目记忆(团队工作流)会随仓库走,所以在第二台克隆仓库就把*已发布的项目*记忆带过去了——个人的会故意留在原地。
|
|
577
|
+
|
|
578
|
+
**真的是免费的吗?需要账号吗?**
|
|
579
|
+
免费开源(Apache-2.0)。无账号、无注册、无遥测、无云调用。它永远不"打电话回家",因为压根没有家可打:open-memex 唯一会碰的网络,是你明确推送时你自己的 git 远程。
|
|
580
|
+
|
|
581
|
+
**我不小心把一个密钥粘进了记忆,怎么办?**
|
|
582
|
+
`open-memex search "<其中一段>"` 找到那条记忆,再 `open-memex forget <id>` 删掉。下次要避免:把敏感文本包在 `<private>…</private>` 里(保存前被剥离)——识别出的 API key 和 token 还会自动掩码。任何一句话都能先安全预览:`open-memex capture --dry-run "…"`。
|
|
583
|
+
|
|
584
|
+
**每个项目都要跑一遍 `init` 吗?**
|
|
585
|
+
不用。数据层什么都不需要——项目作用域由当前目录的 git 远程或路径自动派生,记忆天然按项目隔离、零设置。编辑器接线是每台机器一次 `open-memex init`(编辑器支持时就是用户级)。升级后(`--force`)或换编辑器时再跑。
|
|
586
|
+
|
|
587
|
+
**opencode 需要 `init` 吗?**
|
|
588
|
+
两条路。推荐:`open-memex init --client opencode --global`——它把原生 open-memex 插件并入 `~/.config/opencode/opencode.json`。一次设置、所有项目生效,还多出关键词自动捕获和第一轮记忆注入。想全手动?把 `"plugin": ["file:///absolute/path/to/open-memex/src/index.ts"]`(已安装包的路径)加进那个文件也行。走普通 MCP 的话:`open-memex init --client opencode` 写一个项目级 `opencode.jsonc`(没有钩子)。你的 用户级配置带注释时,`init` 不会动它,会打印手动步骤。
|
|
589
|
+
|
|
590
|
+
**VS Code——`init` 跑一次还是每个项目跑?**
|
|
591
|
+
跑一次就够。直接 `open-memex init` 会自动检测 VS Code 并把 MCP 服务器条目写进 VS Code 的用户级 `mcp.json`(Windows 在 `%APPDATA%/Code/User/mcp.json`,macOS 在 `~/Library/Application Support/Code/User/mcp.json`,Linux 在 `~/.config/Code/User/mcp.json`),服务器在每个项目都会启动。项目里有项目级 `.vscode/mcp.json` 时仍以它优先,而该条目保留 `cwd=${workspaceFolder}`,所以项目作用域按窗口各自解析。如果你的 用户级 `mcp.json` 里有注释(VS Code 接受 JSONC),`init` 不动它,会打印确切片段让你手动添加。空文件会被当作空白,直接写入。
|
|
592
|
+
|
|
593
|
+
**怎么移除编辑器接线?**
|
|
594
|
+
`open-memex uninstall` 撤销 `init`:移除 MCP 服务器条目、opencode 插件行、Agent Skill 目录,以及 Copilot 指令里的 open-memex 段落。不带 `--client` 时清理所有检测到的编辑器;`--global` 把清理限制在用户级接线。你的记忆永不被动。
|
|
595
|
+
|
|
596
|
+
## 项目状态
|
|
597
|
+
|
|
598
|
+
open-memex 是稳定且日常在用的;当前稳定线以 `latest` 发到 npm 上,`alpha` 构建给测试者。发版历史在 [GitHub Releases](https://github.com/stoneskin/open-memex/releases);设计决策记录在只追加的日志 [docs/V2-DESIGN.md](./docs/V2-DESIGN.md) 里。
|
|
599
|
+
|
|
600
|
+
在望的方向(不承诺版本号):更多编辑器的原生助手插件(作为在同一组 MCP 工具之上的增强路径);本地 embedding 作为可选择开启的实验(没经询问,永不下载任何模型);只有在真实多仓库共享、ACL 或合规需求出现时才做 org 层。
|
|
667
601
|
|
|
668
602
|
## 许可证
|
|
669
603
|
|