5.5 OpenSpec + Claude Code + Cursor 协作最佳实践
概述
在实际开发中,开发者往往不会只使用单一的 AI 工具。Claude Code 擅长复杂推理和架构设计,Cursor 则在代码编辑和实时补全方面表现出色。本章将介绍如何利用 OpenSpec 统一规格,让两种工具优势互补。
工具特性对比
| 特性 | Claude Code | Cursor |
|---|---|---|
| 规格撰写 | ⭐⭐⭐⭐⭐ 深度推理 | ⭐⭐⭐ 快速生成 |
| 代码补全 | ⭐⭐⭐ 手动触发 | ⭐⭐⭐⭐⭐ 实时补全 |
| 多文件编辑 | ⭐⭐⭐⭐ 逐个确认 | ⭐⭐⭐⭐⭐ Composer |
| 终端操作 | ⭐⭐⭐⭐⭐ 原生集成 | ⭐⭐⭐ 需切换 |
| 调试分析 | ⭐⭐⭐⭐⭐ 深度分析 | ⭐⭐⭐ 快速定位 |
| 架构设计 | ⭐⭐⭐⭐⭐ 全局视角 | ⭐⭐⭐ 局部优化 |
推荐分工模式
text
开发工作流
规格阶段 (Claude Code) 实现阶段 (Cursor)
┌─────────────────┐ ┌─────────────────┐
│ • 需求分析 │ ──▶ │ • 快速编码 │
│ • 规格撰写 │ │ • 实时补全 │
│ • 架构设计 │ │ • 多文件编辑 │
│ • 边界场景 │ │ • 即时预览 │
└─────────────────┘ └─────────────────┘
│ │
└──────────┬─────────────────┘
▼
┌─────────────────┐
│ OpenSpec │
│ 统一规格标准 │
└─────────────────┘统一配置结构
text
my-project/
├── AGENTS.md # 通用 AI 入口
├── CLAUDE.md # Claude Code 专属配置
├── .cursorrules # Cursor 专属配置
├── openspec/
│ ├── AGENTS.md # OpenSpec 工作流指令
│ ├── project.md # 项目上下文(共享)
│ ├── specs/ # 规格目录(共享)
│ └── changes/ # 变更目录(共享)
├── .claude/
│ └── commands/openspec/ # Claude Code 命令
└── .cursor/
└── prompts/openspec/ # Cursor 命令工作流 1:Claude Code 规格 + Cursor 实现
最常见的协作模式,适合大多数功能开发。
阶段 1:需求分析与规格(Claude Code)
bash
# 在终端启动 Claude Code
Human: 我需要为电商应用添加优惠券功能。请创建详细的 OpenSpec 提案。
Claude: 好的,让我先分析现有规格和项目架构...
[分析 openspec/specs/ 和 openspec/project.md]
创建变更提案 add-coupon-system:
proposal.md:
- 分析了与 order、payment 规格的交互
- 考虑了多种优惠券类型(百分比、固定金额、满减)
- 设计了防滥用机制
tasks.md:
- 12 个实现任务,按依赖关系排序
specs/coupon/spec.md:
- 5 个核心需求
- 15 个场景覆盖正常和异常情况Claude Code 的优势:
- 深度分析现有架构
- 考虑边界情况和异常场景
- 生成完整的规格文档
阶段 2:审核与完善(Claude Code)
bash
Human: 审核提案,考虑以下问题:
1. 优惠券能否与会员折扣叠加?
2. 过期优惠券如何处理?
3. 多件商品如何分摊优惠?
Claude: 好问题!让我补充这些场景到规格中...
[更新 spec.md 添加 3 个新需求和 8 个场景]
建议:这些场景涉及复杂的业务逻辑,建议在 design.md 中
记录分摊算法的决策过程。阶段 3:代码实现(Cursor)
规格完成后,切换到 Cursor 进行快速实现:
text
[在 Cursor 中打开项目]
[Cmd+I 打开 Composer]
输入: @openspec/changes/add-coupon-system 实现这个变更的所有任务
Cursor:
读取提案和任务...
将创建/修改以下文件:
1. prisma/schema.prisma - 添加 Coupon 模型
2. src/models/Coupon.ts - 优惠券数据访问
3. src/services/CouponService.ts - 业务逻辑
4. src/routes/coupon.ts - API 端点
5. src/middleware/couponValidation.ts - 验证中间件
...
[显示所有文件的 diff 预览]
[Apply All]Cursor 的优势:
- 实时代码补全
- 一次性预览多文件变更
- 快速迭代和修改
阶段 4:调试与优化(混合使用)
text
遇到复杂 bug → Claude Code 分析根因
需要快速修复 → Cursor 内联编辑
需要重构建议 → Claude Code 架构视角
实施重构 → Cursor 多文件编辑阶段 5:归档(任一工具)
bash
# Claude Code
/openspec:archive add-coupon-system
# 或 Cursor
/openspec-archive add-coupon-system工作流 2:Cursor 快速原型 + Claude Code 完善
适合探索性开发或快速验证想法。
阶段 1:快速原型(Cursor)
text
[Cursor Composer]
输入: 快速创建一个用户反馈收集功能的原型,
包含评分和文字反馈,先不用太正式
Cursor:
创建基础实现:
- src/components/FeedbackForm.tsx
- src/routes/feedback.ts
- prisma/schema.prisma 添加 Feedback 模型
[Apply All]阶段 2:规格化(Claude Code)
bash
Human: 我用 Cursor 创建了一个反馈功能原型。
请帮我将其正式化为 OpenSpec 规格。
Claude: 让我分析已有的代码并创建规格...
[分析 src/components/FeedbackForm.tsx 等文件]
创建 openspec/changes/add-user-feedback/:
- 基于现有代码反向生成规格
- 补充遗漏的场景(匿名反馈、敏感词过滤等)
- 添加验收标准
建议:原型缺少以下场景的处理:
1. 用户未登录时的行为
2. 反馈字数限制
3. 防止重复提交阶段 3:完善实现(Cursor)
text
[Cursor]
输入: @openspec/changes/add-user-feedback/specs
根据规格完善现有的反馈功能代码
Cursor: 补充实现:
- 添加字数验证
- 实现防重复提交
- 添加未登录提示
...工作流 3:并行开发
团队成员可以同时使用不同工具。
text
开发者 A (Claude Code) 开发者 B (Cursor)
│ │
▼ ▼
创建 add-auth 提案 创建 add-search 提案
│ │
└──────────┬───────────────────┘
▼
openspec/changes/
├── add-auth/ (A 负责)
└── add-search/ (B 负责)
│
▼
Git 分支隔离
各自实现
│
▼
合并时规格检查高级技巧
1. 上下文共享
创建 CLAUDE.md 供 Claude Code 使用:
markdown
# Project Instructions
## OpenSpec
This project uses OpenSpec. Read `openspec/AGENTS.md` for workflow.
## Code Conventions
- TypeScript strict mode
- Async/await patterns
- Comprehensive error handling
## When Creating Proposals
- Always check existing specs first
- Consider interactions with payment and order modules
- Include security considerations创建 .cursorrules 供 Cursor 使用:
markdown
# Cursor Rules
## OpenSpec Integration
Use `/openspec-*` commands for spec-driven development.
## Code Style
- TypeScript strict
- Prefer functional components
- Use React Query for data fetching
## File Locations
- Specs: openspec/specs/
- Changes: openspec/changes/2. 规格驱动测试
从规格自动生成测试:
text
[Claude Code]
Human: 根据 openspec/specs/coupon/spec.md 生成完整的测试套件
Claude: 我将为每个场景生成对应的测试...
[生成 tests/coupon.test.ts]text
[Cursor - 快速补充测试]
选中某个场景,Cmd+K:
"为这个场景生成单元测试"3. 规格评审 Checklist
在切换工具前使用检查清单:
markdown
## 规格完成检查(离开 Claude Code 前)
- [ ] 所有需求都有 `### Requirement:` 标题
- [ ] 每个需求至少一个 `#### Scenario:`
- [ ] 异常场景已覆盖
- [ ] 安全考虑已记录
- [ ] tasks.md 任务按依赖排序
- [ ] 运行 `openspec validate --strict` 通过
## 实现完成检查(离开 Cursor 前)
- [ ] 所有任务标记为 [x]
- [ ] 代码符合规格要求
- [ ] 测试覆盖主要场景
- [ ] 无 lint 错误
- [ ] 准备好归档4. 冲突处理
当两个工具的建议冲突时:
bash
Human: Cursor 建议用 Redux,但之前 Claude Code 的 design.md
选择了 Zustand。应该怎么处理?
Claude: 让我回顾 design.md 中的决策理由...
design.md 选择 Zustand 的原因是:
1. 项目规模小,Redux 过重
2. 已有组件使用 hooks 模式
3. Bundle size 考虑
建议:保持 Zustand 决策,让我更新 .cursorrules
禁止 Redux 建议:
```markdown
## State Management
Use Zustand only. Do not suggest Redux.
Reason: See openspec/changes/add-state/design.md
### 5. 增量迁移现有项目
```bash
# Step 1: 初始化 OpenSpec(任一工具)
openspec init
# Step 2: 使用 Claude Code 逆向生成规格
Human: 分析 src/auth/ 目录,为现有认证功能生成 OpenSpec 规格
# Step 3: 审核并调整规格
Human: 审核生成的规格,确保覆盖所有现有功能
# Step 4: 后续开发使用标准流程
# 新功能走 proposal → implement → archive常见问题解决
问题 1:规格格式不一致
症状:Claude Code 和 Cursor 生成的规格格式略有差异。
解决:统一使用验证命令:
bash
# 每次生成规格后运行
openspec validate <change-id> --strict问题 2:上下文丢失
症状:切换工具后,AI 不记得之前的讨论。
解决:所有决策记录在 OpenSpec 文件中:
markdown
# design.md - 记录所有技术决策
## Decision Log
### 2024-12-05: State Management
- Chose Zustand over Redux
- Reason: smaller bundle, simpler API
- Discussed in Claude Code session问题 3:并行开发冲突
症状:两个开发者的变更修改了同一个规格。
解决:
bash
# 使用 Git 分支
git checkout -b feature/add-auth
# 开发...
git checkout main
git pull
git merge feature/add-auth
# 解决冲突时参考规格语义本章小结
OpenSpec + Claude Code + Cursor 的协作要点:
- 分工明确:Claude Code 负责规格和架构,Cursor 负责实现
- 规格统一:
openspec/目录是两个工具的共同真相来源 - 上下文共享:通过
project.md、CLAUDE.md、.cursorrules共享配置 - 灵活切换:根据任务类型选择最适合的工具
- 验证一致:使用
openspec validate确保格式统一
完整示例代码
以下是完整的多工具协作项目配置脚本:
bash
#!/bin/bash
# OpenSpec + Claude Code + Cursor 协作配置脚本
set -e
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
log() { echo -e "${BLUE}[Setup]${NC} $1"; }
success() { echo -e "${GREEN}[✓]${NC} $1"; }
PROJECT_DIR="openspec-collaboration-demo"
log "创建协作演示项目: $PROJECT_DIR"
rm -rf "$PROJECT_DIR"
mkdir -p "$PROJECT_DIR"
cd "$PROJECT_DIR"
git init -q
# ============================================
# 1. OpenSpec 基础配置
# ============================================
log "配置 OpenSpec..."
mkdir -p openspec/{specs,changes/archive}
mkdir -p .claude/commands/openspec
mkdir -p .cursor/prompts/openspec
# project.md - 共享项目上下文
cat > openspec/project.md << 'EOF'
# Project Context
## Overview
E-commerce platform with coupon and feedback features.
## Tech Stack
- Language: TypeScript 5.x
- Runtime: Node.js 20
- Framework: Express 4.x
- ORM: Prisma 5.x
- Frontend: React 18 + Vite
- State: Zustand
- Testing: Vitest + Playwright
## Architecture
### Backend
- Controller → Service → Repository pattern
- RESTful API under /api/v1/
- JWT authentication
### Frontend
- Feature-based folder structure
- Shared components in src/components/common/
- React Query for server state
## Conventions
### Naming
- Files: kebab-case (user-profile.ts)
- Classes: PascalCase (UserProfile)
- Functions: camelCase (getUserProfile)
- Constants: SCREAMING_SNAKE_CASE
### API Design
- Use HTTP status codes correctly
- Consistent error format: { error: { code, message } }
- Pagination: { data, pagination: { page, limit, total } }
## Security
- Validate all user input
- Use parameterized queries
- Rate limiting on auth endpoints
- CORS configured for specific origins
EOF
# AGENTS.md - OpenSpec 工作流
cat > openspec/AGENTS.md << 'EOF'
# OpenSpec Instructions
## Workflow
1. **Create**: `/openspec:proposal` or `/openspec-proposal`
2. **Implement**: `/openspec:apply` or `/openspec-apply`
3. **Archive**: `/openspec:archive` or `/openspec-archive`
## Spec Format
- Requirements: `### Requirement: Name`
- Scenarios: `#### Scenario: Name`
- Keywords: **WHEN**, **THEN**, **AND**, **GIVEN**
## Before Starting
1. Run `openspec list --specs`
2. Run `openspec list`
3. Read `openspec/project.md`
EOF
# 根目录 AGENTS.md
cat > AGENTS.md << 'EOF'
<!-- OPENSPEC:START -->
# AI Assistant Instructions
This project uses OpenSpec for spec-driven development.
See `openspec/AGENTS.md` for workflow details.
See `openspec/project.md` for project context.
<!-- OPENSPEC:END -->
EOF
success "OpenSpec 配置完成"
# ============================================
# 2. Claude Code 配置
# ============================================
log "配置 Claude Code..."
cat > CLAUDE.md << 'EOF'
# Claude Code Instructions
## OpenSpec Integration
This project uses OpenSpec. Always check specs before implementing.
Commands:
- `/openspec:proposal` - Create change proposal
- `/openspec:apply` - Implement change
- `/openspec:archive` - Archive completed change
## Your Strengths (Use These)
- Deep analysis of requirements
- Comprehensive spec writing
- Architecture decisions
- Edge case identification
- Security considerations
## Workflow Preference
1. Analyze existing specs first
2. Create detailed proposals with all scenarios
3. Document decisions in design.md
4. Hand off to Cursor for implementation
## Code Conventions
Follow `openspec/project.md` strictly.
## Decision Documentation
Record all architectural decisions in `design.md` with:
- Context
- Decision
- Alternatives considered
- Trade-offs
EOF
# Claude Code commands
cat > .claude/commands/openspec/proposal.md << 'EOF'
# OpenSpec Proposal (Claude Code)
Create a comprehensive change proposal.
## Your Task
1. Analyze existing specs: `openspec list --specs`
2. Understand project context: `openspec/project.md`
3. Create detailed proposal with:
- Thorough requirements analysis
- All edge cases and error scenarios
- Security considerations
- Integration points with existing specs
## Output
- proposal.md with detailed Why/What/Impact
- tasks.md with dependency-ordered tasks
- design.md for complex decisions
- specs/<capability>/spec.md with comprehensive scenarios
User request: {{input}}
EOF
cat > .claude/commands/openspec/apply.md << 'EOF'
# OpenSpec Apply (Claude Code)
Implement a change proposal.
For complex implementations, consider handing off to Cursor
for faster multi-file editing.
Change ID: {{input}}
EOF
cat > .claude/commands/openspec/archive.md << 'EOF'
# OpenSpec Archive (Claude Code)
Archive completed change: `openspec archive {{input}} --yes`
EOF
success "Claude Code 配置完成"
# ============================================
# 3. Cursor 配置
# ============================================
log "配置 Cursor..."
cat > .cursorrules << 'EOF'
# Cursor Rules
## OpenSpec Integration
This project uses OpenSpec for spec-driven development.
Commands:
- `/openspec-proposal` - Quick proposal creation
- `/openspec-apply` - Fast implementation
- `/openspec-archive` - Archive changes
## Your Strengths (Use These)
- Fast code completion
- Multi-file editing with Composer
- Real-time preview
- Quick iterations
## When to Use Cursor
- Implementing approved proposals
- Quick code changes
- Refactoring with preview
- Test writing from specs
## When to Defer to Claude Code
- Complex requirement analysis
- Architecture decisions
- Security review
- Edge case identification
## Code Style
- TypeScript strict mode
- Async/await (no .then)
- Comprehensive error handling
- Follow openspec/project.md conventions
## State Management
Use Zustand only. Do not suggest Redux or MobX.
## File Locations
- Specs: openspec/specs/
- Changes: openspec/changes/
- Project context: openspec/project.md
EOF
# Cursor commands
cat > .cursor/prompts/openspec/openspec-proposal.md << 'EOF'
# OpenSpec Proposal (Cursor)
Create a change proposal based on user request.
For complex requirements, suggest using Claude Code
for deeper analysis.
User request: {input}
EOF
cat > .cursor/prompts/openspec/openspec-apply.md << 'EOF'
# OpenSpec Apply (Cursor)
Implement change using Composer for multi-file editing.
1. Read proposal.md and tasks.md
2. Show all file changes in preview
3. Apply after user confirmation
Change ID: {input}
EOF
cat > .cursor/prompts/openspec/openspec-archive.md << 'EOF'
# OpenSpec Archive (Cursor)
Run: `openspec archive {input} --yes`
EOF
success "Cursor 配置完成"
# ============================================
# 4. 示例规格
# ============================================
log "创建示例规格..."
mkdir -p openspec/specs/{order,payment}
cat > openspec/specs/order/spec.md << 'EOF'
# Order Specification
## Purpose
Manage customer orders and order lifecycle.
## Requirements
### Requirement: Create Order
The system SHALL allow users to create orders from cart.
#### Scenario: Successful order
- **GIVEN** user has items in cart
- **WHEN** user submits order
- **THEN** order is created with pending status
- **AND** cart is cleared
### Requirement: Order Status
The system SHALL track order status.
#### Scenario: Status transitions
- **GIVEN** order exists
- **WHEN** payment is confirmed
- **THEN** status changes to confirmed
- **AND** inventory is reserved
EOF
cat > openspec/specs/payment/spec.md << 'EOF'
# Payment Specification
## Purpose
Handle payment processing.
## Requirements
### Requirement: Process Payment
The system SHALL process payments via Stripe.
#### Scenario: Successful payment
- **WHEN** user submits payment
- **AND** card is valid
- **THEN** payment is processed
- **AND** receipt is generated
EOF
success "示例规格已创建"
# ============================================
# 5. 示例变更(展示协作)
# ============================================
log "创建协作示例变更..."
CHANGE_ID="add-coupon-system"
mkdir -p "openspec/changes/$CHANGE_ID/specs/coupon"
cat > "openspec/changes/$CHANGE_ID/proposal.md" << 'EOF'
## Why
电商平台需要优惠券功能以促进销售和用户留存。
## What Changes
- 新增优惠券数据模型和管理 API
- 实现优惠券验证和应用逻辑
- 与订单和支付模块集成
## Impact
- **New spec**: coupon
- **Modified specs**: order (应用优惠), payment (金额计算)
- **Breaking changes**: None
## Notes
- 此提案由 Claude Code 创建(深度分析)
- 实现将由 Cursor 完成(快速编码)
- design.md 记录了折扣计算算法决策
EOF
cat > "openspec/changes/$CHANGE_ID/design.md" << 'EOF'
# Technical Design: Coupon System
## Context
需要支持多种优惠券类型,与现有订单系统集成。
## Decisions
### Decision 1: Coupon Types
支持三种类型:
- percentage: 百分比折扣
- fixed: 固定金额减免
- threshold: 满减优惠
### Decision 2: Stacking Rules
- 优惠券不可叠加(一单一券)
- 优惠券可与会员折扣叠加(会员折扣先计算)
### Decision 3: Discount Calculation
Order:
1. 原价
2. 会员折扣(如适用)
3. 优惠券折扣
4. 最终价格
## Trade-offs
- 简单规则便于理解,但限制了营销灵活性
- 后续可扩展为更复杂的规则引擎
EOF
cat > "openspec/changes/$CHANGE_ID/tasks.md" << 'EOF'
# Tasks: Add Coupon System
## 1. Database (Cursor)
- [ ] 1.1 Create Coupon model in Prisma
- [ ] 1.2 Create CouponUsage model
- [ ] 1.3 Run migration
## 2. Backend Services (Cursor)
- [ ] 2.1 CouponService - CRUD operations
- [ ] 2.2 CouponValidationService - validation logic
- [ ] 2.3 DiscountCalculationService - pricing logic
## 3. API Endpoints (Cursor)
- [ ] 3.1 GET /api/v1/coupons - list user's coupons
- [ ] 3.2 POST /api/v1/coupons/validate - validate coupon
- [ ] 3.3 POST /api/v1/orders/:id/apply-coupon - apply to order
## 4. Integration (Claude Code review, Cursor implement)
- [ ] 4.1 Modify order creation to accept coupon
- [ ] 4.2 Update payment calculation
- [ ] 4.3 Add coupon info to order response
## 5. Testing (Cursor)
- [ ] 5.1 Unit tests for services
- [ ] 5.2 Integration tests for API
- [ ] 5.3 E2E test for complete flow
EOF
cat > "openspec/changes/$CHANGE_ID/specs/coupon/spec.md" << 'EOF'
# Coupon Specification
## Purpose
Provide discount coupons for promotional campaigns.
## Requirements
### Requirement: Coupon Types
The system SHALL support multiple coupon types.
#### Scenario: Percentage discount
- **GIVEN** coupon type is percentage with value 20
- **WHEN** applied to $100 order
- **THEN** discount is $20
- **AND** final price is $80
#### Scenario: Fixed amount discount
- **GIVEN** coupon type is fixed with value 15
- **WHEN** applied to $100 order
- **THEN** discount is $15
- **AND** final price is $85
#### Scenario: Threshold discount
- **GIVEN** coupon requires minimum $50, discount $10
- **WHEN** applied to $60 order
- **THEN** discount is $10
- **AND** final price is $50
### Requirement: Coupon Validation
The system MUST validate coupons before application.
#### Scenario: Valid coupon
- **GIVEN** coupon exists and is active
- **AND** not expired
- **AND** usage limit not reached
- **WHEN** user validates coupon
- **THEN** validation succeeds
#### Scenario: Expired coupon
- **GIVEN** coupon end_date is in the past
- **WHEN** user tries to use it
- **THEN** error "Coupon has expired" is returned
#### Scenario: Usage limit exceeded
- **GIVEN** coupon max_uses is 100
- **AND** current uses is 100
- **WHEN** user tries to use it
- **THEN** error "Coupon limit reached" is returned
### Requirement: Single Use Per Order
The system SHALL allow only one coupon per order.
#### Scenario: Apply coupon to order
- **GIVEN** order has no coupon
- **WHEN** user applies valid coupon
- **THEN** coupon is applied
- **AND** price is recalculated
#### Scenario: Replace coupon
- **GIVEN** order already has a coupon
- **WHEN** user applies different coupon
- **THEN** old coupon is removed
- **AND** new coupon is applied
### Requirement: Stacking with Member Discount
The system SHALL allow coupon stacking with member discounts.
#### Scenario: Member with coupon
- **GIVEN** user has 10% member discount
- **AND** applies 20% coupon
- **WHEN** order is $100
- **THEN** member discount: $100 * 0.9 = $90
- **AND** coupon discount: $90 * 0.8 = $72
- **AND** final price is $72
EOF
success "协作示例变更已创建"
# ============================================
# 6. 验证
# ============================================
log "验证配置..."
if command -v openspec &> /dev/null; then
openspec validate "$CHANGE_ID" --strict 2>/dev/null || echo "验证完成"
fi
# ============================================
# 7. 显示结果
# ============================================
echo ""
echo "========================================"
echo " 协作配置完成!"
echo "========================================"
echo ""
echo "项目结构:"
find . -name "*.md" -o -name ".cursorrules" | sort | head -20
echo ""
echo "协作工作流:"
echo ""
echo "1. 规格阶段 (Claude Code):"
echo " claude"
echo " > /openspec:proposal Add new feature"
echo ""
echo "2. 实现阶段 (Cursor):"
echo " cursor ."
echo " Cmd+I > /openspec-apply add-coupon-system"
echo ""
echo "3. 归档 (任一工具):"
echo " openspec archive add-coupon-system --yes"
echo ""
echo "配置文件:"
echo "- CLAUDE.md: Claude Code 专属指令"
echo "- .cursorrules: Cursor 专属规则"
echo "- openspec/project.md: 共享项目上下文"将此脚本保存为 setup-collaboration.sh,然后执行:
bash
chmod +x setup-collaboration.sh
./setup-collaboration.sh这个脚本会创建一个完整的协作项目,包括:
- OpenSpec 目录结构和共享配置
- Claude Code 专属配置(CLAUDE.md、命令)
- Cursor 专属配置(.cursorrules、命令)
- 示例规格和协作变更提案
- 展示分工的任务标注(哪些用 Claude Code,哪些用 Cursor)
用两个工具分别打开项目目录,即可开始协作开发。