Nox-Lumen AutoNox-Lumen Auto

Hook 钩子

Hook 的定位

Hook 是 Agent 生命周期的可编程切入点。在"Agent 默认行为"之外,系统允许在 28 个关键事件点注入自定义逻辑——不改平台代码,就能改 Agent 行为

Hook 与 Event Trigger 的区别

对比维度Event TriggerHook
触发源外部事件(webhook / cron / channel 消息)内部事件(Agent 生命周期)
典型场景"PR 来了做什么""每次 Agent 发消息前校验一下"
范围跨 Session可以是 Session 内也可以跨 Session
目的启动 / 触发 Agent改变 Agent 内部行为

28 个 Hook 事件

按生命周期阶段分类:

会话层

事件触发时机
SessionStartSession 创建
SessionStopSession 结束
SessionArchiveSession 归档

Agent 层

事件触发时机
AgentInitAgent 初始化
AgentStepAgent 每推进一步
AgentFinishAgent 完成任务

消息层

事件触发时机
PreUserMessage用户消息进入之前
PostUserMessage用户消息处理完
PreAssistantMessageAgent 发出消息之前
PostAssistantMessageAgent 消息发出后

工具层

事件触发时机
PreToolUse工具调用前(阻断式
PostToolUse工具调用后
ToolError工具调用失败

记忆层

事件触发时机
MemoryRetrieve记忆检索
MemoryGuardian记忆守护(自动监控)
MemoryPromoteKB → LTM 提升

技能层

事件触发时机
SkillInjector按上下文匹配技能
SkillActivate技能激活
SkillComplete技能完成

完整 28 事件清单见 AgentFlow/src/hooks/ 源码。

5 种 Handler 类型

同一 Hook 事件可以挂多个 Handler,按优先级串联执行:

Handler执行方式适用
command执行 shell 命令本地脚本、通知、日志
http调用 HTTP 端点接入外部系统
prompt注入 / 修改 LLM prompt引导 Agent 行为
agent触发另一个 Agent多 Agent 协作
python执行内嵌 Python复杂逻辑

阻断式前置钩子

PreToolUsePre 类钩子是阻断式的——如果 Handler 返回 block,原操作会被拒绝

典型用法:

# 示例:工具调用前的安全审计
hooks:
  - event: PreToolUse
    handler:
      type: python
      code: |
        if tool_name == "execute_code" and "rm -rf" in tool_args.get("code", ""):
            return {"action": "block", "reason": "禁止删除命令"}
        return {"action": "allow"}

典型场景

场景 1:安全审计(PreToolUse)

所有 execute_code 调用在执行前写入审计日志,高风险命令被阻断。

场景 2:跨会话记忆守护(MemoryGuardian)

自动扫描 Session 结束时的 Ledger,提取 fact / preference / error_pattern 写入 LTM,其他 Session 自动共享。

场景 3:Skill 动态注入(SkillInjector)

按当前消息语义自动匹配最相关的技能,不匹配就不加载(省 token)。

场景 4:合规输出审查(PreAssistantMessage)

Agent 回复前自动检查是否包含禁用词、是否符合格式规范,不符合则返回修订请求。

场景 5:成本监控(SessionStop)

Session 结束时汇总 token / 时长 / 工具调用次数,超阈值自动告警。

3 层匹配

Hook 的触发不是"全局必触发",而是按 3 层匹配:

Rendering diagram…

相关文档

On this page