当前记忆系统深度审核报告
生成时间:2026-05-30 21:12:46
审核范围:Master/default Hermes gateway、built-in memory/user profile、memory_tencentdb、TencentDB Agent Memory sidecar、CCTB Codex/Antigravity mirror、skills、session_search。
执行边界:本次为只读审核;未修改配置,未重启服务,未删除文件,未调用 Report Center 发布。/root/.hermes/HERMES_CHANGELOG_INBOX.md 当前非空,因本任务边界要求只读,已读取但未折叠/删除。
1. 结论摘要
- 当前 Master/default **配置启用且当前进程已加载 TencentDB Agent Memory**:`memory.provider=memory_tencentdb`,当前 `hermes-gateway.service` 于 `2026-05-30 15:34:47 CST` 启动,日志显示 `Memory provider 'memory_tencentdb' activated`,8424 sidecar health 为 `status=ok`。
- TencentDB memory **没有被弃用**;它现在是 Master/default 的外部 memory provider,但内置 `MEMORY.md` / `USER.md` 仍启用并继续注入系统提示词,两者是叠加关系,不是替代关系。
- 当前实际链路是:built-in memory/user profile 提供紧凑常驻画像;`memory_tencentdb` 提供 L0/L1/L2/L3 召回与写入;skills 提供工作流/工具知识;`session_search` 仍查 Hermes `state.db` 历史会话,不查 TencentDB。
- Codex/Antigravity 与 Master memory **有关联**:CCTB 在 Telegram 回合完成后 best-effort POST 到 `http://127.0.0.1:8424/capture`,因此是 **共享写入**;没有证据显示 Codex/Antigravity 在模型执行前从 TencentDB 读取并注入,因此 **不是共享读取**。
- 今天的 Hermes/TencentDB 相关代码时间戳早于当前 gateway 启动时间,且当前 gateway cwd、import path、日志均指向 `/root/.hermes/hermes-agent`,所以 **当前 gateway 已加载今天本机相关代码**;配置层也已加载。CCTB 另有灰度点:`cctb-codex.service` 未在今天 14:20 的 dist 构建后重启。
- 如重启 `hermes-gateway.service`,在现有配置和依赖不变时会继续启用 TencentDB memory;依赖包括 profile/default、`HERMES_HOME=/root/.hermes`、插件 symlink、8424 端口可用、`/opt/TencentDB-Agent-Memory` Node 依赖、数据目录可写、CLIProxy LLM 可用。
- 最大风险不是“未启用”,而是误判:`embeddingService=false` 容易被误读为失败;L1/L2/L3 是异步 pipeline,会延迟或因 LLM timeout 跳过;CCTB 只是只写 mirror,不会让 Codex/Antigravity 自动“想起”Master 记忆。
- 推荐下一步:P0 只做监控与 smoke,不改架构;P1 固化审计脚本;P2 若要 Codex/Antigravity 读取 TencentDB,设计独立灰度读注入,不要直接全量启用。
2. 当前架构图
Master/default hermes-gateway.service
ExecStart: python -m hermes_cli.main --profile default gateway run --replace
HERMES_HOME=/root/.hermes
cwd=/root/.hermes/hermes-agent
Prompt assembly
├─ Built-in MEMORY.md /root/.hermes/memories/MEMORY.md
├─ Built-in USER.md /root/.hermes/memories/USER.md
├─ Skills index /root/.hermes/skills + bundled skills
├─ session_search tool /root/.hermes/state.db FTS/session store
└─ External memory provider memory_tencentdb
memory_tencentdb plugin
/root/.hermes/hermes-agent/plugins/memory/memory_tencentdb
-> /opt/TencentDB-Agent-Memory/hermes-plugin/memory/memory_tencentdb
Python provider / supervisor
└─ HTTP 127.0.0.1:8424
TencentDB Agent Memory Gateway sidecar
cwd=/opt/TencentDB-Agent-Memory
data=/root/.memory-tencentdb/master/memory-tdai
├─ L0 conversations/*.jsonl
├─ L1 records/*.jsonl
├─ L2 scene_blocks/*.md
├─ L3 persona.md
└─ vectors.db (+ WAL/SHM)
CCTB Codex / Antigravity Telegram bridges
/root/cc-telegram-bridge/dist/src/index.js --instance codex|antigravity
└─ after Telegram response delivery:
best-effort POST /capture to 127.0.0.1:8424
session_key=cctb:<instance>:chat:<chat_id>
[source=cctb/<instance> ...]
Important boundary:
CCTB mirror = append-only shared write.
It is not TencentDB read injection for Codex/Antigravity.
3. 分层说明
Built-in MEMORY / USER
- 文件:`/root/.hermes/memories/MEMORY.md` 与 `/root/.hermes/memories/USER.md`。
- 配置:`memory.memory_enabled=true`、`memory.user_profile_enabled=true`。
- 加载方式:`MemoryStore.load_from_disk()` 读取两个文件,生成 frozen system-prompt snapshot;`agent/system_prompt.py` 将 MEMORY 和 USER 作为 volatile tier 注入。
- 当前规模:`MEMORY.md` 约 2062 chars / 上限 2200,接近 94%;`USER.md` 约 1056 chars / 上限 1375,约 77%。
- 适合保留:用户长期偏好、沟通风格、必须始终遵守的极短运维约束。
- 适合迁移到 TencentDB scene block:系统治理叙事、近期项目链路、跨服务历史背景、长篇恢复上下文。
- 适合变成 skill:可复用 runbook、审计流程、重启前后验证清单、固定命令组合。
TencentDB L0 conversations
- 存储:`/root/.memory-tencentdb/master/memory-tdai/conversations/YYYY-MM-DD.jsonl`。
- 作用:记录原始 user/assistant 回合,是 capture 的第一层事实来源。
- 当前证据:8 个 JSONL 文件、207 行;`2026-05-30.jsonl` 存在且最新 mtime 为 `2026-05-30 20:59:24 CST`。
TencentDB L1 structured memories
- 存储:`records/YYYY-MM-DD.jsonl`。
- 作用:从 L0 异步抽取 episodic/instruction/persona 等结构化记忆。
- 当前证据:8 个 JSONL 文件、49 行;`2026-05-30.jsonl` 存在,最新 mtime 为 `2026-05-30 15:25:02 CST`。
- 注意:当前 gateway 启动后的日志显示 pipeline 运行过,但最近一轮 L1 extracted=0;这不等于 L1 关闭,只表示该轮没有产生新结构化记忆。
TencentDB L2 scene blocks
- 存储:`scene_blocks/*.md`。
- 作用:把 L1/L0 历史收敛为场景块,用于召回导航和长期叙事。
- 当前文件 3 个:`Telegram调用与模型恢复.md`、`健康数据与热量核验.md`、`内置记忆迁移承接.md`。
- 最大风险:scene block 会被 LLM 总结放大或污染,需要定期审计热度、更新时间和主题边界。
TencentDB L3 persona
- 文件:`/root/.memory-tencentdb/master/memory-tdai/persona.md`,5570 bytes,mtime `2026-05-30 15:26:29 CST`。
- 作用:从 scenes/persona pipeline 生成用户叙事画像。
- 召回证据:gateway stdout 中多次出现 `Persona loaded: 1843 chars`,说明当前 recall 返回的是经过裁剪/注入预算控制的 persona 片段,而不是整份 persona.md。
skills
- 位置:本地 skills 与 bundled skills,通过 `agent.prompt_builder.build_skills_system_prompt()` 建索引并缓存。
- 用途:保存工作流、工具操作约定、API/命令知识。它是“如何做”的知识,不应承载大量事实历史。
- 与 memory 的关系:skills 不参与 TencentDB L0/L1/L2/L3 pipeline;它们作为系统提示词/工具知识被模型按需加载。
session_search
- 位置:Hermes `state.db`,`tools/session_search_tool.py` 使用 `SessionDB` 的 FTS/session store。
- 用途:查过去会话 transcript,用于“找旧对话内容”。
- 与 TencentDB 的关系:独立系统。`session_search` 不等于 TencentDB recall;TencentDB recall 走 `/recall`,session_search 走 Hermes SQLite 会话库。
Codex/Antigravity CCTB mirror
- 位置:`/root/cc-telegram-bridge/src/runtime/tdai-capture.ts` 与 dist JS。
- 行为:`mirrorTurnToTdaiBestEffort()` 在 Telegram 回复交付后被调用,POST `/capture`。
- 语义:只写入 Master TencentDB memory,不在 Codex/Antigravity 模型执行前读取 memory。
4. 配置与进程证据
Hermes config
核查命令:读取 /root/.hermes/config.yaml 的 memory 段。
memory_enabled: true
user_profile_enabled: true
provider: memory_tencentdb
memory_char_limit: 2200
user_char_limit: 1375
flush_min_turns: 6
nudge_interval: 10
判断:配置显示 Master/default 同时启用内置 memory/user profile 和外部 provider memory_tencentdb。
hermes-gateway.service
核查命令:systemctl show hermes-gateway.service -p ActiveState -p SubState -p ExecMainPID -p ExecMainStartTimestamp -p FragmentPath。
ActiveState=active
SubState=running
ExecMainPID=731895
ExecMainStartTimestamp=Sat 2026-05-30 15:34:47 CST
FragmentPath=/etc/systemd/system/hermes-gateway.service
/proc/731895/cmdline:/root/.hermes/hermes-agent/venv/bin/python -m hermes_cli.main --profile default gateway run --replace。
/proc/731895/cwd:/root/.hermes/hermes-agent。
筛选环境变量:HERMES_HOME=/root/.hermes;仅见 memory pressure 相关变量,无 TDAI secret 输出。
unit 关键行:
ExecStart=/root/.hermes/hermes-agent/venv/bin/python -m hermes_cli.main --profile default gateway run --replace
WorkingDirectory=/root/.hermes/hermes-agent
Environment="HERMES_HOME=/root/.hermes"
Restart=on-failure
TimeoutStopSec=240
判断:当前 Master/default 是 pinned profile,不依赖 active_profile;运行源码路径是 /root/.hermes/hermes-agent。
插件链路
核查路径:/root/.hermes/hermes-agent/plugins/memory/memory_tencentdb。
exists=true
is_symlink=true
readlink=/opt/TencentDB-Agent-Memory/hermes-plugin/memory/memory_tencentdb
Python import 证据:
agent.memory_manager -> /root/.hermes/hermes-agent/agent/memory_manager.py
run_agent -> /root/.hermes/hermes-agent/run_agent.py
agent.prompt_builder -> /root/.hermes/hermes-agent/agent/prompt_builder.py
plugins.memory.memory_tencentdb -> /root/.hermes/hermes-agent/plugins/memory/memory_tencentdb/__init__.py
插件 plugin.yaml:name: memory_tencentdb,aliases 包含 tdai、memory-tencentdb。
TencentDB sidecar
核查命令:ss -ltnp | rg ':8424'。
LISTEN 127.0.0.1:8424 users: node pid=731981
核查命令:curl -fsS --max-time 5 http://127.0.0.1:8424/health。
{"status":"ok","version":"0.1.0","stores":{"vectorStore":true,"embeddingService":false}}
/proc/731981/cmdline:/usr/bin/node ... src/gateway/server.ts。
/proc/731981/cwd:/opt/TencentDB-Agent-Memory。
筛选环境变量显示:
MEMORY_TENCENTDB_GATEWAY_CMD=sh -c 'cd /opt/TencentDB-Agent-Memory && exec npx tsx src/gateway/server.ts'
MEMORY_TENCENTDB_GATEWAY_HOST=127.0.0.1
MEMORY_TENCENTDB_GATEWAY_PORT=8424
MEMORY_TENCENTDB_LOG_DIR=/root/.memory-tencentdb/master/logs
MEMORY_TENCENTDB_ROOT=/root/.memory-tencentdb/master
TDAI_DATA_DIR=/root/.memory-tencentdb/master/memory-tdai
TDAI_GATEWAY_CONFIG=/root/.memory-tencentdb/master/memory-tdai/tdai-gateway.json
TDAI_GATEWAY_HOST=127.0.0.1
TDAI_GATEWAY_PORT=8424
TDAI_LLM_BASE_URL=http://127.0.0.1:8317/v1
TDAI_LLM_MODEL=gpt-5.4-mini
判断:sidecar 当前由 Hermes 环境拉起并运行;embeddingService=false 是配置为 keyword/SQLite 灰度模式,不等于 sidecar 失败。
注册/激活日志
/root/.hermes/logs/agent.log 在当前 gateway 启动后出现:
2026-05-30 15:34:54 Memory provider 'memory_tencentdb' registered (2 tools)
2026-05-30 15:34:54 Memory provider 'memory_tencentdb' activated
2026-05-30 15:34:55 Starting memory-tencentdb Gateway ...
2026-05-30 15:34:58 memory-tencentdb Gateway is ready
2026-05-30 20:58:21 memory-tencentdb Gateway already running (127.0.0.1:8424)
2026-05-30 20:58:21 Memory provider 'memory_tencentdb' activated
判断:这是“当前进程已加载/激活”的直接证据,不只是配置文件显示启用。
5. 数据与召回证据
数据目录规模
根目录:/root/.memory-tencentdb/master/memory-tdai。
conversations: 8 files, 207 lines
today conversations/2026-05-30.jsonl: exists, 54 lines, mtime 2026-05-30 20:59:24
records: 8 files, 49 lines
today records/2026-05-30.jsonl: exists, 9 lines, mtime 2026-05-30 15:25:02
scene_blocks: 3 files
persona.md: 5570 bytes, mtime 2026-05-30 15:26:29
vectors.db: 868352 bytes, mtime 2026-05-30 14:06:49
vectors.db-wal: present, mtime 2026-05-30 20:59:24
.metadata/recall_checkpoint.json: present, mtime 2026-05-30 21:05:59
判断:L0 conversations 正在持续写入;L1/L2/L3 今天均存在产物,但最近 scene/persona 更新发生在当前 gateway 启动前,当前启动后的 pipeline 有运行但该轮 L1 extracted=0。
sessionKey 分布
Conversations top session keys:
20260524_055036_51352978: 42
cctb:antigravity:chat:5760817136: 26
20260521_102048_3d864099: 18
20260526_203047_64460810: 16
20260530_130433_8dad8166: 14
20260530_152040_89e9feb9: 14
20260523_100837_ce47aa22: 12
Records top session keys:
20260524_055036_51352978: 10
20260527_194523_d5206e2b: 6
20260523_100837_ce47aa22: 5
20260526_203047_64460810: 5
20260521_102048_3d864099: 4
20260530_084559_7977384a: 4
cctb:antigravity:chat:5760817136: 3
CCTB marker 证据:
cctb:antigravity:chat:5760817136 conversations: 26
cctb:antigravity:smoke conversations: 2
cctb:codex:chat:5760817136 conversations: 2
[source=cctb/antigravity ...]: 28
[source=cctb/codex ...]: 2
records with cctb:antigravity:chat: 3
判断:CCTB 确实写入 Master TencentDB;Codex 写入量目前很少,Antigravity 写入更充分。
scene blocks
Telegram调用与模型恢复.md
created: 2026-05-21T03:19:07.187Z
updated: 2026-05-24T02:39:21.566Z
heat: 18
summary: Telegram 调用、模型状态核验、CLIProxyAPI/Hermes Usage 运维恢复链路。
mtime: 2026-05-24 10:39:40 CST
主要内容:用户通过 Telegram 触发外部 AI 服务调用,用 /model 核验状态;偏好把复杂系统压缩成可执行、可验证的恢复链路;涉及入口迁移、接口验证、面板确认、调度校验、远程 VPS 巡检提示词。
健康数据与热量核验.md
created: 2026-05-25T16:41:24.236Z
updated: 2026-05-25T16:41:24.236Z
heat: 1
summary: 用户核验健康报告中 226 kcal 是否应计入当日消耗。
mtime: 2026-05-26 00:41:37 CST
主要内容:用户对健康数据统计口径敏感,要求热量归因可核验、可解释。
内置记忆迁移承接.md
created: 2026-05-24T00:00:00+08:00
updated: 2026-05-30T07:26:12.901Z
heat: 32
summary: 用户把运维、访问控制与代理订阅收敛为可验证闭环,并开始用 Codex 介入本机记忆系统。
mtime: 2026-05-30 15:26:28 CST
主要内容:承接从内置 USER/MEMORY 瘦身迁移出的系统治理画像;主题集中在运维闭环、访问控制、代理订阅、备份/清理边界、记忆底座治理。
persona / recall 注入证据
persona.md 存在且今天更新;gateway recall 日志显示:
[recall] strategy=keyword, embeddingAvailable=false, vectorStore=available, embeddingService=UNAVAILABLE
[keyword-fts] FTS5 found 5 results
Persona loaded: 1843 chars
Scene navigation generated: 3 scenes
Recall completed in 3ms: context=3267 chars
代码路径证据:agent/conversation_loop.py 在每轮 API call 前调用 agent._memory_manager.prefetch_all(),再用 build_memory_context_block() 包装成 <memory-context> 注入当前 user message;原始持久会话不被这个临时注入污染。
判断:这里可以区分四种状态:
配置显示启用:是,config.yaml provider=memory_tencentdb。
当前进程已加载:是,agent.log 当前启动后 registered/activated。
数据实际写入:是,L0 今天 20:59 写入;L1/L2/L3 今天有产物但异步且当前轮可能 extracted=0。
召回实际注入:有证据支持,/recall 返回 context,代码路径会在 API call 前注入;未抓取完整模型请求体,避免泄露上下文。
6. Codex/Antigravity 关联性
- 是否关联:**是**。
- 关联方式:CCTB Telegram 回合完成、回复投递后,调用 `mirrorTurnToTdaiBestEffort()`,best-effort POST `http://127.0.0.1:8424/capture`。
- 是否共享写入:**是**。证据包括 `CCTB_TDAI_MIRROR_ENABLED=1`、payload 字段、TencentDB conversations 中的 `cctb:<instance>:chat:<chat_id>` 与 `[source=cctb/<instance> ...]`。
- 是否共享读取:**否**。CCTB 代码中只发现 `/capture` mirror,没有 `/recall`、`/search` 或模型执行前 memory 注入路径。
- 是否会阻塞 Telegram 回复:**不应阻塞**。调用发生在 delivery 和 workflow completed 后;`void postJson(...).catch(...)` 不 await,失败只写 stderr。
- 是否会直接编辑 scene/persona:**不应直接编辑**。CCTB 只写 `/capture` L0;L1/L2/L3 由 TencentDB pipeline 异步生成。
服务证据
cctb-codex.service:
ActiveState=active
ExecMainStartTimestamp=Fri 2026-05-29 14:06:46 CST
ExecStart=/usr/bin/node /root/cc-telegram-bridge/dist/src/index.js --instance codex
WorkingDirectory=/root/cc-telegram-bridge
CODEX_TELEGRAM_INSTANCE=codex
CCTB_TDAI_MIRROR_ENABLED=1
CCTB_TDAI_GATEWAY_URL=http://127.0.0.1:8424
CCTB_TDAI_TIMEOUT_MS=5000
CCTB_TDAI_MAX_CHARS=12000
cctb-antigravity.service:
ActiveState=active
ExecMainStartTimestamp=Sat 2026-05-30 14:21:03 CST
ExecStart=/usr/bin/node /root/cc-telegram-bridge/dist/src/index.js --instance antigravity
WorkingDirectory=/root/cc-telegram-bridge
CODEX_TELEGRAM_INSTANCE=antigravity
CODEX_EXECUTABLE=/usr/local/bin/agy-codex-wrapper
CCTB_TDAI_MIRROR_ENABLED=1
CCTB_TDAI_GATEWAY_URL=http://127.0.0.1:8424
CCTB_TDAI_TIMEOUT_MS=5000
CCTB_TDAI_MAX_CHARS=12000
代码证据
src/runtime/tdai-capture.ts 和 dist JS 均包含:
user_content
assistant_content
session_key
session_id
user_id
/source prefix [source=cctb/<instance> chat=... update=...]
redaction for token/secret/password/api_key-like strings
truncate max chars controlled by CCTB_TDAI_MAX_CHARS
POST /capture with timeout controlled by CCTB_TDAI_TIMEOUT_MS
best-effort catch logs failure
src/telegram/message-turn.ts 与 dist JS 均在成功交付后调用 mirror;不是模型执行前调用。
灰度点
/root/cc-telegram-bridge/dist/src/runtime/tdai-capture.js 和 dist/src/telegram/message-turn.js mtime 为 2026-05-30 14:20:58 CST。
- `cctb-antigravity.service` 当前 PID 是 `2026-05-30 14:21:03 CST` 后启动,已加载今天 dist。
- `cctb-codex.service` 当前 PID 是 `2026-05-29 14:06:46 CST` 启动,早于今天 dist mtime,因此今天这次 dist 产物没有被当前 Codex bridge 进程加载。它可能已加载 5 月 29 日已有的 mirror 代码,但不能把“今天 dist 已加载”误判为真。
7. 今天改动是否已应用
数据层
- 已生效:`conversations/2026-05-30.jsonl` 存在并在当前 gateway 启动后更新到 `20:59:24`;这说明 L0 capture 在当前运行期继续写入。
- 部分异步:`records/2026-05-30.jsonl` 最新 mtime `15:25:02`,`scene_blocks/内置记忆迁移承接.md` 和 `persona.md` 最新 mtime `15:26`,早于 gateway `15:34:47` 启动;当前启动后 pipeline 有运行但最近一轮 L1 extracted=0。
配置层
- 已生效:`/root/.hermes/config.yaml` mtime `2026-05-28 22:55:30`,早于当前 gateway 启动;当前进程日志显示按该配置加载 `memory_tencentdb`。
- `.env` 中 TencentDB 相关变量已进入 sidecar 环境;LLM API key 未在报告中输出。
代码层
Hermes/TencentDB 关键代码 mtime:
/root/.hermes/hermes-agent/plugins/memory/memory_tencentdb/__init__.py 2026-05-30 08:51:59
/root/.hermes/hermes-agent/plugins/memory/memory_tencentdb/client.py 2026-05-30 08:51:59
/root/.hermes/hermes-agent/plugins/memory/memory_tencentdb/supervisor.py 2026-05-30 08:51:59
/opt/TencentDB-Agent-Memory/src/gateway/server.ts 2026-05-30 08:51:59
这些时间均早于 hermes-gateway.service 当前启动时间 15:34:47。当前 gateway cwd、Python import path 和日志都指向 /root/.hermes/hermes-agent,sidecar cwd 指向 /opt/TencentDB-Agent-Memory。
判断:**当前 gateway 已加载今天 Hermes/TencentDB 相关代码**。
gateway 当前进程
- PID 731895:active/running。
- 当前进程启动后发生 provider registered、activated、Gateway ready/already running。
- sidecar PID 731981:health ok,uptime 与 15:34 启动窗口一致。
重启后行为
在不改配置的情况下,重启 hermes-gateway.service 会继续尝试启用 memory_tencentdb。依赖条件:
/root/.hermes/config.yaml 保持 provider=memory_tencentdb
/root/.hermes/.env 提供 TDAI/MEMORY_TENCENTDB_* 变量
插件 symlink 存在且目标 /opt/TencentDB-Agent-Memory 可读
Node/npx/tsx 依赖可运行
127.0.0.1:8424 可绑定,或已运行的是正确 sidecar
/root/.memory-tencentdb/master/memory-tdai 可读写
CLIProxy 127.0.0.1:8317/v1 和对应 LLM auth 可用于 L1/L2/L3 extraction
操作提醒:任何 Hermes gateway/service 重启前必须先写 /root/.hermes/restart-context/;完成系统、服务、路由、profile、VPS inventory 或 runbook 修改后必须追加 /root/.hermes/HERMES_CHANGELOG_INBOX.md。
8. 风险清单
- P1 sidecar 依赖:Master memory 召回依赖 8424 sidecar;如果端口被错误进程占用,supervisor 可能只看到 “already running”。日志中已有多次 `EADDRINUSE` 历史,需要在 smoke 中核对 cwd/cmdline/data root。
- P1 `embeddingService=false` 误判:当前配置是 SQLite + keyword recall,health 显示 `vectorStore=true`、`embeddingService=false`;这不是失败,但会影响语义召回预期。
- P1 L1/L2/L3 异步延迟:L0 写入不等于 L1 立即抽取,也不等于 scene/persona 立即更新。今天当前进程后 L0 有写入,但 records/scene/persona 最近 mtime 早于 gateway 启动,日志显示最近 L1 extracted=0。
- P1 CCTB 只写不读的认知误差:Codex/Antigravity 写进 TencentDB 不代表它们会从 TencentDB 读取。当前没有读注入证据。
- P1 代码修改未重启不生效:Hermes gateway 已加载今天相关代码;但 `cctb-codex.service` 未在今天 14:20 dist 构建后重启,不能说今天 CCTB dist 已被 Codex bridge 当前进程加载。
- P1 scene block 膨胀/污染:`内置记忆迁移承接.md` heat=32,承担迁移承接;如果持续吸收运维事实,可能变成混合大块,需要拆分或定期整理。
- P1 内置 memory 接近上限:`MEMORY.md` 约 94% 上限,容易触发写入失败或挤压高价值常驻事实。`USER.md` 约 77%,仍有空间但应继续瘦身。
- P2 日志 timeout/抽取失败:gateway stderr 有 L1 dedup/extractor timeout 历史;provider 设计为 best-effort,不应阻断主回复,但会造成 L1/L2/L3 延迟或缺失。
- P2 CCTB mirror 失败可见性不足:CCTB journal 未见 TDAI mirror 错误,但失败只打 stderr,不阻塞主链路;需要固定日志指标,否则容易漏看。
- P2 changelog inbox 未摄入:本任务为只读,未按 startup rule 删除/折叠 `/root/.hermes/HERMES_CHANGELOG_INBOX.md`;后续若允许写入,应专门处理,避免长期堆积。
9. 建议路线图
P0:不改架构,只验证与监控
- 固定每日/每次重启前 smoke:`systemctl show`、`/proc/<PID>/cmdline/cwd`、8424 `/health`、data root mtime、`agent.log` provider activated、gateway stdout recall/capture。
- 对 `embeddingService=false` 明确标注为当前 keyword 灰度模式,避免运维误判。
- 监控 `gateway.stderr.log` 中 timeout、extractor、dedup、EADDRINUSE;把“影响主链路”和“只影响异步记忆质量”分开告警。
- 如计划重启 Hermes gateway:先写 `/root/.hermes/restart-context/`,再重启;完成后追加 `/root/.hermes/HERMES_CHANGELOG_INBOX.md`。
P1:建立固定审计脚本/报告
- 将本次核查命令固化成只读脚本,输出 Markdown/HTML,默认打码 secrets。
- 增加四态表:配置启用、进程加载、数据写入、召回注入。
- 增加 CCTB 专项判断:service start time 是否晚于 dist mtime;mirror markers 是否新增;journal 是否有 mirror failure。
- 建议加入 scene/persona diff 摘要,避免 scene block 悄悄变成杂糅事实仓库。
P2:设计 Codex/Antigravity 读注入灰度
- 如要让 Codex/Antigravity 读取 TencentDB,先做显式灰度:只对少量 chat/session、少量 token budget、只读 `/recall`、失败不阻塞、注入前写来源标签。
- 不要直接把 Master full memory 全量注入 Codex/Antigravity;先做 query shaping、dedup、敏感路径过滤、prompt-injection guard。
- 读注入设计必须区分“Master 用户画像”“系统运维事实”“CCTB 自己写入的会话历史”,避免把 append-only mirror 误当成权威配置。
- 任何改变 Codex/Antigravity 读取行为的实现,都应有备份、diff、验证命令、回滚路径;完成后追加 `/root/.hermes/HERMES_CHANGELOG_INBOX.md`。
10. 附录
核查命令
sed -n '1,240p' /root/.codex/LONG_TERM_MEMORY.md
[ -s /root/.hermes/HERMES_CHANGELOG_INBOX.md ] && sed -n '1,140p' /root/.hermes/HERMES_CHANGELOG_INBOX.md
python3 - <<'PY' # parse /root/.hermes/config.yaml memory section
systemctl show hermes-gateway.service -p ActiveState -p SubState -p ExecMainPID -p ExecMainStartTimestamp -p FragmentPath
python3 - <<'PY' # read /proc/<gateway_pid>/cmdline,cwd,HERMES/TDAI/MEMORY env with redaction
ss -ltnp | rg ':8424'
curl -fsS --max-time 5 http://127.0.0.1:8424/health
python3 - <<'PY' # inspect plugin symlink and import paths
git -C /root/.hermes/hermes-agent status --short
git -C /root/.hermes/hermes-agent log --since='today 00:00' --oneline --decorate --all --max-count=50
python3 - <<'PY' # data root counts, JSONL line counts, top sessionKey
python3 - <<'PY' # scene block META/summary extraction
python3 - <<'PY' # built-in MEMORY/USER stats
python3 - <<'PY' # log keyword counts and recent sanitized matches
systemctl show cctb-codex.service cctb-antigravity.service ...
systemctl cat cctb-codex.service cctb-antigravity.service
rg -n 'mirrorTurnToTdaiBestEffort|CCTB_TDAI|/capture|user_content|assistant_content|session_key|session_id|user_id' /root/cc-telegram-bridge/src /root/cc-telegram-bridge/dist/src
journalctl -u cctb-codex.service --since '2026-05-29 00:00:00' --no-pager | rg -i 'tdai|tencent|mirror|capture|timeout|error|failed'
journalctl -u cctb-antigravity.service --since '2026-05-29 00:00:00' --no-pager | rg -i 'tdai|tencent|mirror|capture|timeout|error|failed'
关键文件路径
/root/.hermes/config.yaml
/root/.hermes/.env
/root/.hermes/memories/MEMORY.md
/root/.hermes/memories/USER.md
/root/.hermes/hermes-agent
/root/.hermes/hermes-agent/plugins/memory/memory_tencentdb
/opt/TencentDB-Agent-Memory
/root/.memory-tencentdb/master/memory-tdai
/root/.memory-tencentdb/master/memory-tdai/conversations
/root/.memory-tencentdb/master/memory-tdai/records
/root/.memory-tencentdb/master/memory-tdai/scene_blocks
/root/.memory-tencentdb/master/memory-tdai/persona.md
/root/.memory-tencentdb/master/logs/gateway.stdout.log
/root/.memory-tencentdb/master/logs/gateway.stderr.log
/root/cc-telegram-bridge/src/runtime/tdai-capture.ts
/root/cc-telegram-bridge/dist/src/runtime/tdai-capture.js
/root/cc-telegram-bridge/src/telegram/message-turn.ts
/root/cc-telegram-bridge/dist/src/telegram/message-turn.js
关键服务
hermes-gateway.service
cctb-codex.service
cctb-antigravity.service
cliproxyapi.service # L1/L2/L3 extraction LLM 依赖
不含 secrets 的关键环境变量
HERMES_HOME=/root/.hermes
MEMORY_TENCENTDB_GATEWAY_HOST=127.0.0.1
MEMORY_TENCENTDB_GATEWAY_PORT=8424
MEMORY_TENCENTDB_GATEWAY_CMD=sh -c 'cd /opt/TencentDB-Agent-Memory && exec npx tsx src/gateway/server.ts'
MEMORY_TENCENTDB_LOG_DIR=/root/.memory-tencentdb/master/logs
MEMORY_TENCENTDB_ROOT=/root/.memory-tencentdb/master
TDAI_DATA_DIR=/root/.memory-tencentdb/master/memory-tdai
TDAI_GATEWAY_CONFIG=/root/.memory-tencentdb/master/memory-tdai/tdai-gateway.json
TDAI_GATEWAY_HOST=127.0.0.1
TDAI_GATEWAY_PORT=8424
TDAI_LLM_BASE_URL=http://127.0.0.1:8317/v1
TDAI_LLM_MODEL=gpt-5.4-mini
CODEX_TELEGRAM_INSTANCE=codex|antigravity
CODEX_EXECUTABLE=/usr/local/bin/agy-codex-wrapper # antigravity only
CCTB_TDAI_MIRROR_ENABLED=1
CCTB_TDAI_GATEWAY_URL=http://127.0.0.1:8424
CCTB_TDAI_TIMEOUT_MS=5000
CCTB_TDAI_MAX_CHARS=12000
需要人工确认的问题
- 是否允许在另一个维护窗口重启 `cctb-codex.service`,以加载今天 14:20 的 dist 产物?重启前不需要写 Hermes gateway restart-context,但如果纳入系统服务变更记录,完成后应追加 `/root/.hermes/HERMES_CHANGELOG_INBOX.md`。
- 是否要把 `/root/.hermes/HERMES_CHANGELOG_INBOX.md` 的内容正式折叠进长期记忆和手册?本次因只读边界未处理。
- 是否希望 Codex/Antigravity 进入 TencentDB 读注入灰度?如果是,需要单独设计,不应把共享写入直接等同为共享读取。
- 是否要为 `MEMORY.md` 做下一轮瘦身?当前已接近上限,最适合把系统治理叙事迁移到 scene block,把稳定 runbook 迁移成 skill。
---
一句话结论:Master/default 当前实际运行的是“内置 MEMORY/USER + TencentDB memory_tencentdb 外部 provider”的叠加记忆系统;Codex/Antigravity 当前只通过 CCTB 共享写入 Master TencentDB,不共享读取。