Skip to content

Back to the catalog

Show HN: Let your AI agents paint big arrows, boxes and text on your screen
github.comrepo

Show HN: Let your AI agents paint big arrows, boxes and text on your screen

bigarrow is an MIT-licensed, single-binary Swift macOS CLI that draws a click-through arrow and sign over all windows so an AI agent can show a human where to click, paste or act (permission prompts, 2FA, OAuth consent). It ships an Agent Skills package (installed via `bigarrow install-skill`) for Claude Code and Codex, with JSON output and exit codes, and can target by Accessibility label, coordinates, window or Peekaboo snapshot. The README documents the skill's token cost (182 tokens for the description, 1,398 for the instructions) and 104 automated tests.

TL;DR macOS CLI and Claude Code/Codex skill that lets agents draw click-through arrows and signs on screen to direct a human to the right button.
Document

What it claims

bigarrow is a pointer, not an actor: it never clicks, types or captures the screen. One pure-Swift binary (no daemon, menu-bar icon, account or telemetry) draws a labelled arrow in a transparent, click-through window at screen-saver level, across every display and Space. It stays above full-screen apps but never takes keyboard focus. Every arrow removes itself. Drawing needs no macOS permission. Only some targeting modes do.

How it works

  • Focus. NSApplication.run() silently activates a process that has no terminal, which the author calls the project's hardest bug. bigarrow pumps events itself instead, and tests check that the frontmost app never changes.
  • Clicks. Clicks pass through everywhere except the sign and the shaft. A click on either removes the arrow, which dims under the pointer to signal this.
  • Raising the target. --app App[:window or tab title] brings that app, window, or Chrome/Safari tab to the front first. --no-raise disables this. If another window later covers the target, the arrow hides until the target is visible again.
  • Targeting. Options are --at X,Y, --rect X,Y,W,H, --mouse, --window App[:title], --element Label --app App (Accessibility), or --peekaboo ID --snapshot see.json. Coordinates are global, top-left, logical points; --display N makes them relative to one display.
  • Lifecycle options.
  • --follow tracks a moving window or element.
  • --until-click ends the arrow when the target is clicked.
  • --say reads the sign aloud.
  • {{value}} in --text becomes a copy-to-clipboard button.
  • --png renders the arrow to an image.
  • --dry-run --json reports where it would point without drawing.

How to use it

brew install franzenzenhofer/tap/bigarrow
bigarrow install-skill          # teaches Claude Code (~/.claude/skills) and Codex (~/.agents/skills)

To build from source (Xcode 16+, macOS 14+), run swift build -c release. The binary lands 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
  • point is one-shot. start lasts until stop.
  • Every command accepts --json.
  • Exit codes: 0 ok, 2 bad input, 3 target not found, 4 permission missing.
  • bigarrow elements --app X lists what --element can match.
  • bigarrow doctor shows permissions and displays.

Permissions. Accessibility-based targeting needs a permission that macOS grants to the launching app (Terminal, iTerm2, Ghostty, VS Code, Claude), never to bigarrow itself. That host app is the one to enable. Exit code 4 names the app and the settings pane.

Token cost. The skill's description costs 182 tokens and is always loaded. The instructions (1,398 tokens) load only when the agent decides to point. Pane ids and look flags (1,008 more) load only on demand. These counts come from Anthropic's token-count API with Claude Opus 5.5.

Evidence

  • 104 automated tests. They cover geometry, placement, a golden image, copy buttons, and recorded window-server, Accessibility and Peekaboo fixtures. They also exercise the real window server for click-through, focus and stop timing.
  • Platforms. CI runs macOS 15. The tests also passed on macOS 26 and 27.
  • 18 behaviour checks on a clean runner. These include Spaces, Stage Manager, full-screen, second and 2x displays, unplugging a display mid-arrow, and owner exit.
  • CPU. 1.4% on a CI runner.
  • Agent trial. A fresh agent given only the skill built the correct command to point at Chrome's Reload button. It also surfaced a bug, which is now a test.

Limits

  • macOS only.
  • Chrome web content. Labels inside Chrome pages are not targetable unless Chrome runs with --force-renderer-accessibility or VoiceOver is on (verified October 2026). Without that, point by page coordinates. Electron apps and Chrome's own toolbar work.
  • No safety boundary. The author states that bigarrow adds nothing beyond what a shell-running agent can already do. Mitigations are tested:
  • Boxes and rings are outlines, so the target stays visible.
  • The sign keeps clear of the target.
  • A click on the sign or shaft dismisses the arrow.
  • Every arrow ends by itself.
  • Permission scope. Granting Accessibility to your terminal or IDE grants it to everything run from there, not just bigarrow.

Organisations named here

  • Anthropic
  • OpenAI
  • Apple
  • NVIDIA
  • AMD
  • SAP
  • Salesforce
  • ServiceNow
  • Booking.com
  • Mercedes-Benz
  • SUSE
  • Oxide Computer
  • Posit
  • CoreWeave
  • Weights & Biases
  • OpenRouter
  • Metabase
  • InstaDeep
  • Benchling
  • Stainless
  • Under Armour
  • Stanford University
  • Johns Hopkins University
  • KTH
  • Oak Ridge National Laboratory
  • Claude Code
  • Peter Steinberger

Technologies named here

  • bigarrow
  • Claude Opus 5.5
  • Claude Code
  • Codex
  • Peekaboo
  • Nameplate
  • Agent Skills format
  • Homebrew
  • Swift / Xcode
  • Agent Skills
  • Core Animation
  • macOS
  • macOS Accessibility API
  • Swift

Techniques named here

  • Agent-pointing overlay
  • Target location via Accessibility labels
  • Progressive skill loading