Cursor + Claude Code 日常开发完整工作流
Cursor 内置 AI(Tab、Cmd+K、Cmd+L、Composer)与 Claude Code CLI 协同使用的完整工作流,包含能力对比、典型一天开发流程拆解、Rules 与 CLAUDE.md 协调、真实组件开发案例。
Cursor 自带四把 AI 武器:Tab 补全、Cmd+K 内联编辑、Cmd+L 聊天、Composer 多文件编辑。再加上在 Cursor 终端里跑的 Claude Code CLI Agent,等于一个项目里同时挂着五种不同节奏的 AI。新手最容易踩的坑是「样样都用 Composer」或「样样都丢给 Claude Code」,结果该用 Tab 的地方反复打开聊天框,该跑 Agent 的活又分十次手动改。本文按一个真实开发日的节奏,把五种工具该怎么各司其职讲清楚。
五种 AI 的能力区分
| 工具 | 触发方式 | 上下文范围 | 强项 | 不该用它做 |
|---|---|---|---|---|
| Cursor Tab | 打字时自动 | 当前光标附近 ~30 行 | 重复模式、变量名补全、import 自动加 | 写新功能逻辑 |
| Cmd+K | 选中代码后按 Cmd+K | 选中片段 + 文件上下文 | 局部重写、转换格式、改函数签名 | 跨文件改动 |
| Cmd+L | 侧边栏聊天 | 手动 @ 文件 | 问代码含义、讨论方案、查 API 用法 | 大量改动 |
| Composer (Cmd+I) | 多文件编辑面板 | 自选多个文件 | 中等规模改动、生成 3-5 个新文件 | 跑测试 / 长 Agent 任务 |
| Claude Code CLI | 终端 claude | 整个项目 + 工具调用 | 跨十几个文件改动、跑测试 / lint / 安装包、长任务 | 单行小修小补 |
一句话归纳:改一行用 Tab,改一段用 Cmd+K,问一段用 Cmd+L,做一个 feature 用 Composer,跑大重构 / 完整 feature + 测试 + 构建用 Claude Code。
一天典型开发流程的逐步拆解
假设今天的任务是给一个 Next.js 项目加一个「用户收藏夹」功能:新增 UI 组件、API 路由、数据库表、路由跳转、单元测试。
上午:探索阶段(Cmd+L 主场)
打开项目后第一件事不是写代码,是问:
@app/api @prisma/schema.prisma 现有的用户系统是怎么组织的?
认证用的是什么方案?数据库表关系画一下。
这种只读理解类问题走 Cmd+L 最划算——它不会乱改文件,回答完关上聊天就行。Claude Code CLI 也能干同样的事,但代价是要切到终端、它会在项目里跑各种 ls、grep、读完文件占 token,对纯问答来说太重。
上午稍晚:搭骨架(Composer 出场)
理解清楚后,让 Composer 一次性创建出几个空文件:
打开 Composer (Cmd+I),输入:
新增以下文件骨架(不实现具体逻辑,先把文件结构和类型签名定下来):
- app/api/favorites/route.ts (POST 加收藏、DELETE 删收藏、GET 列表)
- components/FavoriteButton.tsx
- components/FavoriteList.tsx
- lib/favorites.ts (业务逻辑层,调 prisma)
- types/favorite.ts
Composer 的好处是生成完所有文件后会在面板里集中展示 diff,可以一个个 Accept 或 Reject,整个过程在编辑器里完成。这一步走 Claude Code CLI 也行,但 CLI 默认会逐个文件确认,节奏比 Composer 慢一拍。
上午后段:填充逻辑(Cmd+K 高频)
骨架有了,挨个文件填实现。这一步 Cmd+K 是主力:
打开 lib/favorites.ts,选中 addFavorite 函数的空壳,按 Cmd+K:
用 prisma.favorite.create 实现,userId 从参数拿,
重复添加要返回已存在错误(用 P2002 unique constraint 判断)
Cmd+K 改完后回车 Accept,立刻进入下一个函数。这种「这一段我知道要写啥,让 AI 帮我打字」的场景,Cmd+K 比聊天框快十倍:不用切焦点,不用复制粘贴。
中午:写测试(Claude Code CLI 第一次登场)
业务代码写完后,测试是典型的「重复模式 + 跑得起来」任务——这种活交给 CLI Agent 最合适。在 Cursor 内置终端按 Cmd+` 打开终端:
claude
进入 REPL 后:
为 lib/favorites.ts 的所有导出函数写 Vitest 单元测试,
mock 掉 prisma,测试要覆盖正常路径和错误路径。
写完后跑 npm test 确认通过。
为什么这里切 CLI?因为:
- 要新建
lib/favorites.test.ts、可能修改vitest.config.ts、可能装@vitest/coverage-v8—— 跨文件 + 跑命令 - 写完要立刻跑测试看是否通过,Composer 不会自己跑 npm test,Claude Code 会
- 失败了 Agent 会自己看错误改测试,循环到通过为止
这就是 Agent 模式的核心价值:带反馈循环的多步骤任务。
下午:接 UI(混着用)
回到组件文件 FavoriteButton.tsx,Tab 补全会自动完成大量样板——写到 const handleClick = async () => 时它会猜出 fetch 调用,多数时候按 Tab 就够。
写到中间发现 props 类型没定义好,选中 props interface 按 Cmd+K:
加上 favoriteId 字段(number),onToggle 回调改为返回 Promise<void>
写完一整个组件后,想加个 loading 状态但不知道项目里别人怎么写的,按 Cmd+L:
@components 项目里其他按钮组件 loading 状态是怎么实现的?
给我看一两个例子
看完仿照写。Tab + Cmd+K + Cmd+L 三件套是日常编码 80% 的时间花的地方。
下午晚些:路由 + 国际化(Claude Code 第二次登场)
加完组件后还剩一堆零散收尾活:
- 在
app/(main)/profile/page.tsx里挂载FavoriteList - 在
messages/zh.json和messages/en.json里加 12 个翻译 key - 在
app/sitemap.ts里加入新路由 - 在 README 的功能列表里加一行
这些都是「小但分散」的活,让 Claude Code 一次跑完:
我刚加了收藏夹功能(FavoriteButton、FavoriteList、/api/favorites)。
帮我做以下收尾:
1. 在用户 profile 页挂上 FavoriteList
2. 国际化 key 加到 zh.json 和 en.json,按现有命名约定来
3. sitemap 加新路由
4. 更新 README 的功能列表
CLI Agent 会自己读相关文件、按现有风格补改、最后报告改了哪些文件。
.cursorrules 和 CLAUDE.md 怎么协调
两个文件做的事几乎完全一样:告诉 AI 项目约定、技术栈、风格偏好。但 Cursor 内置 AI 只读 .cursorrules(或新版的 .cursor/rules/*.mdc),Claude Code CLI 只读 CLAUDE.md。如果项目里两个都有,又写得不一样,结果就是 Composer 改的代码风格和 Claude Code 改的不一致。
推荐做法:单一真相源 + 符号链接 / 引用
方式一:写 CLAUDE.md 为主,.cursorrules 引用:
# 项目根目录
echo "请参考 ./CLAUDE.md 中的所有项目约定与代码规范。" > .cursorrules
方式二(macOS / Linux):
ln -s CLAUDE.md .cursorrules
Windows 用 mklink:
mklink .cursorrules CLAUDE.md
方式三:把核心规则写到 .cursor/rules/project.mdc(Cursor 新格式,支持 frontmatter),然后在 CLAUDE.md 里 @import 同一份内容。
应该写在 CLAUDE.md/.cursorrules 里的内容:
- 技术栈版本(Next.js 14 App Router、Prisma 5、Tailwind v4 等)
- 包管理器(pnpm,不是 npm)
- 测试框架与运行命令(
pnpm test不是npm test) - 文件命名约定(kebab-case 还是 PascalCase)
- 状态管理选型(Zustand,不要 Redux)
- 国际化方案(next-intl,文案放
messages/{locale}.json) - 提交信息格式(Conventional Commits)
- 不要碰的目录(
generated/、migrations/old/)
配合不顺的常见场景及对策
| 场景 | 现象 | 对策 |
|---|---|---|
| Cursor 改一半切到 Claude Code 接着改 | Claude Code 读到的是磁盘上保存过的版本,没读到 Cursor 编辑器里未保存的新代码 | 切 CLI 前 Cmd+S 保存全部(Cmd+Option+S 保存所有打开的文件) |
| Claude Code 改完文件,Cursor 编辑器没刷新 | Cursor 还显示旧内容,按 Save 会把旧内容覆盖回去 | 让 Cursor 在外部文件改动时自动重载:设置里搜 files.autoRefresh,开启 |
| Composer 和 Claude Code 同时改同一个文件 | 两边各改一半,互相覆盖 | 一次只用一个工具改一个文件,需要并行就明确分文件 |
| Cursor Tab 在 Claude Code 生成的代码里乱补全 | Tab 想接着补但接得不对 | 接受 Claude Code 的改动后,关闭再打开文件,让 Tab 重新建索引 |
| 两边对项目结构的理解不一致 | Cursor 以为是 Pages Router,Claude Code 认为是 App Router | 明确写到 CLAUDE.md / .cursorrules 里 |
| Claude Code 跑测试时 Cursor 也在跑 lint | 端口冲突或文件锁 | 跑长任务前关掉 Cursor 的 ESLint watch 模式 |
Cursor Pro 订阅 vs Anthropic API 的取舍
Cursor Pro 月费 20 美元,含 500 次「Fast Premium」请求(GPT-4、Claude)。Anthropic 直接订 API,按 token 计费,Claude Sonnet 大约每百万输入 token 3 美元、输出 token 15 美元。
| 维度 | Cursor Pro | Claude Code (Anthropic API / Max 订阅) |
|---|---|---|
| 计费方式 | 月费固定 | 按用量(API)或 Max 月度订阅 |
| 包含的模型 | 多家(GPT、Claude、Gemini) | 仅 Claude 系列 |
| 适合人群 | 日常用 Tab + 聊天为主 | 重度跑 Agent、长任务 |
| 长任务成本 | 一个大任务可能秒杀几十次额度 | 按实际 token 算,可控 |
| 隐私 | 经 Cursor 服务器中转 | 直连 Anthropic |
推荐组合:
- 同时订 Cursor Pro(用 Tab、Cmd+K、Cmd+L 不心疼)
- 加订 Claude Max 或开通 API 给 Claude Code CLI(跑 Agent 长任务)
只订 Cursor Pro 也能用 Claude Code(CLI 单独登录 Anthropic 账户),但 CLI 跑 Agent 不消耗 Cursor 额度,本质是两个独立账单。重度用户两边都得花钱。
如果预算紧张,优先保 Claude Code 订阅 —— Tab 和 Cmd+K 在 Cursor 免费版里也能用,只是模型差一些;而 Agent 任务没有 Claude Code 替代品,省不了。
实战搭配建议
最后归纳成一条主线,方便贴在 CLAUDE.md 的开头:
- 不知道做什么 → Cmd+L 问
- 知道要写啥、就这一段 → 写起来,让 Tab 接
- 知道要写啥、但懒得打字 → 选中按 Cmd+K
- 要新建 3-5 个文件、改动局限在一个 feature 内 → Composer
- 跨十几个文件 / 需要跑测试 / 需要装包 / 需要看 log 调试 → Claude Code CLI
- 改完了不确定对不对 → Cmd+L 让它解释一遍 diff
按这个顺序选工具,不会卡壳。
相关阅读
其他编辑器工作流:
- VS Code + Claude Code:远程开发与 Dev Container
- WebStorm + Claude Code:JS/TS 项目实战工作流
- Vim + Claude Code:纯键盘终端工作流
- Neovim + Claude Code:Lua 生态深度集成
- Zed Channel 多人协作开发:搭配 Claude Code 实战
相关编辑器安装教程: