"내가 말하는 전부를 듣고, 내가 쓰는 모든 앱에 타이핑할 수 있어라." 다시 읽어봐. 그게 받아쓰기 도구의 스펙이면서 동시에 키로거의 스펙이라는 것도 보일 거야.
요청
Firekeeper 는 사려 깊은 유저라면 멈칫할 만한 권한 둘이 필요해. 마이크. 널 들을 수 있어. 접근성. 다른 앱의 포커스된 요소를 읽고 거기에 손댈 수 있어. 받아쓰기 앱이라면 전부 정확히 이게 필요하고, 멀웨어도 똑같이 이게 필요해. 이걸 안 받고 넘어가는 똑똑한 구조 같은 건 없어. 말하는 걸 타이핑해 주는 도구라면 듣고 타이핑할 수 있어야 하니까. 손댈 수 있는 건 그 너머로는 아무것도 요청하지 않는 것, 그리고 받은 허가를 정당화하는 방식으로 행동하는 거야.
권한 표면은 설계에서 나오는 결과야
마이크 필수 -- 널 들어야 함
접근성 필수 -- 선택, 타깃 맥락, 튼튼한 삽입
Input Monitoring 회피됨 -- 설계가 이벤트 탭 대신 flagsChanged 고름
Automation 회피됨 -- 한 앱 프로파일이 요구 안 하면 AppleScript 없음
네트워크 스코프됨 -- 네가 고른 프로바이더만, 기본값으론 절대 아님
Input Monitoring 이 사업 비용으로 받아들여진 게 아니라 피해졌다 는 걸 봐. 앞에서 내린 단축키 결정이 여기서 배당금을 내는 거야. 활성화가 이벤트 스트림을 가로채는 대신 모디파이어 플래그를 관찰하니까, 앱이 '모든 키 입력을 봐도 될까요' 를 물을 일이 아예 없어. 권한 표면은 기능 목록이 정해 주는 고정값이 아니라 아키텍처가 만들어 내는 결과고, 줄어들도록 설계할 수 있어.
솔직하게, 그리고 일찍 물어
습관 둘이 이 요청을 공정하게 만들어. 첫째, 받아쓰기 중간에 유저를 기습하지 말고 실행할 때 마이크를 요청해. 말을 시작하는 순간 뜨는 권한 프롬프트는 놀라운 데다 첫 단어를 놓치게 만드니까. 둘째, 상태를 읽을 수 있게 만들어. 지금 권한이 어떤지 실시간으로 보여 주고, 해당 시스템 설정 창을 바로 여는 버튼까지 붙은 Setup 패널을 둬. 그래야 유저가 자기가 뭘 줬는지 늘 알고 언제든 거둬들일 수 있어. 뭘 쥐고 있는지 애매하게 구는 앱은 그걸 쥘 자격이 있다는 논쟁을 이미 진 거야.