跨多个编码会话的项目
任务状态在会话之间自动保留
本教程揭示 Claude Code 的内部工作原理。理解这些机制可以帮助你更有效地使用它,并在遇到问题时更好地诊断。
Claude Code 的核心是一个简单的 while 循环:
┌─────────────────────────────────────────────────────────────┐│ 主循环(简化版) │├─────────────────────────────────────────────────────────────┤│ ││ 你的提示 ││ │ ││ ▼ ││ ┌────────────────────────────────────────────────────┐ ││ │ Claude 推理(无分类器,无路由器) │ ││ └───────────────────────┬────────────────────────────┘ ││ │ ││ 需要工具? │ ││ ┌─────┴─────┐ ││ 是 否 ││ │ │ ││ ▼ ▼ ││ 执行工具 文本回复(完成) ││ │ ││ └──────── 将结果反馈给 Claude ││ │ ││ (循环继续) ││ │└─────────────────────────────────────────────────────────────┘Claude Code 拥有 8 个核心工具:
| 工具 | 用途 |
|---|---|
Bash | 执行 shell 命令(通用适配器) |
Read | 读取文件内容(最多 2000 行) |
Edit | 修改现有文件(基于 diff) |
Write | 创建/覆盖文件 |
Grep | 搜索文件内容(基于 ripgrep) |
Glob | 按模式查找文件 |
Task | 派生子 Agent(隔离上下文) |
TodoWrite | 跟踪进度(旧版,见下文) |
Claude Code 提供两种任务管理方式:
推荐方案 — 持久化、跨会话、支持依赖
| 特性 | 说明 |
|---|---|
| 持久化 | 磁盘存储(~/.claude/tasks/) |
| 多会话 | 跨会话存活 |
| 依赖关系 | 任务 A 阻塞任务 B |
| 协调 | 多 Agent 广播 |
| 状态 | pending / in_progress / completed / failed |
可用工具:
TaskCreate — 创建带层级和依赖的新任务TaskUpdate — 修改任务状态、元数据和依赖TaskGet — 获取单个任务详情TaskList — 列出当前任务列表中的所有任务简单方案 — 仅会话内、无持久化
| 特性 | 说明 |
|---|---|
| 持久化 | 仅会话内存 |
| 多会话 | 会话结束即丢失 |
| 依赖关系 | 需手动排序 |
| 状态 | pending / in_progress / completed |
适用场景:
# 启用多会话任务持久化export CLAUDE_CODE_TASK_LIST_ID="project-name"claude
# 示例:项目特定的任务列表export CLAUDE_CODE_TASK_LIST_ID="api-v2-auth-refactor"claude{ "id": "task-auth-login", "title": "实现登录端点", "description": "POST /auth/login 带 JWT token 生成", "status": "in_progress", "dependencies": [], "metadata": { "priority": "high", "estimated_duration": "2h", "related_files": ["src/auth/login.ts", "src/middleware/auth.ts"] }}跨多个编码会话的项目
任务状态在会话之间自动保留
复杂任务层级和依赖
任务 A 完成后才能开始任务 B
多 Agent 协调场景
多个 Claude 实例共享任务状态
上下文压缩后恢复工作
任务状态不受 /compact 或 /clear 影响
docs/plans/auth-refactor.md + Tasks 用于状态subject 字段中存储关键信息(始终在 TaskList 中可见)description 保留给深度上下文(按需用 TaskGet 获取)"[P0] 修复登录 bug (src/auth.ts:45)" 而非 "修复 bug"项目(父级)└── 功能 A(子级) ├── 组件 A1(叶子任务) │ ├── 实现 │ └── 测试(依赖于实现) └── 组件 A2TaskGet 验证依赖in_progress(防止并行执行)completed(测试通过、已验证)failed 状态并附加错误元数据{ "priority": "high|medium|low", "estimated_duration": "2h", "related_files": ["path/to/file.ts"], "related_issue": "https://github.com/org/repo/issues/123", "type": "feature|bugfix|refactor|test"}当 Claude 的任务列表与你的意图不匹配时,问题不在 Claude — 在于你的指令。
任务列表是指令清晰度的镜子:
你的指令:"重构认证系统"
Claude 的任务列表:- [ ] 读取所有认证相关文件- [ ] 识别代码重复- [ ] 提取共享工具- [ ] 更新导入- [ ] 运行测试
你的反应:"这不是我的意思 — 我想从 session 切换到 JWT"
诊断:你的指令有歧义。"重构" 不等于 "替换"。| 偏差类型 | 含义 | 修复 |
|---|---|---|
| 任务太宽泛 | 指令缺乏具体性 | 添加什么、在哪里、如何做、如何验证 |
| 任务太窄 | 指令过于详细,缺少全局视角 | 陈述目标,而非仅列步骤 |
| 优先级错误 | 缺少关于什么重要的上下文 | 添加约束和优先级 |
| 缺少任务 | 隐含知识未共享 | 在提示中明确假设 |
| 多余任务 | Claude 推断了你未意图的需求 | 添加明确的范围边界 |