Skip to content

claude-mem 插件问题

知识库无产出,pending_messages 大量堆积

现象:observations 表为 0 条(使用多天没有提取出任何知识点),pending_messages 大量堆积状态全为 pendingsdk_sessions 无任何 completed 记录,worker_port 全为 None

原因:worker 使用的模型通道下线(如 claude-sonnet-4-5 返回 503),SDK 子进程持续崩溃,积压数据被误判为「消息队列垃圾」后一键清空,导致知识原材料永久丢失。

修复步骤:

  1. 确认管道状态(清理前必查)observations 为 0 说明管道坏了,不是「该清理了」的信号;pending 全堆积是异常信号,先查 worker 状态而非删除
  2. 修改模型配置:编辑 ~/.claude-mem/settings.json,将模型改为当前可用的稳定版本
json
{
  "CLAUDE_MEM_MODEL": "claude-haiku-4-5-20251001"
}
  1. 重启 worker:删除旧 PID 文件 rm ~/.claude-mem/worker.pid,下次 hook 触发自动用新配置重启
  2. 安全清理:只删已完成/已失败的消息,绝不删除 pending 状态的消息
python
# Python 安全清理示例
cur.execute("DELETE FROM pending_messages WHERE status IN ('completed', 'failed')")
conn.commit()

表结构速查:

  • pending_messages:知识提取输入队列(原材料),别当垃圾删
  • observations:提取出的知识点(输出),为 0 说明管道坏了
  • sdk_sessions:子进程会话状态,worker_port 全 None 即异常

Windows 上运行 Python 记得加 sys.stdout.reconfigure(encoding='utf-8'),否则中文报 GBK 错误。

Claude Code 命令卡死不返回 — Worker 假死

现象:输入命令后终端不报错但长时间无返回,Claude Code 响应越来越慢。curl http://127.0.0.1:37777/api/health TCP 可连但 HTTP 永不返回,端口在监听但对应 PID 进程已不存在。

原因:升级 claude-mem 后旧 worker 挂死,端口 37777 残留占用但进程已死,新 worker 启动误判「端口被占」反复失败,hook 每次工具调用都尝试连接超时拖慢整个 CLI。

检测方法:

bash
curl -m 8 -sv http://127.0.0.1:37777/api/health
# TCP 能连但 HTTP 不返回 = 假活

修复步骤:

  1. 清理残留进程和端口
powershell
# PowerShell 查看占用端口的 PID
Get-NetTCPConnection -LocalPort 37777 | Select-Object OwningProcess
# 结束进程
Stop-Process -Id <PID> -Force

如果 Stop-Process 提示进程不存在,直接在任务管理器结束所有 node.exepython.exe 残留进程。

  1. 进正确目录重启 worker
bash
# 正确:marketplaces 目录
cd ~/.claude/plugins/marketplaces/thedotmack
npm run worker:status
npm run worker:restart

# 错误:不要进 cache/ 目录,那里没有 worker 脚本
  1. 验证修复
bash
curl -m 5 -sv http://127.0.0.1:37777/api/health
# 正常返回:{"status":"ok","initialized":true,"mcpReady":true}

两个目录区分:

  • ~/.claude/plugins/marketplaces/thedotmack:插件主目录,有 worker 脚本
  • ~/.claude/plugins/cache/thedotmack/claude-mem/版本号/:运行时依赖缓存,没有 worker 脚本

预防:Claude Code 变慢先查 worker,不要先怀疑 API 或模型;升级 claude-mem 后主动验证 health 接口。