Let your AI agents paint big arrows, boxes and text on your Mac screen. One CLI, click-through, gone by itself. Skill for Claude Code and Codex. MIT.
# Add to your Claude Code skills
git clone https://github.com/franzenzenhofer/big-arrow-on-the-screenGuides for using ai agents skills like big-arrow-on-the-screen.
See how big-arrow-on-the-screen compares with popular alternatives.
big-arrow-on-the-screen is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by franzenzenhofer. Let your AI agents paint big arrows, boxes and text on your Mac screen. One CLI, click-through, gone by itself. Skill for Claude Code and Codex. MIT. It has 86 GitHub stars.
big-arrow-on-the-screen's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/franzenzenhofer/big-arrow-on-the-screen" and add it to your Claude Code skills directory (see the Installation section above).
big-arrow-on-the-screen is primarily written in Swift. It is open-source under franzenzenhofer on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh big-arrow-on-the-screen against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
big-arrow-on-the-screen (bigarrow): one small macOS CLI and an agent skill. Click-through, never steals the focus, gone by itself. MIT.

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.
bigarrowgives it a finger.

bigarrow point --element "Allow" --app "System Settings" --text "Franz, click Allow"
A big, friendly arrow with a sign appears on top of everything, points at the thing, and goes away again. It is click-through, it never steals your focus, it works on every display and every Space, and it needs no permission at all to draw. It is one small Swift binary. There is no daemon, no menu-bar icon, no account, no telemetry, and, we checked twice, no AI inside. It is an arrow.
Fair question. Arrows have existed since roughly the Paleolithic. Here is what changed: software agents now do real work on your Mac, and they keep hitting the same wall, the part that only a human may do.
--window "Google Chrome:Pull request". It even picks the right tab: --app "Google Chrome:Pull request".--say reads the sign aloud. Your Mac will literally call you back to your desk.start, wait until they acted, stop, next step. Like a product tour, minus the product.--png for documentation.--dry-run --json tells you where it would point without drawing.Staged with a neutral demo dialog and recorded with the real bigarrow on a clean CI runner (BACKDROP_ARGS=--cover scripts/funny-scenes.sh). The dialogs are fake. The feelings are real.
![]() |
![]() |
--color green |
--shape zigzag --color orange |
![]() |
![]() |
--color purple |
--close-button, because the human gets the last word |
![]() |
![]() |
three starts, one button, zero ambiguity |
--style box --corners sharp, plus a lesson about macOS permissions |
![]() |
|
--shape spiral: once around the sign, then to the button |
What it is not: a screen annotator for humans, a click bot, or a screenshot tool. It never clicks, types or captures anything. It only points. Deliberately.
brew install franzenzenhofer/tap/bigarrow
bigarrow install-skill # teaches Claude Code (~/.claude/skills) and Codex (~/.agents/skills)
From source: swift build -c release (Xcode 16 or newer, macOS 14 or newer), binary at .build/release/bigarrow.
bigarrow point --element "Allow" --app "System Settings" --text "Franz, click Allow" # by label
bigarrow point --at 760,500 --text "Franz, click HERE" # by coordinate
bigarrow start --window "Safari:Inbox" --text "This window" && bigarrow stop # until stopped
Every arrow ends by itself. Nobody has to clean up after an agent that forgot:
| Time limit | bigarrow point ... --duration 10 (default 8 s; start 300 s; --duration 0 = no limit) |
| Start and stop | bigarrow start ... returns at once; bigarrow stop (or stop --all) removes it |
| The agent goes away | an arrow ends when the agent process that drew it exits (CLAUDE_PID, or BIGARROW_OWNER_PID) |
| The human answers | bigarrow stop --hook as a Claude Code UserPromptSubmit hook clears that session's arrows |
| The human closes it | --close-button puts a clickable X on the sign (opt-in) |
Targets: --at X,Y, --rect X,Y,W,H, --mouse, --window App[:title], --element Label --app App, --peekaboo ID --snapshot see.json (from Peekaboo's see --json). Coordinates are global top-left logical points, the space Accessibility, CGWindowList and Peekaboo report. --display N makes --at and --rect relative to one display.
An arrow is tied to the app it points into. --app App[:window or tab title] (or --window) brings that app, window or Chrome/Safari tab to the front first, because pointing at a window hidden behind your terminal is a special kind of unhelpful; and while another app covers the target, the arrow hides and comes back with it. --no-raise leaves your windows alone. bigarrow elements --app X lists what --element can match. bigarrow doctor shows permissions, who owns them, and your displays.
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.
It is an arrow, so we spent an unreasonable amount of time on how it looks.


Real screenshots on a clean test machine, six looks over white, macOS grey, dark, black, red and a busy web page:


--shape bend|straight|zigzag|spiral (zigzag for when it is really urgent; spiral loops once around the sign before it points, for when it must be impossible to miss)--style arrow|ring|box; rings and boxes are border-only, so you still see what is under them--size S|M|L, --corners round|sharp--color red|orange|yellow|green|teal|blue|purple|pink|black|white|#RRGGBB--border shadow|white-black|black: the default is a white border (dark on light colours) with a drop shadow; white-black puts a thin black edge outside the white border instead of the shadow; black is just a thin black outline--border-color, --text-color, --edge-color, and for the X --close-color and --close-x-color. Left out, each picks a readable colour itself--close-button puts an X inside the sign's right end (white circle, X in the arrow colour), where it never covers the text or leaves the screen--follow moves with a window or element, --until-click ends on a click on the target, --say speaks the signThe shaft grows out of the sign through a flared joint that never runs into a rounded corner. scripts/gallery.py renders every combination offscreen and zooms into every joint (junctions), because a seam at the joint was, apparently, unacceptable.
Does it need Screen Recording or Accessibility?
Drawing needs neither. --element, elements, --until-click and front --window use Accessibility, which macOS grants to the app that runs your shell (Terminal, iTerm2, Ghostty, VS Code, Claude), never to bigarrow itself. bigarrow doctor names that app, and exit code 4 tells the agent exactly what to ask you for. --window App:title reads window titles, which macOS 26 hides without Screen Recording; --window App alone needs nothing.
Will it steal my focus while I'm typing?
No. That was the hardest bug in the project: NSApplication.run() quietly activates a process that has no terminal, so detached arrows grabbed the focus. bigarrow pumps events itself instead, and the tests check that the frontmost app never changes.
Can I click through it? Yes, everywhere except the sign and the shaft: a click there removes the arrow (it dims slightly under the pointer to say so). A click on the target, or anywhere near the arrow's head, goes straight through to the app. Clicking the arrow never takes the focus.
Multiple displays? Full-screen apps? Stage Manager? Spaces? Yes, yes, yes, yes. Displays left of