它最容易被误解成「更强的助手」——其实相反:子智能体买的是隔离,不是能力。它看不到主对话的全部上下文,只拿到 description 和委派时给的说明。
让这个子智能体去核对,它有没有可能改动文件或执行改变状态的命令?
答「可能」,说明只读还停在正文里。权限写在配置字段上,正文里那句「不要改文件」不构成限制。
子智能体是「目录下一个 .md 文件」,文件名就是它的名字。三种工具的目录不同,但都按「一个文件一个角色」组织。写核对类角色只需要一个文件,不需要配套脚本。
仓库根目录/ ├── .cursor/agents/verifier.md # readonly: true ├── .claude/agents/verifier.md # tools: Read, Grep, Glob └── .trae/agents/verifier.md # tools: Read, Grep, Glob
文件名 verifier 与前置元数据里的 name 一致。一个角色一个文件,别在一个文件里描述两种角色——父对话靠 description 决定要不要委派,混在一份文件里,两个用途都会判断不准。三种文件的正文逐字照抄,前置元数据别互相粘贴:readonly 只有 Cursor 有,另两家靠工具允许列表达到同样效果。
这样自检:让它核对一次,看报告里有没有出现「已修改」。出现了就是只读没生效,回到落在哪核对字段。
场景:「按租户导出」改完了,主对话里已经堆了几千行上下文,需要有人按验收说明逐条核对。
verifier 另起一个上下文,只拿到 description 和委派说明,工具权限只读。它打开 docs/ 里对应的验收说明,用两个所属范围的测试数据逐条查看,每条给出「通过」或「未通过」并附上路径或命令输出,没执行的条目标「未查」。它改不了任何文件——只读写在配置字段上。
三者都装「一段步骤」,判据是要不要一个与主对话分开的上下文,或更小的工具范围。两条判据任一为「是」,才是子智能体;只要步骤顺序,做成技能更省。
| 要做的事 | 做成什么 | 什么时候生效 | 怎么判 |
|---|---|---|---|
| 核对类任务不希望它顺手改代码,或要读进大量文件把主对话占满 | 子智能体 | 由主流程或人指定 | 要不要独立上下文,或更小的工具范围?是 → 子智能体 |
| 同类任务一出现就该想起来的一段步骤 | 技能 | 助手识别到同类任务后 | 同类任务一出现就该想起来,而且不止一条步骤?是 → 技能 |
人输入 /名称 才执行的清单 | 命令 | 人输入 /名称 时 | 需不需要人记得去用、由人拍板?是 → 命令 |
| 只对某类文件成立的一条约束 | 规则 | 匹配的文件进入上下文时 | 这条约束只在改这类文件时才用得到吗?是 → 规则 |
误用能认出来:委派它核对之后,仓库里多了几行改动——只读字段没写,或工具列表里带了写工具。委派说明里要带上文件路径与验收依据,否则它会把「不确定」也报成「通过」;没执行的条目标「未查」,不补做功能。六个落点的完整对照见规则页的总表。
只读写在配置字段上:Cursor 用 readonly: true,另两家靠 tools 允许列表(Read, Grep, Glob)。一个角色一个文件,别在一个文件里描述两种角色——父对话靠 description 决定要不要委派。
| 工具 | 子智能体文件 | 落地页 |
|---|---|---|
| Cursor | .cursor/agents/名称.md | Cursor 子智能体落地页 |
| TraeCode | .trae/agents/名称.md | TraeCode 子智能体落地页 |
| Claude Code | .claude/agents/名称.md | Claude Code 子智能体落地页 |