规划师 (Planner)
规划师是 Claude Code 的战略规划专家,专门负责功能规划、需求分析、技术设计和开发任务分解。在任何新功能开发之前,规划师都是您的第一站。
核心职责
主要能力
- 需求分析: 深入理解用户需求,转化为技术规格
- 功能设计: 创建详细的功能设计文档和用户故事
- 技术设计: 制定技术架构和实现方案
- 任务分解: 将复杂功能拆分为可执行的开发任务
专业领域
- 产品功能规划
- 用户体验设计
- 技术架构决策
- 项目任务管理
使用场景
何时使用规划师
适合的场景
bash
# 新功能规划
"我需要添加用户认证功能"
# 需求分析
"我想设计一个电商购物车系统"
# 技术方案选择
"如何实现一个高性能的消息推送系统?"
# 项目任务分解
"将这个复杂功能拆分成具体的开发任务"不适合的场景
bash
# 代码实现 (应使用执行器)
"实现这个登录API接口"
# 代码调试 (应使用调试器)
"修复这个数据库连接错误"
# 代码审查 (应使用审查员)
"检查这段代码的性能问题"工作流程
规划师采用严格的三阶段交互式流程,每个阶段都需要用户明确确认才能进入下一阶段。
阶段 0: 功能类型确定
新功能流程
bash
用户: "我需要添加用户认证功能"
规划师: "我将为'用户认证'功能创建规划。请提供一个kebab-case格式的功能名称"
用户: "user-authentication"
规划师: "好的,我将创建 specs/user-authentication/ 目录并开始需求分析"现有功能流程
bash
用户: "我想优化之前规划的用户认证功能"
规划师: "我找到了现有的 user-authentication 规格,您想要优化哪个阶段?"
- 需求定义 (requirements.md)
- 技术设计 (design.md)
- 任务分解 (tasks.md)阶段 1: 需求定义
生成需求文档
规划师会创建符合 EARS 语法的需求文档:
markdown
# 用户认证功能需求
## 用户故事
### 用户注册
**作为** 新用户
**我想要** 使用邮箱和密码注册账户
**以便** 我可以访问应用的个性化功能
**验收标准:**
- **Given** 用户在注册页面 **When** 输入有效邮箱和密码 **Then** 系统应该创建新账户
- **Given** 用户输入重复邮箱 **When** 尝试注册 **Then** 系统应该显示"邮箱已存在"错误
- **Given** 用户输入弱密码 **When** 尝试注册 **Then** 系统应该显示密码强度要求
### 用户登录
**作为** 注册用户
**我想要** 使用邮箱和密码登录
**以便** 我可以访问我的个人账户
**验收标准:**
- **Given** 用户输入正确凭据 **When** 点击登录 **Then** 系统应该验证并登录用户
- **Given** 用户输入错误密码 **When** 尝试登录 **Then** 系统应该显示"凭据无效"错误
- **Given** 用户连续3次登录失败 **When** 再次尝试 **Then** 系统应该暂时锁定账户
## 功能需求
### FR-1: 用户注册
系统应该允许用户使用邮箱地址和密码创建新账户。
### FR-2: 用户登录
系统应该验证用户凭据并建立安全会话。
### FR-3: 密码重置
系统应该提供通过邮箱重置密码的机制。
## 非功能需求
### NFR-1: 安全性
- 密码必须使用BCrypt或Argon2进行哈希存储
- 会话令牌应该有合理的过期时间
- 支持HTTPS传输加密
### NFR-2: 性能
- 登录请求应该在2秒内响应
- 支持并发1000个用户登录
- 数据库查询应该有适当的索引优化
### NFR-3: 可用性
- 登录界面应该简洁直观
- 错误信息应该清晰明确
- 支持"记住我"功能交互式优化过程
bash
规划师: "我已经生成了初步的需求文档。让我重点询问几个关键问题:
1. 除了邮箱密码登录,是否需要支持第三方登录(如Google、Facebook)?
2. 密码复杂度要求是什么?(最小长度、特殊字符等)
3. 用户会话应该保持多长时间?
4. 是否需要双因素认证(2FA)?
5. 用户角色权限是否有不同级别?"
用户: "需要支持Google登录,密码至少8位包含数字,会话保持7天,暂不需要2FA"
规划师: "好的,我将更新需求文档包含这些信息。还有其他需要补充的吗?"阶段 2: 技术设计
确认需求后,规划师进入技术设计阶段:
markdown
# 用户认证技术设计
## 系统架构
### 组件概览
```mermaid
graph TB
A[前端应用] --> B[认证服务]
B --> C[用户数据库]
B --> D[会话存储Redis]
B --> E[邮件服务]
B --> F[Google OAuth API]数据模型
User 表
sql
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255),
display_name VARCHAR(100),
avatar_url TEXT,
email_verified BOOLEAN DEFAULT FALSE,
google_id VARCHAR(255) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Session 表
sql
CREATE TABLE user_sessions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
token_hash VARCHAR(255) NOT NULL,
expires_at TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);API 设计
认证端点
POST /api/auth/register
请求体:
json
{
"email": "user@example.com",
"password": "securePassword123",
"displayName": "John Doe"
}响应:
json
{
"success": true,
"user": {
"id": "uuid",
"email": "user@example.com",
"displayName": "John Doe"
},
"token": "jwt-token"
}POST /api/auth/login
请求体:
json
{
"email": "user@example.com",
"password": "securePassword123",
"rememberMe": true
}响应:
json
{
"success": true,
"user": {
"id": "uuid",
"email": "user@example.com",
"displayName": "John Doe"
},
"token": "jwt-token",
"expiresAt": "2024-01-01T00:00:00Z"
}GET /api/auth/google
重定向到Google OAuth授权页面
GET /api/auth/google/callback
处理Google OAuth回调并创建用户会话
前端组件设计
组件层次结构
text
AuthProvider
├── LoginPage
│ ├── LoginForm
│ ├── GoogleLoginButton
│ └── ResetPasswordLink
├── RegisterPage
│ ├── RegisterForm
│ └── PasswordStrengthIndicator
└── AuthGuard (路由保护)状态管理
typescript
interface AuthState {
user: User | null;
token: string | null;
isLoading: boolean;
error: string | null;
}
interface AuthActions {
login: (email: string, password: string) => Promise<void>;
register: (userData: RegisterData) => Promise<void>;
logout: () => void;
loginWithGoogle: () => Promise<void>;
resetPassword: (email: string) => Promise<void>;
}安全考虑
密码安全
- 使用 BCrypt 哈希,工作因子至少为12
- 实施密码强度验证
- 防止密码重用(存储历史哈希)
会话管理
- JWT令牌包含最小必要信息
- 实施令牌刷新机制
- 支持令牌撤销
攻击防护
- 实施登录速率限制
- CSRF保护
- SQL注入防护
- XSS防护
技术决策讨论
bash
规划师: "在技术设计中,我需要您确认几个关键决策:
1. **数据库选择**: 我建议使用PostgreSQL,您是否同意?
2. **会话存储**: 建议使用Redis存储会话,提高性能
3. **JWT vs Session**: 我建议使用JWT令牌,便于无状态扩展
4. **前端状态管理**: 建议使用Context API + useReducer
您对这些技术选择有什么看法吗?"
用户: "PostgreSQL和Redis都可以,但前端我们使用的是Zustand状态管理"
规划师: "好的,我将更新设计文档,使用Zustand进行前端状态管理"阶段 3: 任务分解
最后阶段是将设计转化为具体的开发任务:
markdown
# 用户认证功能开发任务
## 任务概览
总估时:约 3-4 周
优先级:P0 (最高)
依赖:数据库设计、API规范
## 后端任务
### 1. 数据库设计和迁移
- [ ] 1.1 设计用户表结构
- [ ] 1.1.1 创建users表迁移文件
- [ ] 1.1.2 创建user_sessions表迁移文件
- [ ] 1.1.3 添加必要的索引和约束
- [ ] 1.2 运行数据库迁移
- [ ] 1.3 编写数据库种子文件(测试数据)
### 2. 用户模型和数据访问层
- [ ] 2.1 创建User实体类
- [ ] 2.1.1 定义用户属性和验证规则
- [ ] 2.1.2 实现密码哈希方法
- [ ] 2.1.3 添加邮箱验证逻辑
- [ ] 2.2 创建UserRepository
- [ ] 2.2.1 实现用户CRUD操作
- [ ] 2.2.2 实现按邮箱查找用户
- [ ] 2.2.3 实现Google用户关联查找
- [ ] 2.3 创建SessionRepository
- [ ] 2.3.1 实现会话创建和验证
- [ ] 2.3.2 实现会话过期清理
- [ ] 2.3.3 实现会话撤销功能
### 3. 认证服务层
- [ ] 3.1 创建AuthService
- [ ] 3.1.1 实现用户注册逻辑
- [ ] 3.1.2 实现用户登录验证
- [ ] 3.1.3 实现密码重置功能
- [ ] 3.2 创建JWTService
- [ ] 3.2.1 实现JWT令牌生成
- [ ] 3.2.2 实现JWT令牌验证
- [ ] 3.2.3 实现令牌刷新机制
- [ ] 3.3 创建GoogleOAuthService
- [ ] 3.3.1 配置Google OAuth客户端
- [ ] 3.3.2 实现OAuth回调处理
- [ ] 3.3.3 实现用户信息获取和关联
### 4. API控制器
- [ ] 4.1 创建AuthController
- [ ] 4.1.1 实现注册端点 POST /api/auth/register
- [ ] 4.1.2 实现登录端点 POST /api/auth/login
- [ ] 4.1.3 实现登出端点 POST /api/auth/logout
- [ ] 4.1.4 实现用户信息端点 GET /api/auth/me
- [ ] 4.2 实现Google OAuth端点
- [ ] 4.2.1 实现OAuth重定向 GET /api/auth/google
- [ ] 4.2.2 实现OAuth回调 GET /api/auth/google/callback
- [ ] 4.3 实现密码重置端点
- [ ] 4.3.1 发送重置邮件 POST /api/auth/reset-password
- [ ] 4.3.2 确认重置密码 POST /api/auth/confirm-reset
### 5. 中间件和安全
- [ ] 5.1 创建认证中间件
- [ ] 5.1.1 JWT令牌验证中间件
- [ ] 5.1.2 用户权限检查中间件
- [ ] 5.2 实现安全措施
- [ ] 5.2.1 登录速率限制
- [ ] 5.2.2 CSRF保护
- [ ] 5.2.3 输入验证和清理
## 前端任务
### 6. 状态管理设置
- [ ] 6.1 配置Zustand存储
- [ ] 6.1.1 创建认证状态store
- [ ] 6.1.2 定义用户状态类型
- [ ] 6.1.3 实现状态持久化
- [ ] 6.2 创建认证actions
- [ ] 6.2.1 实现登录action
- [ ] 6.2.2 实现注册action
- [ ] 6.2.3 实现登出action
### 7. API集成层
- [ ] 7.1 创建认证API客户端
- [ ] 7.1.1 配置HTTP客户端(Axios/Fetch)
- [ ] 7.1.2 实现请求拦截器(自动添加token)
- [ ] 7.1.3 实现响应拦截器(处理认证错误)
- [ ] 7.2 实现API方法
- [ ] 7.2.1 登录API调用
- [ ] 7.2.2 注册API调用
- [ ] 7.2.3 Google登录API调用
- [ ] 7.2.4 密码重置API调用
### 8. UI组件开发
- [ ] 8.1 创建认证表单组件
- [ ] 8.1.1 LoginForm组件
- [ ] 8.1.1.1 邮箱密码输入字段
- [ ] 8.1.1.2 表单验证逻辑
- [ ] 8.1.1.3 错误状态显示
- [ ] 8.1.2 RegisterForm组件
- [ ] 8.1.2.1 注册字段设计
- [ ] 8.1.2.2 密码强度指示器
- [ ] 8.1.2.3 条款同意选择
- [ ] 8.2 创建第三方登录组件
- [ ] 8.2.1 GoogleLoginButton组件
- [ ] 8.2.2 处理OAuth回调页面
- [ ] 8.3 创建密码重置组件
- [ ] 8.3.1 ResetPasswordForm组件
- [ ] 8.3.2 重置确认页面
### 9. 页面和路由
- [ ] 9.1 创建认证页面
- [ ] 9.1.1 登录页面 /login
- [ ] 9.1.2 注册页面 /register
- [ ] 9.1.3 密码重置页面 /reset-password
- [ ] 9.2 实现路由保护
- [ ] 9.2.1 AuthGuard组件(保护需要登录的路由)
- [ ] 9.2.2 GuestGuard组件(登录用户重定向)
- [ ] 9.3 实现自动重定向逻辑
### 10. 用户体验优化
- [ ] 10.1 加载状态管理
- [ ] 10.1.1 登录/注册按钮loading状态
- [ ] 10.1.2 页面级loading指示器
- [ ] 10.2 错误处理和提示
- [ ] 10.2.1 表单验证错误显示
- [ ] 10.2.2 网络错误处理
- [ ] 10.2.3 成功消息提示
- [ ] 10.3 用户反馈优化
- [ ] 10.3.1 邮箱验证提醒
- [ ] 10.3.2 密码重置成功提示
## 测试任务
### 11. 后端测试
- [ ] 11.1 单元测试
- [ ] 11.1.1 AuthService测试
- [ ] 11.1.2 UserRepository测试
- [ ] 11.1.3 JWTService测试
- [ ] 11.2 集成测试
- [ ] 11.2.1 认证API端点测试
- [ ] 11.2.2 数据库集成测试
- [ ] 11.3 安全测试
- [ ] 11.3.1 SQL注入测试
- [ ] 11.3.2 认证绕过测试
### 12. 前端测试
- [ ] 12.1 组件测试
- [ ] 12.1.1 LoginForm组件测试
- [ ] 12.1.2 RegisterForm组件测试
- [ ] 12.2 集成测试
- [ ] 12.2.1 登录流程端到端测试
- [ ] 12.2.2 注册流程端到端测试
- [ ] 12.3 用户体验测试
- [ ] 12.3.1 表单验证测试
- [ ] 12.3.2 错误处理测试
## 部署和配置
### 13. 环境配置
- [ ] 13.1 开发环境配置
- [ ] 13.1.1 数据库连接配置
- [ ] 13.1.2 Google OAuth应用设置
- [ ] 13.1.3 邮件服务配置
- [ ] 13.2 生产环境准备
- [ ] 13.2.1 环境变量配置
- [ ] 13.2.2 SSL证书配置
- [ ] 13.2.3 Redis集群配置
### 14. 监控和日志
- [ ] 14.1 实现认证日志
- [ ] 14.1.1 登录尝试日志
- [ ] 14.1.2 安全事件日志
- [ ] 14.2 设置监控指标
- [ ] 14.2.1 登录成功率监控
- [ ] 14.2.2 API响应时间监控
## 验收标准
### 功能验收
- [ ] 用户可以使用邮箱密码成功注册和登录
- [ ] Google登录功能正常工作
- [ ] 密码重置流程完整可用
- [ ] 会话管理正确(过期、刷新、撤销)
- [ ] 错误处理用户友好
### 性能验收
- [ ] 登录响应时间 < 2秒
- [ ] 支持1000并发用户
- [ ] 数据库查询优化(索引使用)
### 安全验收
- [ ] 密码正确哈希存储
- [ ] JWT令牌安全实现
- [ ] 防护常见攻击(SQL注入、XSS、CSRF)
- [ ] 通过安全审计
## 发布计划
### 第一阶段 (Week 1-2): 核心功能
- 完成任务 1-7: 后端基础和API
- 完成任务 8-9: 前端基础UI
### 第二阶段 (Week 2-3): 增强功能
- 完成任务 10: 用户体验优化
- 完成任务 11-12: 测试覆盖
### 第三阶段 (Week 3-4): 部署上线
- 完成任务 13-14: 部署和监控
- 完成全部验收标准
- 生产环境发布使用技巧
1. 明确需求表达
bash
# 模糊的需求
"我需要一个登录功能"
# 具体的需求
"我需要为电商应用添加用户认证功能,支持邮箱密码登录和Google第三方登录,包含注册、密码重置功能"2. 分阶段确认
规划师严格按阶段工作,每个阶段都需要您的确认:
bash
规划师: "需求分析完成,请确认是否可以进入技术设计阶段?"
用户: "确认,可以进入下一阶段"
规划师: "好的,开始技术设计..."3. 迭代优化
每个阶段都支持反复优化:
bash
用户: "需求文档中缺少邮箱验证功能"
规划师: "好的,我将在需求文档中添加邮箱验证相关的用户故事和验收标准"4. 利用项目上下文
确保规划师了解您的项目背景:
bash
# 提供项目信息
"这是一个Flutter移动应用,后端使用Node.js和PostgreSQL"
# 引用现有文档
"请参考 @.ai-rules/tech.md 了解我们的技术栈"高级功能
1. 需求模板
规划师支持不同类型的需求模板:
bash
# 使用特定模板
claude --agent=planner --template=ecommerce "设计商品管理功能"
# 自定义模板
claude --agent=planner --template=custom "使用我们的企业级需求模板"2. 需求复用
对于相似功能可以复用已有需求:
bash
# 基于现有功能扩展
claude --agent=planner "基于user-authentication功能,设计admin-authentication"
# 需求对比分析
claude --agent=planner "对比分析当前需求与industry best practices"3. 多角色视角
规划师可以从不同角色角度分析需求:
bash
# 多角色分析
claude --agent=planner "从用户、开发者、运维三个角度分析这个功能"
# 利益相关者分析
claude --agent=planner "分析这个功能对产品经理、开发团队、最终用户的影响"质量保证
EARS 语法标准
规划师严格使用 EARS (Easy Approach to Requirements Syntax) 语法:
markdown
# 正确的EARS格式
**Given** 用户在登录页面
**When** 输入正确的邮箱和密码
**Then** 系统应该验证凭据并重定向到仪表板
# 系统需求格式
系统应该在用户连续3次登录失败后暂时锁定账户15分钟任务依赖管理
任务分解严格按照依赖关系排序:
markdown
# 正确的依赖顺序
- [ ] 1. 数据库设计 (无依赖)
- [ ] 2. 用户模型 (依赖: 数据库设计)
- [ ] 3. 认证服务 (依赖: 用户模型)
- [ ] 4. API控制器 (依赖: 认证服务)常见问题
Q: 规划师生成的任务太详细了,可以简化吗?
A: 可以要求规划师调整粒度:
bash
"请将任务粒度调整为更高层次,每个任务大约半天到一天的工作量"Q: 如何处理需求变更?
A: 规划师支持需求迭代:
bash
"需求有变更,请更新 user-authentication 功能的需求文档,增加双因素认证"Q: 可以同时规划多个功能吗?
A: 建议一次专注一个功能,但可以分析功能间依赖:
bash
"先完成用户认证功能规划,然后分析它与订单管理功能的依赖关系"最佳实践
1. 需求收集准备
- 明确业务目标
- 了解用户场景
- 准备技术约束信息
- 收集类似功能参考
2. 有效沟通
- 使用具体的业务术语
- 提供充分的上下文
- 及时反馈和确认
- 积极参与讨论
3. 质量控制
- 仔细审查每个阶段的输出
- 确保需求完备性
- 验证技术方案可行性
- 检查任务分解合理性
4. 文档管理
- 将规格文件纳入版本控制
- 定期更新需求文档
- 与团队共享规划结果
- 建立需求追溯体系
相关资源
规划师 - 好的开始是成功的一半