Skip to content
FunCoding

Search

Search docs, Skills and MCP

Hooks 安全、性能与排障

审阅项目 Hook 身份、保护环境变量,并处理超时、输出污染和日志隐私。

This page has not been translated into English yet. The original Chinese version is shown below.

Hook 可以用当前用户权限执行命令,读取输入、输出和继承的环境。其权限不由“只记录日志”的名称决定,应审阅脚本与依赖实际行为。

项目 Hook 身份

CLI 按 Hook name 与 command 生成身份,未见过的项目 Hook 会显示警告,并可能执行后记为受信任。command 改变会触发新身份;警告不是一律要求交互批准的保证。

身份描述没有承诺散列脚本全部内容,因此同一路径脚本内容被修改时,不能仅凭命令字符串没变就认定实现未变。更新第三方项目或扩展后仍需审阅脚本。

环境变量

最佳实践明确环境脱敏默认关闭,与概览笼统的 sanitized environment 说法不同。需要时显式配置:

{
  "security": {
    "environmentVariableRedaction": {
      "enabled": true,
      "allowed": []
    }
  }
}

放入 allowed 的变量绕过脱敏,应只列确需传递的名称;修改需重启。不要为排障把全部 env 输出到可共享日志。

性能

BeforeTool 等频繁事件应使用精确 matcher,独立读取可并行,昂贵结果可缓存。默认超时 60000ms,可为快速校验明确设更短值。AfterModel 每个流块触发,最终质量检查通常放 AfterAgent。

缓存应考虑项目和输入变化,不能仅为了减少耗时复用已经过期的授权决定。

不执行或超时

先在 /hooks panel 确认名称、启用状态、最近输出和耗时;再查 matcher、脚本路径、解释器与执行权限。当前禁用列表是 hooksConfig.disabled,最佳实践旧 hooks.disabled 示例不应直接沿用。

脚本超时应先定位外部依赖与阻塞步骤,不能假设普通失败码会安全阻断工具;阻断语义见协议。

日志隐私

telemetry.logPrompts 开启时 Hook 数据可进入日志,用于调试前应理解包含的提示或代码。suppressOutput: true 隐藏内部元数据,不隐藏终端上的 systemMessage 或 reason,也不撤销脚本自己写出的日志。敏感场景应缩小日志内容并明确设置 logPrompts false。