1. Cursor 规则类型到底在管什么:Manual、Always、Auto Attached 的语义差异
Cursor 的 Rules 系统里,Rule Type 决定了这条规则「什么时候被塞进模型的上下文」。很多人第一次打开.cursor/rules目录,看到 Manual、Always、Auto Attached、Agent Requested 这几个选项,随手选一个就写,结果发现规则要么从不生效,要么每次对话都被强行注入、把上下文挤爆。问题不在规则内容,而在类型选错了。
先把四个类型用一句话说清:
- Always:无条件生效。只要你在 Cursor 里发起任何 AI 请求,这条规则都会被拼进 system prompt。适合全局编码风格、安全红线、命名规范。
- Auto Attached:按文件匹配自动附加。你写
globs: ["src/**/*.ts"],当 AI 处理到匹配的文件时,规则自动加载。适合项目结构说明、模块映射、某类文件的约定。 - Manual:手动引用才生效。你在对话里用
@规则名显式点名,AI 才会读它。适合特殊硬件接口说明、一次性调试技巧、低频但重要的细节。 - Agent Requested:由模型自己判断是否需要。AI 在推理过程中觉得「我需要更多背景」时主动请求加载。适合不常用但偶尔关键的辅助资料。
这里有个容易踩的坑:Always 不是越多越好。每条 Always 规则都会占用 token,十条 Always 规则叠起来,可能还没开始写代码,上下文就被吃掉一大块。我试过在一个项目里放了 8 条 Always,结果模型回答明显变慢、还开始忽略后面的指令——因为前面的规则把注意力占满了。
所以选类型的核心逻辑是:这条规则是「每次都必须遵守」还是「只在特定场景才需要」。前者用 Always,后者往下走。判断标准可以简化成三个问题:
- 违反它会不会导致严重问题(安全、数据、架构)?会 → Always。
- 它是否只跟某类文件/目录相关?是 → Auto Attached。
- 它是否只在少数任务里才用得上?是 → Manual 或 Agent Requested。
Manual 和 Agent Requested 的区别在于「谁来触发」。Manual 是你主动@,Agent Requested 是模型主动要。实际用下来,Agent Requested 的触发时机不太可控,模型有时候该要的时候不要、不该要的时候乱要,所以我更倾向把关键规则放 Manual,自己控制节奏。
理解了类型语义,接下来要解决的是「规则生效时,AI 请求发到哪里」。Cursor 默认走官方通道,但如果你想让规则和模型调用都统一管理,可以把 Base URL 指向 TaoToken,用一套 Key 打通。下面先讲前置准备。
2. 把 Cursor 的 Base URL 改到 TaoToken:前置准备与 Key 获取
Cursor 支持自定义 OpenAI 兼容的 Base URL,这意味着你可以把模型请求指向 TaoToken 的统一通道。这样做的好处是:规则文件还是放在本地.cursor/rules,但模型调用走你自己的 Key,方便统一计费和切换模型。
前置准备分三步。
第一步:拿到 API Key。打开 TaoToken 控制台,进入 API Keys 页面创建一个新 Key。地址是https://taotoken.net/api-keys,创建后复制那串sk-开头的字符串,只显示一次,记得存好。
第二步:确认 Base URL。TaoToken 的 API 入口是https://taotoken.net/api,注意这里不带任何查询参数,就是干净的 API 根路径。Cursor 在填 Base URL 时,通常需要带上/v1后缀(取决于你选的模型协议),所以实际填https://taotoken.net/api/v1。如果 Cursor 版本要求不带/v1,它会自己补,两个都试一下,看哪个能通。
第三步:确认 Model ID。在 TaoToken 的模型列表里选一个你要用的,比如claude-sonnet-4-20250514或gpt-4o。Model ID 必须和平台上的完全一致,大小写、连字符都不能错,否则会报 model not found。
三件套凑齐后是这样:
| 配置项 | 值 |
|---|---|
| Base URL | https://taotoken.net/api/v1 |
| API Key | sk-开头的那串 |
| Model ID | 平台模型列表里的准确名称 |
注意:Base URL 和 API Key 是两个独立的东西,Key 决定「你是谁」,Base URL 决定「请求发到哪」。改 Base URL 不会影响你本地规则文件的加载逻辑,规则依然由 Cursor 本地解析。
如果你用的是 Claude Code 或 Codex 这类命令行工具,配置方式不一样,但三件套是一样的。Claude Code 走环境变量ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY,Codex 走~/.codex/auth.json。Cursor 则是在设置界面里填。
拿到 Key 之后,别急着写规则,先把连接跑通。下一节给可复制的配置片段。
3. 可复制配置:Cursor settings、规则文件与三件套片段
这一节给三份可以直接抄的东西:Cursor 的模型配置、规则文件的 frontmatter、以及命令行工具的配置片段。
Cursor 模型配置。打开 Cursor 设置,找到 Models 或 OpenAI API Key 区域,填入:
{ "openaiApiKey": "sk-你的TaoToken密钥", "openaiBaseUrl": "https://taotoken.net/api/v1", "model": "claude-sonnet-4-20250514" }不同 Cursor 版本字段名可能略有差异,有的叫baseUrl,有的在 UI 里直接填。核心就是 Base URL、Key、Model ID 三件套对齐。
规则文件 frontmatter。Cursor 的规则文件是.mdc格式,开头用 YAML frontmatter 声明类型。Always 类型长这样:
--- description: 全局编码规范,所有代码必须遵守 globs: alwaysApply: true --- # 全局规范 - 所有函数必须有类型注解 - 禁止使用 any - 提交前必须通过 lintAuto Attached 类型靠globs匹配:
--- description: TypeScript 源文件约定 globs: ["src/**/*.ts", "src/**/*.tsx"] alwaysApply: false --- # TS 文件约定 - 使用命名导出,不用默认导出 - 组件文件用 PascalCaseManual 类型不设 globs,也不自动应用:
--- description: 特殊硬件接口说明,需要时手动 @ 引用 globs: alwaysApply: false --- # 硬件接口细节 - 寄存器地址 0x3F8 - 波特率固定 115200关键字段就三个:description给人看,globs决定 Auto Attached 匹配范围,alwaysApply控制是否无条件生效。Manual 和 Agent Requested 都是alwaysApply: false且不设 globs,区别在触发方式。
命令行工具三件套。如果你同时用 Claude Code,配置在环境变量里:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的TaoToken密钥" export ANTHROPIC_MODEL="claude-sonnet-4-20250514"Codex 则写进~/.codex/auth.json:
{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api/v1" }注意:Cursor 的规则文件和模型配置是两套东西。规则文件决定「给模型看什么」,模型配置决定「请求发到哪」。改 Base URL 不会让规则失效,但规则里的内容会随请求一起发到 TaoToken 通道。
配置写完,下一步是验证。别跳过验证,很多「规则不生效」其实是连接就没通。
4. 逐项验证:规则是否生效、请求是否走通
验证分两层:先确认模型请求能通,再确认规则真的被加载。
第一层:连接验证。在 Cursor 里随便发一句「你好」,看是否正常返回。如果报 401,说明 Key 错了或没填;如果报 connection error,说明 Base URL 不对。也可以用 curl 直接测:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "回复 OK"}] }'返回里有choices数组且内容正常,说明通道通了。
第二层:规则验证。这是重点。Always 规则的验证方法是:写一条明显能影响输出的规则,比如「所有回答必须以『收到』开头」,然后随便问一句,看模型是否遵守。遵守了说明 Always 生效。
Auto Attached 的验证要麻烦一点。建一个src/test.ts,写一条 globs 匹配src/**/*.ts的规则,内容是「TS 文件里禁止用 var」。然后让 AI 改这个文件,看它是否避开 var。如果没避开,检查 globs 路径是否写对——Cursor 的 globs 是相对项目根目录的,src/**/*.ts和./src/**/*.ts在某些版本里行为不同。
Manual 的验证最直接:不@规则时问相关问题,模型应该不知道;@规则名后再问,模型应该能答上来。这个对比能确认 Manual 确实只在手动引用时生效。
Agent Requested 比较难验证,因为触发权在模型。你可以写一条规则说明「本项目使用特殊的日期格式 YYYYMMDD」,然后问一个涉及日期的问题,看模型是否主动请求加载。实测下来这个类型触发不稳定,不建议把关键规则放这里。
验证通过后,你会看到类似这样的成功结果:模型回答遵守了 Always 规则的开头要求,改 TS 文件时避开了 var,@引用后能答出硬件接口细节。三层都过,说明规则类型和 TaoToken 通道都配对了。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
配 Cursor + TaoToken 时,报错集中在几个地方。逐个说。
401 Unauthorized。最常见。原因通常是 Key 没填、填错、或者 Key 前面多了空格。检查sk-开头那串是否完整复制,有没有换行。还有一种情况是 Key 被禁用或额度用完,去控制台确认状态。
local proxy failed。这个报错通常出现在 Cursor 尝试走本地代理但连不上时。检查 Base URL 是否写成了https://taotoken.net/api而 Cursor 又自己补了/v1,导致路径变成/api/v1/v1。解决办法是 Base URL 只填到/api,让 Cursor 自己补,或者明确填/api/v1并确认 Cursor 不重复补。
Error reading choices。返回体里没有choices字段。可能是模型名写错,平台返回了错误结构;也可能是请求被中间层拦截返回了 HTML。先用 curl 测同一个 Model ID,确认返回结构正常。如果 curl 正常但 Cursor 报错,检查 Cursor 的模型配置是否和 curl 一致。
OAuth 相关报错。如果你用的是 Claude Code 或 Codex,它们默认走 OAuth 登录流程。改成 API Key 模式需要显式设置环境变量,否则它会一直尝试 OAuth。Claude Code 里确认ANTHROPIC_API_KEY已设置,Codex 里确认auth.json格式正确。
排查顺序建议固定成:先 curl 测通道 → 再测 Cursor 单次请求 → 最后测规则加载。这样能把「连接问题」和「规则问题」分开,不会混在一起瞎猜。
注意:所有报错排查都不要去动系统代理设置。Base URL 指向 TaoToken 是应用层配置,和网络层无关。如果 curl 能通但 Cursor 不通,问题一定在 Cursor 的配置字段,不在网络。
6. 规则类型选型建议与统一通道的长期用法
回到选型。基于实际项目经验,给一套默认分配:
全局编码风格、安全红线、命名规范 →Always。这类规则违反代价高,必须无条件生效。控制在 3 条以内,多了会挤上下文。
项目结构、模块映射、某类文件的约定 →Auto Attached。用 globs 精确匹配,别写**/*这种全匹配,否则等于 Always。
特殊硬件接口、调试技巧、低频细节 →Manual。需要时@一下,不占日常上下文。
AI 推理辅助、优化建议 →Agent Requested。可以放,但别依赖它,触发不稳定。
统一通道的长期价值在于:规则文件是本地资产,模型调用是外部服务,两者解耦。你换模型、换项目、换工具,规则文件可以复用,只要 Base URL 和 Key 指向同一个通道。Cursor、Claude Code、Codex 三件套配好之后,规则怎么写、放哪个类型,就成了纯粹的工程问题,不用再操心请求发到哪。
最后给一个实操建议:新建项目时,先只写一条 Always 规则(全局规范),跑通验证流程,再逐步加 Auto Attached 和 Manual。一次性堆十几条规则,出了问题根本不知道是哪条导致的。规则系统是渐进搭建的,不是一次配齐的。