别再往框架源码里塞逻辑了!Hermes Hooks 钩子一招搞定安全拦截与日志审计

Hermes Agent Hooks 钩子使用教程

写了一个安全过滤逻辑,不知道往哪塞?每次 Agent 执行工具调用都想记录日志,难道要改框架源码?Hermes Agent Hooks(钩子)就是为解决这类问题而生的 生命周期回调系统,允许在智能体运行的关键节点注入自定义逻辑,实现日志审计、安全拦截、消息告警、上下文注入等扩展能力。本文从钩子类型、核心事件、开发流程、实战示例到最佳实践,带你全面掌握 Hooks 用法,灵活扩展 Agent 功能。

一、钩子系统总览

Hermes 提供两套独立钩子系统,覆盖网关与全会话场景,均为非阻塞设计—— 钩子报错不会导致 Agent 崩溃,仅记录日志。

1.1 网关钩子(Gateway Hooks)

  • 运行环境:仅网关(TG/Discord/ 飞书等消息平台)生效。

  • 注册方式~/.hermes/hooks/ 目录下创建 HOOK.yaml + handler.py

  • 核心场景:网关启动、会话管理、命令监控、消息告警。

1.2 插件钩子(Plugin Hooks)

  • 运行环境:CLI + 网关全场景生效。

  • 注册方式:Python 插件中通过 ctx.register_hook() 代码注册。

  • 核心场景:工具拦截、LLM 上下文注入、会话生命周期管理。

1.3 核心价值

  • 无侵入扩展:无需修改 Agent 核心代码,按需注入逻辑。

  • 全链路可控:覆盖会话启动、工具调用、LLM 推理、会话结束全流程。

  • 高稳定性:钩子异常自动捕获,不影响主流程。

  • 灵活适配:支持日志、告警、安全、集成等多场景扩展。

图1:钩子系统架构图

graph TB subgraph "钩子系统总览" direction TB GW[网关钩子 Gateway Hooks] -->|仅消息平台| TG[TG] GW --> DC[Discord] GW --> FS[飞书 / 钉钉] PL[插件钩子 Plugin Hooks] -->|CLI + 网关全场景| SH[pre_tool_call 拦截] PL --> PH[post_tool_call 审计] PL --> LH[pre_llm_call 注入] PL --> SH2[on_session_end 清理] end subgraph "注册方式" R1[HOOK.yaml + handler.py<br/>~/.hermes/hooks/ 目录] --> GW R2[ctx.register_hook<br/>Python 插件代码] --> PL end subgraph "设计特点" N[非阻塞设计<br/>异常自动捕获 不影响主流程] end

清楚了钩子的整体架构,先从网关钩子入手,看它如何在消息平台中发挥作用。

二、网关钩子(Gateway Hooks)

网关钩子仅在消息平台网关运行,适合监控网关级事件、发送平台告警。

2.1 目录结构