나는 화면을 인식하고 작업을 실행하는 macOS용 'smart Spotlight'를 만들었습니다. 여기 몇 가지 요점

발행: (2026년 4월 19일 PM 07:41 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

소개

Spotlight, 터미널, AI 챗봇 사이를 계속 전전하며 간단한 작업을 실행하는 것이 지겨웠습니다. 그래서 Castor라는 macOS용 Spotlight‑스타일 오버레이를 만들었습니다. 파일을 찾는 것뿐 아니라 현재 열려 있는 내용의 컨텍스트를 활용해 명령을 실행합니다. 무료이며 오픈‑소스입니다.

화면 모습

Castor UI

작동 원리

Spotlight의 UI가 훌륭한 이유는 완전 무마찰이기 때문입니다. 저도 자동화를 위해 같은 UX를 원했습니다—핫키를 눌러 “선택한 파일 모두를 소문자로 바꾸기” 혹은 “이 Safari 탭 요약하기”와 같이 입력하는 것이죠.

이를 매끄럽게 만들기 위해 Castor는 프롬프트를 보내기 전에 여러분의 컨텍스트를 미리 가져옵니다. 조용히 수집하는 내용은 다음과 같습니다:

  • 현재 활성화된 Finder 경로와 선택된 파일
  • 브라우저 탭 및 URL (Safari와 Chrome)
  • 클립보드 텍스트
  • 현재 화면의 스크린샷 (ScreenCaptureKit 사용)

보고 있는 것을 설명할 필요 없이 원하는 작업만 요청하면 됩니다.

백엔드 (그리고 Node.js와의 전쟁)

gemini-cli를 통해 Gemini Flash를 사용하고 있습니다. 빠르고 Swift에서 쉽게 연동할 수 있습니다. 문제는 gemini-cli가 Node‑기반이라 콜드 스타트 지연이 Spotlight 느낌을 망쳤다는 점이었습니다.

이를 해결하기 위해 Castor는 백그라운드 프로세스를 따뜻하게 유지합니다. UI를 닫으면 다음 실행을 위해 새 인스턴스를 미리 띄워 두는 식이죠. 이제 첫 번째 부팅만 약간 느릴 뿐입니다.

AI 라운드‑트립 건너뛰기

같은 스크립트를 반복해서 실행하고 있다는 것을 깨달았습니다(예: “800 px로 리사이즈”, “PDF로 변환”). Castor는 이제 Script Memory 기능을 제공해 성공한 셸 명령을 저장하고 나중에 퍼지 매칭합니다. 강한 매치가 있으면 즉시 제안이 표시되고, 한 키로 실행할 수 있어 AI를 완전히 우회합니다.

동시성 처리

첫 번째 버전은 작업이 실행되는 동안 다른 작업을 할 수 없게 막았습니다. 이제 여러 작업을 병렬로 실행할 수 있습니다. 작업들은 iMessage처럼 세로 스택으로 표시되며, 각각 자체 출력 스트림과 취소 버튼을 가집니다. Swift 6.2의 엄격한 actor 격리와 잘 맞추는 것이 고통스러웠지만, 이제 코드는 훨씬 안전해졌습니다.

UI 및 사양

  • 오버레이는 포커스를 빼앗지 않는 NSPanel이며, 비활성 상태로 떠 있습니다.
  • 새로운 네이티브 .glassEffect()를 사용해 일급 도구 같은 느낌을 줍니다.
  • 진행 상황을 추적하는 메뉴‑바 Live Activity를 포함합니다.

앞으로의 계획

개인 프로젝트라 아직 다듬어야 할 부분이 많습니다. 현재 고민 중인 내용:

  • 더 나은 컨텍스트 추출 (터미널, VS Code, Xcode)
  • 로컬 모델 지원
  • 편집 가능한 스크립트 메모리
  • Shortcuts 통합

코드는 GitHub에 있습니다. PR, 이슈, 피드백을 환영합니다.

GitHub:

Swift 6.2, SwiftUI, ScreenCaptureKit, AppKit, 그리고 gemini-cli로 빌드되었습니다. macOS 26 (Tahoe) 이상이 필요합니다.

0 조회
Back to Blog

관련 글

더 보기 »