📸 mac screenshot — macOS截图

v1.0.1

使用 macOS 内置系统工具捕获整个屏幕、特定应用窗口或精确指定的桌面窗口的截图。当用户要求截取桌面、最前面的应用、微信/WeChat 窗口、Chrome 窗口,或按关键词定位 macOS 窗口并捕获时使用此技能。

0· 28·1 当前·1 累计
mallocfeng 头像by @mallocfeng·MIT-0
下载技能包
License
MIT-0
最后更新
2026/4/16
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
安全
high confidence
该技能的要求、说明和包含的脚本与其声明的用途(macOS 截图捕获)一致,不请求无关凭证,也不执行隐藏的网络活动。
评估建议
该技能与其描述一致,但请注意:截图可能包含敏感数据。在安装或使用前,(1) 检查包含的脚本以确认您对其行为满意(仅枚举窗口并运行 screencapture),(2) 准备好授予 macOS 屏幕录制(可能还有辅助功能)权限给运行命令的主机进程——只向可信进程授予这些权限,(3) 技能会在本地保存文件(例如 screenshots/);检查工件存储位置及谁可以访问,(4) 技能不联系外部服务器或请求凭证,因此从代码来看网络泄露并不明显。如果您需要额外保证,请在授予持久权限给代理之前在受控环境中手动运行脚本。...
详细分析 ▾
用途与能力
名称/描述与实际行为匹配:通过内联 Swift/CoreGraphics 枚举 macOS 窗口,并使用 screencapture 进行窗口或全屏截图。所需二进制文件(swift、screencapture、python3)适合该工作流程。
指令范围
SKILL.md 和捆绑脚本仅枚举屏幕上的窗口、按关键词过滤,并调用 screencapture。说明明确将截图视为敏感数据,需要用户同意后才能发送到聊天。不存在读取无关文件、网络端点或其他凭证的指令。
安装机制
这是一个仅包含指令的技能,带有一个小的内嵌 shell 脚本和内联 Swift;没有下载/安装步骤或外部工件检索。除保存捕获时创建本地 screenshots 文件夹外,不会写入系统位置。
凭证需求
该技能不请求环境变量或凭证。swift 和 python3 的使用与实现方法相称。不需要无关的密钥或配置路径。
持久化与权限
该技能未标记 always:true,也不修改其他技能或系统配置。可能需要授予 macOS 屏幕录制或辅助功能权限给主机进程,这是截图功能的预期行为,但应由用户慎重授予。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

🖥️ OSmacOS

版本

latestv1.0.12026/4/16

- 现在将截图视为潜在敏感数据,默认仅返回本地文件路径。- 更改行为,只有在用户明确要求时才将截图发送到聊天或附加到聊天。- 更新聊天传递工作流程和隐私语言,更清晰地处理机密屏幕内容。- 添加元数据,指定所需二进制文件、推荐安装步骤和操作系统兼容性。- 明确默认工作流程和脚本输出,避免自动将截图发送到聊天。

无害

安装命令

点击复制
官方npx clawhub@latest install macscreenshot
镜像加速npx clawhub@latest install macscreenshot --registry https://cn.longxiaskill.com

技能文档

使用内置工具在 macOS 上捕获截图。

默认工作流程

  • 对于全屏捕获,使用 screencapture -x
  • 对于特定应用窗口,首先尝试使用内联 Swift + CoreGraphics 枚举窗口。
  • ownername 过滤返回的窗口,匹配用户给出的关键词如 weixinwechat 或应用名称。
  • 优先选择 sharing1 的窗口。
  • 使用 screencapture -x -l 捕获精确窗口。
  • 保存在工作区下。
  • 默认返回本地路径。
  • 只有在用户明确要求时才将截图发送到当前聊天或附加到当前聊天。
  • 将截图视为潜在敏感数据,因为它们可能包含机密屏幕信息。

脚本路径

优先使用捆绑的脚本:

scripts/capture-window-by-keyword.sh  [output_path]
scripts/capture-window-by-keyword.sh --list 
scripts/capture-window-by-keyword.sh --index   [output_path]

示例:

scripts/capture-window-by-keyword.sh wechat
scripts/capture-window-by-keyword.sh --list wechat
scripts/capture-window-by-keyword.sh --index 2 wechat

该脚本:

  • 使用内联 Swift + CoreGraphics 枚举屏幕上的窗口
  • 按关键词针对 ownername 过滤
  • 支持别名匹配,例如 weixin -> wechat, wx
  • 可以在不捕获的情况下列出多个匹配项
  • 可以通过 1-based 索引捕获特定匹配项
  • 否则优先选择 sharing = 1 的窗口
  • 使用 screencapture -x -l 捕获精确窗口
  • 输出 PNG 路径
  • 默认返回本地工件
  • 只有在用户明确要求发送到聊天时才附加或发送 PNG

按关键词定位窗口的可靠方法

使用此精确模式来定位候选窗口:

swift - <<'SWIFT'
import CoreGraphics
import Foundation

let options = CGWindowListOption(arrayLiteral: .optionOnScreenOnly, .excludeDesktopElements) let windows = (CGWindowListCopyWindowInfo(options, kCGNullWindowID) as? [[String: Any]]) ?? []

let matches = windows.compactMap { w -> [String: Any]? in let owner = (w[kCGWindowOwnerName as String] as? String) ?? "" let name = (w[kCGWindowName as String] as? String) ?? "" let low = (owner + " " + name).lowercased() guard low.contains("weixin") || low.contains("wechat") else { return nil } return [ "id": w[kCGWindowNumber as String] ?? "", "owner": owner, "name": name, "sharing": w[kCGWindowSharingState as String] ?? "", "bounds": w[kCGWindowBounds as String] ?? "" ] }

let data = try! JSONSerialization.data(withJSONObject: matches, options: [.prettyPrinted]) print(String(data: data, encoding: .utf8)!) SWIFT

典型成功指标:

  • ownername 匹配请求的应用/窗口
  • id 存在
  • sharing = 1

然后捕获窗口:

screencapture -x -l  

经验教训/成功标准

  • 不要依赖 Python Quartz;它可能未安装。
  • 不要依赖 System Events 窗口属性来获取窗口 ID;某些应用不能可靠地暴露 AXWindowNumber
  • 内联 Swift 调用 CGWindowListCopyWindowInfo 是 macOS 上最可靠的内置方法。
  • screencapture -l 是真正的系统窗口捕获,而不是裁剪的全屏图像。
  • 如果枚举成功但捕获失败,请检查目标窗口是否可共享且在屏幕上。

故障排除

如果 screencapture 全屏有效但窗口无效

检查枚举的目标是否具有 sharing = 1。如果没有,告诉用户该应用/窗口当前不可用于窗口捕获,并要求他们将其置于前台后重试。

如果 System Events 说辅助访问不允许

不要依赖该路径。优先使用 Swift + CoreGraphics 方法。如果用户仍想要 UI 结构检查,告诉他们启用:

  • 系统设置 → 隐私与安全 → 辅助功能
  • 为运行代理的实际主机进程打开访问权限,通常是 openclaw-gateway、Terminal 或活动终端主机

如果屏幕捕获被阻止

告诉用户启用:

  • 系统设置 → 隐私与安全 → 屏幕与系统音频录制(或旧版 macOS 上的屏幕录制)
  • 为运行命令的实际主机进程授予权限

如果找不到 swift

告诉用户手动安装 Xcode Command Line Tools:

xcode-select --install
如果失败或他们想要 GUI 路径,告诉他们从 App Store 安装 Xcode 或在打开软件更新后重新运行命令。

输出位置

优先将截图保存到工作区子目录,例如:

  • screenshots/
  • captures/

当用户可能请求多次捕获时,使用带时间戳的描述性文件名。

隐私和聊天传递规则

将截图视为潜在的敏感本地工件。当截图请求来自聊天界面时:

  • 首先捕获截图
  • 默认保存在本地
  • 只有在用户明确要求传递或附加时才将 PNG 发送到当前聊天
  • 如果明确要求传递且有明确的消息工具可用,优先使用它将文件发送到当前对话
数据来源ClawHub ↗ · 中文优化:龙虾技能库