项目地址:https://github.com/MorningStar0709/trae-agent-enhancements
本文档集中说明本系统的核心设计思路、工程权衡和独创机制。读完此处,你应该理解"为什么这样设计"。
设计纲领:三层分离
本系统的核心架构决策是 Rule 做决策、Skill 做执行、Trae 原生做底座 的三层分离。
用户输入
│
▼
Rules(规则层)——判断"该走哪条路"
│ ║ 路由决策(T-Shirt 分档 → 技能映射)
│ ║ 行为约束(提问阈值、升级护栏、变更自检)
│ ║ 环境处理(终端纪律、MCP 降级、端口恢复)
▼
Skills(技能层)——执行"具体怎么做"
│ ║ 每个技能聚焦单一职责
│ ║ 上下游通过 Integration 声明自动拼装
│ ║ 通过 Context Payload 精炼传递设计上下文
▼
Trae 原生(底座层)——提供基础设施
│ ║ Rule Frontmatter 控制加载
│ ║ `Skill` 工具匹配 description
│ ║ `manage_core_memory` 存记忆
│ ║ `Task` 子代理分派
│ ║ IDE 工具集(Read/Write/RunCommand...)
为什么这样分?
-
单体 Agent 什么都做,但什么都不精 → 拆成小技能,每个聚焦
-
Agent 需要知道"什么能做"和"怎么做"是两类问题 → 规则管"什么",技能管"怎么"
-
系统会进化,底座会升级 → 本系统只做原生之上的增量,不替代不破坏
七个设计巧思
Rule + Skill 双轮协同,上下游流水线化
核心思路:Rule 像交通警察判断"走哪条路",Skill 像专业工具箱负责"怎么做"。两者各司其职,互不干扰。
流水线协作:Skill 之间不是孤立的——每个 Skill 的 Integration 字段声明上游和下游,Agent 在运行时动态拼接:
brainstorming → writing-plans → executing-plans → verification-before-completion → git-commit → finishing-a-development-branch → self-improvement
Context Payload 是上下游之间的"精选传递包"——只传递 Architecture / Key Interfaces / Conventions / Constraints / Uncertainties,不堆砌原始对话。下游拿到的是决策信息,不是聊天记录。
设计价值:单体 Agent 做不到的专业度,通过"小技能流水线"实现。每个技能聚焦单一职责,组合起来覆盖全流程。
深度绑定 Trae 原生能力,互补不冲突
核心思路:不绕过、不替代 Trae 的任何原生机制,只在之上做互补增强。
设计价值:用户安装本系统不会破坏任何 Trae 原生行为。原生记忆照常工作,原生规则照常加载——本系统是原生之上的第二层增强层。
遵循官方规范,不发明格式
核心思路:不创造自己的配置格式,完全按 Trae 官方规范编写。这意味着本系统本身就是最佳实践范例。
-
Rule 文件:标准 YAML frontmatter + Markdown,四种官方激活模式
-
SKILL.md:严格遵循官方推荐的 contract 模板
-
质量标准:description ≤ 250 字符、规则 ≤ 50 行、alwaysApply ≤ 30 行——均来自官方文档
-
自动化审查:
skill-stability-review内置 16 维审查脚本(review_skills.py,888 行),自动检查每一条 rule 和 skill 的合规性 -
三层元技能保障:
creating-trae-rules指导写规则、skill-creator指导写 Skill、skill-language-policy规范语言
设计价值:33 个技能 + 8 条规则本身就是"如何按 Trae 规范创建"的活教材。用户新写规则时直接参考即可。
原创决策机制:T-Shirt 分档 + 提问阈值
核心思路:这两个机制是 Trae 原生没有的,来自对 AI Agent 日常使用痛点的观察和归纳。
T-Shirt 四维判定矩阵:
文件范围 × 变更性质 × 风险等级 × 预期节奏 → S / M / L
评分不一致时以最大的 T-Shirt 尺寸为准(而非"最高风险维度"),无法判定时默认取该维度最大值以确保安全。Module 以独立目录边界定义,测试文件计入文件数。配以 Forced Escalation(7 类高风险场景严禁按 S 处理)——Guardrails 优先于 Exception,先评四维再交叉检查 Guardrails,取较大值。执行过程中支持动态重分类,发现更复杂时强制向上切换。
提问阈值:五条 MUST Ask + 五条 MUST NOT Ask,精确划出"该问用户"和"不该问用户"的边界。Trae 默认行为是"deduce and proceed",本系统填补了这一空白。
设计价值:完全原创。不是跟随某个官方标准,而是在使用中发现问题、自己归纳方案。
agent-blueprint-architect:稳定比花哨更重要
核心思路:不试图自动化创建 Agent,而是输出用户可直接复制粘贴的 Markdown 蓝图。
走过的弯路:早期尝试写 Python 脚本自动写入 Trae 的加密 SQLite 数据库(%APPDATA%\trae\ModularData\ai-agent\database.db),发现:
-
数据库被 IDE 独占锁定,外部写入会导致崩溃
-
加密格式不透明,反编译风险高
-
只跑通一次就因版本更新失效
最终方案:放弃自动化,改为"蓝图交付 + 手动粘贴":
中文显示名 → 复制到 Trae UI 的显示名输入框
System Prompt → 复制到 Trae UI 的系统提示词输入框
英文标识 → 复制到 Trae UI 的标识符输入框
触发说明 → 复制到 Trae UI 的触发条件输入框
能力配置 → 指导用户在 UI 中勾选/取消对应开关
设计价值:诚实地适配平台限制。用户手动粘贴的成本远低于脚本崩溃的风险。
Skill 内部逻辑高度优化,不是一次性提示词
核心思路:每个 Skill 不是一次写成的提示词,而是经过 3-5 轮迭代、有 git 记录可追溯的"执行契约"。
每个 SKILL.md 包含五层结构:
-
Input Contract:精确声明需要什么输入
-
Output Contract:保证输出什么格式
-
Do Not Use:边界声明,防止误触发
-
Failure Handling:5-8 种失败场景的降级路径
-
Integration:上下游声明,形成 DAG 依赖图
此外有 红绿线清单——设置"红线"(绝对禁止)和"绿线"(必须执行)。例如 verification-before-completion 的 6 条红线包括"应该没问题""大概没 bug"等口头承诺式表述。
设计价值:每个技能都是持续的工程投资,不是一次性产出。
中文与 Windows 分层适配,Python 保可移植
核心思路:LLM 推理最佳语言是英文(稳定),但中文用户需要中文交互。本系统的方案是分层隔离,不搞一刀切。
分层中英文策略:
Windows 适配:全部命令 PowerShell 语法,端口冲突恢复封装为独立规则,路径、文件搜索按 Windows 习惯编写。
Python 脚本可移植架构:不受平台依赖的工具逻辑(review_skills.py、quick_validate.py)统一用 Python 实现。Python 天然跨平台,Path.resolve() + subprocess.run() 避开 Windows 编码和路径坑。
设计价值:对中文用户不是"[用中文回复]",是系统的分层中英文隔离。对 Windows 不是"加几条 PowerShell 命令",是从架构层面确保一致的执行体验。
走过的弯路(失败的决策)
记录设计过程中的关键失败尝试,避免后来者重复踩坑。
自动化创建 Agent(agent-blueprint-architect 前身)
尝试:写 Python 脚本直接操作 Trae 本地的 database.db,自动写入 Agent 配置。 失败原因:数据库被 IDE 独占锁定?加密格式不透明?版本更新即失效。 最终方案:蓝图交付 + 手动粘贴。 教训:不要绕过平台约束去自动化。平台不开放的能力,手动就是最稳定的方案。
Skill 与 Rule 内容重叠
尝试:同一套流程说明既写在 rule 中又写在 skill 中,"反正都加载了,用户多看一遍没关系"。 问题:改一个地方忘改另一处,两处内容逐渐不一致。 修正:确立"规则做决策,skill 做操作"原则,rule 只保留决策语句和指针引用,操作细节全放 skill。 教训:每多一个冗余副本,就多一个同步债务。
alwaysApply 膨胀
尝试:把端口冲突恢复、MCP 降级等流程也设成 alwaysApply: true,"反正都是常用功能"。 问题:每次对话加载变慢,Agent 上下文被不相关的内容占据。 修正:降级为条件触发(alwaysApply: false + description),只在相关场景加载。 教训:alwaysApply 每多一行,每次对话的成本就高一分。30 行上限不是形式主义。
核心设计原则(备忘)
去重
Rule 中已有的内容 → Skill 中不重复
Skill 中已有的内容 → Rule 中只保留指针引用
记忆中有覆盖 → 先检查更新,不新建重复条目
alwaysApply 精简
-
一条 alwaysApply 规则只承载一个独立关注点
-
超过 30 行先判断:单一关注点(保留)还是多关注点(拆分)
-
禁止为压行数删除可操作内容
路由规则管指向谁,Skill 管能不能执行
-
规则做决策,skill 做操作
-
环境前置条件放在 skill 的 Failure Handling 中
-
不把 skill 的执行约束提升为规则