OpenClaw + claude-mem 插件集成踩坑实录
OpenClaw + claude-mem 插件集成踩坑实录
环境: OpenClaw 2026.4.15 / claude-mem v1.0.0 / Ubuntu Linux / 8个 Discord Bot Agent
一、背景
claude-mem 是一个 AI 记忆插件,能自动记录 Agent 对话中的操作观察(observations)和会话摘要(session summaries),并在新对话时注入上下文,让 Agent 具备"记忆"能力。我们要把它集成到 OpenClaw 网关上,让 8 个 Discord Bot Agent 都能拥有持久记忆。
二、踩坑清单
坑 1:插件格式识别错误
现象: OpenClaw 把 claude-mem 识别为 bundle 格式而非 openclaw 格式,导致插件无法正常加载。
原因: OpenClaw 根据目录结构自动判断格式,不看 format 字段。直接从源码安装的目录结构不符合 OpenClaw 插件规范。
解决:
- 删除源码安装的 /root/.openclaw/extensions/claude-mem/
- 通过 npx claude-mem install 安装到 ~/.claude/plugins/marketplaces/thedotmack/
- 手动重建 /root/.openclaw/extensions/claude-mem/ 目录,从 thedotmack 复制 openclaw.plugin.json + dist/index.js
- 添加 "format": "openclaw" 字段
教训: OpenClaw 判断插件格式看目录结构,不看 format 字段。软链接结构不对会导致启动失败,需要物理复制文件。
坑 2:Worker 端口不匹配
现象: 插件无法连接到 worker。
原因: openclaw.json 中配置的 workerPort 是 37700,但 worker 实际运行在 37777。
解决: 将 openclaw.json 中 workerPort 改为 37777,与 worker 实际端口一致。
教训: 配置文件里的端口号必须和 worker 实际监听端口一致,不能凭记忆写。
坑 3:workspaceDir 不可用,Observation 全部被跳过
现象: 所有 observation persist 都被跳过,数据库记录为 0。日志显示 [claude-mem] Skipping observation persist because workspaceDir is unavailable。
原因: OpenClaw 在调用 tool_result_persist hook 时,只传了 agentId 和 sessionKey,没有传 workspaceDir。这是 OpenClaw 端的已知问题(GitHub Issue #74956,至今未修复)。claude-mem 插件在 workspaceDir 为空时直接 return,跳过整条记录。
解决: 修改插件代码 /root/.openclaw/extensions/claude-mem/dist/index.js: // 修改前
let y=n.workspaceDir;
if(!y){e.logger.warn("Skipping...");return}
// 修改后
let y=n.workspaceDir||`/root/.openclaw/workspace-${n.agentId||"default"}`;
教训: npx claude-mem install 或 npm run build 会覆盖这个修改,改完需要重新补。这是临时方案,等 OpenClaw 官方修复 Issue #74956 后可移除。
坑 4:AI Provider 不可用
现象 1: 使用 xiaomi/mimo-v2-flash:free 模型时报 404。
原因: 该模型在 OpenRouter 上不存在或已下线。
解决: 换成 deepseek/deepseek-v4-flash:free。
现象 2: 所有免费模型都被 429 限流(free-models-per-day 每日配额用完)。
原因: OpenRouter 免费模型有每日请求限额,8 个 bot 并发请求很快就耗尽。限流是账号级别的,换模型也没用。
解决: 改用 DeepSeek 官方 API(OpenAI 兼容格式),成本极低(约 $0.01/次)。
操作步骤:
-
修改 worker 代码,把硬编码的 OpenRouter URL 替换为 DeepSeek API URL:
-
配置 DeepSeek API Key 和模型:
- CLAUDE_MEM_OPENROUTER_API_KEY = DeepSeek API Key
- CLAUDE_MEM_OPENROUTER_MODEL = deepseek-chat
教训: 免费模型不适合多 bot 并发场景。DeepSeek 官方 API 便宜且稳定,推荐使用。修改 worker 代码后重启生效。
坑 5:Observation Feed 推送失败
现象: Observation feed 显示 Connection: disconnected,Telegram/Discord 频道收不到推送。
原因(Discord): 插件用 runtime.channel.discord.sendMessageDiscord() 推送,但 OpenClaw 插件运行时没有暴露这个 API,报 Channel "discord" not available in runtime。
原因(Telegram): 插件有两条推送路径:
- Runtime channel — runtime.channel.telegram.sendMessageTelegram()(不可用,同 Discord)
- Direct Telegram API — 直接调
https://api.telegram.org/bot{token}/sendMessage(需要配置 botToken)之前没配 botToken,走了不兼容的路径
1。加上 botToken 后走路径
2,但 Telegram 群组 ID 格式不对(缺少 - 前缀),报 chat not found。
解决: 在 openclaw.json 的 observationFeed 配置中添加:
{
"observationFeed": {
"enabled": true,
"channel": "telegram",
"to": "-1001723551888",
"botToken": "5329428908:AAHvXxVpZeRMDVeQTlCsCkwS2xXtZlyXaL8"
}
}
注意: Telegram 群组 ID 必须带 - 前缀(如 -1001723551888),否则报 chat not found。Discord 推送目前不可用(OpenClaw 插件 API 不支持)。
三、最终配置
openclaw.json(claude-mem 部分)
{
"plugins": {
"entries": {
"claude-mem": {
"config": {
"workerPort": 37777,
"project": "openclaw",
"syncMemoryFile": true,
"observationFeed": {
"enabled": true,
"channel": "telegram",
"to": "-1001723551888",
"botToken": "<your-telegram-bot-token>"
}
}
}
}
}
}
~/.claude-mem/.env
CLAUDE_MEM_PROVIDER=openrouter
CLAUDE_MEM_OPENROUTER_API_KEY=<your-deepseek-api-key>
CLAUDE_MEM_OPENROUTER_MODEL=deepseek-chat
Worker 代码修改
- 文件: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs
- 修改: https://openrouter.ai/api/v1/chat/completions → https://api.deepseek.com/chat/completions 插件代码修改
- 文件: /root/.openclaw/extensions/claude-mem/dist/index.js
- 修改: workspaceDir 为空时用 agentId 推算默认路径,不再跳过记录
四、功能验证结果
全部通过 ✅
- ✅ 观察记录写入数据库(27+ 条 observations)
- ✅ 会话摘要自动生成(11+ 条 session_summaries)
- ✅ 记忆注入 System Prompt(新对话时 Agent 能引用之前的内容)
- ✅ Observation Feed 推送到 Telegram 群组
- ❌ Discord 推送不可用(OpenClaw 插件 API 限制)
五、待解决问题
- workspaceDir 修改会被覆盖 — npx claude-mem install 或 npm run build 会重置插件代码,需重新补修改
- Discord 推送不可用 — 需等 OpenClaw 或 claude-mem 作者适配 runtime.channel API
- OpenClaw GitHub Issue #74956 — message:received event lacks workspaceDir/agentId,至今未修复
- Discord Slash Commands 超限 — 114 > 100 限制,claude-mem 命令可能被砍掉
六、成本估算
使用 DeepSeek 官方 API:
- 每次 observation 生成约 3500 tokens(输入 + 输出)
- 成本约 $0.012-0.017/次
- 每天按 50-100 次估算,月成本约 $18-50
- 比免费模型稳定,无限流困扰