项目子智能体放在 .trae/agents/*.md,只在自己电脑上生效的放 ~/.trae-cn/agents/,小组的验收角色跟仓库走。name 与 description 必填,name 只能用字母、数字和连字符,不超过 50 个字符。tools 是允许列表、disallowedTools 是排除列表,两个一起写来收窄权限。不写 model 时,它用对话里当前选的模型。
有三种情况会打开这一页:想让验收单独跑、不动手改代码 → 抄「示例:两个只读角色」,两份文件改掉 name 就能用;把数据范围只写进了子智能体,主对话还在越界 → 看「没生效时的现象与修法」第一条;委派出去之后它动手改了文件 → 看第二条,补上 disallowedTools。
写错最多的是两件事,先记住。一,把硬约束只写在子智能体里:它由 description 决定何时被叫到,并不保证每次都用得上,所以数据范围仍然要写进 AGENTS.md。二,权限只收一半:只在 tools 里去掉写入工具,没用 disallowedTools 再挡一层,验收时智能体仍可能动手改文件。
把验收交给 verifier,它跑完之后,仓库里的文件有没有被改动?
答「改了」,权限只收了一半:写了 tools,没写 disallowedTools。两处都写全,再委派一次看看。
用子智能体,是让它拿一块单独的上下文去干一件可以独立说清的事。它适合验收、定位这类「只读、只报告」的角色。
| 项 | TraeCode 的写法 | 写错的后果 |
|---|---|---|
| 项目位置 | .trae/agents/*.md | 放到别的目录,角色加载不到 |
| 个人位置 | ~/.trae-cn/agents/ | 小组的验收角色只在自己电脑上 |
| 必填字段 | name 与 description | 缺一个就定义不完整 |
| 名称约束 | name 只用字母、数字、连字符,不超过 50 个字符 | 用了下划线或中文,角色识别不上 |
| 允许的工具 | tools: Read, Grep, Glob,逗号分隔 | 写进 Write、Edit、Bash,智能体就能改文件 |
| 再挡一层 | disallowedTools: Write, Edit, Bash | 只写一边,权限收得不干净 |
| 模型 | 不写 model 时用对话里当前选的模型 | 想固定模型时行为会跟着对话变 |
| 怎么被叫到 | 由 description 决定;也可以在提示里直接说「使用 verifier 检查这次改动」 | 描述太笼统,该叫的时候不叫 |
字段不用背:写一个角色,委派一次看它有没有被叫到、有没有越权,实测一次就知道了。工具名照这几个写:Read、Grep、Glob、Write、Edit、Bash。
转工具时先看「限制权限」这一行:Cursor 一个 readonly: true 就够,另两家要在工具列表上写白名单。
| 项 | Claude Code | Cursor | TraeCode |
|---|---|---|---|
| 项目位置 | .claude/agents/*.md | .cursor/agents/*.md | .trae/agents/*.md |
| 个人位置 | ~/.claude/agents/ | —— | ~/.trae-cn/agents/ |
| 限制权限 | tools: Read, Grep, Glob(不写 Write、Edit、Bash) | readonly: true | tools: Read, Grep, Glob 加 disallowedTools: Write, Edit, Bash |
| 模型 | —— | model: inherit 沿用当前对话的模型 | 不写 model 时用对话里当前选的模型 |
| 名称约束 | —— | —— | name 只能用字母、数字、连字符,不超过 50 个字符;name 与 description 必填 |
| 怎么被叫到 | 由 description 决定;对话里也可输入 @ 点名 | 由 description 决定 | 由 description 决定;也可在提示里直接说「使用 verifier 检查这次改动」 |
两份都只读:一个负责验收数据范围,一个负责在动手前定位相关文件。抄的时候把 tools 与 disallowedTools 一起写全。
改完查询、上传或检索之后,用提示「使用 verifier 检查这次改动」把验收交出去。
--- name: verifier description: 验收数据范围。在改完查询、上传或检索之后,由对话里的 Agent 把验收委派给它。只读,不改文件。 tools: Read, Grep, Glob disallowedTools: Write, Edit, Bash --- 用两个所属范围的账号各看一次。 当前所属范围的数据能读到。 其他所属范围的数据读不到,且与记录不存在无法从响应区分。 没有命中时返回无依据,不出现材料中没有的句子。 只报告看到的请求、SQL 或接口结果,不改代码。
动手改代码之前,先让它把「这次改动涉及哪些文件」问清楚。
--- name: locate description: 在动手改代码前定位相关文件。由对话里的 Agent 把「这次改动涉及哪些文件」委派给它。只读,不改文件。 tools: Read, Grep, Glob disallowedTools: Write, Edit, Bash --- 按改动的关键词搜索,列出文件与命中行。 每条给出文件路径与行号,并说明它和这次改动的关系。 不确定的条目标注「待确认」,不要猜。 不改文件,也不给改动建议。
子智能体的问题集中在「叫不到」和「权限没收住」两类,照下面四条对号。
| 现象 | 原因 | 修法 |
|---|---|---|
把数据范围只写进了 verifier.md,主对话里还是写出越界查询 | 子智能体由 description 决定何时被叫到,并不保证每次都用得上 | 把数据范围写进 AGENTS.md 并打开导入开关;子智能体只承担验收,不承担约束 |
| 委派给 verifier 后它动手改了文件 | 权限只收了一半:tools 里还留着 Write、Edit 或 Bash | 写成 tools: Read, Grep, Glob 加 disallowedTools: Write, Edit, Bash,两处都写全 |
name 写成 scope_audit,角色识别不上 | 名称约束只允许字母、数字和连字符 | 改成 scope-audit,长度控制在 50 个字符以内 |
| 等它在合适的时候自动出现,它一直没被叫到 | 调度靠 description 判断,写得太笼统就轮不到它 | 在 description 里写清「在什么场景下把工作交过来」,或在提示里直接说「使用 verifier 检查这次改动」 |