피드로 돌아가기
I built GhostType: inline AI text completion for every app on macOS
Dev.toDev.to
AI/ML

macOS Accessibility API 기반 Local LLM 인라인 텍스트 완성을 구현한 GhostType

I built GhostType: inline AI text completion for every app on macOS

mk668a2026년 5월 15일3intermediate

Context

기존 Cloud LLM 기반 텍스트 생성 도구의 복사-붙여넣기 과정으로 인한 낮은 생산성 발생. 특히 데이터 프라이버시 침해 우려와 네트워크 Latency로 인한 실시간 입력 경험 저하가 주요 병목 지점으로 작용함.

Technical Solution

  • NSEvent.addGlobalMonitorForEvents를 통한 시스템 전역 키스트로크 감시 및 입력 이벤트 캡처
  • Accessibility API(AXUIElement)를 활용하여 포커스된 텍스트 필드의 주변 컨텍스트 추출 및 완성 문구 주입
  • NSWindow Overlay 설계를 통해 Caret 위치에 투명 Ghost Text를 렌더링하는 UI 레이어 분리
  • 127.0.0.1 기반 OpenAI-compatible Client 구조를 채택하여 LM Studio, Ollama 등 다양한 Local LLM 서버와 연동
  • AX API 미지원 앱(Slack, Discord 등) 대응을 위해 내부 Keystroke Buffer 기반의 수동 트리거(Option + ) 메커니즘 구현
  • Apple Silicon 최적화를 위해 1.5GB~2GB 규모의 소형 모델(Qwen2.5-Coder-3B 등)을 활용한 저지연 추론 환경 구축

- OS 수준의 Accessibility API를 통한 외부 애플리케이션 텍스트 제어 가능성 검토 - Low Latency가 필수적인 UX 설계 시 Local Inference 모델(3B 이하) 도입 고려 - 시스템 전역 이벤트 모니터링 시 Input Monitoring 및 Accessibility 권한 획득 프로세스 설계 필요

원문 읽기