本页判断标准

同组两人改同一处代码,得到的结果不一致时,能指出差异来自 .cursor/ 下的哪一个文件吗?

指不出,说明约定还在聊天记录里,没进仓库。要补的是一个具体文件,不是在群里再讲一遍。

六个落地页各自管什么

六页按同一个顺序,每页产出一个放进 .cursor/ 的文件。

AGENTS.md

每次对话都会读。只写删掉就会让智能体做错、又能核对、代码里还没有的事实。

进入

规则

只在某一类文件里才需要。用 .cursor/rules/*.mdc 的 globs 限定范围,别设成始终生效。

进入

命令

用斜杠主动调用。步骤已经固定、能照着做;流程还没定下来就先空着这一页。

进入

技能

任务一出现,智能体就该自己想起的做法。在 description 里写清什么任务、什么时候用。

进入

子智能体

需要单独上下文的角色,例如只读验收。数据范围仍要写进 AGENTS.md。

进入

钩子

智能体即将做危险动作时,用脚本直接拦住。密钥和 .env 适合放在这一层。

进入
位置放什么什么时候生效
AGENTS.md全仓库都要遵守的事实:数据范围、密钥、启动命令每次对话自动读仓库根那一份
.cursor/rules/*.mdc只在某一类文件里才需要遵守的句子改到 globs 匹配的文件时
.cursor/skills/<名称>/SKILL.md任务一出现就该用的步骤;人点名的命令也写这里助手按 description 自动用,或人输入 /名称
.cursor/commands/*.md旧的斜杠命令写法,仍能加载人输入 /名称
.cursor/agents/*.md需要独立上下文的角色,例如只读验收父智能体按 description 委派时
.cursor/hooks.json必须被脚本拦住的危险动作对应事件触发前或触发后
.cursor/hooks/<脚本>判断逻辑,从仓库根执行由 hooks.json 里的 command 调起

七个位置的三工具对照总表

同一件事,三个工具的文件名和字段名不一样。改仓库前先在这张表上找到对应的一行,确认 Cursor 这一列怎么写,再去那一页看完整写法——照抄另一个工具,结果是静默不生效。

位置Claude CodeCursorTraeCode
仓库说明CLAUDE.md(.claude/CLAUDE.md 也会读)AGENTS.mdAGENTS.md,默认不读,要在「设置 → 规则 → 导入设置」打开
规则.claude/rules/,前置元数据用 paths:.cursor/rules/*.mdc,用 globs: + alwaysApply: false.trae/rules/*.md,用 alwaysApply: false + globs:
命令技能加 disable-model-invocation: true;旧的 .claude/commands/*.md 仍加载技能加 disable-model-invocation: true;旧的 .cursor/commands/*.md 仍加载.trae/commands/<名称>.md,文件名就是调用名,项目命令最多嵌套 3 层
技能.claude/skills/<名称>/SKILL.md.cursor/skills/<名称>/SKILL.md,长说明放同目录 reference.md.trae/skills/<名称>/SKILL.md
子智能体.claude/agents/*.md,用 tools: 白名单.cursor/agents/*.md,用 readonly: true.trae/agents/*.md,用 tools: 加 disallowedTools:
钩子配置.claude/settings.json 的 hooks 字段(不是 hooks.json),事件名 PreToolUse.cursor/hooks.json,version 为 1;事件名小写 preToolUse.trae/hooks.json,version 用 1;事件名 PreToolUse
钩子脚本命令里用 "$CLAUDE_PROJECT_DIR" 定位脚本,从仓库根执行从仓库根执行,脚本从标准输入读 JSON、向标准输出写 JSON用 timeout 限时,不写默认 30 秒;没有 failClosed

一份目录结构树

把上面七个位置放进一个仓库,长这样。示例用的是一个按登录用户隔离数据的 Web 服务,注释写的是这份文件什么时候被读到。

仓库目录结构

照着建目录即可。钩子脚本放在 .cursor/hooks/,由 hooks.json 的 command 调起。

AGENTS.md                          # 每次对话自动读仓库根这一份
.cursor/
├── rules/
│   └── backend-tests.mdc          # globs 命中 backend/**/*_test.go 才生效
├── skills/
│   ├── check-scope/
│   │   └── SKILL.md               # 人输入 /check-scope 才执行
│   └── trace-retrieval/
│       └── SKILL.md               # 描述命中时助手自己用
├── agents/
│   └── verifier.md                # readonly: true,只读验收
├── hooks.json                     # version: 1
└── hooks/
    └── block-env.py               # 由 hooks.json 调起,从仓库根执行
backend/
└── AGENTS.md                      # 只在改 backend/ 时叠加
frontend/
└── AGENTS.md                      # 只在改 frontend/ 时叠加

落地顺序

顺序不能颠倒:后面每一步都引用前面的结论。每步产出一个文件,验证过再进下一步。

第一步:写根目录 AGENTS.md只放删掉就会做错、能核对、代码里还没有的事实——数据范围、密钥、启动命令。根文件控制在 100–200 行。
第二步:把只在某类文件里需要的句子放进规则写 .cursor/rules/*.mdc,用 globs: 限定文件范围、alwaysApply: false。一份规则只讲一件事,正文 50 行以内。
第三步:把任务一出现就该做的步骤写成技能写 .cursor/skills/<名称>/SKILL.md,name 与目录名相同,description 用第三人称写清在什么任务里用。
第四步:人点名的流程加上开关在 SKILL.md 前置元数据里加 disable-model-invocation: true,助手就不会因为觉得相关而自己套用。
第五步:需要独立上下文的角色写成子智能体写 .cursor/agents/*.md,只读的加 readonly: true,沿用当前模型写 model: inherit。
第六步:必须拦住的写钩子写 .cursor/hooks.json(version: 1,事件名 preToolUse)和 .cursor/hooks/ 下的脚本,并显式设 failClosed: true。

每加一个文件,就用一次真实任务验证它有没有起作用:助手还犯那个错,就把对应的约束写具体;已经不再犯,就删掉那一条。没验证过的文件等于没写。

对应知识点 这一组只是 上下文与能力 在 Cursor 里的落地写法。通用规则见 上下文分层与预算(第一层 · 上下文)。七个位置都配完之后,再进 验证与门禁。