指南
Hooks
REAP hooks 允许你在关键生命周期事件时运行自动化。Hooks 作为单独文件存储在 .reap/hooks/ 中,AI 代理在适当时刻执行它们。
Hook 类型
每个 hook 文件根据扩展名支持两种类型之一:
command (.sh)
Shell 脚本。由 AI 代理在项目根目录中执行。用于脚本、CLI 工具、构建命令。
prompt (.md)
Markdown 格式的 AI 代理指令。代理读取提示并执行所述任务——代码分析、文件修改、文档更新等。用于需要判断力的任务。
每个 hook 是一个单独的文件。同一事件的多个 hooks 按 frontmatter 中指定的顺序执行。
文件命名
Hook 文件遵循模式:.reap/hooks/{event}.{name}.{md|sh}
每个 hook 文件支持可选的 YAML frontmatter:
| 字段 | 描述 |
|---|---|
| condition | .reap/hooks/conditions/ 中条件脚本的名称(如 always、has-code-changes、version-bumped) |
| order | 同一事件有多个 hooks 时的数字执行顺序(默认:50,数字越小越先执行) |
正常生命周期事件
| 事件 | 触发时机 |
|---|---|
| onLifeStarted | /reap.start 创建新代之后 |
| onLifeLearned | learning 阶段完成后 |
| onLifePlanned | planning 阶段完成后 |
| onLifeImplemented | implementation 阶段完成后 |
| onLifeValidated | validation 阶段完成后 |
| onLifeCompleted | completion + 归档后(在 git commit 之后运行) |
| onLifeTransited | 任何阶段转换后(通用) |
合并生命周期事件
| 事件 | 触发时机 |
|---|---|
| onMergeStarted | 合并代创建后 |
| onMergeDetected | detect 阶段完成后 |
| onMergeMated | mate 阶段完成后(genome 已解决) |
| onMergeMerged | merge 阶段完成后(源码已合并) |
| onMergeReconciled | reconcile 阶段完成后(genome-源码一致性已验证) |
| onMergeValidated | 合并验证完成后 |
| onMergeCompleted | 合并 completion + 归档后 |
| onMergeTransited | 任何合并阶段转换后(通用) |
基于文件的配置
Hooks 基于文件——存储在 .reap/hooks/ 中,而非 config.yml。每个 hook 是一个命名为 {event}.{name}.{md|sh} 的文件。
text
.reap/hooks/
├── onLifeCompleted.reap-update.sh
├── onLifeCompleted.docs-update.md
├── onLifeImplemented.lint-check.sh
└── onMergeMated.notify.md
# 示例:.md hook(AI 提示)
# ---
# condition: has-code-changes
# order: 30
# ---
# 审查变更并在需要时更新文档。
# 示例:.sh hook(shell 脚本)
# #!/bin/bash
# # condition: always
# # order: 20
# reap update自动 Hook 建议
在 Completion 阶段(Phase 5: Hook Suggestion),REAP 检测跨代的重复模式——如反复出现的手动步骤、重复的命令或一致的阶段后操作。当检测到模式时,REAP 建议创建 hook 来自动化它。Hook 创建始终需要用户确认后才能应用。
执行说明
- Hooks 由 AI 代理执行,而非 CLI。代理扫描 .reap/hooks/ 查找匹配的文件。
- .sh 文件作为 shell 脚本在项目根目录中运行。
- .md 文件作为 AI 提示被读取并由代理遵循执行。
- 同一事件内的 hooks 按顺序运行(frontmatter 'order' 字段,数字越小越先执行)。
- 条件通过 .reap/hooks/conditions/{name}.sh 评估(exit 0 = 运行,非零 = 跳过)。
- onLifeCompleted/onMergeCompleted hooks 在 git commit 之后运行——hooks 产生的文件变更将处于未提交状态。
