LLM 控制 Mac 原生应用时坐标点击静默失效,缺可靠输入投递与失败反馈
macOS Harness 让 LLM 代理通过六个原始原语操作真实 Mac 应用;但用户报告 mac.click() 对 Finder、Calculator 等原生 AppKit 应用静默失败——返回值正常、无报错,点击却未生效,同一元素改用 AXPress 即正常。问题指向 CGEventPostToPid 鼠标路径,说明“LLM 直接操作 Mac 原生应用”仍缺可靠、可检测的鼠标输入方案。
目标用户
使用 Codex、Claude Code 等 LLM 编码代理在 macOS 上自动化 Finder、计算器等真实原生应用的开发者与高级用户
潜在需求
让 LLM 代理对原生 AppKit 应用的坐标鼠标点击真正生效;若无法投递,调用必须给出可检测的失败信号或自动回退路径,避免代理把未执行的点击当作已完成并继续后续步骤。
发生场景
用户在 macOS 26.6.1(Apple Silicon)上以 macos-harness 0.1.2 运行代理,用 mac.click(640, 420, app="Calculator") 等方式向指定应用 PID 投递坐标点击,调用正常返回且无异常,但 Finder 和 Calculator 从未注册该点击;同一进程中对同一元素改用 mac.ax.perform(..., "AXPress") 却能生效,键盘输入也正常。
来源证据
在 Finder 和 Calculator 两个原生 AppKit 应用上,mac.click() 静默失效:调用返回正常指针 dict、无异常,但目标应用从未注册点击;同一元素改用 mac.ax.perform(index, "AXPress") 立即可用,且键盘输入路径正常。
mac.click() silently has no effect on native AppKit apps (Finder, Calculator); AXPress on the same element works ## Summary `mac.click()` posts a mouse event that has no effect on native AppKit applications. It fails silently: the call returns a normal pointer dict and raises nothing, but the target application never registers the click. `mac.ax.perform(index, "AXPress")` on the *same element*, in the same process moments later, works correctly. Reproduced on two unrelated native apps (Finderhttps://github.com/browser-use/macos-harness/issues/6
为什么值得留意
报告来自真实使用并按可复现步骤定位:键盘路径与 AXPress 均正常,唯独坐标鼠标路径对原生应用静默失败,排除权限与整体事件投递问题,指向具体机制缺口。对“以原始原语驱动整台 Mac”的解法形态来说,这种无报错失败会直接误导 LLM 代理的任务状态判断,是值得继续追踪的具体阻碍。
已有方案
- 对同一元素改用 mac.ax.perform(index, "AXPress") 辅助功能点击
- mac.key / mac.type 键盘输入(同一代码路径下工作正常)
未满足部分
- 坐标鼠标事件(CGEventPostToPid)投递到原生 AppKit 应用时静默失效,无报错、无效果
- 失败不可检测:调用返回正常指针 dict,代理无从得知点击未生效
可能延伸 · 模型推测
- 点击后校验目标应用状态,失败时自动回退到 AXPress 的混合输入策略(模型推测)
- 为代理提供点击生效与否的显式反馈或断言原语(模型推测)
目前未知
- 仅单份用户报告,复现环境为 macOS 26.6.1 与 macos-harness 0.1.2
- 未确认该失效是 macOS 系统行为、本项目实现还是 CGEventPostToPid 的普遍限制
- 报告者是否为独立第三方用户,材料未说明
继续核实
- 该静默失败在更多原生 AppKit 应用和 macOS 版本上是否复现?
- CGEventPostToPid 鼠标路径对原生应用的失效,是此类 Mac 自动化工具的共同缺口还是本项目特有实现问题?
- LLM 代理在实际自动化任务中因静默失败而误判任务完成的比例有多高?