3 minute read

컴퓨터 화면 속 에이전트가 마우스를 제멋대로 휘두르는 걸 보다가 문득 등골이 오싹해졌다.

AI 에이전트가 이제 텍스트 파일만 깔짝거리는 시대는 지났다. 직접 마우스 커서를 움직이고, 버튼을 클릭하고, 키보드로 타이핑까지 척척 해낸다. ‘컴퓨터 유징(Computer Use)’이라는 이름으로 처음 공개됐을 땐 신기한 데모 수준이었는데, 어느새 로컬 에이전트들의 필수 기본 패키지처럼 굴러다닌다. 편하다. 솔직히 진짜 편하긴 한데… 모니터를 가만히 쳐다보고 있으면 가끔 등골이 서늘해질 때가 있다. “저 녀석이 실수로 내 개인 사진 폴더나 온라인 결제 승인 창을 누르면 어떡하지??”

r/openclaw에 바로 이 원초적인 공포에 정면으로 안전벨트를 채워주는 도구가 올라왔다. Mac이나 안드로이드 스마트폰, 메타 퀘스트(Quest) 화면을 에이전트가 제멋대로 클릭하기 직전에 사람의 컨펌을 강제하는 물리적 브레이크다. 거창한 상용 솔루션은 아니고 GitHub에 MIT 라이선스로 시원하게 풀린 오픈소스인데, 작동 메커니즘이 아주 직관적이다.

화면을 건드리기 전, 3초간의 카운트다운

에이전트가 화면 조작을 시도하려면 반드시 사전에 screen-claim start "<무엇을 하려는지>" 쉘 명령어를 실행해야 한다.

이 명령어가 떨어지는 순간, 화면 최상단에 붉은색 카운트다운 타이머가 뜬다. 그 몇 초의 유예 시간 동안 사람은 “잠깐, 너 그거 누르지 마!” 하고 작업을 거부할 수 있다. 승인하고 나면 화면 위에 눈에 띄는 배너가 상시로 고정된다. 지금 어느 에이전트 봇이 내 Mac을 ‘대리운전’하고 있는지 이름을 밝히고, 일시정지(Pause), 대화(Talk), 강제종료(Cancel) 버튼이 함께 뜬다. 비행기 조종실의 안전벨트 경고등 같은 셈이다.

특히 일시정지(Pause) 메커니즘이 아주 무자비해서 마음에 든다. Pause를 누르는 순간 백그라운드에서 화면 조작을 대행하던 peekaboo 데몬 프로세스를 아예 강제 종료(kill)시켜 버린다. 이어서 Claude Code의 PreToolUse 훅이 작동해서, 사람이 Resume 버튼을 누르기 전까지 peekaboo, cliclick, System Events 같은 모든 마우스/키보드 제어 API 호출을 무조건 차단한다. 에이전트가 아무리 명령을 다시 내려도 도구가 잠겨 있으니, 손발이 꽁꽁 묶인 채 얌전하게 대기할 수밖에 없다.

안드로이드 폰과 퀘스트 VR 헤드셋은 adb 브릿지 연결 위에 똑같은 원리를 얹었다. 잠금 제어 스크립트가 가벼운 Node.js로 작성되어 있어서 기기별로 이름을 따로 붙여 개별 잠금도 가능하다. 외부로 나가는 데이터는 0바이트. 모든 통제 루프가 100% 내 로컬 기기 안에서만 돈다.

레딧 댓글이 곧바로 찾아낸 치명적인 보안 구멍

하지만 이런 통제 도구의 운명은 늘 비슷하다. 개발자 커뮤니티에 공개되자마자 우회로를 뚫으려는 해커들이 달라붙는다. 실제로 첫 번째 댓글이 아주 날카롭게 급소를 찔렀다.

차단 목록이 오직 알려진 도구 3인방(peekaboo, cliclick, System Events)의 이름만 검사한다는 점을 지적한 것이다. 만약 에이전트가 이 목록에 없는 경로, 예컨대 osascript로 raw AppleScript를 직통으로 흘려보내거나 내부 CGEvent 프라이빗 API를 직접 호출하는 파이썬 스크립트를 짜서 실행해 버리면, 저 예쁜 배너는 그냥 장식용으로 전락하고 만다.

정확하고 뼈아픈 지적이다. 보안에서 블랙리스트(차단 목록) 방식은 늘 한계가 있다. 내가 상상한 공격 경로만 막을 뿐이라, 똑똑한 모델이 예상 밖의 새로운 우회로를 찾아내는 순간 방어벽은 무너진다. 댓글 유저는 핵심 질문을 던졌다. “새로운 우회 드라이버가 나올 때마다 끝없이 블랙리스트에 추가할 것인가, 아니면 macOS 접근성(Accessibility) 권한을 쥔 프로세스 자체를 감시하는 시스템 밑단 레이어에서 허용 목록(화이트리스트) 게이트를 세울 것인가?”

당연히 후자로 가야 진짜 방패가 된다. 화면 제어의 원천 권한인 접근성 API 레벨에서 빗장을 걸어야 틈이 없다. 제작자가 다음 버전에서 반드시 풀어야 할 숙제다.

왜 여기에 주목해야 할까

이 도구가 완성형 제품인가 하는 것은 부차적인 문제다. 진짜 중요한 것은, AI 에이전트가 현실의 물리적 컴퓨터를 조작하는 시대에 접어들면서 ‘인간의 통제권(Human Control)’을 어떻게 실무 코드로 구현할 것인가라는 화두가 본격적으로 수면 위로 올라왔다는 점이다.

카운트다운, 기기별 잠금 락, 화면 최상단 배너. 투박해 보이지만 하나하나가 “지금 이 컴퓨터의 진짜 주인이 누구인가?”라는 본질적인 질문에 대한 기술적 답변이다.

설계 방식도 영리하다. 거창한 프레임워크를 새로 만드는 대신, Claude Code에 이미 내장된 PreToolUse 훅을 낚아채서 그 사이에 확인 단계를 강제로 끼워 넣었다. 기존 워크플로우를 헤치지 않으면서 안전장치를 얹는 방식이라 호환성이 좋다.

정리

자동화의 극적인 편리함과 보안 통제 사이에는 언제나 팽팽한 줄다리기가 존재한다.

이번 프로젝트는 그 거대한 긴장감을 화면 한구석의 직관적인 일시정지 배너 하나로 깔끔하게 풀어냈다. 비록 우회 경로 같은 보안 숙제가 남아 있긴 하지만, AI가 내 마우스 커서에 손을 얹기 전에 사람에게 3초의 생각할 시간을 준다는 것 자체만으로도 충분히 가치 있는 시도다.

내 컴퓨터를 내가 아닌 존재가 움직이는 낯선 세상, 비상 정지 버튼의 위치는 언제나 내 손이 닿는 곳에 있어야 마땅하다.