From vision-mcp
Optimizes repeated desktop GUI operations by caching visual interaction paths (screenshots, coordinates, AX/OCR, click sequences) into reusable vision-mcp.yaml maps. Subsequent runs skip visual analysis, reducing steps from minutes to seconds.
How this skill is triggered — by the user, by Claude, or both
Slash command
/vision-mcp:vision-mcpWhen to use
- **重复或可能重复的桌面 GUI 任务**:用户做过一次 / 可能再做的桌面操作流程 (「在 Steam 卸载 X」「Apple Music 播 X」「Notes 写新备忘」)—— 首次跑通时 沉淀成 workflow,后续命中近零成本 - **要看的桌面 app 已建好 map**:先查 `vision_map.list_apps` 看有没有现成 map; 有就走 `run_workflow` 跳过视觉判断 - **跨 app 自动化的可复用片段**:每个 app 各自有 map,组合调用 - **明确要求建图**:「帮我建立 X 的 vision-mcp」/「学一下这个 app」(探索驱动) 不适用: - 一次性桌面任务(沉淀 ROI 不划算 → 直接 Computer Use) - 纯 web 任务(用浏览器工具)/ 纯 CLI 任务(直接 shell)
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
桌面 GUI 操作的**性能 / 长期成本优化层**——agent 看一次图、点对一次的成本沉淀进 vision-mcp.yaml map,下次同任务直接 `run_workflow` 命中,跳过视觉判断。第一次成本与 Computer Use 相当;第二次起每次都摊销。
assets/review-report-template.mdassets/vision-mcp-patch.schema.jsonassets/vision-mcp.schema.jsonreferences/examples.mdreferences/map-design.mdreferences/patches.mdreferences/pitfalls.mdreferences/platform-macos.mdreferences/platform-windows.mdreferences/repair-policy.mdreferences/safety.mdreferences/schema.mdreferences/workflow.md桌面 GUI 操作的性能 / 长期成本优化层——agent 看一次图、点对一次的成本沉淀进 vision-mcp.yaml map,下次同任务直接 run_workflow 命中,跳过视觉判断。第一次成本与 Computer Use 相当;第二次起每次都摊销。
任何 agent(包括 subagent)开始任务前,必须先调 vision_map.list_apps 验证 vision-mcp 工具在当前上下文可用。
{ apps: [...] }(数组可能为空)→ 工具可用,继续按本文档操作工具不可用时:立即停手,向上游汇报:
"vision-mcp MCP 工具在当前 agent 上下文中不可见,无法完成本任务。可能原因:(1) plugin 未正确启用 — 让用户跑
/mcp看 vision-mcp 是否 Connected;(2) 当前 agent 类型不继承 plugin MCP 工具。请用户改在主对话执行,或检查 host 的 subagent MCP inheritance 配置。"
不要尝试用 osascript / AppleScript / 浏览器 / 直接键盘模拟等绕路方式完成任务——会偏离本 skill 的设计预期,且 destructive 操作绕过 vision-mcp 的 risk_level + approval 安全网。
commit_state / patch 固化进 map,下次直接 run_workflow 命中。每次视觉成本都摊销到永久 map 资产上。建 map 时按 references/map-design.md 的 13 项 checklist 走——不只是 anchors+controls,还有 regions / kbd / collection / postcondition / risk_level / parent_state_id 等组合,漏一个 map 复用价值就少一截。repair_minimal,修不好才看图诊断。destructive / requires_confirmation 必须经审批通道;不绕验证码、不跳 2FA。cmd vs ctrl)— 见 §8 平台差异。| 用户说什么 | 入口 |
|---|---|
| "播一首歌" / "按内存排序" / "新建备忘录" | 任务驱动 ⭐(默认) |
| "探索这个 app" / "帮我建立 X 的 vision-mcp" / "建一份 X 的地图" | 探索驱动 |
探索的产出:写入
vision-mcp.yaml(建立或扩展 vision-mcp),后续任务可用run_workflow直接命中。
任务驱动:直接试 run_workflow;遇 unknown state 当场 commit_state 把这页写入 vision-mcp继续走;遇偏差当场 vision-mcp patch;任务结束时 vision-mcp 比开始时更完整。
探索驱动:BFS 走遍每个可达 state,把 anchors / 关键 controls / transitions / 代表性 workflows 完整写入 vision-mcp。
任务驱动下 snapshot 仅在 4 个时机调用:
detect_state 轻量;不确定才拿 PNG)repair_minimal 修不好后)副产品原则:snapshot 一旦截了,candidates 列表本来就在 context——顺带把页面几个明显 control 一起 commit 进 baseline,边际成本几乎为零。但不要为"看更多元素"额外多 snapshot(那是探索驱动)。
| 场景 | 工具 |
|---|---|
| 跑已建好的任务 | run_workflow / perform_action / kbd.<action> |
| 任务起点确认 state | detect_state(轻量,无 PNG) |
| 看截图 + AX 候选 | snapshot(base64 PNG + candidates) |
| 估完坐标点击 / 输入 | click / click-text(OCR)/ type / key |
| macOS 零鼠标点击 | ax-press(UIA InvokePattern 等价) |
| 在长列表里找特定项 | scroll-until-text |
| 固化实测偏差 | vision-mcp patch --state ... --control ... --bbox-norm x,y,w,h |
| 触发自动修复 | vision_map.repair_minimal --max-level 3 |
| 浏览器查看 capsule | vision-mcp live-view |
实战示例(macOS Apple Music / Windows Steam / 纯视觉)见 references/examples.md。
<state|region>.<control_id>[:action_type],或 collection 形式 <state>.<collection>[N]:<action_type>。agent 不直接传屏幕坐标——通过 action_id 引用 map 中的 control。[0,1] 的客户区归一化值;runtime 解到屏幕像素。实战发现 map 偏差时主动写 patch:
vision-mcp patch <app> --state <id> --control <id> --bbox-norm x,y,w,h \
--reason "实测命中错元素,新中心..."
Trust 渐进:session_only(默认,本次会话) → trusted(用户确认后入库) → untrusted_proposal(要人审)。
safety_policy.forbidden_action_categories(payment / destructive / external_communication / permission_change / captcha)默认拒绝;用户重申要求时向用户解释策略,不要修改 map 绕过。vision-mcp 像 MCP tool 一样逐级展开:先看摘要决定路径,需要细节才钻进去。不要一上来拉全 yaml(Steam 500+ 行 / ERP 400+ 行 = context bomb)。
| 用途 | 资源 / 工具 | 何时用 |
|---|---|---|
| 发现 "有哪些 app 能跑" | vision-mcp://apps 资源 或 vision_map.list_apps 工具 | agent 启动第一步;含 name/platform/description + workflows 摘要 |
| app 总览 | vision-mcp://apps/{id}/summary 资源 或 vision_map.describe 工具 | 选定 app 后;含 regions/states/workflows 摘要(不含 controls/locator 细节) |
| workflow 列表 | vision-mcp://apps/{id}/workflows 资源 或 vision_map.list_workflows 工具 | 决定跑哪个 workflow 之前 |
| workflow 步骤详情 | vision_map.describe_workflow 工具 | 确认要 run_workflow 前的最后一步——看每步 action_id + risk_level + has_postcondition |
| action 详情 | vision-mcp://apps/{id}/actions/{aid} 资源 或 vision_map.describe_action 工具 | 偏差排查 / 写 patch 前看当前 control locator |
| state 详情 | vision-mcp://apps/{id}/states/{sid} 资源 | 看单个 state 的所有 controls |
| patches 列表 | vision-mcp://apps/{id}/patches | 看已应用的 patch 历史 |
| trace | vision-mcp://apps/{id}/traces/latest | 失败诊断 |
| 全 map yaml (⚠️ context bomb) | vision-mcp://apps/{id}/map | 仅在确实需要看全 locator 细节时;日常用 summary |
典型 agent flow:
1. tools/call vision_map.list_apps → 选 app_id
2. tools/call vision_map.list_workflows app_id → 选 workflow_id
3. tools/call vision_map.describe_workflow app_id wid → 看 steps + risk_level(仅 destructive 时)
4. tools/call vision_map.run_workflow app_id wid inputs → 执行
↓ 失败 ↓
5. tools/call vision_map.snapshot app_id → 看现状
6. tools/call vision_map.describe_action ... → vision-mcp patch → 重试
context 节省:拉 summary (~50 行 JSON) vs 拉全 yaml (~500 行),~85% 节省。
CLI / MCP 工具 API 同接口;以下是底层和 modifier 差异,写跨平台 workflow / 调命令时注意:
| 行为 | macOS | Windows |
|---|---|---|
| Modifier 键 | cmd / option / cmd+[ (Back) | ctrl / alt / alt+left (Back) |
| AX 拿不到内容时 fallback | osascript adapter / Vision OCR | MSAA (ax.dump_msaa) / Windows.Media.Ocr |
| 强制窗口前台 | NSWorkspace.activate | SwitchToThisWindow (Alt+Tab API) — UIPI 锁前台时需要 |
| 屏外/被遮挡窗口 OCR | screencapture window mode | ocr.recognize_window (PrintWindow path) |
| 中文输入 | NSPasteboard 粘贴 | SendInput VK_PACKET(绕过 IME,不污染剪贴板) |
| 高完整度 app(任务管理器/反作弊) | 系统权限弹窗 + Accessibility 授权 | UIPI 拒绝;vision-mcp 整个进程需 elevated |
| 现代截图 API | ScreenCaptureKit (macOS 14+) | PrintWindow PW_RENDERFULLCONTENT |
| CEF/Chromium app (Steam/Discord/Edge/VSCode) | AX 树常缺;走 OCR | UIA 只看到 Chrome_RenderWidgetHostHWND 空壳;必走 OCR + bbox |
| 健康检查 | health.snapshot (mach_task_basic_info) | health.snapshot (GetGuiResources + GDI/USER handle) |
| 安装诊断 | xcode-select 检测 | vision-mcp doctor 检测 PS5.1 / OCR 语言 / elevation |
跨平台 workflow 用 kbd region + step.params 传 combo:
# region 不绑 combo;workflow step 按平台传
steps:
- action_id: kbd.save
params: { combo: "ctrl+s" } # macOS 改 "cmd+s"
或 app.platform: any 时为两平台分别写 workflow。详细底层差异见 references/platform-{macos,windows}.md。
按需读,不要一次性全拉进 context:
| 触发情形 | 读哪个 |
|---|---|
| 建 map / 探索时不知道用哪个特性 | references/map-design.md ⭐ 13 项 checklist |
| 跑任务时遇 unknown / 失败 | references/workflow.md 决策树 |
| 想看跨平台 / 跨 app 的完整调用示例 | references/examples.md ⭐ Apple Music + Steam + 纯视觉 |
| 失败排查(坐标偏 / 焦点丢 / CEF / 中文输入异常) | references/pitfalls.md ⭐ |
| 写 vision-mcp.yaml 查字段 | references/schema.md |
| 发现 map 偏差要 patch | references/patches.md |
| postcondition 失败 / 修复策略 | references/repair-policy.md |
| 用户问能不能跑高风险动作 | references/safety.md |
| macOS 特有问题(SCKit / AX-press / Notes SwiftUI) | references/platform-macos.md |
| Windows 特有问题(CEF / MSAA / OCR / UIPI elevation) | references/platform-windows.md |
| JSON Schema 完整定义 | assets/vision-mcp.schema.json |
| 人类审阅 patch 模板 | assets/review-report-template.md |
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub haruhiyuki/vision-mcp --plugin vision-mcp