Claude, Codex, OpenCode 세션을 다른 머신으로 옮기는 방법 (처음부터 다시 하지 않고)
같은 대화를 이어 가면서 세션을 소유하는 머신을 바꾸고, 필요하면 작업 공간까지 옮기는 방법.
- CLI
- 0.2.17
- 프리뷰 ref
- a2c45c8
하루를 마칠 때 흔한 순간입니다.
- 세션은 노트북에서 시작했습니다.
- 노트북을 닫아야 합니다(또는 배터리가 다 되거나, 잠들거나, Wi-Fi가 끊기거나, 가방에 들어가기 직전).
- 세션은 멈추면 안 됩니다. 계속되어야 하지만, 다른 머신에서요.
이것이 세션 핸드오프가 약속하는 바입니다.
같은 세션 ID, 같은 흐름... 다만 소유 머신만 다르게.
대부분의 도구에는 "세션 전체를 다른 머신으로 옮기는" 깔끔한 흐름이 없습니다.
Happier에는 있습니다. Session handoff라는 기능입니다.
요약
- 하려는 일을 정하세요.
- 세션을 다른 머신으로 옮기기(노트북을 닫을 수 있도록)
- 선택 사항: 작업 공간도 옮기기(대상 머신에 아직 파일이 없다면)
- 두 컴퓨터 모두에 Happier를 설정하세요(최소한 둘 다 같은 Happier 서버에 연결).
- 세션을 열고 Session handoff를 시작하세요(세션 헤더 메뉴 또는 Session info).
- 대상 머신을 고르세요.
- 결정하세요.
- Workspace transfer: 기본적으로 꺼짐(안전한 쪽)
- Direct session이라면: Keep direct 또는 Convert to synced
문제
때로 제약은 "휴대폰을 쓸 수 있느냐"가 아닙니다.
"지금 이 세션을 소유한 머신이 어디냐"입니다.
세션을 엉뚱한 머신이 소유하고 있으면 모든 게 번거로워집니다.
- 실제로 돌리고 싶은 도구는 다른 곳에 있고
- 작업 위치를 옮기려고 세션을 다시 만들게 되고
- 연속성을 잃습니다(그리고 맥락을 다시 설명하기 시작합니다)
Session handoff는 깔끔한 "같은 세션, 다른 머신" 동작입니다.
흔한 방법과 트레이드오프
- 노트북을 재우고 세션이 살아남길 바라기: 괜찮을 때도 있지만 기댈 만한 것은 아닙니다.
- 다른 머신에서 새 세션 시작: 되긴 하지만 흐름을 잃습니다(맥락도 다시 설명해야 합니다).
- 세션 포크: 분기가 필요할 때는 유용하지만 "같은 세션을 다른 곳에서 계속 살려 두기"는 해결하지 못합니다.
- 휴대폰에서 노트북으로 SSH: 되긴 하지만, 끄려는 것이 바로 그 노트북이라면 앞뒤가 바뀐 셈입니다.
- Happier Session handoff: 같은 세션 ID를 유지하고 실제 소유자를 옮깁니다.
Happier가 처음이라면 (무엇이고 어디서 받는지)
Happier는 Claude Code, Codex, OpenCode 같은 AI 코딩 에이전트를 위한 오픈 소스 컴패니언 앱(모바일, 웹, 데스크톱)입니다.
여기서의 흐름은, 저장소와 작업 공간은 그것을 소유한 머신에 둔 채로 휴대폰에서 Happier로 세션을 모니터링하고 조종하는 것입니다.
설정하기:
- 휴대폰에서 Happier 사용하기
- GitHub: https://github.com/happier-dev/happier
- 설치 및 다운로드: https://github.com/happier-dev/happier#how-it-works
- Discord(커뮤니티 및 지원): https://discord.gg/W6Pb8KuHfg
잘 통하는 워크플로 (단계별)
1) "세션만" 옮길지 "세션 + 작업 공간"을 옮길지 정하기
Session handoff에는 두 가지 조절 항목이 있습니다.
- 세션 소유권: 어느 머신이 세션의 실제 소유자인지(핵심 기능입니다).
- Workspace transfer: Happier가 작업 공간 파일을 대상 머신으로 복사할지 여부.
"이 노트북은 꺼야 하지만 세션은 살려 두고 싶다"가 목표라면 거의 항상 소유권 이동부터 시작합니다.
작업 공간 전송은 선택 사항입니다. 대상 머신에 필요한 파일이 아직 없거나, 이 세션의 저장소 거처를 대상 머신으로 바꾸고 싶을 때 씁니다.
2) 세션에서 Session handoff 시작하기
핸드오프는 다음에서 시작할 수 있습니다.
- 세션 헤더의 동작 메뉴
- Session info 화면
대상 머신을 고르고 확인하세요.
3) 작업 공간을 전송할지 고르기 (선택)
기본적으로 작업 공간 전송은 꺼져 있습니다.
Happier가 세션 작업 공간을 대상 머신에 정말 복사하길 원할 때만 켜세요.
전송을 켰다면 다음도 고릅니다.
- 대상 경로가 이미 있을 때 어떻게 할지(옆에 복사할지, 교체할지)
- 무시된 파일을 어떻게 다룰지
Happier는 여기서 엄격합니다. 다음과 같은 안전하지 않은 원본 경로에서는 작업 공간 전송을 막습니다.
/- 홈 디렉터리
~
실수로 머신의 절반을 복사하려 드는 일이 없도록요.
4) Direct session이라면 Keep direct와 Convert to synced 중 고르기
Session handoff는 Synced 세션과 Direct 세션 모두에서 동작합니다.
Direct 세션이라면 핸드오프 UI에 선택지가 추가됩니다.
- Keep direct: 세션이 공급자 쪽에 그대로 보관됩니다.
- Convert to synced: 머신에 묶인 Direct 모델에서 벗어나 이후로는 Happier가 세션을 소유합니다.
간단한 판단 기준:
- "공급자가 보관하고 머신에 붙어 있는" 성질을 유지하고 싶다면: Keep direct.
- 이후로 일반 Happier 세션처럼 동작하길 원한다면: Convert to synced.
5) 핸드오프가 실패하면 인증 전제를 확인하기 (Connected services vs 머신 로컬 인증)
Session handoff가 대상 머신에서 공급자 CLI에 마법처럼 로그인해 주지는 않습니다.
여기서는 두 개념이 맞물립니다.
- Connected services: 자격 증명이 Happier 계정에 있고, 호환되는 백엔드는 여러 컴퓨터에서 재사용할 수 있습니다.
- 머신 로컬 공급자 인증: 일부 백엔드는 여전히 공급자 네이티브 CLI의 로그인 상태에 의존합니다.
대상 머신이 공급자나 실행 환경 요구 사항을 충족하지 못하면 핸드오프를 완료할 수 없습니다.
지원 공급자 (예상할 수 있는 것)
공급자에 따라 다릅니다.
현재 문서에 따르면:
- Claude: 지원
- OpenCode: 지원
- Codex: 사용 가능하지만 Claude·OpenCode보다 덜 안정적
공급자가 현재 세션의 핸드오프를 지원하지 않으면 해당 동작은 숨겨지거나 사용할 수 없습니다.
왜 효과가 있는지 (그리고 무엇이 깨지는지)
Session handoff가 동작하는 이유는 Happier가 "세션 ID + 대화 기록 + 세션 메타데이터"를 하나의 단위로 다루고, 실제 소유 머신만 바꾸기 때문입니다.
대상 머신이 세션에 필요한 것을 실제로 실행할 수 없으면 깨집니다.
- 머신이 오프라인
- 백엔드가 설치되지 않았거나 거기서 쓸 수 없음
- 공급자 인증이 없음
흔한 실수
- 작업 공간 전송을 기본으로 켜기 → 정말 파일 복사가 필요할 때가 아니면 꺼 두세요.
- 핸드오프가 공급자 로그인을 해결해 줄 거라 기대하기 → 그렇지 않습니다. 대상 머신과 인증을 준비해 두세요.
- 소유권 이동이 필요한데 포크를 쓰기 → 포크는 분기용이고, 핸드오프는 "같은 세션, 다른 머신"용입니다.
자주 묻는 질문
같은 세션 ID가 유지되나요?
네. 그것이 핸드오프의 핵심입니다.
"Attach to session"과 같은 건가요?
아니요. Attach는 같은 머신의 터미널에서 세션을 다시 여는 기능입니다. 핸드오프는 소유 머신을 바꿉니다.