将 Claude-Mem 集成到 Trae:我失败了但总结了这些坑
Claude-Mem 已经在官方支持 Claude CLI 的基础上,额外支持了 Cursor 和 Codex 两个平台。我的目标很明确:让 claude-mem 也能"认识"Trae,将其处理范围扩大到 Trae IDE。 初步方案是做一个 MCP 桥接器: 为了搞清楚集成方式,我深度阅读了 claude-mem v12.1.0 的全部核心源码,包括: 从 hooks.json 看,Claude CLI 的每个操作都会触发对应 hooks: 关键发现:当 Claude CLI 窗口关闭时,Worker 进程不会关闭,继续作为守护进程运行。 这就是为什么 claude-mem 可以"即开即用"——Worker 是全局常驻的。 MCP (Model Context Protocol) 协议本身不定义任何 session-level lifecycle event。其生命周期只有三层: 仅支持的能力: 根据 Trae 官方文档,Trae 支持的 MCP 功能同样只有: 没有任何生命周期事件的自动触发机制。 Trae 官方文档明确指出:hooks 是 Claude Code 独有的"模型循环之外的确定性自动化"。Trae 没有等价物。 尽管如此,我们还是实现了一个功能性的 MCP 桥接器: 桥接器确实被调用过: 这说明: 优点:对项目内所有对话生效 优点:更强的约束(独立 system prompt) 这是架构层面的本质差异,不是实现细节问题。 虽然最终未能实现最初的目标,但这个过程非常有价值: 如果你也有类似的想法,希望你能从我的探索中受益: 如果你最终选择了 project\_rules.md 方案并成功实践,欢迎分享经验。这个方向目前还没有人探索过。 写于 2026-04-16,基于 TraeClaudeMemBridge v6 探索项目将 Claude-Mem 集成到 Trae:我失败了但总结了这些坑
背景:我在 Claude CLI 中使用 claude-mem 体验非常好,希望能在 Trae 中实现同样的长期记忆功能。这个目标驱使我深入研究了 Claude-Mem 源码和 Trae 的扩展机制,最终发现两者之间存在一个根本性的架构差异。
一、目标:像 Cursor /Codex 一样集成 Trae
二、Claude-Mem 的架构解析
2.1 三层架构
┌─────────────────────────────────────────┐
│ hooks.json (Claude CLI 调用层) │ ← 每次事件触发一次
│ ↓ node bun-runner.js │
│ bun-runner.js (Bun 启动器) │ ← 找 Bun、缓冲 stdin
│ ↓ spawn(inner worker) │
│ worker-wrapper.cjs (生命周期包装器) │ ← IPC 消息、进程树管理
│ ↓ spawn │
│ worker-service.cjs (实际服务) │ ← HTTP 服务器 :37777
└─────────────────────────────────────────┘2.2 Hooks 完整生命周期
顺序 事件 动作 超时 1 Setup 安装/检查依赖 300s 2 SessionStart 启动 Worker → 注入上下文 60s 3 UserPromptSubmit 初始化会话记录 60s 4 PostToolUse 记录工具执行观察 120s 5 Stop 生成会话摘要 120s 6 SessionEnd 标记会话完成 30s 2.3 窗口关闭时的行为
三、MCP 协议的硬性限制
3.1 MCP 协议规范
Initialization → Operation → Shutdowninitialize / notifications/initializedtools/list / tools/calllogging / ping3.2 Trae 的 MCP 实现
四、Trae vs Claude CLI:关键差异
能力 Trae Claude Code Hooks(确定性自动化) ❌ 没有 ✅ 有 project\_rules.md(提示词级规则) ✅ 有 ✅ 有 Agent 自定义 system prompt ✅ 有 ✅ 有 MCP Tools ✅ 原生支持 ✅ 原生支持 五、我们做的桥接器
5.1 架构
Trae IDE
↓ (手动/MCP tool 调用)
trae_claude_mem_bridge (Python MCP Server)
↓ (HTTP API / subprocess hook)
Claude-Mem Worker (:37777)
↓
SQLite 数据库 + ChromaDB5.2 实现的功能
trae_mem_hook_event — 接收事件并转发<task-notification> 等)summarize / session-complete 走 HTTP APIplatform=trae5.3 日志中的证据
2026-04-16 17:49:40 | ERROR | Hook error (UserPromptSubmit/session-init): Worker hook timeout after 30s六、替代方案的探索
6.1 方案 A:project\_rules.md 注入
# .trae/rules/project_rules.md
## Claude-Mem 记忆集成
你已集成 claude-mem 长期记忆系统。你必须在以下时机调用 trae_mem_hook_event 工具:
1. 收到用户消息时 → event: UserPromptSubmit
2. 使用任何工具后 → event: PostToolUse
3. 会话结束时 → event: Stop + SessionEnd
这是硬性要求,不是可选操作。
缺点:“提示词层面期望”,非 100% 可靠(估计约 80%)6.2 方案 B:专用 Agent
# .trae/agents/claude-mem-coder.md
---
name: claude-mem-coder
tools: trae-mem-bridge
---
你是带 claude-mem 记忆增强的开发者。每个操作周期必须:
1. 接收用户输入 → 调用 trae_mem_hook_event(UserPromptSubmit)
2. 执行工具 → 调用 trae_mem_hook_event(PostToolUse)
3. 完成任务前 → 调用 trae_mem_hook_event(Stop) + (SessionEnd)
缺点:需要用户手动切换 Agent七、最终结论
7.1 为什么无法实现 100% 自动化
Claude CLI hooks: 确定性调用 (hooks 运行在模型循环之外)
Trae + Rules: 概率性遵守 (Rules 只是提示词,AI 可能忽略)7.2 现在的状态
project_rules.md 实现7.3 这个探索的价值
八、写给同样想尝试的人
相关项目: Trae-Claude-Mem-Bridge — 桥接器源码