저는 계속 같은 일을 반복했습니다. 긴 빌드를 시작하고 다른 작업으로 전환한 다음, 매분 터미널을 확인하거나 30분 동안 까먹는 식이었죠. AI 코딩 에이전트에서도 똑같은 일이 발생합니다. 이들은 제가 다른 창에 있을 때 많은 시간을 일하거나 승인을 기다리며 보냅니다.
그래서 저는 Rust로 작성된 오픈 소스 CLI인 Midway를 만들었습니다. 명령을 시작하고 커피를 마시러 가도, Midway가 필요할 때 알려줍니다.
작동 방식
Midway를 통해 명령을 실행합니다:
실행되는 동안 Midway는 주기적인 "여전히 실행 중" 알림(기본값 15초마다)을 보냅니다. 완료되면, 해당 명령이 최소 10초 이상 실행되었을 경우에만 완료 알림을 받게 되어 짧은 명령으로 인해 스팸처럼 오는 것을 방지합니다. 이 두 가지 동작 모두 midway.yaml의 command_notifications에서 설정할 수 있습니다.
스크립트 마지막 부분에서는 직접 알림을 보낼 수도 있습니다. 이는 매우 유용합니다:
midway send-text --message "배포 완료"
알림이 전송되는 곳
- 로컬 데스크톱 알림(Local desktop notifications)
- 이메일(Email)
- Slack
- Ntfy
- Discord
- Telegram
이는 제가 책상에서 떨어져 있을 때도 알림을 휴대폰으로 따라갈 수 있다는 의미입니다. 각 플랫폼별 설정은 알림 문서를 참고하세요.
설치
사전 빌드 릴리스는 Linux x86_64, Windows x86_64 및 Apple Silicon macOS용으로 제공됩니다. 다른 플랫폼(ARM64 Windows 또는 Linux, Intel macOS)의 경우 cargo install이 해당 기기용으로 빌드합니다.
그런 다음 설정을 생성하고 사용해 보세요:
midway init
midway run cargo build
AI 코딩 에이전트용 알림
제가 가장 많이 사용하는 부분입니다. 대부분의 코딩 에이전트는 라이프사이클 훅(lifecycle hooks)을 지원합니다. 이는 에이전트가 완료되거나 승인이 필요할 때 실행되는 명령입니다. 이러한 훅들을 midway send-text를 가리키도록 설정하면 터미널에서 벗어나 다른 일을 할 수 있습니다:
midway send-text --message "에이전트 완료" --background
--background 플래그는 전송을 자체 프로세스로 분리하고 즉시 반환하므로, 에이전트나 훅(hook) 프로세스가 중단되더라도 알림은 여전히 발송됩니다. 분리된 프로세스라고 해서 무적은 아닙니다. 시스템 종료, 명시적인 강제 종료(kill), 또는 임시 환경(ephemeral environment)의 해체 시에는 여전히 죽을 수 있습니다.
Claude Code, Codex CLI, GitHub Copilot, Gemini CLI, Antigravity CLI, OpenCode 및 Cursor에 대한 설정 가이드가 문서에 있습니다. 훅 형식은 에이전트 버전에 따라 자주 변경되므로, 스니펫이 작동하지 않으면 현재 사용 중인 에이전트의 훅 문서를 확인하고 이슈를 열어주세요.
다음 기능 (What's next)
- 연쇄 명령 지원 (
a && b)
- 알림에 로그 라인 포함하기
- 추가 서비스: Microsoft Teams, Google Chat, Mattermost 및 Rocket.Chat, Zulip, Matrix, 그리고 범용 웹훅(webhook)
사용해보고 빠진 것이 있다면 알려주세요 (Try it and tell me what's missing)
지원되기를 원하는 서비스나 알림 타이밍이 맞지 않는 워크플로우가 있다면 이슈를 열어주세요. 특히 설정 형식(config format)에 대한 피드백에 관심이 많습니다.