| name | browser |
| description | 嵌入式浏览器自动化:在后台的隐藏网页宿主里导航、观察并操作网页。Use when a task must open, read, or act on a web page and no safer interface or connector can complete it. |
| allowed-tools | ["wuu_browser"] |
嵌入式浏览器自动化
用 wuu_browser 工具在后台的嵌入式网页宿主里导航、观察并操作网页。
控制模型
- 先用语义定位,再谈坐标。
observe 会返回带 node_id 的可交互节点;操作时优先引用最近一次 observe 得到的 node_id。只有当目标无法用节点定位时,才退到坐标 click(x, y) 兜底。节点与坐标来自不同的定位来源:同一次操作里不要把两者混用,也不要把节点快照里的数值当作屏幕坐标。
- 每次动作都显式写出目标
node_id(或坐标)。目标不从上一次调用继承。
- 投递不等于成功。
click/type/key/scroll 只代表运行时向页面派发了对应事件,不代表页面接受了它、也不代表页面到达了预期状态。凡是结果重要的动作,动作之后必须再 observe 复查;不要用“没有报错”推断成功。
- 只在最近一次成功
observe 建立的状态内复用 node_id。页面导航、跳转、重载或版式意外变化后,先 observe 重新定位,再决定下一步。
- 三档降级(语义节点 →
node_id → 坐标)由运行时按页面情况选择,不要试图强制某一档。
- 每步动作自声明风险
risk ∈ {safe, external_side_effect, destructive}。external_side_effect 与 destructive 只有在真实用户确认之后才可置 confirmed=true;没有真实确认就不要标 confirmed。多步有序动作优先用一次 sequence,让运行时保序、逐步复查控制权、并在中途失败时报告部分完成;不要把有序动作拆成并行调用。
- 不重复瞎猜。同一目标连续失败两次,就换一条有依据的路径——重新
observe 定位、换一个语义节点、或改用键盘操作——而不是在附近坐标上反复点。若没有基于新证据的可行路径,停下并如实报告这一步未完成。
可见性
- 默认隐藏后台运行:页面挂在隐藏宿主里,用户看不到,而观察、定位与操作照常进行。绝大多数任务不需要让页面显形。
- 仅当用户的主要目标就是“看着页面”(演示、盯着进度、手动接管)时,才
set_visibility(true) 把页面叠加到窗口前台。目的达成后 set_visibility(false) 交还,或在 finalize 时一并收回。
生命周期
- 每一轮里最后一次浏览器调用必须是
finalize({keep: [...]}),显式声明这一轮结束时保留哪些页面、以及各自的去向。
keep 里每个页面标明 status:页面本身就是交付物(要展示给用户或作为结果)→ deliverable;任务未完、下一轮还要接着操作它 → handoff。
- 未列入
keep 的页面——研究页、搜索结果页、登录中转页、各种中间页——一律在 finalize 时关闭。不要把用完的页面留着累积。
风险
- 可逆、只读的操作(导航、
observe、滚动、翻页、读取页面文本)免确认,直接做。
- 不可逆或对外产生后果的操作——提交表单、下单或支付、发消息、发布或修改公开内容、改动账户设置——声明对应
risk,并在最终那一步动作之前向用户确认;没有确认就不要执行。
- 作废不等于未发生。一个正在进行的 mutating 动作若因用户接管而被打断作废,不代表它没在页面上生效:运行时作废的只是本次工具调用,页面可能已经收到了事件。恢复控制后,先
observe 确认该动作到底有没有生效,再决定是否重试;不要盲目重发,否则可能造成重复提交(例如重复下单、重复发送)。
- 避免与用户并发操作同一站点。用户此刻正在面板里使用的站点,与后台页面共享同一登录态,并发操作可能互相顶掉会话或打断用户。这种情况下不要抢着操作,必要时提示由用户接管。