本页判断标准

删掉这份 .md,父智能体自己动手改代码时会漏掉哪一条?

真的漏掉一条,说明它写错了位置:全局约束归 AGENTS.md,子智能体文件只在被委派时才进上下文。这里只写「怎么验收」。

子智能体文件的写法

子智能体不是每次都会被叫到,父智能体按 description 决定。所以在 description 里除了写「做什么」,还要写清「在什么时点用」——例如「在改完查询、上传或检索之后使用」。真正的全局约束(数据范围、密钥、当前阶段范围)只写 AGENTS.md 一处。

只读靠什么
readonly: true
写上这一个字段,子智能体就不能改文件。留空,它可能直接动手改。
沿用当前模型
model: inherit
不写表示用默认;写 inherit 表示跟当前对话用同一个模型。
可以这么做 验收类角色写 readonly: true,description 写清「改完 X 之后使用」,正文只写要报告什么、不写改代码。
不要这么做 把数据范围只写在子智能体文件里;照搬 tools: Read, Grep, Glob;让验收角色默认能写文件;把「什么时候用」从 description 里省掉。

什么时候不用子智能体:这件事父智能体自己做就行、也不需要另一份独立上下文,就不拆角色——多一个角色只是多一个要先被叫到才生效的文件。需要的是「独立上下文 + 独立权限」时再建。

子智能体在三处

路径规律一致,区别集中在「怎么限制它只能读」这一个字段上。搬工具时逐行核这张表。

项Claude CodeCursorTraeCode
项目位置.claude/agents/*.md.cursor/agents/*.md.trae/agents/*.md
个人位置~/.claude/agents/——~/.trae-cn/agents/
限制权限tools: Read, Grep, Glob(不写 Write / Edit / Bash)readonly: truetools: Read, Grep, Glob 加 disallowedTools: Write, Edit, Bash
模型——model: inherit 沿用当前对话的模型不写 model 时用对话里当前选的模型
名称约束————name 只能用字母、数字、连字符,不超过 50 字符;name 与 description 必填
怎么被叫到由 description 决定;对话里也可输入 @ 点名由 description 决定由 description 决定;也可在提示里直接说「使用 verifier 检查这次改动」

搬工具时最容易漏改的就是「限制权限」这一行:把 tools: 留在 Cursor 文件里,它不会被当作只读开关,验收角色还能写文件。

示例:两个只读角色

两个角色分工不同:verifier 用两个账号实际看一次数据范围,query-reviewer 只看这次改动的 SQL 有没有绑定会话的 scope_id。让它们都在改完之后被叫,都只报告、不改代码。

.cursor/agents/verifier.md

readonly: true 让这个角色不能改文件。model: inherit 沿用当前对话的模型。描述里写清调用时机:查询、上传或检索改完之后。

---
name: verifier
description: 验收数据范围。在改完查询、上传或检索之后使用。只读,不改文件。
model: inherit
readonly: true
---

用两个所属范围的账号各看一次。
当前所属范围的数据能读到。
其他所属范围的数据读不到,且与记录不存在无法从响应区分。
没有命中时返回无依据,不出现材料中没有的句子。
只报告看到的请求、SQL 或接口结果,不改代码。

.cursor/agents/query-reviewer.md

第二个只读角色,只看静态的 SQL 写法。和 verifier 的运行时验收互补。

---
name: query-reviewer
description: 检查新增或修改的 SQL 是否绑定会话中的 scope_id。在改完查询之后使用。只读,不改文件。
model: inherit
readonly: true
---

逐条列出这次改动涉及的 SQL 语句。
指出每条是否用 `WHERE scope_id = ?` 绑定会话中的 scope_id。
没绑定的,给出文件与行号,不改代码。
不判断业务逻辑对不对,只判断绑定这一件事。

两个文件都不写数据范围本身——那一条写在 AGENTS.md 里。某个角色需要动手改文件(例如补测试)时,不要给它 readonly: true,同时要在合并请求里写清它改的范围由谁评审。

子智能体越权或不被叫到的五种现象

「写了但没起作用」是子智能体最常见的一类问题,从现象反查。

现象原因修法
数据范围只有 verifier.md 里有,父智能体改代码时仍然写错子智能体的正文只有被委派时才进上下文,父智能体自己动手时读不到数据范围、密钥、当前阶段范围写进 AGENTS.md;子智能体只写「怎么验收」
本该只读的子智能体改动了文件没有设 readonly: true在前置元数据加 readonly: true
验收角色该被叫的时候没被叫,父智能体直接宣布改完description 只写了角色是什么,没写调用时机补上「在改完查询、上传或检索之后使用」这类触发的时点
把 Claude Code 的 tools: Read, Grep, Glob 写进 Cursor 子智能体,验收角色仍能写文件Cursor 限制权限用的是 readonly: true,不认 tools: 这种写法删掉 tools:,改成 readonly: true
TraeCode 里子智能体加载不出来,提示名称有问题name 只能用字母、数字、连字符且不超过 50 字符;name 与 description 必填把 name 改成符合字符集与长度要求的值,并确认 description 没缺
对应知识点 这一页只是 子智能体 在 Cursor 里的落地写法。通用规则见 子智能体(第一层 · 能力)。上游是 技能,下游是 钩子(必须拦住的那些动作)。