13 · Notepads 记事本
持久化的可引用上下文——把那些你反复告诉 AI 的”背景知识”写成记事本,一 @ 即用。
01 什么是 Notepads
Notepads(记事本) 是 Cursor 在 0.45 版本引入的持久化上下文功能。用一句话概括:
Notepad 就像一张”超级便利贴”——你写一次,存起来,之后在任何对话、任何 Composer、任何 Inline Edit 里都能通过
@NotepadName随时引用。
在 Notepads 出现之前,你在 Cursor 里给 AI 提供上下文的方式只有两种:
- 在聊天窗口里重新描述——每次对话都要重复一遍项目背景、代码规范、架构约定
- 打开相关文件让 AI 看——但文件写了太多无关细节,AI 容易”迷失在代码里”
Notepads 解决了这两个痛点。你可以把最核心的背景信息写成一个独立的笔记,然后在任何 AI 交互中通过 @ 符号引用它。
它们是”活的”
Notepad 不是普通的 Markdown 文件。当你在 Chat、Composer 或 Inline Edit 中用 @NotepadName 引用它时,AI 看到的不是文件名——它会完整读入 Notepad 的全部内容。这意味着你写的每一条约定、每一个约束、每一段背景说明,都会像代码本身一样成为 AI 的”决策依据”。
02 创建你的第一个 Notepad
操作路径极其简单:
方式一:从 Notepads 面板创建
- 在左侧活动栏找到 Notepads 图标(一个📋样式的图标)→ 点击
- 面板顶部点击 “New Notepad”(新建记事本)
- 输入标题(比如
frontend-conventions) - 在编辑器区域写入内容
Cmd+S保存
方式二:从命令面板创建
Cmd+Shift+P打开命令面板- 输入
Notepad: Create New Notepad - 输入标题和内容
方式三:从已有文本快速创建
选中一段代码或文字 → 右键 → “Send to Notepad”(发送到记事本)→ 输入标题 → 保存。这个操作会把选中内容直接变成一个新的 Notepad,省去复制粘贴的步骤。
一个实际的例子
假设你创建了一个名为 api-patterns 的 Notepad,内容如下:
# API 设计约定
## 端点命名
- 全部使用 RESTful 风格:/resources/{id}
- 复数名词:/users, /orders, /products
- 版本号在 URL 中:/v1/users/{id}
## 响应格式
所有响应使用统一包装:
```json
{
"code": 200,
"message": "success",
"data": { ... },
"meta": {
"page": 1,
"pageSize": 20,
"total": 100
}
}错误处理
- 业务错误返回 200 + code 非零
- 系统错误使用 HTTP 状态码
- 错误信息中英文双语
认证
- 所有非公开接口使用 Bearer Token
- Token 从 Authorization 头获取
- 内部服务间调用使用 Service Account Token
之后在 Chat 或 Composer 中输入 `@api-patterns`,AI 就会**精确理解这套 API 约束**,生成的代码自然遵循这些约定。
---
## 03 Notepads 面板详解
Notepads 面板位于左侧活动栏,和文件浏览器、搜索、Git 同级。打开后你会发现几个关键区域:
### 列表区
显示所有已创建的 Notepad,按**最近修改时间**排序。每个条目显示:
- 名称(标题)
- 摘要(第一行内容预览)
- 更新时间
### 筛选与搜索
面板顶部有搜索框——你可以输入名称或关键词快速定位 Notepad。当你的 Notepad 数量多起来之后(10+ 个),这个搜索功能就变得非常实用。
### 分组管理
Cursor 允许你给 Notepad 添加**标签**或**前缀命名**来实现逻辑分组。比如:
| 分组 | 命名惯例 | 示例 |
|------|---------|------|
| 项目文档 | `doc-` 前缀 | `doc-prd`, `doc-api-design` |
| 编码约定 | `rule-` 前缀 | `rule-typescript`, `rule-test` |
| 架构笔记 | `arch-` 前缀 | `arch-db-schema`, `arch-auth-flow` |
| 团队规范 | `team-` 前缀 | `team-review-checklist`, `team-git-workflow` |
虽然没有官方的"文件夹"功能,但用前缀命名 + 搜索框的组合,已经足够管理几十个 Notepad。
### 编辑区
点击列表中的任意 Notepad,会在主编辑区打开它的内容——就像编辑一个普通文件。支持完整的 Markdown 语法,也**支持代码块**。
> **注意**:Notepad 和项目文件是不同的概念。Notepad 存储在 Cursor 的内部状态中(跨项目、跨会话持久),而文件是存储在磁盘上的项目代码。这意味着你换一个项目打开,Notepads 依然在。
---
## 04 如何引用:@NotepadName 精讲
引用 Notepad 的方式和你引用文件、符号、代码库完全一致——在输入框中输入 `@` 后接 Notepad 名称。
### 基础引用
```md
@api-patterns 请帮我按现有的 API 规范新建一个用户接口AI 会在执行前读入 api-patterns 的全部内容,然后根据其中的约束生成代码。
模糊匹配
你不必输入完整的 Notepad 名称——Cursor 支持模糊搜索。输入 @api 会列出所有名称中包含 “api” 的 Notepad,你可以用方向键选择。
在哪些入口可用
| AI 入口 | 是否支持 @Notepad | 备注 |
|---|---|---|
| Chat(Cmd+L) | 支持 | 最常用的引用场景 |
| Composer / Agent(Cmd+I) | 支持 | 复杂任务时引用约束 |
| Inline Edit(Cmd+K) | 暂不支持 | 单文件内的小修改一般不需要 |
| Tab 补全 | 不支持 | 属于被动触发,无输入框 |
实际对话示例
没有 Notepad 的 Chat:
用户:帮我写一个用户列表接口。
AI:(没有上下文)好的,我创建一个 Express 路由...有 Notepad 的 Chat:
用户:@api-patterns 帮我写一个获取用户列表的接口。
AI:(读取 api-patterns 后)好的,按照你们的 API 规范:
- 端点:GET /v1/users
- 响应:统一包装格式
- 认证:需要 Bearer Token
- 分页参数:page 和 pageSize质量差距是巨大的。没有上下文时,AI 只能按照通用最佳实践来写——但这很可能和你的项目风格不匹配。有了 Notepad,AI 知道你要什么风格。
05 最佳场景:什么时候该写 Notepad
Notepads 最有价值的地方在于那些反复出现、但粒度不足以写成文件的信息。以下是六个最推荐的场景。
1. PRD / 产品需求文档
把当前迭代的 PRD 要点写成 Notepad,开发时随时引用,AI 不会跑偏:
# sprint-24-prd
## 功能:用户通知中心
- 用户能在右上角看到未读通知数量(小红点)
- 点击展开通知列表,最多显示 20 条
- 通知分三类:系统通知、评论回复、状态变更
- 点击通知跳转到对应页面
- 全部标记已读按钮
## 非功能需求
- 通知实时性:30 秒内推送到前端
- 未读数存在 Redis,不查数据库
- 通知列表分页,每页 10 条
## 排期
- 后端 API:本周三前
- 前端 UI:本周五前
- 联调测试:下周一2. 架构决策记录(ADR)
团队做了一个重要的架构决策——写下来,每次开发相关功能时引用:
# arch-auth-flow
## 决策
采用 JWT + Refresh Token 双令牌方案
## 理由
1. 无状态认证,方便水平扩展
2. Refresh Token 实现"7 天免登录",改善用户体验
3. Access Token 15 分钟过期,降低泄露风险
## 关键约束
- Access Token 不存数据库
- Refresh Token 存入 Redis,设置 7 天 TTL
- 刷新接口 /v1/auth/refresh 不做速率限制(但是要做 Token 轮换)
- 退出登录时删除 Redis 中的 Refresh Token
## 相关文件
- src/middleware/auth.ts
- src/services/auth.service.ts
- src/utils/jwt.ts3. 编码约定
你的团队有自己的 TypeScript 风格、React 最佳实践、CSS 命名规范?写进 Notepad:
# rule-typescript
## 类型
- 优先使用 interface 而不是 type(对外 API 用 interface)
- 引入的第三方库类型用 import type
- 避免 any,用 unknown 代替
- 泛型参数用 T 开头:TItem, TResponse
## React
- 函数组件 + Hooks,不用类组件
- Props 接口命名为 ComponentNameProps
- Context + useReducer 管理全局状态,不用 Redux
- 自定义 Hook 用 use 前缀:useAuth, usePagination
## CSS
- Tailwind CSS 优先
- 复杂样式用 CSS Module
- 颜色变量从 tailwind.config.ts 中读取
- 响应式断点:sm(640) md(768) lg(1024) xl(1280)4. 数据库表结构
当你的数据库有几十张表,AI 需要知道表结构和关系才能生成正确的查询:
# arch-db-schema
## 核心表
### users
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | UUID | PK | |
| email | VARCHAR(255) | UNIQUE NOT NULL | |
| name | VARCHAR(100) | NOT NULL | |
| role | ENUM('admin','user') | NOT NULL DEFAULT 'user' | |
| created_at | TIMESTAMP | NOT NULL DEFAULT NOW() | |
| updated_at | TIMESTAMP | NOT NULL | |
### orders
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | UUID | PK | |
| user_id | UUID | FK -> users.id | |
| status | ENUM(...) | NOT NULL | pending/paid/shipped/delivered/cancelled |
| total | DECIMAL(10,2) | NOT NULL | |
| created_at | TIMESTAMP | NOT NULL DEFAULT NOW() | |
### 关系
- users 1:N orders
- orders 1:N order_items
- order_items N:1 products5. 测试策略
团队有特定的测试约定?写下来,AI 生成的测试用例自动符合:
# rule-test
## 单元测试(Vitest)
- 测试文件放在 __tests__/ 目录下
- 命名:*.test.ts
- 每个测试用 describe + it 结构
- Mock 外部依赖,不 mock 内部函数
## 组件测试(Testing Library)
- 优先测试用户行为,不测试实现细节
- 使用 screen.getByRole / findByRole 定位元素
- 避免 data-testid(除非万不得已)
## 覆盖率要求
- 行覆盖率 >= 80%
- 分支覆盖率 >= 70%
- 核心逻辑(认证、支付)要求 100%6. 第三方 API 接入文档
对接过的第三方 API 记下来,下次引用:
# doc-stripe-api
## 支付流程
1. 前端调用 POST /v1/payments/create-intent
2. 后端调用 stripe.paymentIntents.create() 创建
3. 返回 client_secret 给前端
4. 前端用 Stripe Elements 完成 3DS 认证
5. stripe webhook 通知 payment_intent.succeeded
6. 后端收到 webhook 后更新订单状态
## Webhook 验证
- 需要验证 stripe-signature 头
- 使用 stripe.webhooks.constructEvent()
- 本地测试用 stripe listen --forward-to localhost:3000/api/webhooks/stripe06 心智模型
理解 Notepads 的最佳方式是和两种你已经熟悉的概念做类比:
类比一:VSCode 片段(Snippets)
Snippets 让你把经常写的代码片段存起来一键插入。Notepads 可以理解为”思维层面的 Snippets”——你把经常给 AI 的背景信息存起来,一 @ 引用。
| Snippets | Notepads | |
|---|---|---|
| 存储什么 | 代码片段 | 背景知识、规则、文档 |
| 如何使用 | 键名触发、插入代码 | @名称触发、供给 AI |
| 用户感知 | 代码直接出现在编辑区 | AI 理解内容,你看到结果 |
类比二:备忘录 / 便利贴
Notepad 就像你在显示器上贴的便利贴——上面写着最重要的编码约定、当前迭代的需求要点、数据库表名——只不过这些便利贴是AI 也能看到的。
心智模型:
Notepad 是你和 AI 之间的”共享记忆”。你写一次,AI 永远记得——只要你在每次对话开始的时候 @ 它一下。
具体来说:
- 不是 .cursorrules —— .cursorrules 是全局的、总是生效的;Notepad 是按需引入的,你可以有多个 Notepad,在需要的时候才 @
- 不是文件 —— 文件是项目代码的一部分,有其格式和位置;Notepad 是独立的知识片段,跨项目存在
- 不是对话历史 —— 对话历史会随着新对话消失;Notepad 永久保存,随时可用
正确的使用姿势
一次性的背景说明 → 在 Chat 里直接打字告诉 AI
重复使用的背景知识 → 写成 Notepad,每次 @ 引用
全局生效的规则 → 写进 .cursorrules
只在当前对话有用的上下文 → 直接在对话中描述07 Notepads vs Rules vs .cursorrules
这是新手最容易混淆的三件事。Clear 一下三者的区别:
| 维度 | Notepads | Rules | .cursorrules |
|---|---|---|---|
| 作用范围 | 按需引用 | 项目级 + 技术栈自动匹配 | 项目级 |
| 何时生效 | 你在输入框里 @ 它时 | 自动加入每个 AI 请求 | 自动加入每个 AI 请求 |
| 用户控制 | 完全主动 | Cursor 自动匹配 | 完全主动 |
| 数量 | 不限 | 最多 10 条 | 1 个文件 |
| 存储位置 | Cursor 内部状态(跨项目) | Cursor 设置 | 项目根目录 |
| 支持组织 | 标签 + 名称搜索 | 列表排序 | 单个文件 |
| 典型内容 | PRD、架构决策、API 文档 | 技术栈、框架、语言偏好 | 项目特定的代码规则 |
| 适合谁 | 所有开发者 | 项目初期配置 | 团队共享规则 |
什么时候用哪个
-
.cursorrules —— 你的项目所有开发者都应该遵守的规则,比如”不要使用 lodash”、“优先使用 React Server Components”。它被提交到 Git,团队成员共享。
-
Rules —— 技术栈和框架层面的配置,比如”这是一个 Python 项目,使用 FastAPI 框架,数据库是 PostgreSQL”。Cursor 自动匹配这些规则到你的项目。
-
Notepads —— 你个人在开发中反复依赖的背景知识,比如当前迭代的 PRD、你刚刚研究的某个 API 的使用方式、你们团队的编码约定。它是私有的,不提交到 Git。
一个协作场景的例子
你在一个多人项目中工作:
项目 .cursorrules
├─ "使用 TypeScript 严格模式"
├─ "禁止使用 any 类型"
├─ "测试覆盖率必须 >= 80%"
└─ "优先使用 named export"
个人 Notepads
├─ arch-auth-flow(你负责的认证模块设计文档)
├─ rule-test-strategy(你偏好的测试写法)
└─ sprint-25-prd(当前迭代的需求要点)当你开发新功能时:
- .cursorrules 自动告诉 AI 项目的基本规则
- 你的 Notepad 主动告诉 AI 当前迭代的需求和你负责的模块设计
- 两者各司其职,互不冲突
08 进阶技巧
技巧一:Notepad 套 Notepad
在 Chat 或 Composer 中,你可以同时引用多个 Notepad:
@arch-auth-flow @api-patterns @sprint-25-prd
请帮我实现用户注册功能,遵循所有已有的设计约束AI 会同时读入三个 Notepad 的内容,综合理解项目背景、API 规范和当前的 PRD 需求。这相当于你一次性给 AI “灌输”了整套项目上下文。
技巧二:Notepad + @file + @codebase 组合
Notepad 提供背景知识,@file 提供具体文件内容,@codebase 提供全局搜索:
@arch-auth-flow 我现在在编辑 @src/middleware/auth.ts,
请帮我检查这个中间件是否和我们既定的认证架构一致。
如果有不一致的地方,请搜索整个代码库 @codebase,
找出所有受影响的地方并给出修改方案。技巧三:版本化你的 Notepad
Notepad 本身不维护版本历史,但你可以手动管理版本:
# arch-decision-v2
## 更新历史
- v1 (2025-10-01): 初始版本,决定使用 PostgreSQL
- v2 (2025-12-15): 增加读写分离方案,引入 PgBouncer 连接池
## 当前方案
...技巧四:模板化你的开发流程
创建一组”启动 Notepad”,每个新功能开发前快速引用:
| 启动 Notepad | 内容 |
|---|---|
kickoff-general | 团队通用的开发流程、代码 review 清单 |
kickoff-frontend | 前端需要的上下文(组件库、CSS 方案、路由约定) |
kickoff-backend | 后端需要的上下文(ORM、中间件、测试配置) |
每天开始新功能时,@kickoff-general @kickoff-backend 开始开发新功能...,AI 直接进入状态。
09 局限和注意事项
Notepads 虽然强大,但也有一些需要注意的地方:
不提交到 Git
Notepads 存储在 Cursor 的内部状态中——这意味着它们不会出现在 Git 历史里,也不会被你的队友看到。这是设计使然(Notepad 是个人工具),但如果你的目标是让整个团队共享上下文,你应该使用 .cursorrules 或项目文档文件。
不随项目迁移
因为存储在 Cursor 内部状态中,你换了另一台电脑登录相同的 Cursor 账号——Notepads 不会自动同步(在目前的版本中)。如果你经常在不同设备间切换,建议在项目中维护一份 .cursor/rules.md 作为备份。
内容长度有上限
虽然没有官方文档写死上限,但实践中建议每个 Notepad 控制在 500 行以内。太长的 Notepad 会和 AI 的上下文窗口”抢空间”——如果你的 Notepad 写了 2000 行,AI 能用来处理你代码的空间就少了。
不是 .cursorrules 的替代品
再次强调:Notepads 是主动引用的,而 .cursorrules 是总是生效的。如果你希望某个规则每次 AI 执行都自动遵守(比如”不要删除已有代码”、“注释必须写中文”),应该把它放在 .cursorrules 中,而不是 Notepad。
10 小结
| 关键问题 | 答案 |
|---|---|
| Notepads 是什么 | Cursor 中的”超级便利贴”——持久化、可引用的背景知识 |
| 怎么创建 | Notepads 面板 → New Notepad,或命令面板创建 |
| 怎么引用 | 在 Chat/Composer 中输入 @NotepadName |
| 和 .cursorrules 的区别 | Notepad 按需引用,.cursorrules 始终生效 |
| 和 Rules 的区别 | Notepad 偏个人,Rules 偏技术栈自动匹配 |
| 最适合存什么 | PRD、架构决策、编码约定、API 文档、数据库表结构 |
| 不适合存什么 | 太长的大段文档、需要团队共享的规则(用 .cursorrules) |
一句话记住 Notepads 的价值:
你不是重复告诉 AI 你的”项目是怎么回事”了。写一次,@ 一下,它就懂了。
下一篇:14 Composer 深度解析 —— Composer/Agent 模式的全方位指南,掌握 Cursor 最强 AI 能力的正确打开方式。