指南

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 创建新代之后
onLifeLearnedlearning 阶段完成后
onLifePlannedplanning 阶段完成后
onLifeImplementedimplementation 阶段完成后
onLifeValidatedvalidation 阶段完成后
onLifeCompletedcompletion + 归档后(在 git commit 之后运行)
onLifeTransited任何阶段转换后(通用)

合并生命周期事件

事件触发时机
onMergeStarted合并代创建后
onMergeDetecteddetect 阶段完成后
onMergeMatedmate 阶段完成后(genome 已解决)
onMergeMergedmerge 阶段完成后(源码已合并)
onMergeReconciledreconcile 阶段完成后(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 产生的文件变更将处于未提交状态。