必须在支持Hook的环境运行并封装工具调用逻辑;检查window.__hooked__为true且window.hookToolCall为function;手动调用wrapWithHook包装的函数或postMessage触发;用getHistory()和filter筛选,注意大小写及参数完整性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Claude Code中用Hook检查工具调用,必须先确保代码运行在支持Hook机制的执行环境里,且工具调用逻辑已封装为可拦截的函数或方法;直接在原始提示词中写“请调用工具”不会触发Hook检测,因为Hook需要作用于实际执行层。
确认Hook注入点是否生效
打开Claude Code的调试控制台,执行window.__hooked__,若返回true说明全局Hook已加载;返回undefined则需重新执行注入脚本,否则后续所有检查都将失效。
运行console.log(typeof window.hookToolCall),输出应为"function";如果不是,说明Hook函数未正确挂载到window对象上,此时任何工具调用都不会被捕获。
手动触发一次工具调用并捕获
方法一:在代码中显式调用被Hook包裹的工具函数
找到工具定义位置,确认其已被wrapWithHook包装(如search = wrapWithHook(search, 'search')),然后直接执行search("量子计算");这会自动触发Hook记录,无需额外配置。
方法二:通过模拟消息通道强制推送
在控制台输入:window.postMessage({type: "TOOL_CALL", name: "weather", args: ["Beijing"]}, "*");该方式绕过业务逻辑,直接向Hook监听器投递事件,适用于测试Hook本身是否响应正常。
查看和过滤Hook捕获的调用记录
第一步:执行window.hookToolCall.getHistory()获取完整调用数组。
第二步:用.filter()筛选特定工具,例如window.hookToolCall.getHistory().filter(t => t.name === "database_query");注意这里t.name是字符串匹配,大小写敏感,写成"Database_Query"将查不到结果。
第三步:对最新一次调用检查参数完整性——【如果t.args长度为0或t.args[0]为undefined,说明工具函数被调用时未传参,可能是前端表单未提交或默认值未设置】。











