Files
codex-app-server/cloud/skills/browser-automation/SKILL.md
T
host 6f39ab3945 feat: 浏览器二期后端:远控服务 + ref 快照 + server 代理
- playwright_remote.py(新):MCP 进程内 Unix socket HTTP 服务,
  监听 worktree/.browser-remote.sock;GET /state、GET /stream
  (SSE 画面流)、POST /input、POST /control(接管/交还)。
  线程契约(实测):Playwright 同步调用只能在创建页面的线程,
  所以 HTTP 线程只读属性/读最新帧/入队,MCP 主循环用
  select 轮询(50ms) draining 输入并 pump screencast 帧
  (无 ack 则 CDP 首帧后停流)。
- 画面流走 CDP screencast 帧(学 chrome-devtools-mcp),不用
  定时截图;ffmpeg 录像暂不做。
- snapshot_refs/click_ref(学 playwright-mcp 的 ref 机制)+
  mouse_move/key_press/type_text;agent 工具在 holder=user 时
  直接报错,等用户交还。
- server.py:/tasks/{id}/browser/{state,stream,input,control}
  代理到 worktree socket,复用任务鉴权与 worktree 解析;
  会话不存在时 503(轮次结束即消失是设计)。
- 播种器:MCP 脚本是系统文件,版本变化时刷新老租户旧脚本
  (script_refreshed 打日志),否则远控只对新项目生效;
  新增 playwright_remote.py 进播种清单。
- 队列遮蔽修复:cloud/queue.py 会遮蔽 stdlib queue,改用
  SimpleQueue(deque+锁),仓库模式与 flat-copy 两路都通。
- 测试:新 20 项(remote 服务、server 代理、ref/输入/
  screencast fake),全量 1354 项通过(skipped 4)。
2026-10-30 06:44:24 +08:00

63 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: browser-automation
description: >
Use when a task needs a real browser: pages that render with
JavaScript, clicking through pagination or forms, filling and
submitting input, or taking a screenshot of what a page
actually looks like. For a plain static page or a quick fact,
use web_fetch / web_search first; open the browser only when
static fetch cannot see the content.
---
## 工具
`browser_navigate`(打开 URL,返回最终 URL 与标题)、
`browser_snapshot`(当前页标题、URL、正文,超 8000 字截断并标记)、
`browser_click`(按 CSS 选择器或 `text=...` 点击)、
`browser_fill`(按选择器填表)、
`browser_evaluate`(在页内跑 JS 表达式,返回字符串,限 4000 字)、
`browser_screenshot`(把当前页存成工作区内的 PNG,返回绝对路径与字节数)、
`browser_click_at`(按视口坐标点击,坐标系为 1280x800、原点左上角,
是 live 视图里用户点击的落点)、
`browser_live_shot`(把当前画面存成固定文件 browser-live.png,
附带 browser-live.json 状态:URL、标题、时间戳,供 watcher 轮询)、
`browser_close`(关闭浏览器,可重复调用)。
浏览器是单页的:一次 navigate,之后 snapshot / click / fill /
screenshot 都针对同一页;要换页再 navigate。
## live 视图(第一期)
有人在看浏览器时,每次 navigate / click / fill / click_at 之后
都要调一次 `browser_live_shot`,让 browser-live.png 保持最新;
不要只在最后截图一次。用户在 live 图上点的坐标会以 x/y 到达
`browser_click_at`,点完必须再 snapshot 一次确认变化,再调
`browser_live_shot` 刷新画面。
## 远控接管(第二期)
用户可以在控制台接管浏览器:接管期间(holder=user)你的
所有 browser_* 工具都会直接报错“user holds browser control”,
不要重试、不要 close 浏览器,停下来等用户交还;交还后
(holder 回到 agent)下一条继续消息会让你续跑,续跑前先
snapshot 一次看清用户改动到哪了。
新工具:`browser_snapshot_refs`(带 ref 的元素清单,点
`browser_click_ref` 比 CSS 选择器稳,页面重渲染后先重新
snapshot_refs 再点);`browser_mouse_move` / `browser_key_press` /
`browser_type_text`(键盘与鼠标,远控输入与 agent 工具同源)。
## 规则
1. 先 navigate,再 snapshot 看实际渲染结果;click / fill 后
必须再 snapshot 一次确认变化,不要凭猜测汇报。
2. 截图产出后用 shell / PIL 重新打开验证(格式、尺寸、非 0
字节)再交给用户;失败时贴出工具报错,不要换一张别的图顶替。
3. 网络走 egress 代理:不在 Tinyproxy 白名单里的域名会报
代理 403,这时如实说明,不要绕过白名单。
4. file:// URL 可用于打开工作区内已写好的测试页(验证 JS
执行、表单行为),是比外网更可靠的自测手段。
5. 不要用浏览器做静态抓取能做的事;不要用 evaluate 绕过
click / fill 的正常路径去改页面状态,除非 snapshot 已证明
正常路径走不通。