@yottameta/yotta-memory 0.2.10 → 0.4.2

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/README.md CHANGED
@@ -1,21 +1,21 @@
1
- # 元忆(yotta-memory)
2
-
3
1
  <p align="center">
4
- <img src="assets/banner.png" alt="元忆(yotta-memory)banner" width="100%" />
2
+ <img src="assets/banner.png" alt="yotta-memory banner" width="100%" />
5
3
  </p>
6
4
 
5
+ <h1 align="center">元忆(yotta-memory)</h1>
6
+
7
+ <p align="center">元忆 —— 有权限边界的文件式智能体记忆。让任何 AI 智能体活过会话:开工 <code>recall</code> 恢复上下文、重要信息 <code>remember</code> 落盘、收工归档。文件式、零依赖、可 diff / 回滚;FACT 共享、PREF / BOUND / COMMIT 私密隔离——谁该读、谁不该读,由机制而非 AI 自觉决定。</p>
8
+
7
9
  <p align="center">
8
- <img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue" />
9
- <img alt="Standard: agentskills.io" src="https://img.shields.io/badge/standard-agentskills.io-orange" />
10
- <img alt="Agents: 17+" src="https://img.shields.io/badge/agents-17%2B-purple" />
11
- <img alt="npm package" src="https://img.shields.io/npm/v/@yottameta/yotta-memory" />
12
- <img alt="npm downloads" src="https://img.shields.io/npm/dt/@yottameta/yotta-memory" />
13
- <img alt="GitHub stars" src="https://img.shields.io/github/stars/YottaMeta/yotta-memory" />
14
- <img alt="last commit" src="https://img.shields.io/github/last-commit/YottaMeta/yotta-memory" />
15
- <img alt="PRs welcome" src="https://img.shields.io/badge/PRs-welcome-brightgreen" />
10
+ <a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue" /></a>
11
+ <a href="https://agentskills.io/"><img alt="Standard: agentskills.io" src="https://img.shields.io/badge/standard-agentskills.io-orange" /></a>
12
+ <a href="https://www.npmjs.com/package/@yottameta/yotta-memory"><img alt="npm package" src="https://img.shields.io/npm/v/@yottameta/yotta-memory" /></a>
13
+ <a href="https://github.com/YottaMeta/yotta-memory"><img alt="GitHub stars" src="https://img.shields.io/github/stars/YottaMeta/yotta-memory" /></a>
14
+ <a href="https://github.com/YottaMeta/yotta-memory/commits/main"><img alt="last commit" src="https://img.shields.io/github/last-commit/YottaMeta/yotta-memory" /></a>
15
+ <a href="https://github.com/YottaMeta/yotta-memory"><img alt="PRs welcome" src="https://img.shields.io/badge/PRs-welcome-brightgreen" /></a>
16
16
  </p>
17
17
 
18
- > 元忆 —— 有权限边界的文件式智能体记忆。让任何 AI 智能体活过会话:开工 `recall` 恢复上下文、重要信息 `remember` 落盘、收工归档。文件式、零依赖、可 diff / 回滚;FACT 共享、PREF / BOUND / COMMIT 私密隔离——谁该读、谁不该读,由机制而非 AI 自觉决定。
18
+ > 📖 面向用户的操作手册见 [USER_GUIDE.md](USER_GUIDE.md)。
19
19
 
20
20
  ## 核心价值
21
21
 
@@ -24,6 +24,7 @@
24
24
  - **记忆就是文件**:每条记忆是一个带 YAML frontmatter 的 Markdown 文件,放在用户自己的目录里。用任何编辑器都能查看、修改、删除,用 git 就能做版本管理与回滚。
25
25
  - **隔离由机制保证**:FACT 进公共区共享,PREF / BOUND / COMMIT 进私密区、按 agent 隔离。读取按 scope/owner 分区过滤,越界内容由 CLI 拦截、永不返回(默认静默跳过;显式跨读无授权才报错拒绝)——不依赖智能体的「自觉」。
26
26
  - **零依赖、即装即用**:无守护进程、无数据库、无向量库,只需要 Node.js。安装即用,数据留在本机。
27
+ - **便携记忆盘**:记忆库本身就是记忆引擎——装在硬盘或主机上随盘走,局域网内其它主机上的智能体可远程读写;本地零进程模式与局域网常驻模式可并存,插上硬盘即恢复全部记忆。
27
28
 
28
29
  ## 核心优势
29
30
 
@@ -36,6 +37,9 @@
36
37
  | **双级存储** | 用户级 `~/.yottamemory/`(跨项目)+ 项目级 `.yottamemory/`(随项目共享 / 交接)|
37
38
  | **检索与生命周期** | 索引 + TF 打分(中文分词友好);质量分 / 盖棺分 / 自动归档,记忆库不会无限膨胀 |
38
39
  | **生态分发** | GitHub + npm 双源同步发布;npx skills / npm / install.sh 三种方式,覆盖 17+ 类智能体目录 |
40
+ | **便携记忆盘(随盘走)** | 记忆库即引擎:装在硬盘 / 主机上,插上即恢复全部记忆;引擎主机只需装 CLI 当存放点,无需装任何 AI 智能体 |
41
+ | **局域网共享与自启** | 每智能体独立 token(Bearer + X-Agent-Id)鉴权、可吊销;`lan enable` 注册开机自启(默认登录自启,可选开机即启);MCP 工具集与 CLI 一致(8 个工具),管理动作不远程暴露 |
42
+ | **本地 / 局域网双模式** | 本地 `serve --stdio` 零进程、按需拉起(无常驻);局域网 streamable HTTP 常驻——两种模式可并存、按需选用 |
39
43
 
40
44
  ## 功能详解
41
45
 
@@ -64,9 +68,20 @@
64
68
  - **默认静默、显式跨读才报错**:默认 recall 遇其它 agent 私密静默跳过(不泄露「存在 N 条私密不可见」);仅当显式跨智能体读取(`--all` / `--owner <其它>`)且无授权命中时才报错 / 警告。
65
69
  - **隔离定位**:scope: private 保证的是 AI 之间的语义隔离(正常 recall 不会被搜到、不会主动去读),不是文件系统级机密保护——数据主权在用户,作为所有者有权看到任何记忆文件。
66
70
 
71
+ ### 智能体身份(唯一 ID + 自我档案)
72
+
73
+ 每个智能体有一个**全局唯一的 agent ID**:它是私密记忆(PREF / BOUND / COMMIT)的归属键,也是远端接入的身份声明(`X-Agent-Id`)。
74
+
75
+ - **登记(必须唯一)**:`yotta-memory iam <id>` 写入记忆库根目录 `agents.json`,**强制唯一性**——ID 已被其它主机 / 来源(含远端 token 登记)占用时拒绝,确认是同一智能体才 `--force`。
76
+ - **确认身份**:`yotta-memory whoami`(远端 MCP 工具 `agent_info`)读「当次声明身份」(本机 `YOTTA_AGENT_ID` / CLI `--agent`;远端 `X-Agent-Id`),不猜不默认。
77
+ - **自我档案(强制落盘)**:`iam` 自动写一条 PREF `subject=自我接入档案`(owner=自己),statement 为 `; ` 分隔的 key:value:`agent_id / host / memory_home / mcp_mode(stdio|http)/ engine_url(仅远端)/ token(仅远端;本机不存 token)`。开工先 `recall "自我接入档案"` 找回身份与接入信息。
78
+ - **本机免 token**:本机 CLI / stdio 直连不经网络、不校验 token;身份经该智能体 MCP 配置的 `env.YOTTA_AGENT_ID` 声明。本机多个智能体各自声明唯一 ID,互不撞。
79
+ - **私密记忆必须有 owner**:写 PREF / BOUND / COMMIT 时未声明身份会被拒绝(公共 FACT 不受影响),从机制上防止「抄别人的 ID」。
80
+
67
81
  ### 检索:索引 + 中文分词打分
68
82
 
69
83
  - `remember` 时自动构建 `index.json` 索引;recall 用 TF 打分排序,中文按 bigram 分词,不用额外模型。
84
+ - `index.json` 的 `tokens` 字段是中文分词的词频表(TF 打分用),**不是**访问凭证;鉴权令牌在记忆目录下 `.server/tokens.json`。
70
85
  - 支持关键词、`--type` 过滤、`--limit` 截断、项目级优先。
71
86
  - 命中展示会累加 `access_count` / `last_accessed`,为生命周期管理提供依据。
72
87
 
@@ -82,6 +97,14 @@
82
97
 
83
98
  把技能装进智能体后,SKILL.md 会自动教会智能体一套工作流:**开工 `recall` 恢复上下文 → 重要信息 `remember` 落盘 → 收工归档**。也可在对话中直接说「记住 XXX」「上次说到哪了」「记一笔」触发。
84
99
 
100
+ ### 便携记忆盘(记忆库即引擎)
101
+
102
+ - **记忆库即引擎**:`serve` 把记忆目录挂成 MCP 服务,目录随盘走;引擎主机只需装 CLI 当存放点,无需装任何 AI 智能体。
103
+ - **双模式可并存**:本地 `serve --stdio` 零进程(客户端按需拉起);局域网 streamable HTTP(默认 `0.0.0.0:8787`)+ 每智能体 token 鉴权。
104
+ - **开机自启**:`lan enable` 注册 Windows 计划任务(默认登录自启,`--onstart` 开机即启需管理员);`lan disable` 移除,`lan status` 查询。
105
+ - **安全边界**:管理动作(init / config / token / lan / serve)不进 MCP,token 不远程暴露;远程智能体只能读写记忆,不能改配置、不能管 token。
106
+ - 完整操作步骤见上文「局域网多机共享」章节与 [USER_GUIDE.md](USER_GUIDE.md)。
107
+
85
108
  ## 与其他方案对比
86
109
 
87
110
  > 以下按方案类型对比,不涉及具体产品名称。判断标准:数据主权、部署成本、权限边界、可审计性、跨智能体能力。
@@ -127,17 +150,37 @@ bash install.sh --dir /path/to/skills
127
150
  ```
128
151
  也可把整个 `yotta-memory` 文件夹复制到目标智能体的 skills 目录(常见位置见 install.sh --list)。
129
152
 
153
+ ## 升级
154
+
155
+ 两种升级方式对应两种安装方式:
156
+
157
+ **升级 CLI**(重新执行一次安装命令即可,不带版本号默认装最新):
158
+ ```bash
159
+ npm i -g @yottameta/yotta-memory
160
+ ```
161
+
162
+ **升级技能**:重新执行你当初的安装命令即可(`npx skills add YottaMeta/yotta-memory` 或 `yotta-memory-install -g`),覆盖旧版本技能文件夹。
163
+
164
+ > 升级只影响命令与技能文件,**不会动你已存的记忆**(记忆是独立于安装的文件,保留在原目录)。
165
+
130
166
  ## CLI 用法
131
167
 
168
+
132
169
  | 命令 | 作用 |
133
170
  |---|---|
134
- | `yotta-memory init [--project]` | 初始化记忆库(默认用户级 `~/.yottamemory/`)|
171
+ | `yotta-memory init [--project] [--dir <目录>]` | 初始化记忆库(默认用户级 `~/.yottamemory/`;--dir 显式指定位置)|
135
172
  | `yotta-memory remember <type> <subject> <statement> [--owner <id>]` | 写入记忆(同 subject+statement 自动更新;--owner 标注归属)|
136
173
  | `yotta-memory recall [关键词] [--type T] [--limit N] [--agent <id>] [--owner <id>] [--all] [--unsafe]` | 检索记忆(索引+TF 打分,读取分区过滤;越界读其它智能体私密默认拒绝,需 grant / identity=user / `--unsafe`;项目级优先)|
137
174
  | `yotta-memory forget <文件>` | 删除一条记忆(按类型目录路径或文件名)|
138
175
  | `yotta-memory archive [--days 180] [--threshold 0.4]` | 归档旧记忆(盖棺分+年龄,immutable 除外)|
139
176
  | `yotta-memory reindex` | 重建索引(手动改 .md 后校正)|
140
177
  | `yotta-memory export [--out f.json]` / `import <f.json>` | 导出 / 导入 |
178
+ | `yotta-memory config set memory_home <目录>` / `config get` | 持久记住 / 查看记忆库位置(`~/.yottamemory/config.json`)|
179
+ | `yotta-memory whoami` | 查看当前智能体身份与登记状态(读 `YOTTA_AGENT_ID` / `X-Agent-Id`,不猜不默认)|
180
+ | `yotta-memory iam <id> [--force]` | 登记本智能体唯一身份并自动落自我档案(`agents.json`,ID 必须唯一)|
181
+ | `yotta-memory token new --agent <id> [--force]` / `token list` / `token revoke --agent <id>` | 为智能体生成 / 列出 / 吊销访问 token(登记于记忆库 `.server/tokens.json`;同 ID 已被其它来源占用需 `--force` 覆盖,防不同智能体合流)|
182
+ | `yotta-memory serve [--host 0.0.0.0] [--port 8787] [--no-auth] [--stdio]` | 启动 MCP 记忆引擎(streamable HTTP 局域网 / --stdio 本地零进程模式;Bearer token + X-Agent-Id 鉴权)|
183
+ | `yotta-memory lan enable [--onstart] / disable / status` | 开机自启管理(Windows 计划任务,默认 ONLOGON 登录自启;--onstart 开机即启需管理员)|
141
184
 
142
185
  类型:`FACT`(事实,公共共享)/ `PREF`(偏好)/ `BOUND`(边界)/ `COMMIT`(承诺)。
143
186
 
@@ -151,12 +194,71 @@ yotta-memory recall --type FACT --limit 10
151
194
 
152
195
  环境变量:
153
196
  - `YOTTA_MEMORY_HOME`:覆盖用户级记忆库目录(默认 `~/.yottamemory/`)。
154
- - `YOTTA_AGENT_ID` / `AGENT_ID`:当前 agent 标识,参与读取分区判定。
197
+ - `YOTTA_AGENT_ID` / `AGENT_ID`:当前 agent 标识(本机声明身份用,参与读取分区判定;私密记忆必须有 owner,未声明会被拒绝)。
155
198
 
156
199
  ## 智能体接入后怎么用
157
200
 
158
201
  把技能装进智能体后,SKILL.md 会自动教会智能体:开工 `recall` 恢复上下文 → 重要信息 `remember` 落盘 → 收工归档。也可在对话中直接说「记住 XXX」「上次说到哪了」。
159
202
 
203
+ ## 局域网多机共享(便携记忆盘模式)
204
+
205
+ 记忆库可以装在任何主机或硬盘上(= 记忆引擎),供局域网内其它主机上的智能体远程接入:
206
+
207
+ - **本机直连**:CLI 直接读写,无需 token;
208
+ - **远程接入**:引擎主机运行 `yotta-memory serve` 常驻(或 `lan enable` 注册开机自启),远程智能体通过 MCP 以 `url + token` 连接。
209
+ - **本地零进程**:本机 MCP 客户端可用 `serve --stdio` 按需拉起 CLI(无常驻进程)。
210
+
211
+ ### 引擎侧(记忆所在主机)
212
+
213
+ 1. 初始化或接入记忆库(见 CLI 用法)。
214
+ 2. 为需要访问的每个智能体生成独立 token:
215
+ ```bash
216
+ yotta-memory token new --agent <智能体ID> # 打印一次,如 ytm_...(同 ID 已被其它来源占用需加 --force)
217
+ yotta-memory token list # 查看已登记智能体
218
+ yotta-memory token revoke --agent <智能体ID> # 吊销
219
+ ```
220
+ > 新生成的 token 即时生效,无需重启服务。
221
+ 3. 启动服务(默认监听 0.0.0.0:8787,Bearer token + X-Agent-Id 鉴权)——临时运行或注册开机自启二选一:
222
+ ```bash
223
+ yotta-memory serve # 临时前台运行
224
+ yotta-memory lan enable # 注册开机自启(Windows 计划任务,登录自启)
225
+ yotta-memory lan status # 查看自启状态
226
+ ```
227
+ > `lan enable --onstart` 改为开机即启(需管理员);`lan disable` 移除自启。
228
+
229
+ > 首次监听 0.0.0.0 时,Windows / 系统防火墙可能询问是否放行,需允许放行,否则局域网内其它主机无法访问;`--no-auth` 会关闭鉴权,仅限可信内网使用。
230
+
231
+ ### 客户端侧(远程智能体)
232
+
233
+ 在智能体 MCP 配置中登记连接(`url` + 两个请求头):
234
+
235
+ ```json
236
+ {
237
+ "mcpServers": {
238
+ "yotta-memory": {
239
+ "url": "http://<引擎主机IP>:8787/mcp",
240
+ "headers": {
241
+ "Authorization": "Bearer <TOKEN>",
242
+ "X-Agent-Id": "<本智能体ID>"
243
+ }
244
+ }
245
+ }
246
+ }
247
+ ```
248
+
249
+ 连接后可通过 MCP tools(remember / recall / search / forget / archive / reindex / export / import / agent_info)读写记忆与确认身份;管理动作(init / config / token / lan / serve)不进 MCP,token 管理不远程暴露。`X-Agent-Id` 必须与 token 登记的智能体一致;读取分区规则与 CLI 相同(FACT 公共可读,PREF / BOUND / COMMIT 私密隔离)。
250
+
251
+ ### 位置持久化
252
+
253
+ CLI 会持久记住记忆库位置(`~/.yottamemory/config.json`),同一主机上的智能体此后开工 `recall` 自动使用正确位置,无需每次指定:
254
+
255
+ ```bash
256
+ yotta-memory config set memory_home <记忆库目录>
257
+ yotta-memory config get
258
+ ```
259
+
260
+ 位置解析优先级:`YOTTA_MEMORY_HOME`(临时覆盖)> `config.json#memory_home`(持久)> 默认 `~/.yottamemory`。把记忆库放在硬盘上、插到任意主机后执行一次 `config set memory_home`(或用 `yotta-memory init --dir <目录>` 一步初始化到指定位置),即可在该主机恢复全部记忆。
261
+
160
262
  ## 开发与校验
161
263
 
162
264
  本项目内运行:`python tools/validate-skill.py yotta-memory`。
package/SKILL.md CHANGED
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: yotta-memory
3
- description: "元忆 —— 有权限边界的文件式智能体记忆。文件式、零依赖、可 diff/回滚:让任何 AI 智能体活过会话,开工 recall 恢复上下文、重要信息 remember 落盘、收工归档。类型体系 FACT(公共共享)/ PREF / BOUND / COMMIT(私密隔离)。触发:记住、别忘了、记一笔、记忆、remember、recall、跨会话、上次说到、续测、交接、归档"
4
- version: 0.2.10
3
+ description: "元忆 —— 有权限边界的文件式智能体记忆。文件式、零依赖、可 diff/回滚:让任何 AI 智能体活过会话,开工 recall 恢复上下文、重要信息 remember 落盘、收工归档。类型体系 FACT(公共共享)/ PREF / BOUND / COMMIT(私密隔离)。触发:记住、别忘了、记一笔、记忆、remember、recall、跨会话、上次说到、续测、交接、归档、记忆盘、共享记忆、局域网记忆"
4
+ version: 0.4.2
5
5
  license: MIT
6
6
  ---
7
7
 
8
8
  # yotta-memory(元忆)— 有权限边界的文件式智能体记忆
9
9
 
10
10
  > 一句话:元忆 —— 有权限边界的文件式智能体记忆(不注入、可 diff、能回滚;FACT 共享、PREF / BOUND / COMMIT 私密隔离)。
11
- > 版本:0.2.10 | 最后更新:2026-08-23
11
+ > 版本:0.4.2 | 最后更新:2026-08-25
12
12
 
13
13
  ## 这是什么
14
14
 
@@ -26,27 +26,173 @@ license: MIT
26
26
 
27
27
  ## 核心流程
28
28
 
29
- 1. **开工定向**:运行 `yotta-memory recall`(可带关键词)恢复上下文;项目级记忆优先,其次用户级。
29
+ 1. **开工定向**:先按「开工第一步:确认记忆位置 + 智能体身份」检测记忆库与身份,再运行 `yotta-memory recall`(可带关键词)恢复上下文;项目级记忆优先,其次用户级。
30
30
  2. **进行中落盘**:重要信息立即 `yotta-memory remember <type> <subject> <statement>`,不攒到收工。
31
31
  3. **收工归档**:写会话小结(COMMIT / 笔记),旧记录定期 `yotta-memory archive`。
32
32
  4. **多智能体纪律**:FACT 写入公共区,PREF / BOUND / COMMIT 只写本智能体私密区;不读取其他智能体私密区。
33
33
 
34
+
35
+ ### 开工第一步:确认记忆位置 + 智能体身份(每次会话先做,必做)
36
+
37
+ **A. 确认记忆库位置**(AI 不会自动知道记忆库在哪,先检测,避免「recall 读空库 / 错库」):
38
+
39
+ 1. 运行 `yotta-memory config get`。
40
+ - 输出 `memory_home: <目录>`(已显式设置)→ 直接用该位置。
41
+ - 输出 `memory_home: (未设置,默认 ~/.yottamemory)` → 🔒 征得同意后引导设置:问用户用默认还是指定目录(项目级 `<repo>/.yottamemory`、记忆盘等),确认后 AI 执行 `yotta-memory config set memory_home <目录>`,回读 `config get` 验证。
42
+ 2. **已有记忆**:目标目录已存在 `facts/` 等子目录或 `index.json` → 直接 recall;全新目录 → 按「便携记忆盘模式 §0.3」初始化。
43
+
44
+ **B. 确认本智能体唯一身份(强制,写私密记忆前必做)**:
45
+
46
+ 1. 运行 `yotta-memory whoami`(远端经 MCP 用 `agent_info`)确认「我是谁」。
47
+ - 已显示身份 + 已登记 + 有自我档案 → 用它,进入第 3 步。
48
+ - 显示「未声明身份」或「未登记」→ 进入第 2 步。
49
+ 2. **登记唯一 ID(AI 自己定义,须用户确认)**:
50
+ - AI 提议一个**全局唯一** ID(建议 `<主机名>-<角色>` 或带随机后缀,如 `win-zhiwei` / `kali-dashu`;禁止用 `dashu` / `codex` 这类易撞名)。
51
+ - 🔒 征得用户同意后执行 `yotta-memory iam <id>`:引擎**强制唯一性**(ID 已被其它主机/来源占用 → 拒绝并提示换 ID;确认是同一智能体才 `--force`),并**自动写自我档案**到本智能体私密区。
52
+ - 回读:`yotta-memory whoami` 显示「已登记 + 自我档案」。
53
+ 3. **自我档案校验**:`yotta-memory recall "自我接入档案"`(本智能体)能读回字段才算就绪:
54
+ `agent_id / host / memory_home / mcp_mode(stdio|http)/ engine_url(仅远端)/ token(仅远端;本机不存 token)`。
55
+ 4. **本机多智能体**:本机多个 AI 智能体共用引擎时,**每个都必须**在它自己的 MCP 配置里声明唯一 `YOTTA_AGENT_ID`(如 `env: { YOTTA_AGENT_ID: "<该智能体唯一ID>" }`),各自 `whoami` 各回各的、互不撞;本机走 stdio 免 token。
56
+
57
+ **C. 身份红线(强制)**:
58
+
59
+ - 智能体 ID **必须全局唯一**;**禁止**「从记忆里读到别人的 ID 就当自己的」(如看到「Kali 智能体 ID 为 dashu」就把自己当 dashu)。
60
+ - 不确定自己的 ID → 先 `whoami` / `agent_info`,再向用户确认;**禁止猜**。
61
+ - 私密记忆(PREF / BOUND / COMMIT)**必须有 owner**:未声明身份写私密会被引擎拒绝(公共 FACT 不受影响)。
62
+
63
+ > 已用 `YOTTA_MEMORY_HOME` 临时覆盖时不必改 config;本步骤是常规 CLI 直连用户级位置的引导。
64
+
34
65
  ## CLI 速查
35
66
 
36
67
  | 命令 | 作用 |
37
68
  |---|---|
38
- | `yotta-memory init [--project]` | 初始化记忆库(默认用户级)|
69
+ | `yotta-memory init [--project] [--dir <目录>]` | 初始化记忆库(默认用户级;--dir 显式指定位置)|
39
70
  | `yotta-memory remember <type> <subject> <statement> [--owner <id>]` | 写入(同 subject+statement 自动更新;--owner 标注归属,默认取 agent id)|
40
71
  | `yotta-memory recall [关键词] [--type T] [--limit N] [--agent <id>] [--owner <id>] [--all] [--unsafe]` | 检索(索引+TF 打分,读取分区过滤;越界读其它智能体私密默认拒绝,需 grant / identity=user / `--unsafe`;项目级优先)|
41
72
  | `yotta-memory forget <文件>` | 删除(按类型目录路径或文件名)|
42
73
  | `yotta-memory archive [--days 180] [--threshold 0.4]` | 归档旧记忆(盖棺分+年龄,immutable 除外)|
43
74
  | `yotta-memory reindex` | 重建索引(手动改 .md 后校正)|
44
75
  | `yotta-memory export [--out f.json]` / `import <f.json>` | 导出 / 导入 |
76
+ | `yotta-memory config set memory_home <目录>` / `config get` | 持久记住 / 查看记忆库位置(`~/.yottamemory/config.json`)|
77
+ | `yotta-memory whoami` | 查看当前智能体身份与登记状态(读 `YOTTA_AGENT_ID` / `X-Agent-Id`,不猜不默认)|
78
+ | `yotta-memory iam <id> [--force]` | 登记本智能体唯一身份并自动落自我档案(`agents.json`,ID 必须唯一)|
79
+ | `yotta-memory token new --agent <id> [--force]` / `token list` / `token revoke --agent <id>` | 每智能体访问 token:生成 / 列出 / 吊销(登记 `<记忆库>/.server/tokens.json`;同 ID 已被其它来源占用需 `--force` 覆盖,防不同智能体合流)|
80
+ | `yotta-memory serve [--host 0.0.0.0] [--port 8787] [--no-auth] [--stdio]` | 启动 MCP 记忆引擎(streamable HTTP 局域网 / --stdio 本地零进程模式;Bearer token + X-Agent-Id 鉴权)|
81
+ | `yotta-memory lan enable [--onstart] / disable / status` | 开机自启管理(Windows 计划任务,默认 ONLOGON 登录自启;--onstart 开机即启需管理员)|
45
82
 
46
83
  ## 存储格式(摘要)
47
84
 
48
- `<YYYY-MM-DD>-<NNNN>.md`,frontmatter 含 `type / subject / statement / confidence / created / updated / tags / immutable / scope / owner / access_count / last_accessed`;正文为记忆内容。顶层另有 `index.json`(反向索引 + TF 打分)。
85
+ `<YYYY-MM-DD>-<NNNN>.md`,frontmatter 含 `type / subject / statement / confidence / created / updated / tags / immutable / scope / owner / access_count / last_accessed`;正文为记忆内容。顶层另有 `index.json`(反向索引 + TF 打分,其 `tokens` 字段是分词词频,非访问令牌)与 `agents.json`(智能体身份登记表,唯一性)。
86
+
87
+ 自我档案(本智能体身份,强制落盘):PREF,`subject=自我接入档案`,`owner=<本智能体ID>`,statement 为 `; ` 分隔的 key:value——`agent_id / host / memory_home / mcp_mode(stdio|http)/ engine_url(仅远端)/ token(仅远端;本机不存 token)`。
88
+
89
+ ## 便携记忆盘模式(局域网多机共享)
90
+
91
+ 记忆库可装在任何主机或硬盘上(= 记忆引擎):本机 AI 用 CLI 直连,局域网内其它主机上的 AI 经 MCP 远程接入。全程 AI 自主执行;关键动作(🔒)执行前一句话说明「做什么 + 为什么 + 影响」并征得用户同意,用户只需回答「可以 / 好 / 允许」;除复制粘贴 token 外,用户不做任何手工操作。
92
+
93
+ ### 4.0 前置:CLI 自装 + 记忆位置准备 + 持久记住
94
+
95
+ **步骤 0.1 检查 CLI 是否已装**
96
+ ```bash
97
+ yotta-memory --version # 或 command -v yotta-memory / where yotta-memory
98
+ ```
99
+ 已装 → 跳过。未装 → 🔒 **征得同意后**自行安装(三选一,AI 判断):
100
+ | 方式 | 命令 | 适用 |
101
+ |---|---|---|
102
+ | npx 临时 | `npx -y @yottameta/yotta-memory` | 任何有 Node 的机器 |
103
+ | npm 全局 | `npm i -g @yottameta/yotta-memory` | 长期使用 |
104
+ | install.sh | `bash <(curl -s https://raw.githubusercontent.com/YottaMeta/yotta-memory/main/install.sh)` | 离线 / 国内 / 无 npm |
105
+ 装后验证:`yotta-memory --version` 出版本即就绪。
106
+
107
+ **步骤 0.2 确定记忆存储位置**
108
+ | 位置 | 目录 | 适用 |
109
+ |---|---|---|
110
+ | 用户级(默认) | `~/.yottamemory` | 个人跨项目记忆 |
111
+ | 项目级 | `<repo>/.yottamemory` | 随项目提交共享 |
112
+ | 便携记忆盘 | 硬盘上目录(如 `D:\memory` / 挂载点) | 记忆盘 / 局域网共享 |
113
+
114
+ **步骤 0.3 接入现有 vs 初始化新库(关键判断)**
115
+ 1. 检查目标目录是否已是记忆库:存在 `facts/` 等子目录或 `index.json`。
116
+ 2. 已是 → 🔒 **征得同意后**直接接入(不重复初始化):设位置后 `recall` 验证能读到旧记忆。
117
+ 3. 不是 → 🔒 **征得同意后**初始化新库:`yotta-memory init --dir <目录>` 或 `YOTTA_MEMORY_HOME=<目录> yotta-memory init`(项目级用 `init --project`)。
118
+ 4. 验证:`recall` 跑通。
119
+
120
+ **步骤 0.4 持久记住位置(重要)**
121
+ - 🔒 **征得同意后**执行:`yotta-memory config set memory_home <目录>`(项目级可跳过)。
122
+ - 作用:写入 `~/.yottamemory/config.json`,此后该机器 AI 开工 `recall` 自动用对位置。
123
+ - 验证:`yotta-memory config get` 显示 memory_home 与预期一致。
124
+
125
+ > 记忆盘场景:硬盘插上 → AI 检查盘上目录是否有数据 → 有则接入 + config 记住 → 插盘即恢复,机器记住位置。
126
+
127
+ **步骤 0.5 启动记忆引擎(仅引擎主机,供远程接入)**
128
+ - 本机若作引擎:🔒 **征得同意后**启动服务——临时运行 `yotta-memory serve`(默认 `0.0.0.0:8787`,Bearer token + X-Agent-Id 鉴权;`--no-auth` 仅限可信内网),或注册开机自启 `yotta-memory lan enable`(Windows 计划任务,默认登录自启;`--onstart` 开机即启需管理员)。
129
+ - 本地零进程模式:本机 AI 也可用 `serve --stdio` 由 MCP 客户端按需拉起 CLI(无常驻进程,照灵魂盘)。
130
+ - 远程客户端接入前,先确认引擎主机 serve 已运行(`lan status` 可查)。
131
+
132
+ ### 4.1 触发
133
+ 用户提及「记忆盘 / 记忆引擎 / 共享记忆 / 局域网记忆」,或开工 `recall` 发现需要访问远程记忆库时进入本流程。
134
+
135
+ ### 4.2 第一步:检查是否已配置(避免重复询问)
136
+ 1. `YOTTA_MEMORY_HOME` 或 `config get` 显示 memory_home 已指向本机可读目录 → 「本机直连」,直接用 CLI。
137
+ 2. 当前智能体 MCP 配置已有 `yotta-memory` server → 「远程已配置」,直接用 MCP tools。
138
+ 3. 都没有 → 进入 4.3。
139
+
140
+ ### 4.3 第二步:向用户确认引擎位置(AI 提问,用户回答)
141
+ 1. **记忆引擎在本机,还是局域网内其他主机?**(本机 / 远程)
142
+ 2. 若**远程**:引擎主机 **IP**(或主机名)?**端口**?(默认 8787)
143
+ 3. 本机 → 4.4;远程 → 4.5。
144
+
145
+ ### 4.4 本机直连
146
+ 确认记忆库目录(`config get` / `YOTTA_MEMORY_HOME` / 默认 `~/.yottamemory`)→ 直接 CLI 读写,**不配置 MCP、不需要 token**。
147
+
148
+ ### 4.5 远程连接:AI 引导用户获取 token(用户只做复制粘贴)
149
+ 1. AI 告知需要为本智能体申请访问 token。
150
+ 2. AI 引导用户在**引擎主机**执行:`yotta-memory token new --agent <本智能体ID>`(引擎主机没装 → 按 4.0 先装;或请引擎主机上的 AI 代执行)。
151
+ 3. 命令打印 token(`ytm_...`),只打印一次,请用户妥善保管。
152
+ 4. AI 请用户复制 token 发给 AI。
153
+ 5. 用户发来 → AI 继续 4.6。
154
+
155
+ > 用户不会操作时:AI 逐步引导(开终端 → 粘贴命令 → 回车 → 复制输出),直到成功。**除复制粘贴外用户不做别的**。
156
+
157
+ ### 4.6 配置 MCP(AI 自己完成,🔒 需同意)
158
+ 1. 🔒 说明将把 yotta-memory 写入本智能体 MCP 配置并请用户同意;
159
+ 2. 定位当前智能体 MCP 配置文件(见 4.7);
160
+ 3. 添加 server(JSON 见 4.8);
161
+ 4. 按当前智能体机制重载 MCP(必要时请用户重启会话);
162
+ 5. 用 MCP tools 读写记忆。
163
+
164
+ > MCP 工具集与 CLI 一致:remember / recall / search / forget / archive / reindex / export / import;管理动作(init / config / token / lan / serve)不进 MCP,token 管理不远程暴露。
165
+
166
+ ### 4.7 MCP 配置位置表
167
+ | 智能体 | 常见 MCP 配置位置 |
168
+ |---|---|
169
+ | Claude Code | 项目 `.mcp.json` 或用户级 `~/.claude.json` |
170
+ | Codex | `~/.codex/config.toml`(`[mcp_servers]`) |
171
+ | Cursor | 项目 `.cursor/mcp.json` 或用户级 |
172
+ | 其它(Trae / Qwen / Comate / Kimi 等) | 各自 MCP 配置 |
173
+
174
+ ### 4.8 通用 MCP server 配置片段
175
+ ```json
176
+ {
177
+ "mcpServers": {
178
+ "yotta-memory": {
179
+ "url": "http://<IP>:8787/mcp",
180
+ "headers": {
181
+ "Authorization": "Bearer <TOKEN>",
182
+ "X-Agent-Id": "<本智能体ID>"
183
+ }
184
+ }
185
+ }
186
+ }
187
+ ```
188
+
189
+ ### 4.9 验证连接(循环兜底)
190
+ - 🔒 连接远程引擎前已获同意(4.5 / 4.6)→ 调一次 `recall` / `search` 确认能读到记忆 → 成功。
191
+ - 失败:查 IP / 端口 / token 完整性 / 防火墙 / token 吊销;仍失败回 4.3。
192
+
193
+ ### 4.10 复用
194
+ - 成功后优先复用现有连接;失败(token 吊销等)再回 4.3。
49
195
 
50
196
  ## 渐进披露
51
197
 
52
- - 协议细节、目录结构与类型规则见 `references/protocol.md`,需要时读取,不要每次全读。
198
+ - 协议细节、目录结构与类型规则见 `references/protocol.md`,需要时读取,不要每次全读。