후속 메시지를 잃지 않기: Claude Code, Codex, OpenCode 세션을 위한 지속 큐와 인터럽트
세션이 바쁘거나 오프라인일 때도 메시지를 잃거나 메모에 두 번째 "그림자 계획"을 만들지 않고 휴대폰에서 후속 메시지를 보내는 실용적인 방법.
- CLI
- 0.2.17
- 프리뷰 ref
- a2c45c8
세션을 실수로 탈선시키는 흔한 원인은 잘못된 지시를 보내는 게 아닙니다.
올바른 지시를 잘못된 때에 보내는 것입니다.
세션이 작업 중(또는 오프라인/재개 중)일 때 휴대폰에서 후속 메시지를 보내면, 세 가지 중 하나가 일어납니다.
- 메시지가 허공으로 사라진다
- 예상보다 늦게 도착한다(세션이 이미 여러 결정을 내린 뒤)
- 믿을 수 없어서 메모에 두 번째 "그림자 계획"을 쓰고, 이제 조율 문제가 생긴다
원하는 건 신뢰할 수 있고 예측 가능한 동작입니다.
후속 메시지를 안전하게 큐에 넣고, 마음이 바뀌면 편집하고, 정말 "인터럽트"하고 싶을 때만 지금 보내고 싶다.
요약
- 무엇이 필요한지 정합니다:
- Pending until ready(순서가 있고 편집 가능한 후속 메시지), 또는
- Interrupt & send now(현재 턴을 멈춤)
- 지속 큐가 없다면 안전한 대안은 후속 메시지를 다른 곳에 적어 두고, 세션이 준비되었다고 확신할 때만 보내는 것입니다.
- Happier는 이를 직접 해결하는 한 가지 방법으로, 세션과 함께 저장되는 pending 큐(큐 추가/편집/순서 변경/삭제/지금 보내기)가 있습니다.
문제 (쉽게 말하면)
노트북 앞에 없을 때 작업을 진행시키는 수단은 후속 메시지입니다.
하지만 대부분의 도구는 "메시지 보내기"를 받는 쪽이 항상 준비된 것처럼 다룹니다.
실제로 받는 쪽은 자주 이런 상태입니다.
- 턴 진행 중
- 연결 끊김
- 로컬 제어와 원격 제어 사이 전환 중
- 비활성 상태에서 재개 중
그래서 타이밍을 명시적으로 다루는 워크플로가 필요합니다.
일반적인 방법과 트레이드오프
- 그냥 보내고 기도하기: 의외로 깨지기 쉽습니다.
- 메모/Slack에 적고 나중에 보내기를 기억하기: 되지만 두 번째 큐를 관리하게 됩니다.
- 머신에 SSH로 들어가 직접 개입하기: 강력하지만 휴대폰으로 본격적인 작업을 하게 됩니다.
이 문제의 산업용 버전은 지속 워크플로 엔진(Temporal)이나, 지속 스레드와 인터럽트를 갖춘 에이전트 오케스트레이션 프레임워크(LangGraph)로 해결합니다.
Happier는 코딩 에이전트를 크로스 디바이스로 실행하고 오케스트레이션하는 오픈 소스 앱이며, 그 큐는 일상에서 쓰는 실용판입니다.
Happier가 처음이라면 (무엇이고 어디서 받는지)
Happier를 처음 본다면: Claude Code, Codex, OpenCode 같은 세션을 위한 오픈 소스 컴패니언 앱(모바일/웹/데스크톱)입니다.
워크플로: 세션은 신뢰하는 머신에서 실행되고, Happier는 휴대폰에서 후속 메시지를 보내는 곳이며, 세션이 준비되지 않았을 때는 진짜 큐가 있습니다.
설정하기:
- 휴대폰에서 Happier 사용하는 방법
- GitHub: https://github.com/happier-dev/happier
- 설치/다운로드: https://github.com/happier-dev/happier#how-it-works
- Discord (커뮤니티 + 지원): https://discord.gg/W6Pb8KuHfg
혼란의 90%를 해결하는 두 가지 모드
모드 A: Pending until ready
이럴 때:
- 생각이 여러 개다
- 순서를 지키고 싶다
- 실행 전에 편집하고 싶다
모드 B: Interrupt & send now
이럴 때:
- "하던 걸 멈추고 이것부터 답해"
- 안전을 위한 개입
- 시간이 중요한 수정
함정은 모드 B를 기본값으로 쓰는 것입니다. 불필요한 흔들림이 생깁니다.
Happier 워크플로 (pending 큐)
Happier의 pending 큐는 중요한 점을 명시적으로 다룹니다. 세션이 준비되지 않았을 수 있다는 점입니다.
pending 메시지는:
- 순서가 있다
- 편집할 수 있다
- 세션과 함께 저장된다
표시되는 곳:
- 세션 목록의 pending 배지
- 세션 안의 Pending (N) 표시
할 수 있는 동작:
- 위/아래로 이동
- 편집
- 삭제
- 지금 보내기
로컬↔원격 전환처럼 큐를 자동으로 처리하면 안 되는 경우를 위한 Discarded messages 영역도 있습니다.
스티어링 및 attach/로컬 제어와의 관계
스티어링과 pending 큐는 서로 다른 문제를 해결합니다.
- 스티어링은 "진행 중인 턴에 끼워 넣기"용(지원되는 경우)
- pending 큐는 "실행 전, 순서 있고 편집 가능한 메시지"용
attach/로컬 제어 흐름 중에는 앱에서 보낸 메시지가 세션이 원격 처리를 재개할 준비가 될 때까지 pending 상태로 있는 것이 정상입니다.
문제 해결
후속 메시지가 실행되지 않음
확인할 것:
- 세션이 오프라인/재개 중인가?
- 메시지가 pending에 머물러 있는가?
- 지금 로컬 제어(attach) 상태인가?
자꾸 실수로 세션을 인터럽트함
기본 Message sending 설정을 큐 우선 모드로 바꾸고, 지금 보내기는 의도할 때만 쓰세요.