← 返回
未分类

Hook System

工具钩子系统。在工具执行前后注入自定义逻辑,支持: - PreToolUse: 工具执行前调用,可修改输入或阻止执行 - PostToolUse: 工具执行后调用,可修改输出或记录日志 当用户说"添加钩子"、"hook"、"拦截工具"、"工具前后处理"时触发。 依赖:Node.js 18+
工具钩子系统,支持在工具执行前后注入自定义逻辑。PreToolUse:执行前调用,可修改输入或阻止执行;PostToolUse:执行后调用,可修改输出或记录日志。触发词:添加钩子、hook、拦截工具、工具前后处理。依赖:Node.js 18+。
xhmqq616 xhmqq616 来源
未分类 clawhub v1.0.0 1 版本 100000 Key: 无需
★ 0
Stars
📥 310
下载
💾 0
安装
1
版本
#hook#interceptor#latest#posttool#pretool

概述

Hook System - 工具钩子框架

核心概念

工具调用流程(带Hook):
User Message → [PreToolUse Hook] → Tool Executor → [PostToolUse Hook] → Response
                       ↓                        ↓
                  可以阻止执行             可以修改输出

Hook 类型

类型时机用途
------------------
PreToolUse工具执行前验证输入、日志记录、阻止执行
PostToolUse工具执行后修改输出、错误处理、通知

快速使用

const { HookRunner } = require('./scripts/hook-runner.mjs');

const runner = new HookRunner({
  preToolUse: ['echo "Calling $HOOK_TOOL_NAME"'],
  postToolUse: ['echo "Done: $HOOK_TOOL_NAME"']
});

// 执行前钩子
const preResult = runner.runPreToolUse('read_file', '{"path":"README.md"}');
console.log(preResult.allow); // true/false
console.log(preResult.messages); // 钩子输出

// 执行后钩子
const postResult = runner.runPostToolUse('read_file', '{"path":"README.md"}', 'file content...', false);

Hook 命令格式

# 标准输出 = 钩子消息(会被注入到结果)
# 退出码 = 结果
#   0 = 允许/成功
#   2 = 拒绝(仅PreToolUse)
#   其他 = 警告(不阻止执行)

环境变量

钩子运行时自动注入:

变量说明
------------
HOOK_EVENT事件类型:PreToolUsePostToolUse
HOOK_TOOL_NAME工具名称
HOOK_TOOL_INPUT工具输入(原始JSON字符串)
HOOK_TOOL_INPUT_PARSED解析后的JSON(美化格式)
HOOK_TOOL_OUTPUT工具输出(PostToolUse才有)
HOOK_TOOL_IS_ERROR是否错误:01

权限模式

退出码结果说明
--------------------
0Allow工具正常执行/继续
2Deny阻止工具执行
其他Warn显示警告但继续执行

配置文件格式

{
  "hooks": {
    "preToolUse": [
      "node ./hooks/validate-input.mjs",
      "echo 'PreHook: $HOOK_TOOL_NAME'"
    ],
    "postToolUse": [
      "node ./hooks/log-output.mjs"
    ]
  }
}

内置钩子示例

1. 日志钩子

# pre-log.sh
echo "[$(date)] Calling $HOOK_TOOL_NAME with $HOOK_TOOL_INPUT" >> hooks.log

2. 输入验证钩子

// validate-input.mjs
const input = JSON.parse(process.env.HOOK_TOOL_INPUT || '{}');
if (input.path?.includes('..')) {
  console.error('Path traversal detected');
  process.exit(2); // Deny
}
console.log('Input valid');
process.exit(0);

3. 敏感信息过滤钩子

// filter-secrets.mjs
const output = process.env.HOOK_TOOL_OUTPUT || '';
const filtered = output.replace(/sk-\w{32,}/g, '[REDACTED_API_KEY]');
console.log(filtered);
process.exit(0);

文件结构

hook-system/
├── SKILL.md              # 本文件
├── scripts/
│   ├── hook-runner.mjs   # 核心钩子运行器
│   └── hooks/
│       ├── pre-log.mjs   # 日志示例
│       ├── validate-path.mjs  # 路径验证
│       └── filter-secrets.mjs # 敏感信息过滤
└── references/
    └── hook-examples.md  # 更多示例

_龙虾王子自我进化的成果 🦞_

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-05-07 20:05 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

dev-programming

Mcporter

steipete
使用 mcporter CLI 直接列出、配置、认证及调用 MCP 服务器/工具(支持 HTTP 或 stdio),涵盖临时服务器、配置编辑及 CLI/类型生成功能。
★ 195 📥 67,718
dev-programming

Github

steipete
使用 `gh` CLI 与 GitHub 交互,通过 `gh issue`、`gh pr`、`gh run` 和 `gh api` 管理议题、PR、CI 运行及高级查询。
★ 679 📥 327,915
dev-programming

CodeConductor.ai

larsonreever
AI驱动平台,提供快速全栈开发、智能体、工作流自动化及低代码AI集成的可扩展产品创建。
★ 72 📥 181,999