Hook Runner:在 Agent 调工具时插入拦截与审计
Hook Runner 是什么
Hook Runner 是 v1.12 起引入的底层机制——在 Agent 调用工具的前后插入拦截器。可以做:
- 权限提示:Agent 要装新包时先弹窗问用户确认
- 参数改写:把 Agent 计划访问的危险路径改写到安全目录
- 审计日志:记录 Agent 所有工具调用,便于事后追溯
- 能力扩展:在工具调用链里插入自定义逻辑
这是把桌面 Agent harness 的「sidecar 拦截器」思维带进 Android App 的设计——桌面 Agent 圈还在补这个,Operit 已经做了。
工作原理
Agent 决定调用工具 Foo(params)
↓
Hook Runner 拦截(Foo 是已注册 Hook 的目标)
↓
Before-Hook 执行(可以检查 / 改写 params)
↓
如果 Before-Hook 返回「放行」 → 继续调用 Foo
如果 Before-Hook 返回「拦截」 → 终止调用,返回错误
↓
Foo 正常执行
↓
After-Hook 执行(可以检查返回值 / 追加后处理)
可用 Hook 点
| Hook 点 | 触发时机 | 用途 |
|---|---|---|
before_tool_call | Agent 调用工具前 | 权限检查、参数改写、弹出确认 |
after_tool_call | 工具执行后 | 审计日志、后处理结果 |
before_llm_request | 发送给模型前 | 系统提示词注入、请求改写 |
after_llm_response | 模型返回后 | 审计、结果校验、安全过滤 |
before_workflow_step | 工作流每步执行前 | 步骤级的条件判断和确认 |
after_workflow_step | 工作流每步执行后 | 步骤级的日志和告警 |
常见使用场景
场景一:危险操作弹窗确认
Hook 点:before_tool_call
目标工具:pkg-install / pkg-uninstall
逻辑:弹出对话框「Operit 即将安装/卸载应用,确认?」
用户点确认 → 放行
用户点取消 → 拦截
场景二:文件访问路径限制
Hook 点:before_tool_call
目标工具:file-read / file-write
逻辑:检查路径是否在允许范围内
如果不在 /sdcard 或 ~/workspace 下 → 改写路径到安全目录
场景三:审计所有工具调用
Hook 点:after_tool_call
目标工具:所有
逻辑:把工具名、参数、返回值、时间戳写入审计日志
定期整理成报告发给用户
场景四:模型请求安全过滤
Hook 点:before_llm_request
目标:所有模型请求
逻辑:扫描请求中的敏感词 / 隐私信息
发现后标记或拦截
配置 Hook
内置 Hook(开箱即用)
Operit v1.12+ 自带一些 Hook 规则,在设置里可以直接开关:
- 危险操作确认弹窗(默认开启)
- 工具调用日志记录(默认开启)
- 文件路径白名单(默认关闭,需要手动配置)
自定义 Hook(高级)
自定义 Hook 需要写简单的 Python 脚本,放到 Operit 的 hooks/ 目录:
# hooks/block-dangerous-path.py
def before_tool_call(tool_name, params):
# 拦截访问 /data/system 等敏感路径的文件操作
if tool_name in ['file-read', 'file-write']:
path = params.get('path', '')
if path.startswith('/data/system'):
return {'action': 'block', 'reason': '敏感路径访问被 Hook 拦截'}
return {'action': 'allow'}
def after_tool_call(tool_name, result):
# 记录审计日志
with open('/sdcard/operit-audit.log', 'a') as f:
f.write(f"[{tool_name}] -> {result}\n")
保存后重启 Operit,Hook Runner 自动加载这个 Hook。
和计划模式(Plan-mode)的配合
Plan-mode 是 v1.12 引入的另一个设计——让 Agent 在执行前先输出行动计划。Hook Runner 可以拦截这个计划,让用户审核:
Agent → 输出计划:[Step 1: 读微信文件, Step 2: 转存网盘]
↓
Hook Runner 拦截计划 → 弹窗展示给用户
↓
用户点「同意」→ 计划放行
用户点「修改」→ 让 Agent 调整计划
两者配合 = Agent 显式「先想后做」+ 用户审核权限——大大降低误操作风险。
安全提示
Hook Runner 本身也能被第三方 Skill / MCP 添加 Hook:
- 不要装来源不明的 Skill——它可能偷偷加 Hook 拦截你的操作
- 定期在设置里检查「已安装 Hook 列表」,删掉不认识的
- 自定义 Hook 脚本写在 chroot 里,不会影响 Android 宿主