一、为什么需要选择
command 类型处理器运行本地 Shell 命令,HTTP 类型处理器向远程 URL 发送 POST 请求。两者挂载在同一套生命周期事件上,接收相同的 JSON 数据,但执行位置和依赖链完全不同。
选错的代价:
- 用 command 类型做远程通知——每台开发机器都要安装
curl、jq,维护认证脚本,跨平台适配 - 用 http 类型做本地文件操作——请求绕到远端再回来,多一跳网络延迟,断网时直接失效
两种类型各有不可替代的场景。这一节的核心是建立清晰的选择标准。
二、限制与红线
SessionStart 不支持 HTTP 类型
26 种生命周期事件中,SessionStart 是唯一仅支持 command 类型的事件。无论需求是什么,SessionStart 处理器只能用本地 Shell 命令。
其余 25 种事件中,9 种支持全部四种类型(command / http / prompt / agent),16 种支持 command + http。HTTP 类型的覆盖范围是 25/26。
网络依赖
HTTP 类型的请求经过网络。离线环境、高延迟网络、防火墙限制外部访问时,HTTP 类型不可用。
阻断型事件(如 PreToolUse)挂载 HTTP 处理器时,远端响应时间直接影响 Claude 的执行速度。远端服务 500ms 才返回,每次工具调用都多等 500ms。
认证安全约束
HTTP 类型通过 headers 字段传递认证信息,环境变量引用必须列入 allowedEnvVars 白名单才会被展开。未列入白名单的 $VAR_NAME 引用被替换为空字符串——不是报错,而是静默失效。
$API_TOKEN 只有出现在 allowedEnvVars 数组中时才会被替换为环境变量的实际值。这是白名单机制,防止 headers 中意外泄露其他环境变量。