演示画面使用中性的示例对话框摆拍,并在干净的 CI 运行器上用真实的 bigarrow 录制(BACKDROP_ARGS=--cover scripts/funny-scenes.sh)。对话框是假的,感受是真实的。
它不是什么:给人类用的屏幕标注工具、点击机器人,也不是截图工具。它从不点击、输入或截取任何东西。它只负责指向。而且是刻意的。
brew install franzenzenhofer/tap/bigarrow
bigarrow install-skill # 教会 Claude Code(~/.claude/skills)和 Codex(~/.agents/skills)
从源码构建:swift build -c release(需要 Xcode 16 或更新、macOS 14 或更新),二进制文件位于 .build/release/bigarrow。
bigarrow point --element "Allow" --app "System Settings" --text "Franz, click Allow" # 按标签
bigarrow point --at 760,500 --text "Franz, click HERE" # 按坐标
bigarrow start --window "Safari:Inbox" --text "This window" && bigarrow stop # 持续到手动停止
每支箭头都会自行消失。没人需要替忘记收尾的代理善后:
定位目标:--at X,Y、--rect X,Y,W,H、--mouse、--window App[:title]、--element Label --app App、--peekaboo ID --snapshot see.json(来自 Peekaboo 的 see --json)。坐标是全局左上角逻辑点,即 Accessibility、CGWindowList 和 Peekaboo 报告的坐标系。--display N 让 --at 和 --rect 相对于某一块显示器。
箭头与其指向的应用绑定。--app App[:窗口或标签页标题](或 --window)会先把对应的应用、窗口或 Chrome/Safari 标签页调到前台——指向被终端挡住的窗口是一种特别的没用;当目标被其他应用遮挡时,箭头会随之隐藏,待其重新可见后再出现。--no-raise 则不动你的窗口。bigarrow elements --app X 列出 --element 可匹配的内容。bigarrow doctor 显示权限、权限归属以及你的显示器。
每条命令都支持 --json。退出码:0 正常,2 输入有误,3 目标未找到,4 缺少权限。代理热爱退出码,人类勉强忍受它们。
既然是一支箭头,我们就在它的外观上花了不合理的大量时间。
在干净的测试机上截取的真实截图,六种样式分别叠加在白色、macOS 灰色、深色、黑色、红色背景和一个内容繁杂的网页上:
箭杆通过一个外扩的关节从标牌中生长出来,且绝不会撞上圆角。scripts/gallery.py 在屏幕外渲染每一种组合,并放大每个关节(junctions),因为关节处出现接缝显然是无法接受的。
需要屏幕录制或辅助功能权限吗?
绘图两者都不需要。--element、elements、--until-click 和 front --window 使用辅助功能,而 macOS 把该权限授予运行你 shell 的应用(Terminal、iTerm2、Ghostty、VS Code、Claude),绝不会授予 bigarrow 本身。bigarrow doctor 会说出那个应用是谁,退出码 4 则明确告诉代理该向你索取什么。--window App:title 需要读取窗口标题,而 macOS 26 在没有屏幕录制权限时会隐藏标题;仅用 --window App 则什么都不需要。
我打字时它会抢焦点吗?
不会。这是项目中最难的 bug:NSApplication.run() 会悄悄激活没有终端的进程,导致分离出来的箭头抢走焦点。bigarrow 改为自己泵送事件,测试也会检查最前端的应用永远不会改变。
能透过它点击吗? 可以,除标牌和箭杆以外的所有区域:点击标牌或箭杆会移除箭头(指针悬停时它会略微变暗以作提示)。点击目标或箭头头部附近区域会直接穿透到底层应用。点击箭头永远不会夺走焦点。
多显示器?全屏应用?Stage Manager?Spaces? 支持、支持、支持、支持。包括位于主显示器左侧或上方的显示器(负坐标)。箭头所在的显示器被拔掉时,箭头会礼貌地离开。参见验证矩阵。
脉动箭头的 CPU 占用是多少? 在 CI 运行器上实测为 1.4%。渲染工作由 Core Animation 在渲染服务器中完成。
--element 在网页内有效吗?
在 Electron 应用中有效。在 Chrome 中,仅当 Chrome 以 --force-renderer-accessibility 运行(或 VoiceOver 开启)时有效;Chrome 会忽略暴露页面内容的常规请求,已于 2026 年 10 月在 Chrome 上验证。Chrome 自身的工具栏始终可用。其他情况请指向页面的坐标,skill 文档中有说明。