bigarrow가 AI 에이전트의 클릭 요청을 화면 위 화살표로 보여준다
macOS에서 동작하는 AI 코딩 에이전트가 사람에게 "여기를 누르세요"라고 알려야 할 때, 지금까지는 터미널에 텍스트를 찍어내는 방법밖에 없었다. bigarrow는 이 문제를 화면 위에 직접 큰 화살표와 표지판을 그리는 방식으로 푼다. GitHub의 franzenzenhofer/big-arrow-on-the-screen 저장소에서 MIT 라이선스로 공개된 이 도구는 Swift로 작성된 단일 바이너리 하나와 Claude Code·Codex용 스킬로 이뤄져 있다. 데몬도, 메뉴바 아이콘도, 계정도, 텔레메트리도 없다.
설치는 Homebrew 탭을 쓰거나 소스에서 직접 빌드한다. brew install franzenzenhofer/tap/bigarrow 로 바이너리를 받은 뒤 bigarrow install-skill 을 실행하면 Claude Code(~/.claude/skills)와 Codex(~/.agents/skills)에 스킬이 설치된다. 소스 빌드는 Xcode 16 이상, macOS 14 이상이 필요하고 swift build -c release 로 .build/release/bigarrow 를 만든다.
에이전트가 실제로 쓰는 명령은 세 가지다. bigarrow point --element "Allow" --app "System Settings" --text "..." 처럼 접근성 레이블로 대상을 지정하거나, --at 760,500 으로 좌표를 직접 찍는다. bigarrow start --window "Safari:Inbox" 로 띄운 화살표는 bigarrow stop 으로 걷어낼 때까지 남는다. 대상 지정 방식은 좌표(--at), 사각형(--rect), 마우스 위치(--mouse), 앱과 창 제목(--window App[:title]), 레이블과 앱 조합(--element Label --app App), Peekaboo 스냅샷 ID 등 여러 가지다. 좌표는 전역 좌상단 기준 논리 포인트이며 --display N 으로 특정 디스플레이 기준으로 바꿀 수 있다. 모든 명령이 --json 을 지원하고 종료 코드도 정리돼 있다. 0은 정상, 2는 잘못된 입력, 3은 대상을 찾지 못함, 4는 권한 없음이다.
화살표는 스스로 사라지도록 설계됐다. point 는 기본 8초, start 는 300초 후 끝나고 --duration 0 을 주면 제한이 없어진다. 화살표를 그린 에이전트 프로세스가 종료되면(CLAUDE_PID 또는 BIGARROW_OWNER_PID 기준) 함께 정리된다. Claude Code의 UserPromptSubmit 훅에 bigarrow stop --hook 을 걸어두면 세션 단위로 화살표를 청소할 수 있다. 표지판에 클릭 가능한 X를 달고 싶으면 --close-button 을 선택적으로 붙인다.
권한 요구 사항이 눈에 띄게 적다는 점도 특징이다. 화살표를 그리는 것 자체는 화면 기록이나 손쉬운 사용 권한이 필요 없다. --element, elements, --until-click, 창을 앞으로 가져오는 기능은 손쉬운 사용 권한을 사용하는데, 이 권한은 bigarrow가 아니라 셸을 실행한 앱(터미널, iTerm2, Ghostty, VS Code, Claude 등)에 부여된다. bigarrow doctor 가 권한 상태와 그 소유 앱, 연결된 디스플레이를 보여준다. --window App:title 처럼 창 제목을 읽어야 하는 경우 macOS 26에서는 화면 기록 권한이 없으면 제목이 숨겨지지만, --window App 만 쓰면 아무 권한도 필요 없다.
포커스를 뺏지 않는다는 점도 강조된다. 개발 과정에서 가장 까다로웠던 버그가 이것이었는데, 터미널이 없는 프로세스에서 NSApplication.run() 을 호출하면 조용히 앱이 활성화되면서 포커스를 가져갔다고 한다. bigarrow는 이벤트를 직접 처리하는 방식으로 우회했고, 테스트에서 최전면 앱이 바뀌지 않는지 확인한다.
겉모습에 대한 옵션도 상당하다. --shape bend|straight|zigzag|spiral 로 화살표 모양을, --style arrow|ring|box 로 표시 방식을, --size S|M|L 과 --corners round|sharp 로 크기와 모서리를 정한다. 색은 red, orange, yellow, green, teal, blue, purple, pink, black, white 와 #RRGGBB 를 지원하고, --border shadow|white-black|black 로 테두리 처리를 고른다. --border-color, --text-color, --edge-color, --close-color, --close-x-color 로 세부 색을 직접 지정할 수도 있다. --follow 는 창이나 요소를 따라다니고, --until-click 은 대상 클릭 시 종료되며, --say 는 표지판 내용을 소리 내어 읽는다. --png 로 화살표를 이미지로 렌더링해 문서에 넣을 수 있고, --dry-run --json 은 실제로 그리지 않고 어디를 가리킬지 알려준다.
배경에는 에이전트가 실제 업무를 맡게 되면서 드러난 구조적 한계가 있다. 에이전트가 모노레포를 리팩터링하고 마이그레이션을 작성할 수 있어도, macOS 권한 대화상자나 OAuth 동의 화면, 2FA 코드, CAPTCHA, 패스키, 결제 확인, 서명, 법적 체크박스 앞에서는 멈춘다. 버튼을 찾을 수는 있어도 대신 눌러서는 안 되는 영역이기 때문이다. bigarrow는 그 지점을 가리키는 역할만 맡고 판단은 사람에게 남긴다.
실무에서는 설정 안내와 온보딩 흐름을 단계별로 진행할 때(start, 대기, stop, 다음 단계), 원격 지원에서 상대방에게 위치를 설명하는 대신 직접 짚어줄 때, 데모나 스크린캐스트에서 중요한 부분을 강조할 때, 접근성 좌표가 맞는지 확인할 때 쓸 수 있다. 에이전트가 보지 않는 터미널에 안내 문구를 출력하는 대신 사용자가 실제로 보고 있는 화면에 표시한다는 것이 핵심 차이다.
한계도 분명하다. bigarrow는 사람을 위한 화면 주석 도구도, 클릭 봇도, 스크린샷 도구도 아니다. 클릭하거나 타이핑하거나 화면을 캡처하지 않고 가리키기만 한다. 표지판과 화살대를 클릭하면 화살표가 사라지고(포인터 아래에서 살짝 흐려져 이를 알린다), 대상이나 화살촉 근처를 클릭하면 그 입력은 앱으로 그대로 전달된다. 화살표는 대상 앱에 묶여 있어 다른 앱이 대상을 가리면 숨었다가 다시 나타난다.