命令是在对话里输入 /名称 才跑的一段固定步骤,只有人点名时才会用到。在 Cursor 里把新命令写成技能文件 .cursor/skills/<名称>/SKILL.md,并在前置元数据加 disable-model-invocation: true;name 与目录名相同,只用小写字母、数字和连字符。旧的 .cursor/commands/*.md 仍能加载,本组新写的命令统一放在 .cursor/skills/。
三种情况下会打开这一页:同一段检查步骤已经被人口述过三遍,想固化成一条 /xxx → 照「示例:两条可照做的命令」抄一份 SKILL.md,只换步骤;输入斜杠没反应,或者没人点名它自己跑起来 → 到「常见错误」的现象表里对一行,多数是 name 与目录名不一致,或漏了 disable-model-invocation: true;从 Claude Code 或 TraeCode 搬过来 → 先逐行核「命令在三处」。
两处容易写错:disable-model-invocation 是技能前置元数据的字段,在旧的 .cursor/commands/ 下建文件,它不起作用;name 与目录名不统一时,这条命令直接调不出来。
删掉这条命令,有人会因为缺它而漏掉一次提交前的核对吗?
答「不会」,它就在占位置,因为没人会主动输入它。没人点名的步骤,把它写成技能更合适——两者只差 disable-model-invocation 这一个字段。
命令的门槛是「步骤已经固定、能一字不差照着做」。步骤还没定下来,就先别建文件,更别让助手每次现场编一套。命令文件本体就是一段步骤清单,前置元数据只放三个字段。
disable-model-invocation: true 保证。漏了这个字段,助手会自己套用。.cursor/skills/<名称>/SKILL.md,加 disable-model-invocation: true,正文用编号列步骤。
.cursor/commands/ 里新写命令;name 用大写或与目录名不一致;把命令和技能混成一份。
什么时候不用命令:希望助手在相关任务里自己想起这件事、不需要人点名时,它该是技能而不是命令——去掉 disable-model-invocation: true,写法见 技能。
命令最容易混的地方在于「新写法其实是一份加了开关的技能」。三家都往这个方向收,但旧目录的兼容程度不一样。从别的工具搬过来时逐行核这张表。
| 项 | Claude Code | Cursor | TraeCode |
|---|---|---|---|
| 新写法 | 写成技能 .claude/skills/<名称>/SKILL.md 并加 disable-model-invocation: true | 写成技能 .cursor/skills/<名称>/SKILL.md 并加 disable-model-invocation: true | .trae/commands/<名称>.md,文件名就是调用名 |
| 旧写法 | .claude/commands/*.md 仍作为同名命令加载;两边同名时技能优先 | .cursor/commands/*.md 仍能加载 | —— |
| 个人位置 | —— | —— | ~/.trae-cn/commands |
| 目录深度 | —— | —— | 项目命令最多嵌套 3 层目录 |
| 调用方式 | 输入 / | 输入 / | 输入 /,从 Commands 里选择 |
| 名称约束 | —— | name 与目录名相同,只用小写字母、数字和连字符 | 文件名即名称 |
区别集中在两点:Cursor 和 Claude Code 的命令都是「加了开关的技能」,TraeCode 的命令还是独立的 Markdown 文件、文件名即调用名。从 Cursor 搬到 TraeCode 时,目录和名称来源都要改。
下面两条是已经能照着做的清单,都在对话里输入斜杠调用。/check-scope 先看 README 里写明做什么、不做什么;/review-diff 在提交前核对改动与规约场景。
name 与目录名 check-scope 相同;disable-model-invocation: true 让它只在人输入 /check-scope 时执行。
--- name: check-scope description: 判断这次改动是否越出当前阶段已经写明的范围。用户输入 /check-scope 时使用。 disable-model-invocation: true --- 只做 README 里写明的角色和能力,数据按登录用户的所属范围隔离。 当前阶段有哪些能力,以 README 为准。产品里给最终用户使用的功能,不是仓库里的技能文件。 不做:家长端、多校区运营、学科交易市场。 先列出这次会改的目录。 再逐条说明:哪条在上面的范围内,哪条该停。 不要为了「顺便」加上范围内没有的角色或存储。
第二条命令,结构相同,只是步骤不同。步骤必须是已固定的,否则不要建这份文件。
--- name: review-diff description: 提交前核对这次改动与规约场景的对应关系。用户输入 /review-diff 时使用。 disable-model-invocation: true --- 列出这次改动的文件与行数。 对每个文件,指出它对应规约里的哪个场景。 指出没有对应场景的改动,单独列成一段。 指出规约里有场景、但这次没有改动覆盖的部分。
两份文件都在 .cursor/skills/ 下,各占一个自己的目录。仓库里已经有 .cursor/commands/*.md 的,保留即可,不必改写;但别把 name、description、disable-model-invocation 这三个字段抄进旧目录的文件——旧目录不按它们处理,助手仍会自己套用。
命令类问题多数表现为「调不出来」或「不该触发时触发了」。按现象对一行,照最右一列改。
| 现象 | 原因 | 修法 |
|---|---|---|
在 .cursor/commands/ 下新建命令并加了 disable-model-invocation,助手仍会在相关任务里自己套用 | disable-model-invocation 是技能前置元数据的字段,旧的命令目录不按它处理 | 把命令改写成 .cursor/skills/<名称>/SKILL.md,再在前置元数据里加该字段 |
目录叫 CheckScope,name 写 check-scope,输入 /check-scope 没反应 | name 必须与目录名相同,且只能用小写字母、数字和连字符;出现大写或其他字符就失效 | 把目录名和 name 统一成小写连字符形式,例如 check-scope |
| 助手在没人输入斜杠时自己执行了这条命令的步骤 | SKILL.md 没有 disable-model-invocation: true | 在 SKILL.md 前置元数据里加 disable-model-invocation: true |
| 把还没定下来的流程写成命令,每次跑出来的结果都不一样 | 命令的前提是步骤已经固定、能一字不差照着做 | 步骤没定就先不建文件,等流程稳定再写 |
| 在 TraeCode 里照抄 Cursor 的技能目录写命令,命令列表里找不到 | TraeCode 的命令是 .trae/commands/<名称>.md,文件名就是调用名,不是技能目录 | 按对应工具的目录放置(见上面的三工具对照表) |