Files
VibeEngineering/DESIGN.md

1180 lines
38 KiB
Markdown
Raw Normal View History

# VibeEngineering V2 设计文档
> **目标**:在 Claude Code CLI 上实现自动化开发系统,融合 Superpowers 专家方法论 + 跨 Compact 恢复机制,实现"人工把关设计,自动执行任务"的工作流程。
>
> **核心原则**
> - 设计阶段需要人工确认(命令边界形成自然审查点),执行阶段全自动化
> - 执行阶段使用子代理驱动模式Implementer → Spec Reviewer → Quality Reviewer
> - 使用 Claude Code 原生 Task 系统替代自定义状态管理metadata 记录执行细节
> - 跨 Compact 恢复PreCompact Hook 保存上下文 → SessionStart Hook 引导恢复
> - 校验 Task 作为最后一个 Task对比 design.md + metadata 检查降级
---
## 一、核心设计理念
### 1.1 命令驱动的两阶段分离
```
┌─────────────────────────────────────────────────────────────────────────┐
│ Vibe Engineering V2 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 设计阶段 │ │
│ │ ────────────────────────── │ │
│ │ │ │
│ │ /vibe-brainstorming "需求" │ │
│ │ └── 使用 brainstorming skill → 生成 design.md │ │
│ │ │ │
│ │ ↓ 用户审核 design.md命令边界 = 审查点) │ │
│ │ │ │
│ │ /vibe-plan │ │
│ │ └── 使用 writing-plans skill → 生成 plan.md │ │
│ │ │ │
│ │ 特点: │ │
│ │ ├── 每个命令独立结束,形成自然的审查点 │ │
│ │ └── 用户手动执行下一个命令 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ↓ 用户审核 plan.md ↓ │
│ ↓ 执行 /vibe-execute ↓ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 执行阶段 │ │
│ │ ────────────────────────── │ │
│ │ │ │
│ │ /vibe-execute │ │
│ │ ├── 按转换规则从 plan.md 创建 Task 系统 │ │
│ │ ├── 自动追加校验 Task │ │
│ │ ├── 创建 session.yml │ │
│ │ └── 协调者循环执行所有 Task │ │
│ │ │ │
│ │ Task 执行: │ │
│ │ ├── 派发 Implementer 子代理(实现 + TDD + 提交 + 更新 metadata│ │
│ │ ├── 派发 Spec Reviewer 子代理(规格符合性审查) │ │
│ │ └── 派发 Quality Reviewer 子代理(代码质量审查) │ │
│ │ │ │
│ │ 跨 Compact 恢复: │ │
│ │ ├── PreCompact Hook保存当前任务上下文 │ │
│ │ └── SessionStart Hook引导恢复执行 │ │
│ │ │ │
│ │ 校验阶段(最后一个 Task │ │
│ │ ├── 对比 design.md + Task metadata 检查降级 │ │
│ │ ├── 运行完整测试套件 │ │
│ │ ├── 发现问题 → 创建修复 Task → 继续执行 │ │
│ │ └── 全部通过 → 保存快照 → 标记完成 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 1.2 V1 到 V2 的关键变化
| 方面 | V1 | V2 |
|------|----|----|
| **状态管理** | 自定义状态文件 `vibe-state.local.md` | Claude Code 原生 Task 系统 |
| **执行细节** | 无持久化记录 | Task metadata 持久化记录 |
| **执行控制** | Stop Hook 拦截 + 灌 Prompt | Task 系统自动持久化 |
| **Compact 恢复** | 依赖状态文件 phase 字段 | PreCompact + SessionStart Hook 组合 |
| **完成验证** | verification-before-completion skill | 校验 Task自动追加作为最后一个 Task |
| **降级检测** | 无 | 校验 Task 对比 metadata 检测降级 |
### 1.3 子代理驱动模式
```
执行阶段的每个业务 Task 执行流程:
Task N业务任务
├── Task tool: Implementer (general-purpose)
│ │
│ ├── 阅读任务需求
│ ├── 遵循 TDDRED-GREEN-REFACTOR
│ ├── 实现功能
│ ├── Git commit
│ └── 更新 Task metadatafiles_modified, errors_encountered, test_results, git_commit
│ │
│ ▼
├── Task tool: Spec Reviewer (general-purpose)
│ │
│ ├── 独立阅读代码(不信任 Implementer 报告)
│ ├── 逐条验证需求是否满足
│ ├── 检查遗漏或多余功能
│ │
│ ▼ 问题? → Implementer 修复 → 重新审查
│ │
├── Task tool: Quality Reviewer (general-purpose)
│ │
│ ├── 审查代码质量、架构、测试
│ ├── 分类问题:关键/重要/次要
│ │
│ ▼ 问题? → Implementer 修复 → 重新审查
│ │
└── 主窗口TaskUpdate status=completed
所有业务 Task completed
校验 Task 启动(最后一个 pending Task
├── 读取所有 Task JSON + metadata
├── 对比 design.md 逐条校验
├── 运行完整测试套件
├── 检查 metadata 中未解决问题
▼ 发现问题? → 创建修复 Task → 执行 → 重新校验
▼ 全部通过
├── 保存 Task 快照
└── 标记校验 Task completed → Task JSON 被系统删除
```
---
## 二、整体流程图
```mermaid
graph TB
subgraph init ["初始化阶段 - vibe-execute"]
A1["读取 plan.md"] --> A2["按转换规则创建业务 Task"]
A2 --> A5["自动追加校验 Task"]
A5 --> A4["创建 session.yml"]
end
subgraph exec ["执行阶段 - 协调者循环"]
B0["获取下一个 pending Task"] --> B00{"是校验 Task?"}
B00 -->|否| B1["派发 Implementer 子代理"]
subgraph task ["业务 Task 执行"]
B1 --> B2["Implementer: 实现/测试/提交"]
B2 --> B3["Implementer: 更新 Task metadata"]
B3 --> B4["派发 Spec Reviewer"]
B4 --> B5{"规格符合?"}
B5 -->|否| B6["Implementer: 修复规格差距"]
B6 --> B4
B5 -->|是| B7["派发 Code Quality Reviewer"]
B7 --> B8{"质量通过?"}
B8 -->|否| B9["Implementer: 修复质量问题"]
B9 --> B7
B8 -->|是| B10["TaskUpdate status=completed"]
end
B10 --> B0
B00 -->|是| B20["校验 Task 开始"]
subgraph verify ["校验 Task 执行"]
B20 --> B21["读取所有 Task JSON + metadata"]
B21 --> B22["对比 design.md 逐条校验"]
B22 --> B23["运行完整测试套件"]
B23 --> B24["检查 metadata 中未解决问题"]
B24 --> B25{"全部通过?"}
B25 -->|否| B26["创建修复 Task"]
B26 --> B0
B25 -->|是| B27["保存 Task 快照"]
B27 --> B28["标记校验 Task completed"]
B28 --> B29["Task JSON 被删除"]
end
end
subgraph precompact ["PreCompact 阶段"]
C1["PreCompact Hook 触发"] --> C2["读取 transcript.jsonl"]
C2 --> C3["找到最后 TaskUpdate completed"]
C3 --> C4["提取之后的内容"]
C4 --> C5["写入 last_task_context.jsonl"]
C5 --> C6["Compact 发生"]
end
subgraph recovery ["恢复阶段 - SessionStart"]
D1["SessionStart Hook 触发"] --> D2["读取 design.md"]
D2 --> D3["读取所有 Task JSON"]
D3 --> D4["读取 last_task_context.jsonl"]
end
A4 --> B0
B0 -.可能触发.-> C1
C6 --> D1
D4 --> B0
```
---
## 三、文件体系
```
项目根目录/
├── docs/plans/
│ ├── {timestamp}-design.md # 需求和架构(设计阶段产出)
│ └── {timestamp}-plan.md # 实现计划(设计阶段产出)
├── .vibe/
│ ├── session.yml # 会话元信息task_list_id, design_doc
│ ├── last_task_context.jsonl # 当前任务执行过程PreCompact 生成)
│ └── task-snapshot.md # Task 快照(校验通过后保存)
├── .claude/
│ ├── commands/
│ │ ├── vibe-brainstorming.md # 设计阶段第一步:需求探索
│ │ ├── vibe-plan.md # 设计阶段第二步:创建计划
│ │ └── vibe-execute.md # 执行阶段:创建 Task + 协调执行
│ ├── hooks/
│ │ ├── session-start.sh # 恢复提示词
│ │ ├── pre-compact.sh # 调用提取脚本
│ │ └── extract-last-context.js # transcript → last_task_context.jsonl
│ ├── skills/
│ │ ├── brainstorming/ # 需求探索方法论
│ │ ├── writing-plans/ # 计划编写方法论
│ │ ├── test-driven-development/ # TDD 方法论
│ │ └── subagent-driven-development/ # 子代理驱动执行方法论
│ ├── settings.local.json # Hook 配置
│ └── CLAUDE.md # 项目级提示词(含 metadata 读取说明)
└── ~/.claude/tasks/{TaskListId}/ # Claude Code 原生 Task 系统
├── 1.json # Task + metadata动态
├── 2.json
└── ... # ⚠️ 所有任务完成后被系统删除
```
### 文件职责
| 文件 | 内容 | 生命周期 |
|------|------|---------|
| **design.md** | 需求分析、架构设计、技术选型 | 永久 |
| **plan.md** | 任务分解、TDD 步骤 | 永久 |
| **Task JSON** | 任务信息 + metadata执行细节 | 执行期间,完成后删除 |
| **last_task_context.jsonl** | 当前任务执行过程 | 每次 PreCompact 覆盖 |
| **task-snapshot.md** | Task JSON 快照 | 永久 |
| **session.yml** | task_list_id, design_doc | 执行期间 |
---
## 四、命令设计
### 4.1 /vibe-brainstorming - 需求探索
**文件**`.claude/commands/vibe-brainstorming.md`
````markdown
---
name: vibe-brainstorming
description: 需求探索和设计文档生成
arguments:
- name: requirement
description: 用户需求描述
required: true
---
# /vibe-brainstorming
使用 brainstorming skill 探索需求,生成设计文档。
## 执行步骤
1. 调用 brainstorming skill传入用户需求
2. 探索需求,澄清问题
3. 分析 2-3 种技术方案
4. 生成设计文档:`docs/plans/YYYY-MM-DD-<feature>-design.md`
## 输出
完成后提示用户:
```
设计文档已生成docs/plans/YYYY-MM-DD-<feature>-design.md
请审核设计文档,确认后执行:/vibe-plan
```
````
### 4.2 /vibe-plan - 创建实现计划
**文件**`.claude/commands/vibe-plan.md`
````markdown
---
name: vibe-plan
description: 从设计文档创建实现计划
---
# /vibe-plan
使用 writing-plans skill 分解任务,生成实现计划。
## 执行步骤
1. 读取最新的设计文档 `docs/plans/*-design.md`
2. 调用 writing-plans skill
3. 分解任务,定义 TDD 步骤
4. 生成实现计划:`docs/plans/YYYY-MM-DD-<feature>-plan.md`
## 输出
完成后提示用户:
```
实现计划已生成docs/plans/YYYY-MM-DD-<feature>-plan.md
请审核实现计划,确认后执行:/vibe-execute
```
````
### 4.3 /vibe-execute - 执行阶段
**文件**`.claude/commands/vibe-execute.md`
这是最关键的命令,包含完整的转换规则和执行逻辑。
````markdown
---
name: vibe-execute
description: 从 plan.md 创建 Task 系统并执行
---
# /vibe-execute
从 plan.md 创建 Claude Code Task 系统,协调子代理执行所有任务。
## Phase 1: 初始化 - 创建 Task 系统
### 1.1 读取 plan.md
读取最新的实现计划:`docs/plans/*-plan.md`
### 1.2 按转换规则创建业务 Task
遍历 plan.md 中的所有 Task按 Task 编号识别,如 Task 0.1, Task 1.1 等),为每个 Task 调用 TaskCreate
```
TaskCreate(
subject="{Task 标题}",
description="{Task 完整文本,原样保留}",
activeForm="{简短的进行时描述}",
metadata={"plan_task_id": "{Task 编号}"}
)
```
**示例**
plan.md 中:
```markdown
## Task 1.1: 创建配置模块基础结构
**目标**: 使用Pydantic创建统一配置管理模块
**文件**:
- 创建: src/config/__init__.py
- 创建: src/config/settings.py
**验收标准**:
- 配置模块可导入
- get_config()返回AppConfig实例
```
转换为:
```
TaskCreate(
subject="创建配置模块基础结构",
description="## Task 1.1: 创建配置模块基础结构\n\n**目标**: 使用Pydantic创建统一配置管理模块\n\n**文件**:\n- 创建: src/config/__init__.py\n- 创建: src/config/settings.py\n\n**验收标准**:\n- 配置模块可导入\n- get_config()返回AppConfig实例",
activeForm="创建配置模块",
metadata={"plan_task_id": "1.1"}
)
```
### 1.3 自动追加校验 Task
所有业务 Task 创建完成后,自动追加校验 Task
```
TaskCreate(
subject="[校验] 全局需求验证",
description="""## 全局校验 Task
**目标**: 验证所有业务 Task 忠实实现了 design.md 的全部需求,无降级、无遗漏。
**固定流程**:
### Step 0: 读取 session.yml 获取文件路径
- 读取 .vibe/session.yml
- 获取 design_doc 和 plan_doc 路径
### Step 1: 读取所有 Task JSON + metadata
- 调用 TaskList 获取所有任务
- 逐个 TaskGet 读取完整信息(含 metadata
- 重点检查每个已完成 Task 的 metadata
- errors_encountered是否含"暂时跳过"、"简化实现"、"workaround"
- test_results测试数量是否符合 description 中的预期
- files_modified是否缺少 description 中指定的文件
- commit_message是否含"partial"、"skip"、"TODO"
### Step 2: 对比 design.md 逐条校验
- 读取 session.yml 中 design_doc 指定的设计文档
- 逐条对照:需求 → 对应 Task description → 对应 metadata 实际执行
- 生成校验报告:
- ✅ 需求 X已实现Task N, commit abc123
- ❌ 需求 Y未实现 / 实现不完整
- ⚠️ 需求 Z降级实现metadata 显示 workaround
### Step 3: 运行完整测试套件
- 执行项目的完整测试命令(不能只看 metadata 里的历史结果)
- 确认所有测试通过
### Step 4: 检查未解决问题
- 扫描所有 Task metadata 的 errors_encountered
- 确认没有"暂时跳过"、"后续处理"的遗留问题
### Step 5: 处理校验结果
**全部通过:**
1. 读取所有 Task JSONGlob + Read生成 task-snapshot.md 保存到 .vibe/task-snapshot.md
2. 标记本 Task completed
**发现问题:**
1. 输出详细校验报告
2. 为每个问题创建修复 TaskTaskCreatedescription 包含具体问题)
3. 等待修复 Task 完成后重新执行 Step 1-4
""",
activeForm="全局需求验证",
metadata={"verification_task": True}
)
```
### 1.4 创建 session.yml
```yaml
# .vibe/session.yml
task_list_id: "{TaskListId}"
design_doc: "docs/plans/{timestamp}-design.md"
plan_doc: "docs/plans/{timestamp}-plan.md"
created_at: "{当前时间}"
```
## Phase 2: 执行循环
获取下一个 pending Task判断类型
### 2.1 业务 Task 执行
调用 test-driven-development skill然后派发子代理
**派发 Implementer 子代理**(使用第五章提示词模板):
- 实现功能
- 遵循 TDD
- 提交代码
- **更新 Task metadata**(关键!)
**派发 Spec Reviewer 子代理**(使用第六章提示词模板):
- 规格符合性审查
- 问题 → Implementer 修复 → 重新审查
**派发 Code Quality Reviewer 子代理**(使用第七章提示词模板):
- 代码质量审查
- 问题 → Implementer 修复 → 重新审查
**标记完成**
```
TaskUpdate taskId={id} status=completed
```
### 2.2 校验 Task 执行
按照校验 Task 的 description 中的固定流程执行Step 0-5
## 降级检测信号表
| metadata 字段 | 降级信号 | 说明 |
|---------------|---------|------|
| `errors_encountered` | 含"暂时跳过"、"简化"、"workaround" | 遇到困难绕过了 |
| `test_results` | 测试数量 < description 中的预期 | 测试覆盖不足 |
| `files_modified` | 缺少 description 中指定的文件 | 有文件未修改 |
| `commit_message` | 含"partial"、"skip"、"TODO" | 部分实现 |
````
---
## 五、Implementer 子代理提示词
派发 Implementer 子代理时使用此模板:
````markdown
Task tool (general-purpose):
description: "实现 Task N: {Task标题}"
prompt: |
你正在实现一个具体的开发任务。
## 任务信息
{Task JSON 的完整 description 内容}
## Task metadata 更新规范(必须遵守)
在执行过程中,你必须持续通过 TaskUpdate 更新 metadata记录执行细节。
这些 metadata 将被后续的校验 Task 读取,用于检查是否有降级实现。
**1. 开始任务时:**
```
TaskUpdate taskId={id} metadata={
"started_at": "{当前时间}"
}
```
**2. 每次修改文件后:**
```
TaskUpdate taskId={id} metadata={
"files_modified": ["file1.py", "file2.py"]
}
```
**3. 遇到错误时(必须记录,包含解决方案):**
```
TaskUpdate taskId={id} metadata={
"errors_encountered": ["错误描述 - 解决方案"]
}
```
⚠️ 如果你无法解决某个问题而选择跳过或简化,必须如实记录:
"无法实现XX功能 - 暂时跳过" 或 "XX过于复杂 - 简化为YY"
**4. 运行测试后:**
```
TaskUpdate taskId={id} metadata={
"test_results": "5/5 passed"
}
```
**5. 提交代码后:**
```
TaskUpdate taskId={id} metadata={
"git_commit": "{commit hash}",
"commit_message": "{提交信息}"
}
```
**6. 任务完成时(由主窗口标记,不是你):**
主窗口会调用 TaskUpdate status=completed你只需要更新 metadata。
## 执行要求
- 遵循 TDD先写测试再实现
- 每个有意义的变更都要提交
- 自审:完成后检查自己的实现是否完整
- 如实记录:不要隐瞒错误或跳过的内容
````
### metadata 完整示例
```json
{
"id": "5",
"subject": "迁移ES配置",
"status": "completed",
"metadata": {
"plan_task_id": "2.3",
"started_at": "2026-01-26 14:00",
"completed_at": "2026-01-26 14:30",
"files_modified": [
"src/elasticsearch/config.py",
"src/elasticsearch/client.py"
],
"git_commit": "abc123f",
"commit_message": "refactor(es): migrate to unified config",
"errors_encountered": [
"Pydantic版本冲突 - 已通过升级到2.0解决"
],
"test_results": "5/5 passed"
}
}
```
---
## 六、Spec Reviewer 子代理提示词
规格符合性审查通过后才派发 Code Quality Reviewer。
````markdown
Task tool (general-purpose):
description: "审查 Task N 的规格符合性"
prompt: |
你正在审查一个实现是否符合其规格。
## 被请求的内容
{Task JSON 的完整 description 内容}
## 实现者声称构建的内容
{Implementer 子代理的返回报告}
## 关键:不要信任报告
实现者的报告可能不完整、不准确或过于乐观。你必须独立验证。
**要:**
- 阅读实际代码
- 逐行比较实现和需求
- 检查声称实现但实际没有的部分
- 寻找没提到的额外功能
**不要:**
- 相信实现者的说法
- 信任完整性声明
- 接受对需求的重新解释
## 检查项
**遗漏的需求:**
- 所有被请求的内容都实现了吗?
- 有跳过或遗漏的需求吗?
**多余的工作:**
- 构建了没有被请求的东西吗?
- 过度设计或添加了不必要的功能吗?
**误解:**
- 对需求的解释与预期不同吗?
- 解决了错误的问题吗?
## 输出格式
- ✅ 符合规格(如果代码检查后一切匹配)
- ❌ 发现问题:[具体列出遗漏或多余的内容,带 file:line 引用]
````
---
## 七、Code Quality Reviewer 子代理提示词
只在规格符合性审查通过后派发。
````markdown
Task tool (general-purpose):
description: "审查 Task N 的代码质量"
prompt: |
你正在审查代码更改的生产就绪性。
## 实现内容
{Implementer 报告的描述}
## 需求/计划
{Task JSON 的完整 description 内容}
## 要审查的 Git 范围
**Base:** {任务前的提交}
**Head:** {当前提交}
```bash
git diff --stat {BASE_SHA}..{HEAD_SHA}
git diff {BASE_SHA}..{HEAD_SHA}
```
## 审查清单
**代码质量:** 关注点分离、错误处理、类型安全、DRY、边界情况
**架构:** 设计决策、可扩展性、性能、安全
**测试:** 测试真实逻辑非mock、边界覆盖、集成测试、全部通过
**生产就绪:** 向后兼容、文档、无明显bug
## 输出格式
### 优点
[什么做得好?要具体。]
### 问题
#### 关键(必须修复)
[Bug、安全问题、数据丢失风险]
#### 重要(应该修复)
[架构问题、测试缺口]
#### 次要(可以改进)
[代码风格、优化机会]
**对于每个问题:** File:line 引用 + 什么问题 + 为什么重要 + 如何修复
### 评估
**可以合并?** [是/否/修复后可以]
**理由:** [1-2 句话]
````
---
## 八、跨 Compact 恢复机制
### 8.1 核心机制
```
恢复上下文 = design.md架构
+ Task JSON + metadata任务与执行细节
+ last_task_context.jsonl当前任务上下文
```
### 8.2 PreCompact Hook
当上下文即将满时PreCompact Hook 自动触发,从 transcript.jsonl 提取当前任务上下文。
**Shell 入口**`.claude/hooks/pre-compact.sh`
```bash
#!/usr/bin/env bash
INPUT=$(cat)
TRANSCRIPT_PATH=$(echo "$INPUT" | jq -r '.transcript_path')
# 等待 transcript.jsonl 完全写入
sleep 1
node .claude/hooks/extract-last-context.js "$TRANSCRIPT_PATH" > .vibe/last_task_context.jsonl
```
**提取脚本**`.claude/hooks/extract-last-context.js`
```javascript
const fs = require('fs');
function extractSinceLastTaskComplete(transcriptPath) {
const content = fs.readFileSync(transcriptPath, 'utf-8');
const lines = content.split('\n').filter(Boolean);
// 倒序找最后一次 TaskUpdate status=completed
let cutoffIndex = 0;
for (let i = lines.length - 1; i >= 0; i--) {
try {
const entry = JSON.parse(lines[i]);
if (entry.tool_name === 'TaskUpdate' &&
entry.tool_input?.status === 'completed') {
cutoffIndex = i + 1;
break;
}
} catch (e) {
continue;
}
}
const relevantLines = lines.slice(cutoffIndex);
const simplified = simplifyEntries(relevantLines);
return simplified.map(e => JSON.stringify(e)).join('\n');
}
function simplifyEntries(lines) {
return lines.map(line => {
try {
const entry = JSON.parse(line);
// Claude 输出:全部保留
if (entry.role === 'assistant') {
return { type: 'assistant', content: entry.content };
}
// 用户输入:全部保留
if (entry.role === 'user') {
return { type: 'user', content: entry.content };
}
// Task tool 返回(子代理结果):全部保留
if (entry.type === 'tool_result' && entry.agentId) {
return {
type: 'task_result',
agentId: entry.agentId,
content: entry.content
};
}
// 工具调用
if (entry.tool_name) {
const input = entry.tool_input || {};
// Task tool派发子代理prompt 全部保留
if (entry.tool_name === 'Task') {
return {
type: 'tool',
name: 'Task',
subagent_type: input.subagent_type,
description: input.description,
prompt: input.prompt
};
}
// 其他工具:只保留关键参数
const simplified = { type: 'tool', name: entry.tool_name };
if (input.file_path) simplified.file = input.file_path;
if (input.command) simplified.command = input.command;
if (input.pattern) simplified.pattern = input.pattern;
if (input.path) simplified.path = input.path;
if (input.taskId) simplified.taskId = input.taskId;
if (input.status) simplified.status = input.status;
if (entry.tool_result?.exit_code !== undefined) {
simplified.exit_code = entry.tool_result.exit_code;
}
return simplified;
}
return null;
} catch (e) {
return null;
}
}).filter(Boolean);
}
const transcriptPath = process.argv[2];
if (transcriptPath) {
console.log(extractSinceLastTaskComplete(transcriptPath));
}
```
**提取精简规则**
| 类型 | 保留内容 |
|------|---------|
| Claude 输出 | ✅ 全部 content |
| 用户输入 | ✅ 全部 content |
| Task tool派发 | ✅ prompt, subagent_type, description |
| Task tool返回 | ✅ content, agentId |
| Read / Edit / Write | file_path |
| Bash | command, exit_code |
| Glob / Grep | pattern, path |
| TaskUpdate | taskId, status |
### 8.3 SessionStart Hook
Compact 后会话恢复时SessionStart Hook 自动触发,引导 Claude 恢复执行上下文。
**文件**`.claude/hooks/session-start.sh`
````bash
#!/usr/bin/env bash
# 只有存在 last_task_context.jsonl 才触发恢复提示
# 说明之前发生过 PreCompact需要恢复上下文
if [[ ! -f ".vibe/last_task_context.jsonl" ]]; then
exit 0
fi
if [[ ! -f ".vibe/session.yml" ]]; then
exit 0
fi
# 使用 grep + sed 替代 yq兼容性更好
TASK_LIST_ID=$(grep 'task_list_id:' .vibe/session.yml | sed 's/task_list_id: *//' | tr -d '"' | tr -d "'")
TASK_DIR="$HOME/.claude/tasks/$TASK_LIST_ID"
cat << 'PROMPT'
## 【系统提示:检测到跨 Compact 恢复 - VibeEngineering V2 执行阶段】
你正在从 Compact 后恢复执行上下文。请严格按以下顺序读取信息:
### Step 1: 读取执行流程定义
```
Read .claude/commands/vibe-execute.md
```
了解 Phase 2 执行循环的完整流程。
### Step 2: 读取 subagent-driven-development skill
```
Read .claude/skills/subagent-driven-development/SKILL.md
```
了解子代理派发模板Implementer、Spec Reviewer、Code Quality Reviewer
### Step 3: 读取设计文档
```
Read .vibe/session.yml
```
获取 design_doc 路径,然后读取设计文档了解需求。
### Step 4: 读取所有 Task JSON
PROMPT
echo '```'
echo "Glob pattern='*.json' path='$TASK_DIR'"
echo "然后 Read 每个返回的 JSON 文件"
echo '```'
cat << 'PROMPT'
从 Task JSON 了解:
- 所有任务列表subject和详细信息description
- 任务状态status: pending / in_progress / completed
- **已完成任务的 metadata**files_modified, errors_encountered, git_commit, test_results
### Step 5: 读取上一窗口执行上下文
```
Read .vibe/last_task_context.jsonl
```
从 last_task_context.jsonl 了解:
- 当前任务执行到哪一步
- Claude 的思考过程和决策
- 用户的纠正指令(如有)
- 子代理派发的任务和返回结果
### 恢复后行为
1. 找到第一个 status 为 pending 或 in_progress 的 Task
2. 如果有 in_progress 的 Task结合 last_task_context.jsonl 从中断点继续
3. 如果上一个 Task 已 completed从下一个 pending Task 开始
4. **按照 vibe-execute.md Phase 2 和 subagent-driven-development skill 执行**
- 业务 Task派发 Implementer → Spec Reviewer → Code Quality Reviewer → 标记完成
- 校验 Task执行 Step 0-5 固定流程
5. 所有 Task 完成后,校验 Task 保存快照并标记完成
PROMPT
````
---
## 九、项目级 CLAUDE.md
在项目根目录的 `.claude/CLAUDE.md` 中添加以下内容,让 Claude 了解 metadata 的用途:
````markdown
## VibeEngineering V2 项目说明
### Task 执行规范
大部分 Task 应当遵照 `subagent-driven-development` skill 的流程执行(协调者循环):
1. 派发 Implementer 子代理实现功能
2. 派发 Spec Reviewer 子代理审查规格符合性
3. 派发 Code Quality Reviewer 子代理审查代码质量
4. 主窗口标记 Task completed
**过于简单的 Task**(如单文件小改动)主代理可以自行完成,无需派发子代理,但**同样需要更新 metadata**。
### Task metadata 规范
无论主代理自己实现还是派发子代理,都必须更新 Task metadata
- `started_at`: 任务开始时间
- `completed_at`: 任务完成时间
- `files_modified`: 修改的文件列表
- `git_commit`: 提交的 commit hash
- `commit_message`: 提交信息
- `errors_encountered`: 遇到的错误及解决方案(必须如实记录)
- `test_results`: 测试结果
**用途**
1. 跨 Compact 恢复时,读取 metadata 了解已完成任务的执行细节
2. 校验 Task 读取所有 metadata检测是否有降级实现
3. 生成 Task 快照时,保存完整的执行历史
**按需读取**:恢复后可按需读取各 Task 的 metadata无需全部加载到上下文。
````
---
## 十、Hook 配置
**文件**`.claude/settings.local.json`
```json
{
"hooks": {
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/session-start.sh"
}
]
}
],
"PreCompact": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/pre-compact.sh"
}
]
}
]
}
}
```
---
## 十一、session.yml 格式
```yaml
# .vibe/session.yml
task_list_id: "386113df-47f7-4e1d-9db2-d572e3081bf9"
design_doc: "docs/plans/20260126-design.md"
plan_doc: "docs/plans/20260126-plan.md"
created_at: "2026-01-26 10:00"
```
---
## 十二、Task 快照格式
**文件**`.vibe/task-snapshot.md`
```markdown
# Task 快照 - 2026-01-26 18:00
**Task List ID**: 386113df-47f7-4e1d-9db2-d572e3081bf9
**总任务数**: 22
**完成任务数**: 22
---
### Task 1: 代码备份与分支创建 [completed]
**描述**: 创建重构分支,确保代码安全
**元数据**:
- 完成时间2026-01-26 10:00
- Git commitabc123f
- 修改文件:无
- 测试结果:无
---
### Task 2: 创建配置模块基础结构 [completed]
**描述**: 使用Pydantic创建统一配置管理模块
**元数据**:
- 完成时间2026-01-26 11:00
- Git commitdef456g
- 修改文件src/config/settings.py, src/config/__init__.py
- 测试结果5/5 passed
- 错误Pydantic版本冲突已通过升级解决
---
...(所有 Task
```
---
## 十三、完整执行示例
```bash
# ========== 设计阶段 ==========
> /vibe-brainstorming "实现代码质量改进"
# → 使用 brainstorming skill
# → 生成 docs/plans/20260126-design.md
# → Claude 停止,用户审核
# 用户审核 design.md
> /vibe-plan
# → 使用 writing-plans skill
# → 生成 docs/plans/20260126-plan.md
# → Claude 停止,用户审核
# 用户审核 plan.md
# ========== 初始化阶段 ==========
> /vibe-execute
# vibe-execute 执行 Phase 1:
# 1. 读取 plan.md
# 2. 按转换规则为每个 Task 调用 TaskCreate
# 3. 自动追加TaskCreate("[校验] 全局需求验证", ...)
# 4. 创建 .vibe/session.yml
# ========== 执行循环 ==========
# 协调者获取 Task 1pending
# → 派发 Implementer 子代理
# - Implementer 实现功能
# - Implementer 更新 metadata
# TaskUpdate taskId=1 metadata={
# "files_modified": ["src/backup.sh"],
# "git_commit": "abc123",
# "test_results": "N/A"
# }
# → 派发 Spec Reviewer 子代理
# - ✅ 符合规格
# → 派发 Code Quality Reviewer 子代理
# - ✅ 通过
# → 主窗口TaskUpdate taskId=1 status=completed
# 继续 Task 2, 3, ... N
# ========== PreCompact 触发(如果发生)==========
# 上下文满 → PreCompact Hook 触发
# → 提取 transcript.jsonl 中最后 TaskUpdate completed 之后的内容
# → 写入 .vibe/last_task_context.jsonl
# → Compact 发生
# ========== Compact 后恢复 ==========
# SessionStart Hook 触发
# → Claude 按顺序读取design.md → Task JSON → last_task_context.jsonl
# → 找到 in_progress 或下一个 pending Task
# → 继续执行循环
# ========== 校验阶段 ==========
# 所有业务 Task completed → 校验 Task 是下一个 pending
# 协调者获取校验 Task
# → 校验 Task 执行固定流程:
# Step 1: 读取所有 Task JSON + metadata
# - Task 3 metadata: errors_encountered 包含"Pydantic版本冲突 - 已升级" → ✅ 已解决
# - Task 15 metadata: errors_encountered 包含"暂时跳过第三种检索模式" → ❌ 降级!
# Step 2: 对比 design.md
# - design.md 要求"支持3种检索模式"
# - Task 15 只实现了2种 → ❌ 需求未满足
# Step 3: 运行完整测试套件
# pytest → 45/45 passed → ✅
# Step 4: 发现降级问题
# → 创建修复 Task: "实现第三种检索模式"
# → Implementer 执行修复
# → 重新校验 → ✅ 全部通过
# Step 5: 校验通过
# → 保存 Task 快照(此时所有 JSON 仍存在)
# → 标记校验 Task completed → Task JSON 被系统删除
# → task-snapshot.md 作为永久历史记录保留
```
---
## 十四、实现清单
| 优先级 | 文件 | 说明 |
|--------|------|------|
| P0 | `.claude/commands/vibe-execute.md` | 第四章的完整命令(含转换规则 + 校验 Task |
| P0 | `.claude/hooks/session-start.sh` | 第八章的恢复提示词 |
| P0 | `.claude/hooks/pre-compact.sh` | 第八章的 shell 入口 |
| P0 | `.claude/hooks/extract-last-context.js` | 第八章的提取脚本 |
| P0 | `.claude/settings.local.json` | 第十章的 Hook 配置 |
| P1 | `.claude/commands/vibe-brainstorming.md` | 第四章的命令 |
| P1 | `.claude/commands/vibe-plan.md` | 第四章的命令 |
| P1 | `.claude/CLAUDE.md` | 第九章的项目级提示词 |
| P2 | `.claude/skills/brainstorming/SKILL.md` | 继承 V1 |
| P2 | `.claude/skills/writing-plans/SKILL.md` | 继承 V1 |
| P2 | `.claude/skills/test-driven-development/SKILL.md` | 继承 V1 |
| P2 | `.claude/skills/subagent-driven-development/SKILL.md` | 子代理驱动执行 |
---
## 十五、与 V1 的对比总结
| 方面 | V1 | V2 |
|------|----|----|
| **状态管理** | 自定义 `vibe-state.local.md` | Claude Code 原生 Task 系统 |
| **执行细节记录** | 无 | Task metadata 持久化 |
| **执行控制** | Stop Hook 拦截 + 灌 Prompt | Task 系统自动持久化 |
| **Compact 恢复** | 依赖 phase 字段 | PreCompact + SessionStart Hook |
| **完成验证** | verification-before-completion skill | 校验 Task自动追加作为最后一个 Task |
| **降级检测** | 无 | 校验 Task 对比 design.md + metadata |
| **快照机制** | 无 | 校验通过后保存 task-snapshot.md |
| **Ralph Wiggum** | 使用 | 移除Task 系统替代) |
**核心改进**
1. **利用原生 Task 系统**:不再维护自定义状态文件,直接使用 Claude Code 的 Task JSON
2. **metadata 记录执行细节**:每个 Task 的执行过程持久化,支持恢复和校验
3. **自动追加校验 Task**:不再依赖 skill 提示,而是作为实际 Task 执行
4. **降级检测**:通过 metadata 中的关键字检测"暂时跳过"、"简化实现"等降级行为
5. **跨 Compact 完整恢复**PreCompact 保存上下文SessionStart 引导恢复