本层判断标准

这份清单,助手会在没输入 /名称 的时候自己读进去吗?

答「会」,说明它现在还是技能,不是命令。

目录结构

命令在 Cursor 和 Claude Code 里与技能同目录,靠前置元数据里的一个字段区分;TraeCode 把命令单列到 commands/,文件名就是调用名。

仓库根目录下的命令

仓库根目录/
├── .cursor/skills/check-scope/SKILL.md   # 命令:带 disable-model-invocation: true
├── .claude/skills/check-scope/SKILL.md   # 与 .cursor 同正文,前置元数据同
└── .trae/commands/check-scope.md         # 独立目录,文件名就是调用名

判据落到目录与字段上:放在 skills/ 下且带 disable-model-invocation: true 的,是命令;不带这个字段的,是技能;TraeCode 的命令放在 commands/。别提交个人全局命令——它不经过评审,别人机器上也不存在。同一份清单三种工具的目录与字段不同:正文逐字照抄,前置元数据按工具换,.cursor/skills/ 与 .claude/skills/ 写三个字段,.trae/commands/ 只写两个。

跑这条自检:grep -rl "disable-model-invocation" .cursor/skills .claude/skills .trae/commands。列出来的应当都是命令,.trae/commands 下的文件不该出现这个字段——把 Cursor 的字段原样贴进去不报错,只是被忽略,现象是「命令能调用,但助手仍会自行读取它」。

典型应用示例:合并前的一次 /check-scope

场景:改动准备提合并请求,人输入 /check-scope——触发动作由人发出,不是助手判断「这次相关」。

有它 助手按固定清单逐项回答:本阶段要做的行为是否都还在;标明不做的功能这次是否被加进来;查询是否只绑定会话中的 scope_id;是否新增了仓库脚本里没有的测试参数。第 2 项答「是」,它说明冲突的是哪一条并停下来,回退那部分再提请求。
没有它 靠人记得「该核对了」,也靠助手即兴想核对项——事项一多,越界的改动就混进合并请求。

做成命令、技能还是子智能体

这三者最容易混用,因为它们都装「一段步骤」。判据是谁在什么时候决定用它,不是步骤长短。按下面的问句逐行选,只能命中一行。

要做的事做成什么什么时候生效怎么判
人输入 /名称 才执行的一套固定清单命令人输入 /名称 时需不需要人记得去用、由人拍板?是 → 命令
同类任务一出现就该想起来的一段步骤技能助手识别到同类任务后同类任务一出现就该想起来,而且不止一条步骤?是 → 技能
需要独立上下文、或要把工具权限收紧的核对子智能体由主流程或人指定要不要独立上下文,或更小的工具范围?是 → 子智能体
只对某类文件成立的一条约束规则匹配的文件进入上下文时这条约束只在改这类文件时才用得到吗?是 → 规则

误用能认出来:合并请求里出现「助手自行执行了一次范围核对」——那是清单没写 disable-model-invocation: true;「命令写了但从来没人用」——说明它本该是技能。六个落点的完整对照见规则页的总表。

落在哪

命令与技能同在 skills/ 下,靠 disable-model-invocation: true 区分;TraeCode 用独立的 commands/ 目录表示人触发。别提交个人全局命令——它不经过评审,别人机器上也不存在。

工具命令文件落地页
Cursor.cursor/skills/名称/SKILL.mdCursor 命令落地页
TraeCode.trae/commands/名称.mdTraeCode 命令落地页
Claude Code.claude/skills/名称/SKILL.mdClaude Code 命令落地页