文档角色:参考资产(Reference Asset)
版本:v1.0 — 2026-05-01
对应正式实现.trae/ 目录下的 skills/self-improving-agent/(主要记忆写入者)、skills/skill-language-policy/SKILL.md(记忆记忆写入规范)


Trae 原生记忆系统概述

Trae 的"Core Memory"系统通过两个机制工作:

会话启动时注入

新对话启动时,IDE 从本地加密数据库中读取 user_scope 和 project_scope 的记忆条目,封装为 XML 结构注入到 Agent 的系统提示词中。Agent 看到的记忆形式如:

<core_memories>
  <user_scope>
    <m id="abc123">
      <title>代码与规则设计偏好</title>
      <keywords>稳定实现|鲁棒性|规则设计|显式映射</keywords>
      <content>偏好稳定、可靠、可审计的实现...</content>
    </m>
    ...
  </user_scope>
  <project_scope>
    <m id="def456">...</m>
    ...
  </project_scope>
</core_memories>

运行时操作工具

Agent 可在会话中通过 manage_core_memory 工具操作记忆:

动作

用途

ADD

创建新记忆条目

UPDATE

更新已有条目(合并内容)

DELETE

删除条目

字段结构

每条记忆包含以下字段:

字段

说明

约束

title

简短标题

content

主体内容

≤400 字符

keywords

3-5 个关键词

| 分隔

scope

作用域

user(跨项目)或 project(当前项目)

category

类型

Knowledge / Rule / Experience

via

生成方式

discovery(自主发现)或 request(用户要求)


当前 Skill 对记忆系统的使用

使用概览

Skill / Rule

角色

记忆操作

调用频率

self-improving-agent

主要写入者

ADD / UPDATE / DELETE

高频

finishing-a-development-branch

触发者

Knowledge Promotion Gate → 触发 self-improvement

分支收尾时

review-and-completion-gates

规则级触发者

完成任务前检查是否有教训可记录

任务完成时

systematic-debugging

客户端

非明显根因 → 记录为 knowledge_gap / insight

调试完成时

test-driven-development

客户端

变异测试发现的 false-green → 记录为 Experience

测试阶段

verification-before-completion

客户端

非明显验证失败 → 记录为 Experience

验证阶段

subagent-driven-development

客户端

子 Agent 重复失败 → 记录防止未来误路由

子任务失败时

skill-language-policy

约束者

定义什么内容适合写入记忆

创建/审查时

核心流程:写入链路

触发条件(命令失败/用户纠正/新发现)
    ↓
self-improving-agent
    ├── 分类(Core Memory / Project Rule / New Skill)
    ├── 去重检查(是否已有相似记忆?)
    ├── 低价值过滤(是否值得记录?)
    └── manage_core_memory ADD/UPDATE
          ├── scope: user / project
          ├── category: Knowledge / Rule / Experience
          └── via: discovery / request

核心流程:维护链路

触发条件(用户说"帮我整理记忆" / 接近20条上限 / 记忆碎片膨胀)
    ↓
self-improving-agent → resources/memory-maintenance.md
    ├── 说明限制(告知用户记忆集可能不完整)
    ├── 用户确认实际总量
    ├── 审计五步(枚举 → 分类 → 合并 → 删除 → 验证)
    └── manage_core_memory DELETE + ADD

核心流程:知识晋升链路

发现模式重复 3+ 次的教训
    ↓
self-improving-agent → resources/promotion-guide.md
    ├── 判断是否满足晋升条件(跨文件适用?预防再犯?)
    ├── 选择目标(Core Memory UPDATE / .trae/rules/ 新规则 / 新 Skill)
    ├── 作者晋升
    └── 更新原条目状态

实际记忆条目的分类分布

当前项目中的记忆条目按 category 的分布情况:

Category

典型用途

当前项目示例

Experience

工作流路线、故障路径、操作规则

端口冲突恢复方案、MCP 故障处理原则

Rule

用户偏好、编码规范

中文回复偏好、显式映射偏好、提案前验证纪律

Knowledge

架构事实、领域事实

项目清理过时规则的记录、规则体系优化实践


当前局限性

容量相关

局限

描述

影响

20 条硬上限

每个 scope(user/project)最多 20 条

必须主动管理,否则关键记忆被自动淘汰

无预警自动淘汰

达到上限后新增时,系统静默删除最久未匹配的条目

用户不知情时可能丢失重要记忆

无批量管理 UI

设置中心只能逐条删除

维护成本高,用户不愿做

400 字符内容上限

每条 content 字段 ≤400 字符

复杂规则必须极致精简或拆分多条,增加碎片

可见性与可验证性

局限

描述

影响

无 LIST/COUNT 工具

manage_core_memory 只有 ADD/UPDATE/DELETE,Agent 无法枚举或统计当前记忆库

Agent 无法独立验证自己看到的记忆集是否完整

注入策略不透明

IDE 端控制注入哪些条目、按什么策略选择(最近?高频?随机?),对外部不可见

Agent 无法判断自己看到的是全部还是子集

会话内静态快照

启动时注入的 XML 不会随 ADD/UPDATE/DELETE 实时刷新

同一会话内后续操作存在盲区

跨会话与持久性

局限

描述

影响

跨会话不共享

不同对话/Agent 实例可能收到不同的记忆子集

一个会话中创建的条目,另一个会话不一定能看到

重启不保证完整刷新

Trae 重启后新会话注入的是重启时刻的快照,仍受选择策略影响

用户以为重启能"重置",实际仍不完整

本地存储,无同步

记忆存入本地加密数据库,无法跨设备同步

换电脑后记忆全部丢失

工具能力不足

局限

描述

影响

无搜索/检索工具

Agent 不能按关键词、类别或时间范围检索记忆

只能依赖注入时提供的内容,无法按需查找

无冲突解决机制

多个 Agent 实例可能同时写入同一 scope

最后写入者覆盖,中间可能丢失信息

无版本历史

记忆被 UPDATE 或 DELETE 后不可恢复

误操作不可回滚

无过期/TTL 机制

记忆不会自动过期,只能靠手动清理或自动淘汰

过时记忆占据空间,用户需要主动审计

当前 Skill 覆盖的缺口

场景

当前覆盖

缺口

创建前检查容量

已覆盖:memory-maintenance.md 规定 ≥18 条先清理

但 Agent 无法获知当前实际条数(无 LIST),只能依赖会话注入的可见条目

用户触发整理

已覆盖:执行流程完善

但需要用户手动验证总量,Agent 端无法自动确认

跨会话一致性

未覆盖

Agent 无法知道其他会话中写入了什么记忆

记忆质量审计

已覆盖部分:有审计五步流程

但 400 字符限制使长内容必须拆条,审计时更难判断

高频教训自动晋升

已覆盖:3+ 次重复 → 晋升规则

但是否需要手动决策晋升目标,无自动推荐

记忆与 Rule 联动

已覆盖:promotion-guide.md 定义晋升路径

但晋升后原记忆状态更新依赖 Agent 手动操作


局限性对实际工作的影响

记忆丢失风险

最实际的风险场景:

用户在多个会话中逐步积累记忆 → 达到 20 条上限 →
新会话写入新记忆 → 系统静默淘汰一条旧记忆 →
该旧记忆中可能包含关键的配置约束或用户偏好 →
Agent 在后续任务中违反该约束 → 用户困惑

当前 mitigation:memory-maintenance.md 要求创建前检查容量,但 Agent 无法获知真实条数,只能凭注入内容推测。

Agent 盲区

会话 A 中记录了"项目已从 npm 迁移到 pnpm"
会话 B 启动时,这条记忆未被注入(受选择策略影响)
会话 B 的 Agent 继续执行 npm install → 失败

当前 mitigation:无。这是注入策略透明性问题,Skill 层面无法绕过。

"帮我整理记忆"的用户摩擦

用户说"帮我整理记忆"
Agent 需要用户手动去设置页面确认实际条数
用户觉得麻烦 → 放弃
记忆继续膨胀 → 自动淘汰触发

当前 mitigation:memory-maintenance.md 已设计流程,但无法消除用户操作步骤。


与外部记忆系统的对比

能力

Trae 原生 Core Memory

外部方案(文件系统 .md / JSON)

写入接口

manage_core_memory 工具

直接写文件

读取方式

会话启动时注入 XML

Agent 按需读取

容量

20 条/scope,每条 400 字符

无硬限制

可见性

仅有 memento_id(UUID),内容混合在系统提示中

文件路径、文件名、内容完全可见

跨会话

受注入策略影响,不保证一致性

文件系统保证一致性

版本控制

Git 可追踪

搜索

无(仅依赖注入时匹配)

grep / find / 全文搜索

迁移

本地加密数据库

纯文本可复制粘贴

当前项目为何仍优先使用 Core Memory

尽管存在上述局限,当前项目仍将 Core Memory 作为默认写入路径(而非文件系统)。原因:

  1. 自动注入:新会话无需 Agent 主动读取;Skill 和 Rule 中定义的核心约束会自动进入上下文

  2. 结构化字段:title/keywords/scope/category 便于语义匹配和精准检索

  3. 与 IDE 集成:设置在"规则与技能 → Memories"下可见,用户可查看

  4. 无需手动管理路径:文件系统方案需要决定放在哪、叫什么名字、谁来读、何时读

项目采用三级晋升路径做权衡:

Core Memory(高频、轻量、自动注入)
    ↓ 模式重复 3+ 次
.trae/rules/ 规则(明确触发条件,alwaysApply 或 globs)
    ↓ 通用多步骤工作流
skills/ 技能包(完整执行契约)

文件系统作为补充路径

对于以下场景,当前项目使用文件系统而非 Core Memory:

  • 完整的参考文档(如本文档本身):超过 400 字符、需要结构化的参考资料

  • Skill/规则的模板和示例:需要版本追踪、多人可读

  • 执行契约(SKILL.md):需要完整的工作流、输入输出契约、失败处理


现有缓解措施

当前项目已建立的缓解措施:

局限性

缓解措施

来源

20 条硬上限

创建前检查(≥18 条先清理)

memory-maintenance.md

注入子集不可验证

"帮我整理记忆"流程中让用户手动确认

memory-maintenance.md

记忆碎片膨胀

整合审计五步流程

memory-maintenance.md

记忆重复

UPDATE 去重策略

self-improving-agent/SKILL.md

低价值噪音

低价值过滤

promotion-guide.md

知识需要固化

三级晋升路径:Memory → Rule → Skill

promotion-guide.md

跨会话盲区

Knowledge Promotion Gate 在分支收尾时触发

review-and-completion-gates.md


未解决的局限性(需要 IDE 层面改进)

以下局限在当前 Skill 层面无法缓解,需要 Trae IDE 或系统提示层面的改进:

  1. LIST/COUNT 工具缺失:Agent 无法枚举或统计记忆库,无法独立验证完整性

  2. 注入策略不透明:无法确定 Agent 看到的是全部记忆还是子集

  3. 会话内快照不刷新:写入后同一会话内的后续步骤无法感知变更

  4. 无搜索/检索接口:Agent 不能按关键词查询记忆库

  5. 无跨会话一致性保证:两个会话可能同时写同一个 scope,冲突时后写者覆盖

  6. 无自动过期/TTL:需要手动审计,无法自动化

  7. 无版本历史:UPDATE/DELETE 不可回滚


总结

Trae 的 Core Memory 系统提供了一条低摩擦的"自动注入 + 结构化写入"路径,在当前项目中扮演高频、轻量、自动的记忆角色,与文件系统的"低频、重型、持久"路径形成互补。

主要权衡:

优势

代价

新会话自动注入

注入策略不透明,可能不完整

结构化字段便于语义匹配

400 字符上限,复杂内容需拆分或晋升

与 IDE 集成,用户可查看

20 条硬上限,无预警淘汰

无需管理文件路径

无法版本控制,无法跨设备同步

当前 Skill 体系通过"创建前检查/审计流程/晋升路径"三件套缓解了大部分容量和碎片问题,但注入不透明性LIST 工具缺失这两个根本局限需要在 IDE 层面解决才能彻底消除盲区。