用 screenshot Skill 给 Agent 装上「眼睛」:桌面截图与视觉 QA

前言

Agent 写前端、改桌面应用时,常会卡在同一类问题上:代码改完了,但看不到真实界面长什么样。浏览器里可以用 Playwright 截页面,Figma 里也有专门的设计稿导出能力;可一旦对象变成系统级窗口、多显示器桌面,或者某个没有集成截图接口的原生应用,工具链就断了。

screenshot 就是补这一环的 Agent Skill。它指导 Agent 按操作系统能力做全屏、窗口或像素区域截图,把结果存成图片路径,再交给视觉分析工具逐张查看。本文基于 OpenAI 官方仓库中的 Skill 原文与安装说明整理,说明它是什么、怎么装、怎么用,以及和 Playwright、Figma 如何配合。

这是什么

screenshot 是 OpenAI 在 openai/skills 仓库 .curated 目录下维护的一组可复用能力包。目录里包含 SKILL.md 指令,以及跨平台截图脚本(macOS/Linux 用 Python,Windows 用 PowerShell),外加 macOS 权限预检与窗口信息辅助脚本。

它的定位很明确:当用户明确要求桌面/系统截图,或者工具专用截图能力拿不到目标画面时,用操作系统级捕获补齐视觉输入。Skill 本身遵循通用的 Agent Skills 格式(SKILL.md + 可选 scripts/),因此在 Codex、Cursor、Claude Code 等支持该标准的 AI 编程工具中都可以按各自目录放置后使用。

需要注意:仓库 README 已标注 openai/skills 进入废弃迁移阶段,后续 Codex 技能与插件示例会转向 openai/plugins。当前若仍从 curated 列表安装,可继续用下文的 $skill-installer 方式;长期分发建议关注官方插件文档。

核心功能与亮点

根据官方 SKILL.md,主要能力可以归纳为下面几类。

1、保存位置规则清晰
用户指定路径就存到该路径;只说「截一张图」则存到系统默认截图目录;Agent 为自己做视觉检查时,存到临时目录(--mode temp)。脚本每次输出一行(或多行)图片路径,方便后续用看图工具按顺序打开。

2、工具优先级:先专用、后系统
有 Figma MCP/Skill 就先截设计稿;有 Playwright / agent-browser 就先截浏览器或 Electron 页面。只有用户明确要求系统截图、需要整桌面捕获,或专用工具够不着时,才启用本 Skill。对没有更好集成方案的桌面应用,它才作为默认截图手段。

3、多平台、多粒度捕获
- 全屏
- 像素区域(x,y,w,h
- 当前焦点窗口
- macOS 上还可按应用名、窗口标题子串、window id 捕获,并支持 --list-windows 先列窗口再截
- 多显示器:macOS 全屏会按显示器各存一份;Linux/Windows 全屏是虚拟桌面整图,需要单屏时用 --region 裁切

4、macOS 权限预检
窗口/应用级截图前,可先跑 scripts/ensure_macos_permissions.sh,集中检查并申请 Screen Recording 权限,减少反复弹窗。官方建议把预检和截图写在同一条命令里,降低沙箱多次授权。

5、Linux 工具自动选型
Python 助手会按顺序尝试 scrotgnome-screenshot → ImageMagick import;都没有就提示用户安装。坐标区域截图依赖 scrotimport--app / --window-name / --list-windows 仅 macOS 可用;Linux 侧用 --active-window 或在可用时提供 --window-id

这些能力合在一起,正好支撑「设计稿 vs 实现」「改 UI 前后对比」「桌面应用视觉自检」这类视觉 QA 链路:Figma 出设计、Playwright 出网页、screenshot 出桌面/原生窗口。

安装与启用

在 Codex 中安装(官方 curated 方式)

curated 技能可用 Codex 内置的 $skill-installer 按名称安装(默认从 skills/.curated 拉取):

$skill-installer screenshot

也可以直接给出 GitHub 目录地址:

$skill-installer install https://github.com/openai/skills/tree/main/skills/.curated/screenshot

安装后如未出现在技能列表中,按官方说明重启 Codex 再试。

在 Cursor / Claude Code 等工具中手动启用

Skill 本质是一个文件夹。把 screenshot 目录放到对应工具会扫描的 skills 路径即可,目录内至少要有 SKILL.md,并保留 scripts/ 等附属文件。

常见路径(项目级 / 用户级):

工具 项目级目录 用户级目录
Cursor .cursor/skills/screenshot/.agents/skills/screenshot/ ~/.cursor/skills/screenshot/~/.agents/skills/screenshot/
Codex .agents/skills/screenshot/ ~/.agents/skills/(installer 默认也会装到 $CODEX_HOME/skills/,常见为 ~/.codex/skills/
Claude Code .claude/skills/screenshot/ ~/.claude/skills/screenshot/

手动示例(以 Cursor 项目级为例):

mkdir -p .cursor/skills
# 克隆仓库后拷贝 curated 目录,或 sparse checkout 该子目录
cp -R /path/to/openai/skills/skills/.curated/screenshot .cursor/skills/screenshot

Cursor 启动后会自动发现 skills;也可在 Agent 对话里用 / 搜索 screenshot 手动调用。只要 scripts/ 还在,Agent 才能按 SKILL.md 里的路径执行真实截图命令。

典型用法示例

以下命令均来自官方 SKILL.md,把 <path-to-skill> 换成本机 Skill 根目录。

macOS / Linux:Python 助手

默认截一张图(存系统默认位置):

python3 <path-to-skill>/scripts/take_screenshot.py

Agent 自检用临时目录:

python3 <path-to-skill>/scripts/take_screenshot.py --mode temp

指定输出路径:

python3 <path-to-skill>/scripts/take_screenshot.py --path output/screen.png

按应用名截窗口(仅 macOS,支持子串匹配,匹配到多个窗口会各出一张):

python3 <path-to-skill>/scripts/take_screenshot.py --app "Codex"

应用内再按窗口标题过滤,或先列出 window id:

python3 <path-to-skill>/scripts/take_screenshot.py --app "Codex" --window-name "Settings"
python3 <path-to-skill>/scripts/take_screenshot.py --list-windows --app "Codex"

像素区域与当前焦点窗口:

python3 <path-to-skill>/scripts/take_screenshot.py --mode temp --region 100,200,800,600
python3 <path-to-skill>/scripts/take_screenshot.py --mode temp --active-window

macOS 推荐「权限预检 + 截图」一次跑完:

bash <path-to-skill>/scripts/ensure_macos_permissions.sh && \
python3 <path-to-skill>/scripts/take_screenshot.py --app "Codex" --mode temp

官方工作流例子:用户说「帮我看看界面上有什么」→ 截到 temp → 按打印出的路径依次打开看图;用户说「Figma 设计和实现不一致」→ 先用 Figma 相关能力截设计稿,再用本 Skill 截运行中的应用,对比原始截图,不要先做不必要的图像加工。

Windows:PowerShell 助手

powershell -ExecutionPolicy Bypass -File <path-to-skill>/scripts/take_screenshot.ps1
powershell -ExecutionPolicy Bypass -File <path-to-skill>/scripts/take_screenshot.ps1 -Mode temp
powershell -ExecutionPolicy Bypass -File <path-to-skill>/scripts/take_screenshot.ps1 -Path "C:\Temp\screen.png"
powershell -ExecutionPolicy Bypass -File <path-to-skill>/scripts/take_screenshot.ps1 -Mode temp -Region 100,200,800,600
powershell -ExecutionPolicy Bypass -File <path-to-skill>/scripts/take_screenshot.ps1 -Mode temp -ActiveWindow

使用 -ActiveWindow 前,需要用户先把目标窗口置于前台。

助手不可用时的系统命令回退

官方还给出了直接调用系统命令的回退写法,例如 macOS 的 screencapture、Linux 的 scrot / gnome-screenshot / import。能跑捆绑脚本时优先用脚本,避免自己拼平台差异。

适用场景与注意事项

适合的场景

  • 桌面/原生应用的视觉检查与调试
  • UI 改动前后的界面留证、简单视觉回归对比
  • 多显示器环境下定位某一块屏幕区域
  • 配合 Figma(设计)与 Playwright(浏览器/Electron)做「设计 → 实现 → 运行态」对照

使用时注意

  • macOS 必须解决 Screen Recording 权限;沙箱里若出现截屏被拦截、无法从显示器创建图像、Swift ModuleCache 权限报错,需要提升权限后重跑。
  • 应用/窗口截不到时,先 --list-windows --app "AppName",确认应用在屏幕上可见,再改用 --window-id
  • Linux 区域/窗口失败时,先 command -v scrotgnome-screenshotimport 检查依赖。
  • 存到系统默认截图目录若因沙箱权限失败,同样需要提权重试。
  • 始终在回复里报告保存路径;多窗口或多显示器匹配时会输出多行路径,并带 -w / -d 一类后缀,需要逐张查看。
  • 不要把本 Skill 当成浏览器截图的第一选择:网页场景优先 Playwright 等专用工具。

小结

screenshot 把「操作系统级截图」打包成 Agent 可发现、可执行的 Skill:统一保存策略、跨平台助手脚本、清晰的工具优先级,以及和 Figma、Playwright 衔接的视觉 QA 工作流。装好之后,Agent 不再只能「猜界面」,而是能真正拍下桌面画面再分析。

官方地址:https://github.com/openai/skills/tree/main/skills/.curated/screenshot
Skill 原文(SKILL.md):https://raw.githubusercontent.com/openai/skills/main/skills/.curated/screenshot/SKILL.md
Codex Skills 说明:https://developers.openai.com/codex/skills
Cursor Skills 说明:https://cursor.com/docs/skills
Agent Skills 开放标准:https://agentskills.io

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜