Install
openclaw skills install @yottameta/yotta-memory智能体记忆库(元忆)—— AI记忆系统:面向 AI 智能体的长期记忆、永久记忆与记忆引擎,跨会话上下文随时恢复,开工回忆、重要信息落盘、收工归档;语义检索 + 权限边界,零依赖,可 diff/回滚。
openclaw skills install @yottameta/yotta-memory一句话:元忆 —— 有权限边界的文件式智能体记忆(不注入、可 diff、能回滚;FACT 共享、PREF / BOUND / COMMIT 私密隔离)。
~/.yottamemory/(跨项目)+ 项目级 .yottamemory/(随项目共享)。context 一键生成开工上下文包——长期理解摘要优先(复用 consolidate 产物)+ 用户画像(引擎零推断,只归组原文)+ 近期走廊(按更新时间取样)+ 近期高价值补位 + 边界 + 承诺 + 会话闭环契约;SKILL「记忆守则」规则层只注入规则与机制,不注入人格数据(出厂零数据)。serve --tools core|full 控制工具暴露面。core 固定为 context / recall / search / remember,适合常驻;full 为现有 16 工具,适合维护与诊断。未指定时默认 full,保持现有配置兼容。Authorization + X-Agent-Id + X-Agent-Key;stdio MCP 只认显式参数 --agent-id + --agent-key-file;CLI 用 --agent + --agent-key / --agent-key-file。旧身份 env 会在 MCP 启动时被明确拒绝。--agent-key-file 不存在时不再由主入口向全局 stderr 告警。公共 / 维护命令保持安静;只有真正访问私密区时才 fail-closed,并给出缺失文件、view / key bind、key status / key claim 的可操作步骤。whoami --json、doctor --json、config get --json 返回 identity.mode / identity.agentKeyStatus。doctor --json 顶层新增 schemaVersion(当前 1)、encryption(布尔)、migration_required([{agent, reason}])。原有 checks / warnings / identity / text 字段保持兼容。runtime install --from-current 把当前引擎安装到 <runtimeRoot>/versions/<version>/ 并创建 <runtimeRoot>/current 稳定指针;runtime use <version> 原子切换、runtime rollback 回滚、runtime status 查看漂移。stdio MCP、lan enable 与备份调度只指向 <runtimeRoot>/current/bin/yotta-memory.js,不写版本目录。doctor --runtime 检查 CLI / current / runtime.json / MCP 配置 / 运行中 server / 技能副本 / 身份模式漂移,逐项给出实际版本、期望版本、修复命令和是否阻断;MCP initialize / server/discover 的 serverInfo 返回 runtimePath / identityMode / toolProfile。recall 语义检索(同义词 / 拼音 / 字段加权 / 模糊匹配,零依赖);feedback 显式使用反馈闭环(useful / useless → weight / confidence / feedback_net 演化,越用越懂);maintain 规则层自组织(统一效用分 + 年龄自动归档 / 遗忘候选 / 去重,默认 dry-run,immutable / BOUND 豁免);distill 心理日志蒸馏(统计摘要 / 主题画像 / 知识地图,可选 --model 外部模型增强);explain 查看单条记忆效用分项。recall 支持可选本地 embedding 插件(--embedding <command> / config set embedding_cmd <command>);context --focus <关键词> 生成任务感知上下文;--explain 输出选择 trace,无插件时自动降级为词法检索。consolidate 周期摘要压缩(把超龄 + 低效用 + 长期闲置的同主题旧记忆归纳成带溯源的摘要,原文整体进 .archive/,--undo 一键回滚);maintain --dedup 近重复自动合并(置信度分档,--apply 批量执行高置信组);效用分时效改为分类型衰减(FACT 慢 / PREF 中 / COMMIT 任务类快 / BOUND 不衰减);consolidate --batches 批次审计可查。init 对非空记忆库默认拒绝覆盖(--attach 接入现有库);forget 先移入 .trash/ 并写审计;新增 backup volumes / setup / status / ensure-daily / schedule / drill(用户确认真实独立卷后默认每日自动备份)与 backup create / list / doctor / restore。yotta-memory doctor 开工检查(根目录 / 密钥库 / 索引 / 身份 / 最近备份);maintain --apply、consolidate --apply、merge、archive、--purge 在写入前自动创建事务快照,快照失败或严重检查异常时拒绝写入。after_milestone / remember_commit;里程碑记忆必须有真实文件路径证据才标 verified,缺证据时输出 explicit-unverified + 一次纠偏。yotta-memory:引擎 CLI,负责读写记忆库。npx -y @yottameta/yotta-memory 只是临时运行引擎,不会安装技能。yotta-memory-install:技能安装器。安装或更新技能使用 npx -y --package @yottameta/yotta-memory yotta-memory-install --agent <name>(或 --dir <技能目录>)。AI 更新流程:先运行 yotta-memory --version 记录当前引擎版本;升级 CLI 用 npm i -g @yottameta/yotta-memory;升级技能用 npx -y --package @yottameta/yotta-memory yotta-memory-install --agent <name>(或原安装时使用的 --dir / install.sh);完成后回读 yotta-memory --version 与已安装 SKILL.md 的 version:,两者不一致时不得声称更新成功。
yotta-memory context(主注入:身份 + 长期理解摘要 + 用户画像 + 近期走廊 + 近期高价值 + 边界 + 承诺 + 会话闭环契约)恢复上下文,需要细节再 yotta-memory recall <关键词>;若有明确任务关键词,用 context --focus <关键词> 获得任务相关记忆;项目级记忆优先,其次用户级。yotta-memory remember <type> <subject> <statement> --verify,不攒到收工。recall 回读,无长期价值不硬凑。旧记录定期 yotta-memory maintain --apply(单条低效用归档)+ 记忆多了周期 yotta-memory consolidate --apply(同主题压缩成带溯源摘要,--undo 可回滚)。yotta-memory CLI / MCP 工具——禁止用 shell(Get-ChildItem / Get-Content / cat / ls / type 等)直接读或改记忆库目录下的 .md / index.json / tokens.json / agents.json / grants.json 等文件,否则会绕过权限边界、读到别的智能体私密内容。context 输出末尾会固定注入这段契约;执行时按三步走:
context 输出为准;需要细节再用 recall 下钻,不凭印象补全。remember <type> <subject> <statement> --verify;不攒到收工,不把一次性闲聊当记忆。recall 回读;没有长期价值就不硬凑。目的:防止初始化覆盖、删除不可逆、备份缺失再次造成记忆库丢失。
yotta-memory init 默认拒绝覆盖。yotta-memory init --attach。--force 不能覆盖已有记忆库;强制重建需要完整备份与显式确认保护,当前版本不提供覆盖初始化路径。yotta-memory forget <文件> 不物理删除,改为移动到 .trash/<时间>/<原相对路径>。.trash/audit-<日期>.jsonl(记录时间、原路径、回收路径、owner、执行者)。forget 行为。AI 必须先枚举真实卷,再让用户决定一次位置;不得凭经验报盘符,也不得在用户确认前写 backup_dir 或注册调度器。
# 1. 只展示当前机器实际存在、可写、与记忆库异卷的路径
yotta-memory backup volumes
# 2. 用户从真实列表确认后启用;默认每天 03:30,错过则下次启动补跑
yotta-memory backup setup --dir <用户确认的目录> --time 03:30
# 查看状态;用户明确拒绝自动备份时记录手动选择,不再反复打扰
yotta-memory backup status
yotta-memory backup setup --manual
# 查看/修复系统调度器(Windows Task Scheduler / systemd user timer / launchd)
yotta-memory backup schedule status
yotta-memory backup schedule enable --time 03:30
backup setup 成功后创建首份备份,并默认启用每日自动备份。backup ensure-daily 幂等:当天已有成功备份就跳过,没有才创建;serve 启动后 10 秒与运行期间每 6 小时调用一次补跑。context 在未配置、备份超过 36 小时或失败时追加可靠性提醒;用户已选手动模式时不重复提示。# 推荐先走上面的 backup volumes + backup setup(自动写入 backup_dir)
# 创建整库备份(默认拒绝与记忆库同卷)
yotta-memory backup create
# 查看备份
yotta-memory backup list
# 校验指定备份(SHA-256 / 文件缺失 / 大小)
yotta-memory backup doctor --id <备份ID>
# 恢复到新目录;默认不覆盖正在使用的记忆库
yotta-memory backup restore <备份ID> --to <新目录>
# 恢复演练:恢复到隔离副本,校验 manifest、索引并解密一条测试私密
# 解密必须有 --recovery-key 或 --password;legacy keys/cache 不参与
yotta-memory backup drill [<备份ID>] --recovery-key <钥匙>
facts/、private/、keys/(排除 keys/cache/ 授权缓存)、agents.json、index.json、.archive/。# 开工检查:只读,不修改记忆库
yotta-memory doctor
# 机器可读输出
yotta-memory doctor --json
doctor 检查记忆库根目录、加密库密钥文件、公共索引、agents.json 与最近备份。maintain --apply、consolidate --apply、merge、archive 与 --purge 在执行前自动创建事务快照;未配置独立备份目录或快照失败时拒绝写入,原记忆保持不变。--allow-same-volume 只用于 backup create 的显式临时备份,不会绕过破坏性写入门。context 会展示 doctor 的 warning / critical;critical 时明确提示“破坏性写入已锁定”。forget 仍只移入 .trash/,不重复创建整库快照。doctor --json 稳定字段(v0.16.5):{
"schemaVersion": 1,
"encryption": false,
"migration_required": [],
"identity": { "mode": "authenticated", "agentKeyStatus": "present" }
}
出厂规则层:把「越用越懂」机制固化进记忆引擎——只注入规则与机制,不注入任何人格数据(出厂零数据)。
| 类型 | 归属 | 何时用 | 反例 |
|---|---|---|---|
| FACT | 公共 facts/ | 客观事实、可共享信息 | 用户偏好 / 关系(应 PREF) |
| PREF | 私密 private/<owner>/prefs/ | 偏好、习惯、禁忌 | 客观公开事实(应 FACT) |
| BOUND | 私密 private/<owner>/bounds/ | 边界、铁律、不可做的事 | 一次性闲聊 |
| COMMIT | 私密 private/<owner>/commits/ | 承诺、锚定、长期关系事件 | 临时待办 |
--no-hint 关闭)。命中即记(增量写,不攒到收工):
不记录:一次性闲聊、无长期价值、纯礼貌套话、用户明确说「别记」。
remember 更新旧记录 confidence(引擎不自动改 confidence,避免黑箱)。context(主注入)→ recall(关键词补细节)。remember --verify 写后回读确认落盘。archive。remember --verify:写后自动回读校验,输出「已写回读 OK」。recall 抽查:确认能读回、无错库。profile 刷新:熟识 / 深交阶段主动重新生成画像。forget);记忆明文可读不黑箱;敏感信息归用户本地。第 0 步:CLI 就绪检查(未装 → 🔒 征得同意后自动安装)
yotta-memory --version(或 command -v yotta-memory / where yotta-memory)确认 CLI 已装。
--version 出版本即就绪):
npx -y @yottameta/yotta-memorynpm i -g @yottameta/yotta-memorybash install.sh --agent <name>A. 确认记忆库位置(AI 不会自动知道记忆库在哪,先检测,避免「recall 读空库 / 错库」):
运行 yotta-memory config get。
memory_home: <目录>(已显式设置)→ 直接用该位置。memory_home: (未设置,默认 ~/.yottamemory) → 🔒 征得同意后引导设置:问用户用默认还是指定目录(项目级 <repo>/.yottamemory、记忆盘等),确认后 AI 执行 yotta-memory config set memory_home <目录>,回读 config get 验证。已有记忆:目标目录已存在 facts/ 等子目录或 index.json → 直接 recall;全新目录 → 按「便携记忆盘模式 §0.3」初始化。
私密区为明文(无 keys/;doctor 显示「加密: 否」):首次使用即主动告知风险——明文私密记忆(PREF / BOUND / COMMIT)可被同机任何能读文件的进程或用户直接看到;然后给出《明文库转加密(第一次最短路径)》。口令与迁移必须由用户本人执行,AI 只讲解并负责后续 key claim。用户明确拒绝加密时,记录其选择并复述明文风险,不反复打扰。
Agent Plugin 开箱装配(v0.16.6):插件 mcp.json 入口是 bin/plugin-mcp.js。宿主已替换身份占位符时优先用替换值;未替换时回退到 YOTTA_MEMORY_AGENT_ID + YOTTA_MEMORY_AGENT_KEY_FILE,再回退到 PLUGIN_DATA/identity.json。都没有时插件以未授权模式启动(公共 FACT 可读、私密 fail-closed)并打印绑定指引。绑定一条命令:用户在 yotta-memory view 授权后执行 yotta-memory key claim <id> --plugin-data <PLUGIN_DATA>(同时写 key 与 identity.json),重启会话即可。
私密区已加密(存在 keys/):先 yotta-memory key list 确认本智能体是否有 agent binding;没有 → 告知用户由用户自己执行 yotta-memory view → 浏览器打开平台 → 输入主口令 → 点「授权」并保存只展示一次的 agent_key。用户授权后服务端会写 keys/pending/<id>.key;AI 在新会话执行 yotta-memory key status <id>(需要时显式加 --to <AI_HOME> 或 --agent-key-file <文件>;默认发现规则见下),有 pending 就执行 yotta-memory key claim <id>,落到 <AI_HOME>/.yotta-memory-agent-key 后再使用 --agent-key-file。升级后首次调用元忆 / 重启会话时,若输出 [YTM_MIGRATION_REQUIRED],必须主动把 marker、受影响 agent 和处理步骤转达给用户。AI 不得代替用户执行 migrate / key bind 迁移,只负责提醒和讲解(marker 只列仍有私密数据、未绑定的 agent;仅有 legacy cache、无迁移数据的 owner 会单独提示,不进入迁移清单;公共 FACT 不受影响)。
B. 确认本智能体唯一身份(强制,写私密记忆前必做):
yotta-memory whoami(远端经 MCP 用 agent_info)确认「我是谁」。
<主机名>-<角色> 或带随机后缀,如 win-zhiwei / kali-dashu;禁止用 dashu / codex 这类易撞名)。yotta-memory iam <id>:引擎强制唯一性(ID 已被其它主机/来源占用 → 拒绝并提示换 ID;确认是同一智能体才 --force),并自动写自我档案到本智能体私密区。yotta-memory whoami 显示「已登记 + 自我档案」。yotta-memory recall "自我接入档案"(本智能体)能读回字段才算就绪:
agent_id / host / memory_home / mcp_mode(stdio|http)/ engine_url(仅远端)/ token(仅远端;本机不存 token),可扩展 agent_name / user_name / relationship(iam --name/--user/--relationship 写入)。agent_key。stdio MCP 用显式参数 --agent-id <id> --agent-key-file <宿主key文件>;HTTP MCP 用请求头 X-Agent-Id + X-Agent-Key;CLI 直连用 --agent <id> --agent-key-file <文件>。没有 agent_key 时,私密读写一律 fail-closed;身份不再读取 YOTTA_AGENT_ID / YOTTA_MEMORY_AGENT_KEY / YOTTA_MEMORY_TRUST_ENV_AGENT,旧配置启动即拒绝。C. 身份红线(强制):
whoami / agent_info,再向用户确认;禁止猜。D. 开工主注入(context):
yotta-memory context [--limit 10] [--budget 1800](远端经 MCP 用 recall 补细节):一键拿到「身份 + 多智能体铁律 + 用户画像摘要 + 长期理解摘要 + 近期走廊 + 近期高价值记忆 + 边界提醒 + 承诺 / 锚点 + 会话闭环契约」;--budget 控制动态记忆字符预算,长期摘要 / 身份 / 铁律 / 画像 / 边界 / 承诺与闭环契约必保(token 恒定,不随记忆膨胀)。recall <关键词>。yotta-memory CLI / MCP 工具(remember / recall / search / forget / archive / reindex / export / import / agent_info);禁止用 shell(Get-ChildItem / Get-Content / cat / ls / type / vim 等)直接读、改、删 <root>/ 下的记忆文件——否则 --agent / --owner 的越界拦截形同虚设,会读到别的智能体私密内容。--agent <其它agent> 只作身份声明/展示,绝不授予跨智能体私密读取(读他人私密仍需 grant / identity=user / --unsafe)。已用
YOTTA_MEMORY_HOME临时覆盖时不必改 config;本步骤是常规 CLI 直连用户级位置的引导。
| 命令 | 作用 |
|---|---|
| `yotta-memory init [--project] [--dir <目录>] [--attach] [--encrypt | --no-encrypt] [--password-stdin] [--recovery-key-out <文件>]` |
yotta-memory migrate [--password-stdin] [--recovery-key-out <文件>] | 明文库 → 密文迁移(由用户执行;首次迁移推荐交互式,非 ASCII 口令勿用 Windows 管道;view 授权与 key bind 等价关系见《明文库转加密(第一次最短路径)》) |
yotta-memory view [--port 8788] [--host 127.0.0.1] | 用户查看平台(本机 Web:口令解锁浏览 / 搜索 / 导出全部 AI 记忆 + 授权 / 吊销 AI + 重设口令 + 显示恢复钥匙;已在运行则复用 URL,端口占用给明确提示) |
| `yotta-memory reset-password [--password <当前> | --recovery-key <钥匙>] [--new-password <新>]` |
| `yotta-memory key list / bind / rotate / claim [--to <AI_HOME> | --agent-key-file <文件>] / status [--to <AI_HOME> |
yotta-memory remember <type> <subject> <statement> [--owner <id>] [--source <来源>] [--weight <0..>] [--verify] [--no-hint] | 写入(同 subject+statement 自动更新;--owner 标注归属;--source 记录来源;--weight 重要性权重默认 1.0、去重取 max;--verify 写后回读校验;--no-hint 关闭类型启发式提示) |
yotta-memory recall [关键词] [--type T] [--limit N] [--agent <id>] [--owner <id>] [--all] [--unsafe] [--explain] [--semantic] [--embedding <command>] [--embedding-timeout N] | 检索(v0.8.0 默认语义检索:同义词 / 拼音全拼+首字母 / 字段加权 / 模糊匹配 + 效用分融合排序;v0.9.0 支持可选本地 embedding 插件,失败自动降级;--explain 显示命中理由与效用分项;--semantic 显式开启;读取分区过滤;越界读其它智能体私密默认拒绝,需 grant / identity=user / --unsafe;--agent <其它> 只作身份声明/展示,不授予跨读——读他人私密同样要授权;项目级优先) |
yotta-memory profile [--owner <id>] | 生成用户画像(聚合 private/<owner>/ 原文,零推断,写 profile.md;跨 owner 默认拒绝) |
yotta-memory context [--limit N] [--owner <id>] [--budget N] [--focus <关键词>] [--explain] [--embedding <command>] | 生成开工上下文包(身份 + 多智能体铁律 + 画像 + 长期摘要 + 任务相关记忆 + 近期走廊 + 近期高价值 + 边界 + 承诺 + 会话闭环契约;--budget 控制动态记忆字符预算,0=不限;--explain 输出 included / dropped 选择 trace) |
yotta-memory forget <文件> | 移入 .trash/<时间>/ 回收区并写审计(v0.12.0;不再物理删除) |
| `yotta-memory backup volumes / setup --dir <目录> / status / ensure-daily / schedule enable | disable |
yotta-memory backup create / list / doctor / restore <ID> --to <目录> / drill [<ID>] | 备份、恢复与恢复演练(v0.12.0;独立盘校验、SHA-256 清单、排除 keys/cache、恢复默认只写新目录;drill 验证 manifest / 索引 / 测试私密解密) |
yotta-memory doctor [--json] [--runtime] [--mcp-config <文件>] [--skill-dir <目录>] | 开工可靠性检查(v0.12.2;根目录 / 密钥库 / 索引 / 身份 / 最近备份;严重异常时锁定破坏性写入);全新空库的缺失 index / agents 降为 info;输出 agent home 发现规则与 YOTTA_MEMORY_AGENT_HOME 提示;加 --runtime 检查 CLI / current / MCP 配置 / 运行中 server / 技能副本漂移;v0.16.4 起 --json 含身份 / agent-key 状态;v0.16.5 起顶层含 schemaVersion / encryption / migration_required |
yotta-memory archive [--days 180] [--threshold 0.35] | 归档旧记忆(v0.8.0 统一效用分 + v0.10.0 分类型衰减;immutable / BOUND 豁免;私密归档入 .archive/private/<owner>/<type>/;阈值默认读 config maintain_archived_utility) |
yotta-memory reindex | 重建索引(手动改 .md 后校正) |
yotta-memory export [--out f.json] / import <f.json> | 导出 / 导入 |
yotta-memory config set memory_home <目录> / config set backup_dir <目录> / config get [--json] | 持久记住 / 查看记忆库位置与备份目录(~/.yottamemory/config.json;get --json 同时返回身份状态) |
yotta-memory whoami --agent <id> [--agent-key <key>] [--json] | 查看当前显式身份与登记状态;身份不从环境变量读取;--json 返回 identity 结构化状态 |
yotta-memory iam <id> [--name <显示名>] [--user <用户名>] [--relationship <关系>] [--force] | 登记本智能体唯一身份并自动落自我档案(agents.json,ID 必须唯一;可选扩展显示名 / 用户 / 关系) |
yotta-memory token new --agent <id> [--force] / token list / token revoke --agent <id> | 每智能体访问 token:生成 / 列出 / 吊销(登记 <记忆库>/.server/tokens.json;同 ID 已被其它来源占用需 --force 覆盖,防不同智能体合流) |
| `yotta-memory serve [--host 0.0.0.0] [--port 8787] [--no-auth] [--stdio] [--tools core | full]` |
| `yotta-memory runtime list / install <tarball | 版本> [--from-current] [--force] / use <版本> [--restart] / rollback [--restart] / status` |
yotta-memory lan enable [--onstart] / disable / status | 开机自启管理(Windows:计划任务,默认 ONLOGON、--onstart 开机即启需管理员,非管理员自动降级用户级 Startup 静默自启,v0.6.3 起 VBS 自愈不弹 80070002;Linux:systemd 用户单元,不可用时自动降级用户 crontab @reboot) |
| `yotta-memory feedback <文件 | 主题> --useful |
yotta-memory maintain [--dry-run] [--apply] [--purge] [--threshold N] [--age N] [--dedup] [--dedup --apply] [--merge A,B] | 记忆自组织(v0.8.0 自我进化 + v0.10.0 自动合并):默认 dry-run 预览;--apply 执行归档(immutable / BOUND 豁免;私密归档入 .archive/private/<owner>/<type>/),--purge 才真删遗忘候选;--dedup 查重并给置信度分档(≥0.85 高置信 / 0.65–0.85 建议手动 / 其余忽略),--dedup --apply 自动合并同归属高置信组(写批次审计可回滚;与归档互斥,不误归档);--merge A,B 手动合并两条;审计写 .archive/audit-<日期>.jsonl) |
yotta-memory consolidate [--min-age N] [--min-idle N] [--max-utility N] [--min-group N] [--period N] [--type T] [--model <cmd>] [--apply] [--undo <batch>] [--batches] | 周期摘要压缩(v0.10.0 压缩遗忘:把超龄 + 长期闲置 + 低效用的同主题旧记忆归纳成带溯源的周期摘要并留在活跃区,原文整体进 .archive/;默认 dry-run;immutable / BOUND 豁免,活跃 / 高效用记忆不动;--apply 执行并写批次审计,--undo <batch> 一键回滚(幂等),--batches 查近期批次;--model 仅本地 CLI) |
yotta-memory distill [--owner <id>] [--subject <主题>] [--model <cmd>] [--out <路径>] | 心理日志蒸馏(v0.8.0 自我提升:统计摘要 / 主题画像 / 知识地图;启发式零依赖,--model 可选外部模型 stdin→stdout 提炼;私密产物入 private/<owner>/distills/,公共入 facts/distills/) |
| `yotta-memory explain <文件 | 主题>` |
--recovery-key-out <文件>(init / migrate)把恢复钥匙写入文件,适配 Windows GUI 宿主 stdout 不可捕获;不要把钥匙粘贴到对话。--agent-key-file:文件不存在时进入未授权模式(公共 FACT 可读);公共 / 维护命令不再输出全局 stderr 告警。只有私密操作 fail-closed,并提示缺失文件、view / key bind <id>、key status / key claim;文件存在但为空 / 不可读仍报错。yotta-memory view 在无 owner key 时可用恢复钥匙校验主口令进入平台;无 owner 时先 yotta-memory iam <id>,再回页面授权。EADDRINUSE。适用于
yotta-memory 0.16.2+。迁移前先完整备份。
yotta-memory migrate --recovery-key-out "$env:USERPROFILE\yotta-memory-recovery.key"
按提示输入主口令。自动化场景按终端选择一种;不要直接把中文占位符粘贴到命令里,也不要把口令写进 --password 参数:
| 场景 | 命令 |
|---|---|
| 交互终端(推荐,支持非 ASCII) | yotta-memory migrate --recovery-key-out "<钥匙文件>",按提示输入口令 |
| PowerShell 环境变量(自动化) | $env:YOTTA_MEMORY_PASS='<ASCII-PASSWORD>'; yotta-memory migrate --recovery-key-out "<钥匙文件>"; Remove-Item Env:\YOTTA_MEMORY_PASS |
| cmd 环境变量(自动化) | set "YOTTA_MEMORY_PASS=<ASCII-PASSWORD>",执行 yotta-memory migrate --recovery-key-out "<钥匙文件>",最后 set "YOTTA_MEMORY_PASS=" |
| 纯 ASCII 管道(非 ASCII 不要用) | "<ASCII-PASSWORD>" | yotta-memory migrate --password-stdin --recovery-key-out "<钥匙文件>" |
常见报错:当前为非交互环境 = 没有 stdin 也没有 YOTTA_MEMORY_PASS;'"..."' is not recognized = 在 cmd.exe 里用了 PowerShell 的管道写法。Windows 管道可能按控制台代码页编码非 ASCII 字符,导致实际入库口令与输入口令不一致;因此非 ASCII 口令请使用交互终端或环境变量,不要使用 echo 中文 | ...。若迁移后 view 报 口令错误,优先用恢复钥匙执行 yotta-memory reset-password --recovery-key "<钥匙文件>" 重设,不要继续猜口令。
恢复钥匙文件必须离线保存,不要和记忆库或备份放在一起。
推荐:网页授权
yotta-memory view
浏览器输入主口令,点击 授权 <id>,保存只显示一次的 agent_key。
高级:CLI 等价方式
yotta-memory key bind <id>
两种方式都会写 binding + pending,效果相同。
yotta-memory key status <id>
yotta-memory key claim <id> --to "<AI_HOME>"
默认写入 <AI_HOME>/.yotta-memory-agent-key。
yotta-memory reindex --agent <id> --agent-key-file "<AI_HOME>/.yotta-memory-agent-key"
yotta-memory recall <关键词> --agent <id> --agent-key-file "<AI_HOME>/.yotta-memory-agent-key"
必须在授权并领取 agent_key 后执行 reindex。migrate 在没有 agent_key 时无法建立每 owner 加密索引;跳过这步会让私密 recall 看起来像“无匹配记忆”。
--agent-key-file <AI_HOME>/.yotta-memory-agent-key;只有 --agent-id 时,加密库的私密 MCP 调用会报缺少 agent_key,而 CLI 可能仍正常。补参后重启 MCP / 会话并回读验证。加密范围:
private/下的 PREF / BOUND / COMMIT 与画像索引;公共facts/仍为明文。
目录结构(v0.5.0 起,私密记忆按 owner 物理分目录):
<root>/
├── facts/ # FACT 事实(公共可共享)
├── private/<owner>/<type>/ # PREF / BOUND / COMMIT,按智能体隔离
├── private/<owner>/profile.md # 用户画像(明文库;加密库为 profile.md.enc)
├── private/<owner>/index.enc # 加密库:每 owner 加密索引(YTMIDX1,Owner Key 加密)
├── .archive/ # 归档区
├── index.json # 公共 FACT 检索索引(加密库只含公共条目)
├── keys/ # 加密库密钥库:salt / <owner>.key.enc(UMK 包裹) / <owner>.key.recovery(恢复钥匙包裹) / recovery.key.enc / bindings/<id>.key.agent;legacy cache/<id>.key 不再加载
└── agents.json # 智能体身份登记表(唯一性)
记忆文件 <YYYY-MM-DD>-<NNNN>.md,frontmatter 含 type / subject / statement / confidence / created / updated / tags / immutable / scope / owner / source / weight / access_count / last_accessed(source 记录来源、weight 重要性权重默认 1.0);正文为记忆内容。旧版根下平铺的 prefs/ bounds/ commits/ 会在 reindex(或首次 recall 建索引)时按 frontmatter owner 自动迁移到 private/<owner>/<type>/。
自我档案(本智能体身份,强制落盘):PREF,subject=自我接入档案,owner=<本智能体ID>,statement 为 ; 分隔的 key:value——agent_id / host / memory_home / mcp_mode(stdio|http)/ engine_url(仅远端)/ token(仅远端;本机不存 token),可含 agent_name / user_name / relationship(iam --name/--user/--relationship 写入)。
定位:把私密区从「纪律层隔离」升级为「机制层机密保护」——没有对应 owner 密钥,即使读到密文文件也解不开。公共 FACT 保持明文共享。边界声明:用户是数据所有者,天然可解全部;不承诺对抗同一 OS 用户下的恶意进程(本机模型)。
keys/<owner>.key.enc,另用恢复钥匙包裹存 keys/<owner>.key.recovery。reset-password --recovery-key)。泄露 = 等同口令泄露。<date>-<seq>.md.enc(头 YTMENC1),公开 facts/*.md 保持明文。private/<owner>/index.enc(头 YTMIDX1,Owner Key 加密)——AI 用自己的 key 解自己索引一次,内存全文检索,只解命中文件,不是逐个文件解密;公共 index.json 只含 FACT 条目。--no-encrypt 库回到明文纪律层模型(老行为,向后兼容)。yotta-memory init --encrypt(新建默认加密)→ 设主口令 → 抄下恢复钥匙离线保存。migrate / key bind。yotta-memory view 或等价的 yotta-memory key bind <id>;生成只展示一次的 agent_key,并写入 keys/bindings/<id>.key.agent 与临时 keys/pending/<id>.key。AI 新会话用 key status / key claim 将 pending 落到 <AI_HOME>/.yotta-memory-agent-key,之后 CLI 用 --agent <id> --agent-key-file <宿主key文件>;stdio MCP 用 --agent-id <id> --agent-key-file <宿主key文件>;HTTP MCP 用 X-Agent-Id + X-Agent-Key 请求头。owner ID 单独存在时不能解密私密;legacy keys/cache/<id>.key 不再加载。yotta-memory view → 输口令 → 浏览 / 搜索 / 导出全部(含各 AI 私密明文,仅用户可见)。口令只在本地内存派生,不落盘、不发远端;默认仅 127.0.0.1,远程需 --host 显式开启。yotta-memory reset-password(当前口令或恢复钥匙);key revoke <id> 立即吊销某 AI 的 agent binding(该 AI 随即失去解密能力)。view 平台的「授权」只对未绑定 agent 生成新 key;已绑定的 agent 需先「吊销」再授权,避免误打断在用的 agent_key。目标:用户只负责在
view平台授权和备份弹窗 key;AI 负责把待领取 key 落到自己的宿主目录,并在新会话稳定读取。模型上下文不需要出现 key 明文。
yotta-memory view 中解锁并点「授权」。agent_key,写入:
keys/bindings/<agent_id>.key.agentkeys/pending/<agent_id>.keyagent_key。这是用户侧备份,用户可选择保存到密码管理器或自己保管;AI 不要求用户把 key 发到聊天。AI 在开工身份检查后执行:
yotta-memory key status <agent_id>
若输出 pending: yes,执行:
yotta-memory key claim <agent_id>
AI_HOME 解析优先级由 claim / status 共用:
--to <目录> 或 --agent-key-file <文件>;YOTTA_MEMORY_AGENT_HOME 或 YOTTA_MEMORY_AGENT_KEY_FILE;$CODEX_HOME(未设置时 ~/.codex)、OpenCode 使用 $XDG_CONFIG_HOME/opencode、其他宿主使用 ~/.<agent_id>;.yotta-memory-agent-key。key status 即使目标文件不存在也会输出 checked: <实际检查路径> 与 discovery: <命中的发现规则>,不要仅凭 host_key: missing 重复 claim。
claim 会:
keys/pending/<agent_id>.key<AI_HOME>/.yotta-memory-agent-key成功后 CLI 使用:
yotta-memory context --agent <agent_id> --agent-key-file <AI_HOME>/.yotta-memory-agent-key
MCP 模式由宿主显式声明身份:stdio 用 --agent-id <agent_id> --agent-key-file <AI_HOME>/.yotta-memory-agent-key;HTTP 用 X-Agent-Id + X-Agent-Key 请求头。宿主不得再用身份环境变量。
<AI_HOME>/.yotta-memory-agent-key,不需要重新授权。view 中「吊销」,再「授权」。新 key 会重新生成;旧 key 立即校验失败,pending 会重新产生,AI 再执行一次 key claim。key revoke 会删除 binding 和 pending;长驻 MCP 进程也会在后续读取时重新校验 binding,不能继续使用旧 key。记忆库可装在任何主机或硬盘上(= 记忆引擎):本机 AI 用 CLI 直连,局域网内其它主机上的 AI 经 MCP 远程接入。全程 AI 自主执行;关键动作(🔒)执行前一句话说明「做什么 + 为什么 + 影响」并征得用户同意,用户只需回答「可以 / 好 / 允许」;除复制粘贴 token 外,用户不做任何手工操作。
步骤 0.1 检查 CLI 是否已装
未装 → 🔒 征得同意后自动安装(npx 临时 / npm 全局 / install.sh 三选一,命令与判断见「开工第一步 第 0 步」)。
装后验证:yotta-memory --version 出版本即就绪。
步骤 0.2 确定记忆存储位置
| 位置 | 目录 | 适用 |
|---|---|---|
| 用户级(默认) | ~/.yottamemory | 个人跨项目记忆 |
| 项目级 | <repo>/.yottamemory | 随项目提交共享 |
| 便携记忆盘 | 任意盘符或挂载点下的目录(如 <memory-disk>/yottamemory) | 记忆盘 / 局域网共享 |
步骤 0.3 接入现有 vs 初始化新库(关键判断)
facts/ 等子目录或 index.json。recall 验证能读到旧记忆。yotta-memory init --dir <目录> 或 YOTTA_MEMORY_HOME=<目录> yotta-memory init(项目级用 init --project)。recall 跑通。步骤 0.4 持久记住位置(重要)
yotta-memory config set memory_home <目录>(项目级可跳过)。~/.yottamemory/config.json,此后该机器 AI 开工 recall 自动用对位置。yotta-memory config get 显示 memory_home 与预期一致。记忆盘场景:硬盘插上 → AI 检查盘上目录是否有数据 → 有则接入 + config 记住 → 插盘即恢复,机器记住位置。
步骤 0.5 启动记忆引擎(仅引擎主机,供远程接入)
yotta-memory serve(默认 0.0.0.0:8787,Bearer token + X-Agent-Id + X-Agent-Key 鉴权;--no-auth 仅限可信内网),或注册开机自启 yotta-memory lan enable(Windows:优先计划任务,默认登录自启;非管理员自动降级用户级 Startup 静默自启,免管理员)。serve --stdio 由 MCP 客户端按需拉起 CLI(无常驻进程)。lan status 可查)。用户提及「记忆盘 / 记忆引擎 / 共享记忆 / 局域网记忆」,或开工 recall 发现需要访问远程记忆库时进入本流程。
YOTTA_MEMORY_HOME 或 config get 显示 memory_home 已指向本机可读目录 → 「本机直连」,直接用 CLI。yotta-memory server → 「远程已配置」,直接用 MCP tools。确认记忆库目录(config get / YOTTA_MEMORY_HOME / 默认 ~/.yottamemory)→ 直接 CLI 读写,不配置 MCP、不需要 token。
yotta-memory token new --agent <本智能体ID>(引擎主机没装 → 按 4.0 先装;或请引擎主机上的 AI 代执行)。ytm_...),只打印一次,请用户妥善保管。agent_key;没有时由用户在引擎主机执行 yotta-memory view 授权并保存弹窗 key,引擎会同时写 keys/pending/<id>.key。yotta-memory key status <id>,有 pending 就 key claim,写到 <AI_HOME>/.yotta-memory-agent-key(需要时显式加 --to / --agent-key-file)。token 可以按用户习惯复制;agent_key 属于私密能力,优先走
key claim或安全文件传输,不走对话明文。
MCP 工具集与 CLI 一致:remember / recall / search / forget / archive / reindex / export / import / profile;管理动作(init / config / token / lan / serve)不进 MCP,token 管理不远程暴露;MCP export/import 路径限记忆库内、distill 不支持
--model(仅本地 CLI)。
工具分组(v0.15.0):常驻场景用
yotta-memory serve --stdio --tools core --agent-id <id> --agent-key-file <path>,只暴露context / recall / search / remember;需要诊断、维护、导入导出时用--tools full。调用不属于当前分组的工具会返回明确提示,不会静默执行。
| 智能体 | 常见 MCP 配置位置 |
|---|---|
| Claude Code | 项目 .mcp.json 或用户级 ~/.claude.json |
| Codex | ~/.codex/config.toml([mcp_servers]) |
| Cursor | 项目 .cursor/mcp.json 或用户级 |
| 其它(Trae / Qwen / Comate / Kimi 等) | 各自 MCP 配置 |
基于 MCP 最新协议 2026-07-28(无状态时代;向后兼容 2025-11-25 及更早握手客户端)。
{
"mcpServers": {
"yotta-memory": {
"url": "http://<IP>:8787/mcp",
"headers": {
"Authorization": "Bearer <TOKEN>",
"X-Agent-Id": "<本智能体ID>",
"X-Agent-Key": "<本智能体的 agent_key>"
}
}
}
}
X-Agent-Key 的值来自该 AI 的宿主 key 文件 <AI_HOME>/.yotta-memory-agent-key。同机 / 共享文件系统先用 key claim 写入;不共享文件系统时由用户安全传输,不要把 key 发到对话里。配置文件写入前仍需获得用户同意。
本机 stdio 配置使用显式参数,不写身份 env:
{
"mcpServers": {
"yotta-memory": {
"command": "node",
"args": [
"<runtimeRoot>/current/bin/yotta-memory.js",
"serve", "--stdio", "--tools", "core",
"--agent-id", "<本智能体ID>",
"--agent-key-file", "<AI_HOME>/.yotta-memory-agent-key"
]
}
}
}
recall / search 确认能读到记忆 → 成功。常见问题与避坑见 references/faq.md:
forget 后按正确类型重写;init 默认加密(主口令+恢复钥匙),明文库 migrate 升级,view 平台口令解锁;key claim 领取到宿主目录;owner ID 不是认证,吊销后旧 key 立即失效;config get 查位置 → reindex → recall / search;reset-password;lan enable + token new,客户端配 url+token。references/protocol.md,需要时读取,不要每次全读。