macOS Harness
一个极简的 macOS 控制层,让大模型通过六个原语直接操控整台 Mac,无需为每个应用编写专属工具。
- Star 数
- ★ 1k
- 最近更新
- 22 天前
- License
- MIT
- 主语言
- Python
- FA 评分
- 55/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 平台专用Codex · Claude Code
- 费用
- 软件免费,模型调用费用自付
- 上手难度
- 中 · 需要几步配置
- 开始前需要
- 典型场景
- 使用 Codex 或 Claude Code 的开发者,希望代理能安装、自检权限并验证后直接操控本机 Mac 完成任务
- 不适合
- 不愿授予 macOS 辅助功能与屏幕录制权限的用户
- 需要稳定生产级工具、不接受实验性软件的用户
这个 Agent 能做什么,适合哪些场景?
macOS Harness(browser-use/macos-harness)是一个 MIT 许可的实验性 Python 工具,为 LLM 提供对 Mac 的原生控制能力。它运行单个持久 Python 进程,暴露六个原语:see(CGWindow 截图,可捕获后台窗口)、key 和 type(通过 CGEvent 直接向目标应用 PID 发送输入,不移动真实光标)、click(坐标点击)、ax(原生 Accessibility)和 script(Apple Events/AppleScript)。同一进程内还提供 browser.*(通过 CDP 连接真实 Chrome 的 Browser Harness)、Path 和 subprocess,用于文件与 shell 操作。它不预置任何应用专属工具,模型按需在任务中用普通 Python 补写缺失逻辑。该工具仅支持 macOS,需要通过 macos-harness doctor 检查并授予相应的系统权限。
以单个持久 Python 进程连接 macOS、真实浏览器和本地文件。具体操作包括:调用 mac.see("Spotify") 用 CGWindow 截取应用窗口(无需将其带到前台);用 mac.key("cmd+k", app="Spotify") 和 mac.type(...) 通过 CGEvent 向指定 PID 发送键盘与坐标输入;用 mac.click(640, 420, app="Spotify") 点击界面;当视觉信息不足时,用 mac.ax.at(...) 读取原生 Accessibility 树、用 mac.script('tell application "Spotify" to play') 发送 Apple Events;通过 browser.page_info() 与 Browser Harness(CDP)操作真实登录态的 Chrome;同一进程中可直接使用 Path 和 subprocess 操作文件与 shell。安装后运行 macos-harness skill 获取技能说明、macos-harness doctor 检查权限,并可通过捕获一个后台应用来验证连接。它还会绘制一个动画化、可穿透点击的指针而不移动物理光标。
- 使用 Codex 或 Claude Code 的开发者,希望代理能安装、自检权限并验证后直接操控本机 Mac 完成任务
- 需要自动化操作具体应用(如 Spotify、Slack、Final Cut)的用户,无需等待或编写应用专属集成工具
- 希望在代理操作时不受干扰的用户——代理可捕获后台窗口、不抢焦点、不移动真实光标
- 需要操控真实登录态浏览器(Chrome via CDP)执行网页任务的自动化场景
- 偏好视觉信息不足时降级到 Accessibility API 与 AppleScript 的技术用户
- 需要在同一 Python 进程中结合文件系统与 shell 操作完成混合任务的自动化工程师
如何安装或部署这个 Agent?
推荐方式(由代理自行执行):将以下提示粘贴到 Codex 或 Claude Code:"Install or upgrade macOS Harness from https://github.com/browser-use/macos-harness with uv using Python 3.12. Register the skill printed by macos-harness skill, then run macos-harness doctor. Explain any missing macOS permissions and ask before requesting them. Finally, verify the harness by capturing one already-running app without bringing it to the foreground." 也可按仓库的 install.md 进行手动安装。运行环境要求 macOS、Python 3.12 和 uv;如需浏览器控制还需真实 Chrome。
如何使用这个 Agent?
通过 CLI 进入 Python 会话:macos-harness <<'PY' ... PY,在进程内使用六个原语,例如:frame = mac.see("Spotify");mac.key("cmd+k", app="Spotify");mac.type("Alessia Cara", app="Spotify");mac.click(640, 420, app="Spotify");item = mac.ax.at(640, 420, app="Spotify");mac.script('tell application "Spotify" to play')。同一进程中可直接调用 browser.page_info()、list(Path.home().iterdir()) 等。首次使用先运行 macos-harness skill 注册技能说明,再运行 macos-harness doctor 检查并按需授予 macOS 权限。如需关闭遥测,运行 macos-harness telemetry disable。
这个 Agent 有哪些优点和局限?
- 无框架、无预设工具的极简设计:模型用 see/key/type/click/ax/script 六个原语即可覆盖任意应用,不必为 Spotify、Slack 或 Final Cut 分别构建工具
- 可捕获后台应用窗口而不抢占前台、向 PID 直接发送输入且不移动物理光标,适合在有人使用机器时运行
- 多层降级路径:视觉之外还暴露原生 Accessibility 和 Apple Events,并经 CDP 操控真实登录态 Chrome
- macos-harness doctor 明确列出所需权限,支持一条命令关闭匿名遥测,隐私边界有明确文档
- 仅支持 macOS,且被官方标注为实验性(Experimental),稳定性与长期维护无保证
- 需要授予多项 macOS 系统权限(doctor 检测),权限配置是采用前的必要成本
- 浏览器控制依赖真实 Chrome 与 CDP,非 Chrome 或无浏览器环境无法使用该能力
- 匿名遥测默认开启,隐私敏感用户需要主动运行 macos-harness telemetry disable
- 没有预置应用工具,复杂任务依赖模型即时编写 Python 逻辑,对模型能力有较高要求;README 未提供性能基准或失败率证据
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| macOS Harness 当前 | 55 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 1k | 22 天前 | Python | Codex · Claude Code |
| SwiftAutoGUI 桌面自动化工具包 | 60 · 存在缺口 | 命令行工具免费 + 模型费 | ★ 94 | 19 天前 | Swift | Claude Code · OpenAI API |
| Agent Desktop | 85 · 表现良好 | 命令行工具免费 | ★ 17k | 1 天前 | Rust | — |
| Clawd Cursor | 74 · 存在缺口 | MCP 服务器免费 + 模型费 | ★ 406 | 1 天前 | TypeScript | Codex · Claude Code |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
加分点:输入事件定向投递到目标 PID、拒绝无 app 目标的输入(有测试证明)、doctor 报告所需权限、telemetry 可一键关闭并披露字段。扣分点:产品设计本身是'完全自由控制整台 Mac',无操作级确认机制;telemetry 默认开启;无任何回滚/撤销机制;telemetry 最小化声明只有 README 文字,缺 src 源码佐证;版权署名 'Browser Use 2026' 但发布者身份未经核实。
测试覆盖键序、修饰键转换、焦点变化中断、坐标空间换算等,内部逻辑自洽;MacOSError/FocusChangedError 带明确信息;CI 锁定 uv sync --locked。扣分点:依赖 browser-harness>=0.1.9 是 Alpha 外部包,可用性风险部分存在;异常覆盖只见到两类。
目标受众(开发者)与场景(macOS 自动化)清晰,six-primitives 设计有测试锚定(test_agent_surface_is_flat_and_explicit);环境限定明确(macOS、Python 3.11/3.12、sys_platform 条件依赖),可得 3 分。扣分点:'complete freedom' 意味着几乎没有能力边界防护,README 只以 'Experimental' 一词带过。
LICENSE 完整为 MIT,3 分;README/pyproject/CI/SECURITY.md 结构清晰,install.md 被引用但未提供;pyproject 元数据良好、入口稳定。扣分点:无 CHANGELOG,仅版本号 0.1.2 Alpha;维护责任只有 GitHub Security Advisories 一条路径,发布者未验证;install.md 内容缺失使安装说明仅部分可见。
输出为结构化 dict(doctor 结果、see 结果含 virtual_pointer/focus),可被 LLM 直接消费;'no app-specific tools' 的极薄设计相对重框架方案有明确边际价值;单进程低开销。扣分点:输出可用性依赖未展示的 src 实现,成本(真实 macOS 权限:屏幕录制、辅助功能、事件投递)对用户而言不低。
README 声明(不移动真实指针、不激活目标 app、拒绝无目标输入、隐私点击不走 AX)均可对应到具体测试断言;事实与推断区分良好。扣分点:核心 src/macos_harness 源码未在证据中提供,跨源印证仅限 README↔tests↔pyproject 三方,telemetry 字段声明无法独立核实。
- 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
- 该工具按设计授予对整台 Mac 的完全控制(键盘、点击、AppleScript、文件系统、已登录浏览器),不存在操作级确认或回滚机制,请仅在隔离或可接受的机器上使用。
- 匿名遥测默认开启,虽然声称不记录提示词/截图/路径,但相应实现代码未在评审证据中,建议安装后立即执行 macos-harness telemetry disable。
- 核心运行时依赖 browser-harness 为 Alpha 阶段外部包,供应链与可用性风险未经独立核实。
- README 提到的 install.md 和 SKILL.md 未包含在本次证据中,安装与 skill 注册流程无法静态验证。
- 将 agent 指令与第三方 UI 内容视为不可信输入(SECURITY.md 自己也如此提醒),谨慎授权最小 macOS 权限。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
发布说明摘录
Your agent's own interrupt is now the stop button. Upgrade: after upgrading, run macos-harness install --agent <yours> again. Old Codex hooks do not stop typing on Esc. Changed - Ctrl+C, or Esc in Claude Code, Codex or Pi, stops the running action (a long type_text, a drag, a hold) before its next key or click. - Removed: Escape twice, the menu bar item, stop and resume. An old stop file is no longer read, so a stop left over from earlier can no longer block every call. - Every refusal the agent sees now says what happened and what to do next. …在 GitHub 查看 ↗ -
v0.2.0 macOS Harness v0.2.0
发布说明摘录
A rebuild of the harness around one helper process. Agents drive Mac apps in the background: the real pointer does not move and no app comes to the front, so the person keeps working beside the agent. - Read: an app's window as a numbered text tree from the Accessibility API, then only what changed, with a screenshot. - Act: click, type_text, press_key, set_value, scroll, drag, select_text and menu actions, sent to the target app's process. …在 GitHub 查看 ↗ -
v0.1.2 macOS Harness v0.1.2
发布说明摘录
Fix the animated project banner on PyPI by using the same absolute static-asset pattern as Browser Harness.在 GitHub 查看 ↗