代码语言

知识点思维导图

28 个知识节点

Codex(09) - Subagent 与 Hooks

读完后,你应能完成以下任务:

  • 绘制“Codex(09) - Subagent 与 Hooks / 概念解释”的关键对象与数据流,解释“Hooks 是生命周期钩子。”,并用源码位置、日志或 Trace 标注证据。
  • 为“Codex(09) - Subagent 与 Hooks / Subagent 是什么”设计正常与异常输入,验证“Subagent 可以理解成“专门的临时同事”。”,输出首个偏差位置与回归测试结果。
  • 实现“Codex(09) - Subagent 与 Hooks / 使用示例”的最小代码或配置,检验“真实 Hook 的配置方式要以当前 Codex 版本支持为准,但核心思想是一样的:把底线规则做成自动检查。”,输出命令、结果与 Diff,并说明不适用边界。

当任务变复杂后,你会遇到两个问题:

  • 一个 Codex 同时负责太多视角,容易混乱。
  • 有些底线检查,你希望每次都自动执行。

Subagent 和 Hooks 分别解决这两个问题。

  • Subagent:把复杂任务拆给专门角色。
  • Hooks:在特定时机自动执行检查或流程。

一、概念解释

1.1 Subagent 是什么

Subagent 可以理解成“专门的临时同事”。比如代码审查时,你可以拆成:

  • 安全审查 agent。
  • 性能审查 agent。
  • 测试覆盖 agent。
  • 可维护性 agent。

每个 agent 只看自己的维度,最后由主流程汇总。

这比让一个人同时记住所有检查项更稳。

1.2 Hooks 是什么

Hooks 是生命周期钩子。它可以在 Codex 执行某些动作前后触发脚本或检查。

常见用途:

  • 阻止危险命令。
  • 在编辑后自动格式化。
  • 在提交前运行检查。
  • 记录关键操作。

从前端视角看,Hook 像构建工具里的插件钩子:不是业务逻辑本身,但能在流程关键点介入。

二、使用示例

2.1 Subagent 示例

假设你要审查一个前端 PR,可以设计 3 个 agent:

frontend-bug-reviewer:只找功能 bug 和边界条件
frontend-test-reviewer:只看测试是否覆盖关键行为
frontend-maintainability-reviewer:只看结构、命名、重复和可读性

主流程:

请并行调用三个审查 agent,分别从 bug、测试、可维护性角度审查当前 diff。
最后合并为一个按严重程度排序的审查报告。

2.2 Hook 示例

一个思路上的 pre-command hook:

#!/usr/bin/env bash
set -euo pipefail

command_text="$1"

if echo "$command_text" | grep -E "rm -rf /|git reset --hard|DROP DATABASE"; then
  echo "Blocked dangerous command: $command_text"
  exit 1
fi

真实 Hook 的配置方式要以当前 Codex 版本支持为准,但核心思想是一样的:把底线规则做成自动检查。

三、什么时候用 Subagent

适合:

  • 多维度审查。
  • 大型迁移规划。
  • 前后端分别分析。
  • 安全、性能、测试需要不同视角。
  • 信息太多,需要上下文隔离。

不适合:

  • 简单单文件修改。
  • 一句话就能完成的小任务。
  • 强依赖同一份连续推理的任务。

四、什么时候用 Hooks

适合:

  • 团队安全红线。
  • 格式化和静态检查。
  • 审计日志。
  • 禁止某类命令。
  • 自动注入环境检查。

不适合:

  • 复杂业务判断。
  • 需要大量上下文理解的任务。
  • 经常变化的临时规则。

五、常见错误

5.1 错误 1:Subagent 角色重叠

如果两个 agent 都叫“综合审查”,它们会重复工作。角色要单一。

5.2 错误 2:Hook 做太多事

Hook 应该快、明确、可靠。不要在 Hook 里跑一个很慢的大型流程,影响每次操作。

5.3 错误 3:把 Hook 当成唯一安全措施

Hook 是防线之一,不是全部。权限、沙盒、审批、代码 review 仍然重要。

六、最佳实践

  • Subagent 的职责要窄。
  • 主流程负责分发任务和汇总结果。
  • Hook 优先做机械检查,不做复杂判断。
  • 高风险 Hook 先在个人环境试用,再推广到团队。
  • 把 Hook 失败信息写得清楚,让人知道怎么修。

七、本章小结

Subagent 让复杂任务分工更清楚,Hooks 让底线检查更稳定。前者提升思考质量,后者提升流程可靠性。

八、动手实践:09 subagents and hooks

这个 demo 展示如何把复杂审查拆给多个 agent,以及如何用脚本表达 Hook 的底线检查。

8.1 目录内容

  • agents/frontend-bug-reviewer.md:功能 bug 审查 agent。
  • agents/frontend-test-reviewer.md:测试审查 agent。
  • agents/frontend-maintainability-reviewer.md:可维护性审查 agent。
  • hooks/block-dangerous-command.sh:危险命令检查脚本。
  • review-prompt.md:主流程提示词。

8.2 使用方式

审查 agent 设计:

codex exec --sandbox read-only --ask-for-approval never - < review-prompt.md

测试 hook 脚本:

bash hooks/block-dangerous-command.sh "git status"
bash hooks/block-dangerous-command.sh "git reset --hard"

第二条应该被阻止。

8.3 练习目标

  • 学会把复杂任务拆成单一职责 agent。
  • 学会让 Hook 做机械、快速、明确的检查。

8.4 配套实践材料

以下材料已并入正文,便于阅读时直接对照和练习。

agents/frontend-bug-reviewer.md

# frontend-bug-reviewer

## 职责

只审查前端功能 bug 和边界条件。

## 关注点

- 空状态。
- 加载状态。
- 错误状态。
- 表单校验。
- 用户交互是否符合预期。

## 不关注

- 测试覆盖率。
- 命名风格。
- 文件组织。

agents/frontend-maintainability-reviewer.md

# frontend-maintainability-reviewer

## 职责

只审查前端代码可维护性。

## 关注点

- 命名是否清晰。
- 组件是否过大。
- 是否有重复逻辑。
- hooks 职责是否单一。
- 文件位置是否符合项目约定。

## 不关注

- 测试是否充分。
- 具体视觉样式是否好看。
- 后端接口设计。

agents/frontend-test-reviewer.md

# frontend-test-reviewer

## 职责

只审查测试是否覆盖关键行为。

## 关注点

- 新增逻辑是否有测试。
- bug 修复是否有回归测试。
- 异步状态是否被测试。
- 用户关键路径是否被测试。

## 不关注

- UI 视觉细节。
- 代码命名。
- 业务方案是否合理。

review-prompt.md

请阅读 `agents/` 下的三个 agent 说明。

任务:
- 总结这三个 agent 的职责边界。
- 指出它们是否有重叠。
- 给出一个主流程如何编排它们的建议。

要求:
- 不修改文件。
- 输出要按“职责 / 重叠风险 / 编排建议”组织。

九、总结

  • 概念解释:Hooks 是生命周期钩子。
  • 使用示例:真实 Hook 的配置方式要以当前 Codex 版本支持为准,但核心思想是一样的:把底线规则做成自动检查。
  • 什么时候用 Subagent:安全、性能、测试需要不同视角。
  • 什么时候用 Hooks:需要大量上下文理解的任务。
  • 常见错误:Hook 是防线之一,不是全部。
  • 最佳实践:主流程负责分发任务和汇总结果。

学完自测

选择所有正确答案;提交后逐项核对判断依据。

1在“Subagent 与 Hooks”中,需要同时满足“Subagent 是什么”与“Hooks 是什么”。给定正文约束“Subagent 可以理解成“专门的临时同事”。”,哪些判断保持了原有处理机制?多选
2“Subagent 与 Hooks”出现偏差:“在“Subagent 与 Hooks / Hook 示例”中,即使不满足“一个思路上的 pre-command hook”,结果与副作用仍会保持不变。”已成为实际行为。围绕“Hook 示例”与“什么时候用 Subagent”,哪些判断能定位被改变的职责或边界?多选
3评审“Subagent 与 Hooks”方案时,验收条件包含“需要大量上下文理解的任务。”。关于“什么时候用 Hooks”与“最佳实践”的哪些决策符合正文机制?多选