返回 AI编程

Plan 模式和 Sandbox 模式详解

Plan 模式和 Sandbox 模式详解

本指南详细介绍 Claude Code 的 Plan 模式(规划模式)和 Sandbox 模式(沙箱模式),帮助开发者更安全、更高效地使用 Claude Code。

一、Plan 模式(规划模式)

1.1 什么是 Plan 模式?

Plan 模式是一种"先规划、后执行"的工作模式,Claude 会先分析项目架构、依赖关系并起草实现方案,确认后才开始编写代码。

核心价值: 在这个模式下,Claude 会阅读代码、分析架构、起草计划,但绝不修改代码。直到你批准计划,它才会动手。你是架构师,它是执行者。

1.2 为什么使用 Plan 模式?

Anthropic 开发者关系负责人 Ado Kukic 有 90% 的时间都在使用这个模式。

Plan 模式工作流程

┌─────────────────────────────────────────────────────────────────┐
│                      Plan 模式工作流程                           │
│                                                                 │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐│
│  │ 接收任务  │ →  │ 分析项目  │ →  │ 设计方案  │ →  │ 用户确认 ││
│  └──────────┘    └──────────┘    └──────────┘    └──────────┘│
│                                                           ↓    │
│  ┌──────────┐    ┌──────────┐                          │    │
│  │ 完成任务  │ ←  │ 执行实现  │ ← ────────────────────────┘    │
│  └──────────┘    └──────────┘         "yes"                   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

1.3 进入 Plan 模式

快捷键方式

# 按两次 Shift+Tab
Shift+Tab, Shift+Tab

命令方式

# 使用命令进入 Plan 模式
/plan

1.4 Plan 模式工作流程详解

阶段 1:探索阶段

# 进入 Plan 模式后,Claude 会自动:
1. 读取相关文件
2. 分析代码结构
3. 理解依赖关系

阶段 2:规划阶段

# Claude 会:
1. 设计实现方案
2. 列出具体步骤
3. 识别潜在风险

阶段 3:确认阶段

# Claude 会展示:
1. 完整计划
2. 等待用户反馈
3. 根据反馈调整

阶段 4:执行阶段

# 用户确认 "yes" 后:
1. 按计划实施
2. 实时反馈进度
3. 处理异常情况

1.5 Plan 模式最佳实践

适合场景

| 场景 | 说明 |
|------|------|
| ✅ 复杂功能开发 | 多文件、多步骤的功能实现 |
| ✅ 架构重构 | 涉及多个模块的结构调整 |
| ✅ 性能优化 | 需要全面分析的优化任务 |
| ✅ 代码迁移 | 跨技术栈的代码迁移 |
| ✅ 不熟悉的项目 | 需要深入理解的项目 |

不适合场景

| 场景 | 说明 |
|------|------|
| ❌ 简单 bug 修复 | 单行代码修改 |
| ❌ 单行代码修改 | 简单的修复 |
| ❌ 文档查询 | 信息查找 |
| ❌ 快速原型验证 | 需要快速迭代 |

使用技巧

# 启用 Plan 模式
Shift+Tab × 2

# 明确任务需求
请帮我实现用户认证功能,包括:
1. 用户注册
2. 用户登录
3. JWT token 验证
4. 密码加密存储

# Claude 会先探索并规划:
Plan: 实现用户认证功能

1. 分析现有代码结构
2. 设计认证流程
3. 创建数据模型
4. 实现 API 端点
5. 添加中间件
6. 编写测试

确认后开始执行? (yes/no)

# 确认后开始实施
yes

1.6 Plan 模式示例

示例 1:实现新功能

# 原始需求
请帮我实现支付功能,包括:
1. 集成支付宝
2. 集成微信支付
3. 订单状态管理
4. 支付回调处理

# Plan 模式输出
Plan: 实现支付功能

## 分析阶段
- 已分析现有订单模块结构
- 已识别支付相关依赖
- 已了解现有 API 设计模式

## 实施计划

### 步骤 1: 基础设施
- [ ] 创建支付服务文件 (src/services/payment.ts)
- [ ] 添加支付配置 (config/payment.yaml)
- [ ] 安装必要依赖

### 步骤 2: 支付宝集成
- [ ] 实现支付宝签名
- [ ] 创建支付订单 API
- [ ] 实现支付回调处理

### 步骤 3: 微信支付集成
- [ ] 实现微信支付签名
- [ ] 创建支付订单 API
- [ ] 实现支付回调处理

### 步骤 4: 订单状态管理
- [ ] 更新订单状态枚举
- [ ] 实现状态流转逻辑
- [ ] 添加状态变更事件

### 步骤 5: 测试
- [ ] 编写单元测试
- [ ] 编写集成测试
- [ ] 测试支付流程

## 风险识别
1. 支付安全:需要严格的安全审查
2. 并发处理:需要考虑订单并发
3. 回调可靠性:需要实现重试机制

确认后开始执行? (yes/no)

示例 2:代码重构

# 原始需求
请帮我重构用户认证模块

# Plan 模式输出
Plan: 重构用户认证模块

## 分析阶段
- 已扫描认证相关文件
- 已识别耦合关系
- 已了解当前架构

## 重构计划

### 阶段 1: 提取服务层
- [ ] 创建 auth 服务 (src/services/auth.ts)
- [ ] 迁移业务逻辑

### 阶段 2: 优化中间件
- [ ] 重构认证中间件
- [ ] 优化权限检查

### 阶段 3: 更新 API
- [ ] 更新路由定义
- [ ] 优化请求验证

### 阶段 4: 测试覆盖
- [ ] 添加集成测试
- [ ] 验证兼容性

## 回滚计划
如有问题,可通过 git revert 回滚

确认后开始执行? (yes/no)

二、Sandbox 模式(沙箱模式)

2.1 什么是 Sandbox 模式?

Sandbox 模式通过定义允许的操作范围,拦截危险操作,提高安全性。

Sandbox 模式核心机制

┌─────────────────────────────────────────────────────────────────┐
│                     Sandbox 模式机制                             │
│                                                                 │
│  ┌──────────┐    ┌──────────────────┐    ┌─────────────────┐  │
│  │ 操作请求  │ →  │ Sandbox 规则检查  │ →  │ 执行/拦截/询问   │  │
│  └──────────┘    └──────────────────┘    └─────────────────┘  │
│                        ↓                                        │
│         ┌────────────┼────────────┐                            │
│         ↓            ↓            ↓                            │
│    ┌─────────┐  ┌─────────┐  ┌─────────┐                     │
│    │ 允许操作 │  │ 拒绝操作 │  │ 需确认  │                     │
│    └─────────┘  └─────────┘  └─────────┘                     │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2.2 配置 Sandbox 模式

方式一:通过 /permissions 命令

# 打开权限管理界面
claude /permissions

方式二:配置文件

编辑 ~/.claude/settings.json

{
  "permissions": {
    "allow": {
      "bash": [
        "npm install",
        "npm test",
        "npm run build",
        "git *",
        "node -v",
        "npm -v"
      ],
      "write": [
        "src/**/*",
        "tests/**/*",
        "*.md"
      ],
      "read": [
        "**/*"
      ]
    },
    "deny": {
      "bash": [
        "rm -rf *",
        "format *",
        "shutdown",
        "reboot"
      ],
      "write": [
        "node_modules/**/*",
        ".git/**/*",
        "/etc/*",
        "/usr/*"
      ]
    }
  }
}

2.3 Sandbox 配置详解

Allow 配置

{
  "permissions": {
    "allow": {
      "bash": [
        "npm test",
        "npm run build",
        "git status",
        "git log --oneline"
      ],
      "write": [
        "src/**/*",
        "tests/**/*",
        "docs/**/*",
        "*.md"
      ],
      "read": [
        "**/*"
      ]
    }
  }
}

Deny 配置

{
  "permissions": {
    "deny": {
      "bash": [
        "rm -rf *",
        "rm -rf node_modules",
        "format *",
        "chmod *",
        "shutdown",
        "reboot"
      ],
      "write": [
        "/etc/*",
        "/usr/*",
        "/var/*",
        ".git/**/*",
        "node_modules/**/*"
      ]
    }
  }
}

2.4 Sandbox 最佳实践

最小权限原则

{
  "permissions": {
    "allow": {
      "bash": ["npm test", "npm run build"],
      "write": ["src/**/*", "tests/**/*"]
    }
  }
}

特定项目配置

// .claude/settings.json (项目级)
{
  "permissions": {
    "allow": {
      "bash": [
        "npm run dev:*",
        "npm run test:*",
        "npm run build:*"
      ],
      "write": ["src/**/*", "tests/**/*", "docs/**/*"]
    },
    "deny": {
      "write": ["dist/**/*", "build/**/*"]
    }
  }
}

开发环境配置

{
  "permissions": {
    "allow": {
      "bash": [
        "npm run dev",
        "npm test",
        "npm run lint",
        "git status",
        "git diff"
      ],
      "write": [
        "src/**/*",
        "tests/**/*",
        "*.config.*"
      ]
    },
    "deny": {
      "bash": [
        "npm run build",
        "npm run deploy"
      ],
      "write": [
        "node_modules/**/*",
        ".next/**/*",
        "dist/**/*"
      ]
    }
  }
}

生产环境配置

{
  "permissions": {
    "allow": {
      "bash": [
        "npm test",
        "npm run build"
      ],
      "write": [
        "dist/**/*"
      ]
    },
    "deny": {
      "bash": [
        "rm -rf *",
        "npm run dev"
      ],
      "write": [
        "src/**/*",
        "tests/**/*"
      ]
    }
  }
}

2.5 Sandbox 常见问题

问题 1:操作被拒绝

错误信息:

Permission denied: command not allowed

解决方案:

# 查看当前权限配置
claude /permissions

# 添加允许的命令
编辑 ~/.claude/settings.json

问题 2:配置不生效

解决方案:

# 重启 Claude Code
exit
claude

# 检查配置格式
cat ~/.claude/settings.json | jq .

三、Plan 模式与 Sandbox 模式结合使用

结合使用的优势

# 在 Plan 模式中使用 Sandbox
/plan

# 规划完成后,Claude 会在 Sandbox 中安全执行

安全开发工作流

# 步骤 1: 规划阶段
/plan

# 步骤 2: 审查计划
Claude: 展示详细实施计划

# 步骤 3: 确认执行
yes

# 步骤 4: 安全执行
Claude: 在 Sandbox 中安全执行所有操作

# 步骤 5: 验证结果
Claude: 完成任务并报告

四、总结

通过本指南,你已经了解了:

  1. ✅ Plan 模式的核心概念和使用方法
  2. ✅ Plan 模式的工作流程和最佳实践
  3. ✅ Sandbox 模式的配置和使用
  4. ✅ Sandbox 模式的最佳实践
  5. ✅ 两种模式的结合使用

Plan 模式和 Sandbox 模式是 Claude Code 强大的安全保障机制,合理使用可以大大提高开发效率和安全性。

参考资源