Midscene Skills:让 Claude 用视觉方式操控任意平台 UI
总结
字节跳动 web-infra-dev 团队(Rsbuild / Rslib 同厂)开源的 Midscene Skills 是当下 GitHub Trending 第 2 名的 UI 自动化技能集合。它把「视觉驱动 + 自然语言」做成了一组可直接 npx skills add 装进 Claude Code / OpenClaw 的 Skills,覆盖 Web、Chrome Bridge、桌面、Android、iOS、HarmonyOS 六大平台,一句话让 AI 操控任意 UI——不再受 DOM 选择器、XPath、跨域 iframe 拖累。
功能与原则
核心能力:纯视觉驱动(screenshot-based)的跨平台 UI 自动化引擎,通过多模态视觉模型在截图上直接定位元素、操作界面、断言视觉结果,并以一组 Skills 的形式暴露给 AI Agent 调用。
设计原则:
- 截图即真相:元素定位完全基于像素级截图,不依赖 DOM、accessibility tree 或 selector,icon-only 按钮、
<canvas>、原生 App、跨域 iframe 全部可达 - 跨平台一致:Web、Desktop、Android、iOS、HarmonyOS 共用同一套 API(
aiAct/aiQuery/aiAssert),切换平台不改代码 - 自然语言即脚本:测试用例与自动化指令统一用自然语言描述,无需 XPath/CSS 选择器
- 可插拔视觉模型:默认支持 Qwen3-VL、Doubao Seed 1.6、GLM-4.6V、Gemini-3-Pro/Flash、UI-TARS-1.5-7B(开源,可自托管)
- 可观测可重放:每次执行都生成带时间戳的 trace,便于回放与排查
认可度
- GitHub Stars:主仓库
web-infra-dev/midscene截至 2026-08-13 约 14,564 stars,#2 No.2 in GitHub Trending - GitHub Trending:2026-08-13 出现在 GitHub Trending TypeScript 日榜(11 stars today)
- Skills 仓库:
web-infra-dev/midscene-skills提供 7 个独立 Skill 子包,供 Claude Code / OpenClaw 一键安装 - 跨平台覆盖:Web、Chrome Bridge、macOS / Windows / Linux Desktop、Android、iOS、HarmonyOS 六大平台
- 社区:Discord
midscene_ai、X@midscene_ai、飞书交流群、官方文档站midscenejs.com、DeepWiki 知识图谱 - 学术引用:2025 论文「Midscene.js: Your AI Operator for Web, Android, iOS, Automation & Testing.」(Xiao Zhou, Tao Yu, YiBing Lin)
- 生态 SDK:社区已衍生 Python、Java、Vue PC、iOS Mirror 等多语言 SDK 与 Docker 镜像
链接
GitHub:https://github.com/web-infra-dev/midscene-skills
主仓库:https://github.com/web-infra-dev/midscene
原作者
字节跳动 web-infra-dev 团队(与 Rsbuild、Rslib 同厂)。
代表作者:Xiao Zhou、Tao Yu、YiBing Lin——Midscene.js 论文署名作者。
定位:让 AI 直接「看」屏幕操作任何 UI,替代传统 DOM 选择器与 Playwright/Puppeteer 编程范式。
介绍
Midscene.js 是字节跳动 web-infra-dev 团队开源的「视觉驱动 UI 自动化」底层引擎:拿到截图后,由多模态视觉模型识别像素中的可交互元素,把元素坐标、视觉断言结果返回给上层调用方。Midscene Skills 则是把这一能力打包成 7 个独立的 Skill 文件(每个对应一个平台或场景),让 Claude Code、OpenClaw 等 AI Agent 可以通过 npx skills add 一键安装并调用。
整套体系分两层:底层引擎(@midscene/web 等 NPM 包,可被 Playwright、Vitest、Puppeteer 集成)负责截图、模型调用、元素定位;上层 Skills 负责将引擎能力包装成 Agent 可识别的工具描述。两者解耦的好处是:开发者可以单独把 Midscene 加进现有的 E2E 测试套件,也可以让 AI Agent 完全自主地用自然语言驱动测试。
比起传统 Selenium / Playwright,Midscene 的最大差异是「不依赖 DOM」。对于 icon-only 按钮、自定义控件、Canvas 绘制、跨域 iframe、原生 App,DOM 选择器完全失效,而视觉定位仍然可用。Midscene 的官网宣称「if a human can see it, Midscene can target it」。
特点
- 纯视觉定位:完全基于截图,绕过 DOM / a11y tree 脆弱性问题
- 跨 6 大平台:Browser、Chrome Bridge、Desktop(macOS / Windows / Linux)、Android、iOS、HarmonyOS 共用一套 API
- 可插拔视觉模型:Qwen3-VL、Doubao Seed 1.6、GLM-4.6V、Gemini-3、UI-TARS-1.5-7B 等任选
- 可被 Agent 调用:原生支持 Claude Code、OpenClaw 等通过 Skills / MCP 接入
- 可观测可重放:每次执行生成 trace,支持回放与回溯调试
- 零代码体验:Chrome 扩展装上即可在任意网页上直接「说」出自动化指令
使用方法
前置条件:Node.js 18+、MIDSCENE_MODEL_API_KEY / MIDSCENE_MODEL_NAME / MIDSCENE_MODEL_BASE_URL 等环境变量(任选一个支持的视觉模型即可,例:Qwen3-VL 通过 OpenRouter,Gemini-3-Flash 通过 Google API)。
安装 Skills:
# 给 Claude Code 安装
npx skills add web-infra-dev/midscene-skills -a claude-code
# 给 OpenClaw 安装
npx skills add web-infra-dev/midscene-skills -a openclaw
# 安装全部平台 Skills(默认)
npx skills add web-infra-dev/midscene-skills
最小示例(Web 自动化):
import { chromium } from 'playwright';
import { Midscene } from '@midscene/web';
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://github.com');
const midscene = new Midscene(page);
// 自然语言直接驱动
await midscene.aiAct('点击右上角的搜索框');
await midscene.aiAct('在搜索框输入 "midscene"');
await midscene.aiAct('按下回车键');
// 自然语言断言
await midscene.aiAssert('搜索结果页第一条是 web-infra-dev/midscene 仓库');
await browser.close();
使用场景与人群
适用场景:
- Web / 桌面 / 移动端 E2E 测试,特别是面对 icon-only、Canvas、跨域 iframe 等 DOM 难以触达的元素
- 让 AI Agent 全自主跑完一段用户旅程(注册流程、表单填写、机票预订)
- 把现有 Playwright / Puppeteer 测试改造为「自然语言脚本」
- 移动 App / HarmonyOS App 的端到端自动化(覆盖 adb、WebDriverAgent、HDC)
- 桌面 App 跨平台(macOS / Windows / Linux)自动化
目标用户:
- 前端 / 客户端 / 移动端 QA 工程师(写 E2E 写烦了)
- AI Agent 开发者(想让 Agent 真的能操控浏览器和原生 App)
- 自动化测试团队负责人(追求跨平台覆盖、降低维护成本)
- 字节 / 阿里 / 腾讯系内部产品团队(多端 UI 自动化统一接入)
输入与输出案例
案例 1:Web 自动化注册 GitHub 账号
输入:
prompt: |
1. 打开 https://github.com/signup
2. 在用户名输入框中填写 "test-midscene-2026"
3. 在邮箱输入框中填写 "test@midscene.dev"
4. 在密码输入框中填写一个 16 位随机密码
5. 点击 "Create account" 按钮
6. 断言页面跳转到 onboarding 页面
输出:
{
"result": "ok",
"trace": "trace-2026-08-13-001.zip",
"steps": [
{ "step": "fill-username", "screenshot": "shot-1.png", "matched_element": { "bbox": [820, 460, 1080, 510] } },
{ "step": "fill-email", "screenshot": "shot-2.png", "matched_element": { "bbox": [820, 560, 1080, 610] } },
{ "step": "fill-password", "screenshot": "shot-3.png", "matched_element": { "bbox": [820, 660, 1080, 710] } },
{ "step": "click-create-account", "screenshot": "shot-4.png", "matched_element": { "bbox": [880, 840, 1020, 880] } }
],
"assertions": [
{ "name": "onboarding-redirect", "passed": true }
]
}
案例 2:Android 端自动下单咖啡
输入:
platform: android
device: emulator-5554
prompt: |
1. 打开「美团」App
2. 点击底部 Tab「外卖」
3. 在搜索框输入 "星巴克"
4. 点击第一家门店
5. 选择「大杯热拿铁」
6. 点击「立即购买」
7. 断言出现「选择收货地址」页面
输出(节选):
{
"result": "ok",
"platform": "android",
"matched_actions": [
{ "step": "open-meituan", "method": "aiAct", "model": "qwen3-vl-235b-a22b-instruct", "tokens": 1820 },
{ "step": "search-starbucks", "method": "aiAct", "matched_element": { "bbox": [60, 180, 1020, 260] } },
{ "step": "choose-latte", "method": "aiAct", "matched_element": { "bbox": [120, 720, 960, 800] } }
],
"assertions": [
{ "name": "address-page-shown", "passed": true, "evidence": "shot-7.png" }
]
}
评论区
登录后可评论。