
1. 문제 — 작업 중 발견한 자료를 놓치기 쉽습니다
에이전트에게 긴 작업을 맡겨도 중간에 찾은 자료를 보려면 대화 화면을 계속 확인해야 합니다. 저장소 조사나 디버깅이 끝나기 전에도 먼저 읽고 싶은 공식 문서나 문제 해결의 단서가 나옵니다. 여러 작업을 오가다 보면 어느 대화에서 찾은 자료인지 되짚는 데도 시간이 듭니다.
모든 진행 상황을 알림으로 받으면 확인할 메시지만 늘어납니다. 파일을 읽었다는 보고와 반복 로그 사이에 유용한 내용이 묻힐 수도 있습니다. 필요한 것은 먼저 볼 만한 발견을 짧게 받고, 나중에도 다시 찾을 수 있는 통로였습니다.
2. 아이디어 — 유용한 발견을 알림으로 건넵니다
“이거 너도 보면 좋을 것 같아서”라며 링크를 보내는 경험을 떠올렸습니다. AI Spams To Me는 에이전트가 찾은 자료를 짧은 설명과 함께 macOS 알림으로 전달합니다. 관심이 가면 바로 열고, 지금 읽기 어렵다면 메뉴바 알림함에서 나중에 확인합니다.
무엇을 보낼지는 에이전트의 작업 지침에 정했습니다. 유용한 링크와 출처, 중간 산출물, 다음 판단에 영향을 줄 발견을 골라 보냅니다. 반복 보고는 생략하고 관련 자료는 묶어서 전달하며, 최종 답변은 기존 대화에 남깁니다.
에이전트는 이 지침에 따라 보낼 내용을 판단하고, 앱은 메시지를 전달하고 보관합니다. 앱이 메시지의 유용성을 평가하거나 자동으로 분류하는 구조는 아닙니다.
3. 해결 — MCP와 macOS 알림함을 연결했습니다
로컬 MCP helper와 SwiftUI 메뉴바 앱으로 구현했습니다. 에이전트가 send_notification에 세션명·제목·본문을 보내면 helper가 메시지를 messages.jsonl 파일에 저장합니다. URL과 우선순위도 함께 보낼 수 있습니다.
메뉴바 앱은 1초마다 파일을 읽어 새 메시지의 macOS 알림을 요청하고, 알림함에도 표시합니다. 에이전트는 list_messages로 최근 메시지와 전송 상태를 확인할 수 있습니다. 두 프로세스가 같은 로컬 파일을 사용하므로 별도 계정이나 웹 서버가 필요하지 않습니다.

알림함의 카드에는 세션명, 생성 시각, 제목, 본문과 전송 상태가 보입니다. URL 필드뿐 아니라 제목·본문의 HTTP·HTTPS 링크도 버튼으로 표시합니다. 복사 버튼을 누르면 화면에서 생략된 내용까지 포함해 메시지 전체와 링크를 복사합니다.
파일 접근에는 flock 잠금을, 기록 갱신에는 atomic write를 사용했습니다. 최근 500건을 보관하며, 읽을 수 없는 JSONL 줄은 건너뛰고 나머지를 불러옵니다.
4. 장점 — 발견을 받는 때와 읽는 때를 나눕니다
작업 화면을 계속 지켜보지 않아도 참고할 자료를 먼저 받을 수 있습니다. 바로 읽은 자료는 에이전트의 작업이 끝나기 전에 다음 판단에 활용합니다. 지금 읽지 못한 메시지는 알림함에 남아, 여유가 생겼을 때 다시 열거나 복사할 수 있습니다.
여러 작업의 발견도 한곳에 모입니다. 세션명으로 어느 작업에서 온 자료인지 구분하고, MCP를 지원하는 클라이언트는 같은 helper를 사용할 수 있습니다. Codex 설치 스크립트로 helper를 등록할 수 있고, README에는 Pi 연결 설정도 제공합니다.
알림이 유용하려면 에이전트가 보낼 내용을 잘 골라야 합니다. helper는 메시지 길이와 세션별 최근 1분의 발송 수를 제한하지만, 내용의 유용성까지 보장하지는 않습니다. 사용성이나 생산성 향상을 수치로 검증한 단계는 아닙니다.