Show HN: Let your AI agents paint big arrows, boxes and text on your screen
本文为原文前 6,000 字符的节选翻译,完整内容请查看原文。
big-arrow-on-the-screen (bigarrow) is a macOS command-line tool, plus a skill for Claude Code and Codex, that draws an arrow and a sign on top of every window. Clicks go through, your keyboard focus stays put, and the arrow removes itself. MIT licensed.
big-arrow-on-the-screen (bigarrow) 是一个 macOS 命令行工具,同时也是 Claude Code 和 Codex 的一项技能,它可以在每个窗口上方绘制箭头和标志。点击操作可以直接穿透,键盘焦点保持不变,箭头也会自动消失。采用 MIT 许可协议。
Real apps · Copy & paste · What is it for? · Install · Commands · Looks · Creative arrows · Starred by · FAQ · How we know it works · For agents · Plan · Prior art · License
真实应用 · 复制粘贴 · 有什么用? · 安装 · 命令 · 外观 · 创意箭头 · 获星情况 · 常见问题 · 如何验证其有效性 · 面向智能体 · 计划 · 先前技术 · 许可
Your AI agent can refactor a monorepo, write a migration and explain monads, but when it needs you to click one button it prints “please click Allow in the dialog” into a terminal you are not looking at. bigarrow gives it a finger.
你的 AI 智能体可以重构单体仓库、编写迁移脚本并解释单子(monads),但当它需要你点击某个按钮时,它只会向你没在看的终端打印“请在对话框中点击允许”。bigarrow 为它提供了一根手指。
One transparent window above everything, on every display and every Space. Drawing needs no macOS permission at all. One Swift binary: no daemon, no menu-bar icon, no account, no telemetry, and, we checked twice, no AI inside. It is an arrow.
一个覆盖在所有内容之上的透明窗口,适用于每个显示器和每个空间。绘图完全不需要 macOS 权限。单个 Swift 二进制文件:没有守护进程、没有菜单栏图标、没有账户、没有遥测,而且我们检查过两次,里面没有 AI。它就是一个箭头。
Real apps on a real Mac (macOS 27), the real bigarrow, staged by scripts/real-scenes.sh.
在真实 Mac (macOS 27) 上运行的真实应用,即真实的 bigarrow,由 scripts/real-scenes.sh 脚本演示。
“The most annoying change in Mac update history”, fixed in six arrows (MP4).
“Mac 更新史上最烦人的改动”,通过六个箭头修复(MP4)。
—app “App:tab title” raises the window and selects the tab first.
—app “App:tab title” 会先置顶窗口并选中对应的标签页。
The whole guide as a 6-page PDF, every screenshot an arrow an agent drew. Download the PDF or read it here.
完整的指南是一个 6 页的 PDF,每一张截图都是智能体绘制的箭头。下载 PDF 或在此阅读。
{{value}} in the sign becomes a copy button. Click, paste.
标志中的 {{value}} 会变成一个复制按钮。点击即可粘贴。
Fair question. Arrows have existed since roughly the Paleolithic. What changed: agents now do real work on your Mac, and sooner or later hit a step only a human may do, or one the human wants to learn.
好问题。箭头大约在旧石器时代就存在了。改变的是:智能体现在可以在你的 Mac 上做真正的工作,迟早会遇到只有人类才能完成,或者人类想要学习的步骤。
Not a screen annotator, not a click bot, not a screenshot tool. It never clicks, types or captures. It only points. Deliberately.
它不是屏幕标注工具,不是点击机器人,也不是截图工具。它从不点击、输入或捕获。它只是指向目标。刻意为之。
From source: swift build -c release (Xcode 16+, macOS 14+), binary at .build/release/bigarrow. The binary is pure Swift; scripts/ only records screenshots and runs tests.
从源码构建:swift build -c release (Xcode 16+, macOS 14+),二进制文件位于 .build/release/bigarrow。该二进制文件是纯 Swift 编写的;scripts/ 仅用于记录截图和运行测试。
Every arrow ends by itself. Nobody has to clean up after an agent that forgot:
每个箭头都会自动结束。当智能体忘记清理时,没人需要去收拾残局:
Targets: —at X,Y, —rect X,Y,W,H, —mouse, —window App[:title], —element Label —app App, —peekaboo ID —snapshot see.json. Coordinates are global top-left logical points, as Accessibility and Peekaboo report them; —display N makes them relative to one display.
目标参数:—at X,Y, —rect X,Y,W,H, —mouse, —window App[:title], —element Label —app App, —peekaboo ID —snapshot see.json。坐标是全局左上角的逻辑点,正如辅助功能和 Peekaboo 所报告的那样;—display N 使坐标相对于某个显示器。
—app App[:window or tab title] (or —window) first brings that app, window or Chrome/Safari tab to the front, because pointing at a window hidden behind your terminal is a special kind of unhelpful. If another app covers the target later, the arrow hides until it is visible again. —no-raise opts out. bigarrow elements —app X lists what —element can match; bigarrow doctor shows permissions and displays.
—app App[:window or tab title] (或 —window) 会首先将该应用、窗口或 Chrome/Safari 标签页置于最前,因为指向隐藏在终端后面的窗口毫无意义。如果之后有其他应用遮挡了目标,箭头会隐藏直到目标再次可见。—no-raise 可禁用此行为。bigarrow elements —app X 列出 —element 可以匹配的内容;bigarrow doctor 显示权限和显示器信息。
Every command takes —json. Exit codes: 0 ok, 2 bad input, 3 target not found, 4 permission missing. Agents love exit codes. Humans tolerate them.
每个命令都支持 —json。退出代码:0 表示成功,2 表示输入错误,3 表示未找到目标,4 表示缺少权限。智能体喜欢退出代码,人类则能容忍它们。
It is an arrow, so we spent an unreasonable amount of time on how it looks.
它只是一个箭头,所以我们在它的外观上花费了不合理的时间。
Six looks over white, macOS grey, dark, black, red and a busy web page:
在白色、macOS 灰色、深色、黑色、红色背景以及繁忙网页上的六种外观:
scripts/gallery.py renders every combination and zooms into every sign-to-shaft joint (junctions), because a seam at the joint was, apparently, unacceptable.
scripts/gallery.py 渲染了每种组合并放大了每个标志与箭杆的连接处(接合点),因为连接处的缝隙显然是不可接受的。
Fake dialogs, real bigarrow, clean CI runner (BACKDROP_ARGS=—cover scripts/funny-scenes.sh). The dialogs are fake. The feelings are real.
虚假的对话框,真实的 bigarrow,干净的 CI 运行环境 (BACKDROP_ARGS=—cover scripts/funny-scenes.sh)。对话框是假的,但感觉是真的。
—color green, because some decisions are easy
—color green,因为有些决定很容易做。
—shape zigzag —color orange
—shape zigzag —color orange
—shape spiral: once around the sign, then to the button
—shape spiral:绕标志一圈,然后指向按钮。
—close-button, because the human gets the last word
—close-button,因为人类拥有最终决定权。
three starts, one button, zero ambiguity
三个起点,一个按钮,零歧义。
—style box —corners sharp, plus a lesson about macOS permissions
—style box —corners sharp,外加一堂关于 macOS 权限的课。
Nearly 400 stars in the first two days, from people whose GitHub profiles list Apple, NVIDIA, AMD, SAP, Salesforce, ServiceNow, Booking.com, Mercedes-Benz, SUSE, Oxide Computer, Posit, CoreWeave, Weights & Biases, OpenRouter, Metabase, InstaDeep, Benchling, Stainless and Under Armour, plus Stanford, Johns Hopkins, KTH and Oak Ridge National Laboratory.
前两天获得了近 400 颗星,来自 GitHub 个人资料中列出 Apple、NVIDIA、AMD、SAP、Salesforce、ServiceNow、Booking.com、Mercedes-Benz、SUSE、Oxide Computer、Posit、CoreWeave、Weights & Biases、OpenRouter、Metabase、InstaDeep、Benchling、Stainless 和 Under Armour,以及斯坦福大学、约翰霍普金斯大学、KTH 和橡树岭国家实验室的人员。
Permissions? · In front without focus? · Steals my typing? · Click through? · Displays and Spaces? · CPU? · Web pages? · Can it trick me? · Token cost? · Why not an annotation app? · Is it AI?
权限? · 在前方但不获取焦点? · 会抢占我的输入吗? · 点击穿透? · 显示器和空间? · CPU 占用? · 网页? · 它会欺骗我吗? · Token 成本? · 为什么不做成标注应用? · 它是 AI 吗?
Drawing: no. Some ways of finding the target do:
绘图:不需要。但寻找目标的一些方式需要:
macOS grants these to the app that started bigarrow (Terminal, iTerm2, Ghostty, VS Code, Claude), never to bigarrow itself, so switch on that app. bigarrow doctor names it; a missing permission exits with code 4 and names the app and the settings pane.
macOS 将这些权限授予启动 bigarrow 的应用(Terminal、iTerm2、Ghostty、VS Code、Claude),而不是 bigarrow 本身,所以请在那个应用上开启权限。bigarrow doctor 会指出该应用;缺少权限时会以代码 4 退出,并指明应用名称和设置面板。
On top and focused are two different things on macOS. The arrow sits at screen-saver level, above windows, dialogs and full-screen apps, but never becomes the active window.
在 macOS 上,“置顶”和“获取焦点”是两码事。箭头位于屏幕保护程序层级,在窗口、对话框和全屏应用之上,但永远不会成为活动窗口。
No. That was the hardest bug in the project: NSApplication.run() quietly activates a process without a terminal. bigarrow pumps events itself, and the tests check that the frontmost app never changes.
不会。这是项目中处理起来最难的 Bug:NSApplication.run() 会在没有终端的情况下静默激活进程。bigarrow 自行处理事件,测试会确保最前端的应用永远不会改变。
Yes, everywhere except the sign and the shaft. A click there removes the arrow (it dims under the pointer to say so). Clicks on the target or near the head go straight to the app, without taking the focus.
是的,除了标志和箭杆外,其他地方都可以。点击这些区域会移除箭头(指针经过时它会变暗以提示这一点)。点击目标或箭头头部附近的操作会直接传给应用,而不会获取焦点。
Yes, yes, yes, yes. Negative coordinates included. Unplug a display while an arrow is on it and the arrow politely leaves. See the verification matrix.
是的,是的,是的,是的。包括负坐标。当箭头所在的显示器被拔掉时,箭头会礼貌地消失。请参阅验证矩阵。
1.4 % on a CI runner. Core Animation does the work in the render server.
在 CI 运行器上占用 1.4%。Core Animation 在渲染服务器中完成工作。
In Electron apps, yes. In Chrome, only with help. Chrome needs —force-renderer-accessibility (or VoiceOver on); it ignores the usual request (verified October 2026). Chrome’s own toolbar always works. Otherwise point at page coordinates, which the skill explains.
在 Electron 应用中可以。在 Chrome 中,需要辅助。Chrome 需要 —force-renderer-accessibility(或开启 VoiceOver);它会忽略常规请求(2026 年 10 月验证)。Chrome 自身的工具栏总是有效的。否则,请指向页面坐标,技能说明中对此有解释。
Say, by covering the Decline button? Not beyond what it can already do. An agent that runs shell commands as you can do far worse, so bigarrow gives it nothing new. Still, each checked by a test: boxes and rings are outlines, so the target stays visible; the sign keeps clear of the target (or overlaps it as little as possible); a click on sign or shaft removes the arrow; every arrow ends by itself. And the skill makes the sign say what your click does.
比如,遮挡“拒绝”按钮?这并不超出它已有的能力范围。一个能以你的身份运行 Shell 命令的智能体能做的事情要糟糕得多,所以 bigarrow 并没有给它带来新的风险。尽管如此,每一项都经过了测试:方框和圆环是轮廓线,因此目标保持可见;标志避开目标(或尽可能少地重叠);点击标志或箭杆会移除箭头;每个箭头都会自动结束。而且该技能会让标志显示你点击后的操作。
182 tokens, most of the time. That is the skill’s description, the only part the agent always sees. The instructions, 1,398 tokens (Anth
大多数情况下为 182 个 token。这是该技能的描述,也是智能体唯一始终可见的部分。指令部分为 1,398 个 token (Anth