- 两阶段分离:设计阶段人工确认,执行阶段全自动化 - 子代理驱动:Implementer → Spec Reviewer → Quality Reviewer - 原生 Task 系统:使用 Claude Code Task 替代自定义状态管理 - 跨 Compact 恢复:PreCompact + SessionStart Hook(内联命令实现) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
242 lines
8.6 KiB
Markdown
242 lines
8.6 KiB
Markdown
# VibeEngineering V2
|
||
|
||
在 Claude Code CLI 上实现自动化开发系统,融合 Superpowers 专家方法论 + 跨 Compact 恢复机制,实现"人工把关设计,自动执行任务"的工作流程。
|
||
|
||
## 核心特性
|
||
|
||
- **两阶段分离**:设计阶段需人工确认,执行阶段全自动化
|
||
- **子代理驱动**:Implementer → Spec Reviewer → Quality Reviewer 三阶段审查
|
||
- **原生 Task 系统**:使用 Claude Code 原生 Task 替代自定义状态管理
|
||
- **跨 Compact 恢复**:PreCompact 保存上下文 → SessionStart 引导恢复
|
||
- **降级检测**:校验 Task 对比 design.md + metadata 检测实现降级
|
||
|
||
## 工作流程
|
||
|
||
```
|
||
设计阶段(需人工确认):
|
||
/vibe-brainstorming "需求描述" → design.md
|
||
↓ 用户审核
|
||
/vibe-plan → plan.md
|
||
↓ 用户审核
|
||
|
||
执行阶段(全自动化):
|
||
/vibe-execute → 创建 Task 系统 → 协调者循环执行
|
||
```
|
||
|
||
## 文件结构
|
||
|
||
```
|
||
项目根目录/
|
||
├── README.md # 本文件
|
||
├── DESIGN.md # 详细设计文档
|
||
│
|
||
├── docs/plans/
|
||
│ ├── {timestamp}-design.md # 需求和架构(设计阶段产出)
|
||
│ └── {timestamp}-plan.md # 实现计划(设计阶段产出)
|
||
│
|
||
├── .vibe/
|
||
│ ├── session.yml # 会话元信息
|
||
│ ├── session-start-prompt.txt # SessionStart 恢复提示词
|
||
│ ├── last_task_context.jsonl # 当前任务执行上下文(PreCompact 生成)
|
||
│ └── task-snapshot.md # Task 快照(校验通过后保存)
|
||
│
|
||
├── .claude/
|
||
│ ├── commands/
|
||
│ │ ├── vibe-brainstorming.md # 需求探索命令
|
||
│ │ ├── vibe-plan.md # 创建计划命令
|
||
│ │ └── vibe-execute.md # 执行命令
|
||
│ ├── hooks/
|
||
│ │ └── extract-last-context.js # 上下文提取脚本
|
||
│ ├── skills/
|
||
│ │ ├── brainstorming/ # 需求探索方法论
|
||
│ │ ├── writing-plans/ # 计划编写方法论
|
||
│ │ ├── test-driven-development/ # TDD 方法论
|
||
│ │ └── subagent-driven-development/ # 子代理驱动执行
|
||
│ ├── settings.local.json # Hook 配置(内联命令)
|
||
│ └── CLAUDE.md # 项目级提示词
|
||
```
|
||
|
||
## Hook 实现说明
|
||
|
||
### 设计 vs 实现
|
||
|
||
原设计文档中 Hook 配置为调用外部 `.sh` 脚本:
|
||
|
||
```json
|
||
{
|
||
"hooks": {
|
||
"SessionStart": [{"command": "bash .claude/hooks/session-start.sh"}],
|
||
"PreCompact": [{"command": "bash .claude/hooks/pre-compact.sh"}]
|
||
}
|
||
}
|
||
```
|
||
|
||
**由于 Windows 环境下 Claude Code 执行外部 `.sh` 脚本存在兼容性问题**,当前实现改为**内联命令**方式:
|
||
|
||
```json
|
||
{
|
||
"hooks": {
|
||
"SessionStart": [{
|
||
"matcher": "",
|
||
"hooks": [{
|
||
"type": "command",
|
||
"command": "test -f .vibe/last_task_context.jsonl && cat .vibe/session-start-prompt.txt || exit 0"
|
||
}]
|
||
}],
|
||
"PreCompact": [{
|
||
"matcher": "",
|
||
"hooks": [{
|
||
"type": "command",
|
||
"command": "mkdir -p .vibe && read input && echo \"$input\" | jq -r '.transcript_path' > .vibe/debug-transcript-path.txt && sleep 1 && node .claude/hooks/extract-last-context.js $(cat .vibe/debug-transcript-path.txt) > .vibe/last_task_context.jsonl 2> .vibe/debug-error.txt; exit 0"
|
||
}]
|
||
}]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 内联命令 vs 外部脚本
|
||
|
||
| 方面 | 外部脚本 | 内联命令 |
|
||
|------|----------|----------|
|
||
| 可读性 | 好(独立文件) | 差(一行挤在 JSON) |
|
||
| 维护性 | 易修改 | 复杂命令难改 |
|
||
| Windows 兼容 | ❌ 有问题 | ✅ 正常工作 |
|
||
| 功能 | 完整 | 完整 |
|
||
|
||
**结论**:功能完全一致,内联命令只是把脚本逻辑写成一行。
|
||
|
||
### Hook 工作原理
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ Claude Code │
|
||
│ │
|
||
│ Hook 事件触发 │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────────────────────────────┐ │
|
||
│ │ Shell 环境 (Git Bash) │ │
|
||
│ │ │ │
|
||
│ │ stdin ← Claude Code 传入的 JSON 数据 │ │
|
||
│ │ stdout → 输出注入到 Claude 上下文 │ │
|
||
│ │ │ │
|
||
│ └─────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ Claude 收到 stdout 输出 │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### SessionStart Hook
|
||
|
||
**触发时机**:每次打开 Claude Code 会话
|
||
|
||
**逻辑**:
|
||
```bash
|
||
test -f .vibe/last_task_context.jsonl # 检查是否存在恢复上下文
|
||
&& cat .vibe/session-start-prompt.txt # 存在则输出恢复提示词
|
||
|| exit 0 # 不存在则静默退出
|
||
```
|
||
|
||
**作用**:只有在 Compact 后(存在 `last_task_context.jsonl`)才注入恢复提示词,引导 Claude 读取必要文件恢复执行。
|
||
|
||
### PreCompact Hook
|
||
|
||
**触发时机**:上下文即将满,执行 `/compact` 之前
|
||
|
||
**逻辑**:
|
||
```bash
|
||
mkdir -p .vibe # 确保目录存在
|
||
&& read input # 从 stdin 读取 Claude Code 传入的 JSON
|
||
&& echo "$input" | jq -r '.transcript_path' # 提取 transcript 文件路径
|
||
&& sleep 1 # 等待 transcript 写入完成
|
||
&& node extract-last-context.js ... # 调用 Node 脚本提取上下文
|
||
```
|
||
|
||
**作用**:从 `transcript.jsonl` 提取最后一次 `TaskUpdate completed` 之后的内容,保存到 `last_task_context.jsonl`,供恢复时使用。
|
||
|
||
## 环境要求
|
||
|
||
### 依赖
|
||
|
||
- Node.js(用于运行 `extract-last-context.js`)
|
||
- jq(用于解析 JSON)
|
||
- Git Bash(Windows 用户)
|
||
|
||
### Windows 用户注意
|
||
|
||
Claude Code 在 Windows 上默认使用 cmd.exe 执行 Hook 命令,无法识别 bash 语法。需要设置环境变量指定 Git Bash 路径:
|
||
|
||
```batch
|
||
set CLAUDE_CODE_GIT_BASH_PATH=<你的Git安装路径>\bin\bash.exe
|
||
```
|
||
|
||
例如,如果 Git 安装在 `C:\Program Files\Git`:
|
||
```batch
|
||
set CLAUDE_CODE_GIT_BASH_PATH=C:\Program Files\Git\bin\bash.exe
|
||
```
|
||
|
||
建议将此变量添加到系统环境变量中永久生效。
|
||
|
||
## 跨 Compact 恢复机制
|
||
|
||
```
|
||
执行中...
|
||
│
|
||
▼ 上下文即将满
|
||
┌─────────────────────────────────┐
|
||
│ PreCompact Hook 触发 │
|
||
│ 提取 transcript → last_task_context.jsonl
|
||
└─────────────────────────────────┘
|
||
│
|
||
▼ Compact 发生(上下文被压缩)
|
||
┌─────────────────────────────────┐
|
||
│ SessionStart Hook 触发 │
|
||
│ 检测到 last_task_context.jsonl │
|
||
│ 输出恢复提示词给 Claude │
|
||
└─────────────────────────────────┘
|
||
│
|
||
▼
|
||
Claude 按提示读取:
|
||
1. vibe-execute.md(执行流程)
|
||
2. subagent-driven-development skill(子代理模板)
|
||
3. session.yml → design.md(需求)
|
||
4. TaskList(任务状态)
|
||
5. last_task_context.jsonl(中断点上下文)
|
||
│
|
||
▼
|
||
从中断点继续执行
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
1. 克隆项目到本地
|
||
|
||
2. Windows 用户设置环境变量(参见上方"环境要求")
|
||
|
||
3. 进入项目目录,启动 Claude Code:
|
||
```batch
|
||
cd your-project
|
||
claude
|
||
```
|
||
|
||
4. 开始设计阶段:
|
||
```
|
||
/vibe-brainstorming "你的需求描述"
|
||
```
|
||
|
||
5. 审核 design.md 后,创建计划:
|
||
```
|
||
/vibe-plan
|
||
```
|
||
|
||
6. 审核 plan.md 后,开始执行:
|
||
```
|
||
/vibe-execute
|
||
```
|
||
|
||
## 参考
|
||
|
||
- [DESIGN.md](./DESIGN.md) - 完整设计文档
|
||
- [Claude Code 官方文档](https://docs.anthropic.com/en/docs/claude-code)
|