TencentDB Agent Memory 的三份 SKILL 文档,与那个不存在的脚本
翻 TencentDB-Agent-Memory 这个仓库的时候,有个细节挺容易被跳过:MemoryCore/ 的根目录里,除了 README.md 和 README_CN.md,还并排躺着三份文件名以 SKILL 打头的 Markdown——SKILL.md、SKILL-MIGRATION.md、SKILL-DIAGNOSTIC-EXPORT.md。
它们不是普通的说明文档,至少形态上不是。三份都带 YAML frontmatter,里面有 name、description、version: 1.0.0 三个字段,是 skill 文档的写法——正文就是一步步的操作清单。也就是说,这三份文档里的每一条命令、每一个路径,都可能被人或 Agent 原样拿去执行。
先把话说在前头:本文所有事实来自 2026-08-16 我们取到的仓库快照 97f9465。这个仓库的默认分支是 feat/server_team,不是 main 也不是 master,下文提到的所有文件路径都在这个分支上。MemoryCore 主模块的版本是 2.0.0-beta.1,处于 beta 阶段,参数、路径与文档随版本变动,随时可能与你看到的不一样。另外,我们没有部署、没有安装、没有运行过这个项目的任何一个模块,下面写到的每一个数值都是文件里写着的字面值,不是运行结果。
三份文档各管一段
三份文档的行数分别是:SKILL.md 200 行、SKILL-MIGRATION.md 239 行、SKILL-DIAGNOSTIC-EXPORT.md 152 行(wc -l 实读,2026-08-16 快照)。分工是清楚的:一份管从零装起来并验收,一份管从旧包搬过来,一份管出了问题怎么把现场打包带走。
SKILL.md:装、配、验收
frontmatter 里的 name 是 openclaw-memory-tencentdb-setup(SKILL.md:2)。它给的环境预检门槛写在 :28-29:OpenClaw >= 2026.3.13、Node.js >= 22.16.0。这两个数字在 MemoryCore/package.json 里能对上另一半——engines.node 是 >=22.16.0(package.json:107),openclaw 段里的 compat.pluginApi 与 compat.minGatewayVersion 都是 >=2026.3.13(package.json:139-152)。
安装命令原文在 :45:
openclaw plugins install @tencentdb-agent-memory/memory-tencentdb
更新命令在 :51:openclaw plugins update memory-tencentdb。
最小配置只需要一段(:58-64):
{"memory-tencentdb": {"enabled": true}}
:66 那行写「该插件支持零配置启动」。文档后面(:81-129)给了一份更完整的推荐模板。这份模板里有个值得记一笔的数字:pipeline.l2DelayAfterL1Seconds 给的是 10(SKILL.md:100)。
它还写了三条关键规则(:133-143):embedding.provider="none" 时只保留关键词路径;配远端 embedding provider 必须同时给齐 apiKey、baseUrl、model、dimensions 四项,缺任意一项则继续运行但自动降级为非向量模式;l0l1RetentionDays 为 0 表示不清理,取 1 或 2 需要显式打开 allowAggressiveCleanup。
验收部分(:155-157)给了两个可查的信号:日志里出现 [memory-tdai] 前缀;数据目录 ~/.openclaw/state/memory-tdai/ 已创建,且至少包含 conversations/、records/、scene_blocks/、vectors.db。冒烟测试是调 tdai_memory_search 与 tdai_conversation_search 两个工具(:166-167)。安全约束在 :180-182:apiKey 视为敏感信息、优先用环境变量注入、只改 memory-tencentdb 这一个配置段。
SKILL-MIGRATION.md:从旧包搬过来
name 是 openclaw-memory-tencentdb-migration(:2)。要解决的事写在 :13-14:旧包 @tdai/memory-tdai(插件 ID memory-tdai)迁到新包 @tencentdb-agent-memory/memory-tencentdb(插件 ID memory-tencentdb)。
这份文档里最要紧的一句在 :15-16:新旧插件共用数据目录 ~/.openclaw/memory-tdai/,卸载旧插件不会删数据目录,但会删 openclaw.json 里该插件的配置段。所以流程是先备份配置——备份脚本读 ~/.openclaw/openclaw.json 里的 plugins.entries['memory-tdai'],写到 /tmp/memory-tdai-config-backup.json(:50-63);还原时写回的 key 换成 memory-tencentdb(:138)。
需要重点记录的配置项列在 :67-71:embedding(含 proxyUrl)、extraction.model、persona.model、capture.excludeAgents、capture.l0l1RetentionDays。安全提示在 :216:迁移完成后删掉备份文件,因为它里面可能带 apiKey。
还有一处专门写来防误判的说明,在 :165:Gateway 日志里出现的仍然是 [memory-tdai] 前缀,文档括注「日志标签仍为 memory-tdai,这是正常的」。代码侧能对上——MemoryCore/index.ts:55 写的是 const TAG = "[memory-tdai]";。
SKILL-DIAGNOSTIC-EXPORT.md:把现场打包
name 是 openclaw-diagnostic-export(:2)。它的工作目录探测顺序在 :20-22:OPENCLAW_STATE_DIR > ~/.openclaw > ~/.clawdbot。
这份文档信息密度最高的是两张表。一张是导出包内容与隐私风险表(:57-63),其中 memory-tdai/ 一栏的风险标的是 高,理由原文写「包含用户对话原文」;openclaw-config-redacted.json 标低。另一张是脱敏规则表(:107-113):字段名匹配 apiKey/token/password/secret/credential 且值为字符串的,替换成 ***REDACTED(Nchars)***;SecretRef 对象的 id 换成 ***REDACTED***;顶层的 models、secrets、channels、env 整段换成 ***REDACTED_SECTION***;gateway.auth 下的 token/password 换成 ***REDACTED***;其余字段(包括 plugins 的完整配置)保留原样。
:68 另有一句明确的边界:压缩包存放在本地,不会自动上传,需要用户手动发送。
顺带,这份文档在 :93-101 把记忆插件的数据结构摊开了:conversations/ 是 L0 每日 JSONL 分片、records/ 是 L1 每日 JSONL 分片、scene_blocks/ 是 L2 的 Markdown、persona.md 是 L3 画像、vectors.db 是 SQLite(向量 + 全文索引)、.metadata/ 放 checkpoint 与 scene_index.json、.backup/ 是滚动备份。日志位置表在 :82-88。
那个导出脚本
问题出在这份诊断文档的第 37 行。它给出的导出命令原文是:
bash scripts/export-diagnostic.sh
:40 还补了一句「脚本位于本项目的 scripts/export-diagnostic.sh」,:37-42 一并写明默认输出到 ~/Downloads/openclaw-diagnostic-<timestamp>.tar.gz。
我们在 2026-08-16 的 97f9465 快照里对全仓做 find . -name "export-diagnostic*",没有返回任何结果;MemoryCore/scripts/ 下的 32 个文件里也没有它。文档里写的是 A,我们实读的仓库状态是 B,两处不一致——按本站的规矩,说到这里就停,我们不去猜是什么原因。
判定动作很简单,任何人都能自己复核:切到 feat/server_team 分支,在仓库根跑一次 find . -name "export-diagnostic*",再 ls MemoryCore/scripts/ 对一遍。如果你手上那份快照里能找到这个文件,那说明你的版本比 97f9465 新或旧,本文这一条对你不成立;如果 find 同样空手而归,那么你照着这份 skill 走到第 37 行时,仓库里就没有对应的文件可供执行。
顺便说,这不是孤例。同一份快照里,README.md:216 提到的配置模板 tdai-gateway.proxy.yaml 也找不到——find 只返回 tdai-gateway.yaml 与 tdai-gateway.standalone.yaml 两个文件;package.json 的 files 与 scripts 字段里还有 8 个路径指向不存在的文件,其中包括 scripts/openclaw-after-tool-call-messages.patch.sh(package.json:73 的 files 里列着,同时也是 postinstall 的目标,package.json:48),以及 build:scripts 链条上的 scripts/seed-v2/。这些同样只是差异的陈述。
读这三份文档时,还有哪几处要自己对一遍
三份 SKILL 文档单独看都自洽,但和仓库里其它文件放一起看,有几处口径需要留意。这些不是「谁错了」,而是「你照抄哪一处,得到的东西不一样」。
包名有 -v2 和没 -v2 两种。 MemoryCore/package.json:2 的 name 是 @tencentdb-agent-memory/memory-tencentdb-v2;而 SKILL.md:45、SKILL-MIGRATION.md:110 与 :225、SKILL-DIAGNOSTIC-EXPORT.md:11 用的都是 @tencentdb-agent-memory/memory-tencentdb(无 -v2),scripts/install_hermes_memory_tencentdb.sh:6 走 npm 下载时用的也是无 -v2 的那个。这两个包名在 npm registry 上分别是什么状态,本文不联网,未核实。
插件 ID 有三个。 MemoryCore/openclaw.plugin.json:2 是 memory-tencentdb,:5 的 commandAliases 是 ["memory-tdai"];openclaw-plugin/openclaw.plugin.json:2 是 memory-tencentdb-client;运行期日志标签则是 [memory-tdai]。所以你在 SKILL 文档里看到 memory-tencentdb、在日志里看到 memory-tdai、在另一份安装脚本里看到 memory-tencentdb-client,这三个字符串指的不是同一层东西。
数据目录在三份文档里写成了三个路径。 README.md:48 写 ~/.memory-tencentdb/memory-tdai;SKILL.md:156 写 ~/.openclaw/state/memory-tdai/;SKILL-MIGRATION.md:15 与 SKILL-DIAGNOSTIC-EXPORT.md:11 写 ~/.openclaw/memory-tdai/,后者还加了「代码中硬编码」的说法。代码侧我们核到的是两条解析链:standalone 路径在 src/gateway/config.ts:789-790,取 MEMORY_TENCENTDB_ROOT 或 ~/.memory-tencentdb 再拼 memory-tdai,且可被 TDAI_DATA_DIR 覆盖、有 legacy 目录兜底;OpenClaw 宿主路径在 index.ts:276,由 resolveOpenClawStateDir() 的返回值拼 memory-tdai。「硬编码」这句我们没有核到对应的常量,找到的是上面这两条可被环境变量改变的链;resolveStateDir() 里到底有没有 state 这一段,OpenClaw 不在这个仓,我们核不出来。
l2DelayAfterL1Seconds 有 10 和 90 两个值。 SKILL.md:100 的推荐模板给 10,openclaw.plugin.json:76 的 schema 默认是 10,src/config.ts:566 的代码默认也是 10;而 tdai-gateway.yaml:64 与 tdai-gateway.standalone.yaml:45 两份 Gateway 配置模板里写的都是 90。同一组 pipeline 的其它字段两边是一致的。该取哪个值取决于你的用法,项目没有给通用建议值。
落到操作上
如果你要按这三份 SKILL 文档做事,有两个动作值得先做:
第一,把文档里出现的每一条 bash scripts/xxx.sh 和每一个配置文件名,先在仓库里 find 一遍再执行。这份快照里至少有 export-diagnostic.sh 与 tdai-gateway.proxy.yaml 两处对不上。
第二,做诊断导出这件事之前,把 SKILL-DIAGNOSTIC-EXPORT.md:57-63 的隐私风险表读完。文档自己把 memory-tdai/ 标成高风险,写明「包含用户对话原文」,而脱敏规则只覆盖名字匹配 apiKey/token/password/secret/credential 的字段和几个顶层段,plugins 的完整配置按 :107-113 是保留原样的。这个项目本身就会采集并存储团队的对话、文档与代码,导出包是这些数据的一份拷贝,发给谁、怎么发,是你要自己判断的事。
最后重复一遍前提:以上全部是 feat/server_team 分支 97f9465 快照的文件内容。主模块还是 2.0.0-beta.1,另外三个模块的 package.json 版本还停在 0.1.0,ROADMAP 里列着一批标明「计划中」的能力。文档、脚本名、默认值在这个阶段变动都很正常,请以你手上仓库的最新内容为准。
延伸阅读
- 从头读起:TencentDB Agent Memory 是什么:团队级 Agent 记忆中枢怎么读
- 本专题共 40 篇,完整分组目录见专题页
- TencentDB Agent Memory 非回环绑定:文档要求配 key,代码只 warn
- TencentDB Agent Memory 插件侧:3 个 tool、2 个 hook 与注册入口
本文依据 TencentDB Agent Memory 官方仓库(github.com/TencentCloud/TencentDB-Agent-Memory)
feat/server_team 分支上的 README、INSTALL、CHANGELOG、ROADMAP 与四个模块的源码整理,
核对日 2026-08-16,对应仓库快照 97f9465。该仓库的默认分支即为 feat/server_team。
本文内容为仓库源码与文档口径,我们没有部署、也没有运行过该项目的任何一个模块,
因此不涉及运行效果、检索质量与性能的任何描述。
该项目主模块处于 beta 阶段、其余模块版本号仍为 0.1.0,参数与接口随版本变动,请以仓库最新内容为准。
该项目会采集并存储团队的对话、文档与代码,属于敏感数据,是否使用请结合自身合规要求评估。
安全与合规相关做法请结合自身环境评估,本文不构成安全方案建议。