맥미니는 집에 켜두고, 밖에서는 아이폰이나 아이패드로 하던 작업을 그대로 이어서 하고 싶었다. 처음엔 SSH 뚫고 tmux 깔고 원격 서버처럼 굴려야 하나 싶었는데, 결론부터 말하면 그럴 필요가 전혀 없다. Claude 데스크톱 앱을 로그인 항목에 넣고 맥이 잠들지 않게만 해두면, 아이폰·아이패드·맥북 어디서든 같은 세션을 이어서 쓸 수 있다. 이 글대로 하면 맥 한 대를 24시간 켜두고 어느 기기에서든 동일한 개발 환경으로 작업을 이어가게 된다.
검증 환경: 맥미니 / macOS 26 (Darwin 25.5.0) / Claude 데스크톱 앱 1.24012.9 / Claude Code 2.1.219 기준 (2026.07 작성)
솔직히 고백하면 나는 이걸 어렵게 돌아왔다. claude rc 서버를 띄우고, 터미널을 닫아도 안 죽게 tmux로 감싸고, 부팅 때 자동 실행되게 LaunchAgent를 걸고, 맥이 안 자게 caffeinate까지 붙여서 거창하게 만들었다. 그런데 알고 보니 데스크톱 앱이 그걸 이미 다 하고 있었다. 그래서 만든 걸 전부 지웠다. 그 삽질의 결론부터 정리한다.
삽질 과정이 궁금하지 않은 사람은 아래 2번 내용부터 보면 된다.
1. 왜 tmux·claude rc·LaunchAgent가 필요 없나
처음 세운 가설은 이랬다. "맥에서 원격 제어 서버(claude rc)를 띄우고, 터미널 창을 닫아도 죽지 않게 tmux로 감싸고, 재부팅 대비 LaunchAgent로 자동 기동하고, 잠들지 않게 caffeinate를 물린다." 논리적으로 맞아 보였고 실제로 그렇게 구성했다.
그런데 아이폰에서 접속 중인 세션의 실체를 프로세스로 까보니 이거였다.
# 지금 아이폰에서 붙어 있는 세션이 실제로 어느 프로세스인지 확인
ps aux | grep "claude-code" | grep "local-agent-mode"
~/Library/Application Support/Claude/claude-code/2.1.219/claude.app/Contents/MacOS/claude
--output-format stream-json ... local-agent-mode-sessions/...
부모 프로세스는 Claude 데스크톱 앱(Electron)이었다. 터미널도, tmux도, claude rc도 없었다. 확인차 같이 돌려봐도 결과는 똑같았다.
# 원격 제어 서버가 정말 없는데도 접속되는지 교차 확인
tmux ls # → 세션 없음
ps aux | grep "claude rc" # → 프로세스 없음
즉 원격 접속을 제공하는 주체는 claude rc가 아니라 데스크톱 앱 그 자체였다. 앱이 Claude Code 세션을 직접 호스팅하고(로컬 에이전트 모드, local agent mode), 클라우드를 거쳐 다른 기기가 그 세션에 붙는 구조다. 그래서 내가 만든 스캐폴딩은 전부 중복이었고, 미련 없이 지웠다.
정리하면 예전에 손으로 짠 4종 세트를 이렇게 대체할 수 있다.
- 원격 엔드포인트 = 데스크톱 앱 (→
claude rc불필요) - 프로세스 상시 유지 = 앱이 GUI 백그라운드로 떠 있음 (→ tmux 불필요)
- 부팅 자동 기동 = 로그인 항목의 Claude 앱 (→ LaunchAgent 불필요)
- 수면 방지 =
pmset의 시스템 설정 (→caffeinate불필요)
2. 맥에서 상시 구동 세팅 (가장 쉬운 방법)
할 일은 딱 두 가지다. 앱을 자동으로 띄우고, 맥이 자지 않게 하는 것.
2-1. Claude 앱을 로그인 항목에 추가
시스템 설정 > 일반 > 로그인 항목 및 확장 프로그램 > "로그인 시 열기" 목록에 Claude를 추가한다. 이러면 재부팅해도 앱이 자동으로 뜬다.
터미널로 현재 로그인 항목을 확인할 수 있다.
# 로그인 시 자동 실행되는 앱 목록 확인 (Claude가 있는지 본다)
osascript -e 'tell application "System Events" to get the name of every login item'
Docker, ... , Claude, Tailscale, ...
이 목록에 Claude가 보이면 된다.
2-2. 맥이 잠들지 않게 설정
세션은 앱이 살아있어야 유지되는데, 맥이 시스템 수면에 들어가면 프로세스가 멈춰 연결이 끊긴다. 현재 수면 설정부터 확인한다.
# 전원/수면 설정 확인 (sleep 값이 0이면 시스템 수면 안 함)
pmset -g | grep -E "sleep|displaysleep"
sleep 0 (sleep prevented by ... Claude)
displaysleep 0
내 맥미니는 이미 sleep 0이라 손댈 게 없었다. 만약 값이 0이 아니라면, 시스템 설정 > 디스플레이 > "고급"에서 전원 연결 시 자동 잠자기를 끄거나, 아래 명령으로 끈다.
주의: 아래 명령은 관리자 권한(비밀번호)이 필요하고, 데스크톱(항상 전원 연결) 기준이다. 배터리로 쓰는 맥북은 상시 수면 해제를 권하지 않는다. 나는 이미 sleep 0 상태라 실행하지 않았으니, 각자 환경에서 값을 확인한 뒤 적용하길 권한다.
# (직접 검증 필요) 전원 연결 상태에서 시스템 수면 끄기 — 데스크톱 맥 기준
sudo pmset -a sleep 0
caffeinate는 이제 필요 없다. pmset이 상시로 수면을 막아주기 때문이다. 잠깐 특정 작업 동안만 깨어 있게 하고 싶을 때만 caffeinate를 쓰면 된다.
2-3. 접속 확인
앱이 켜진 채로 아이폰의 Claude 앱을 열어 Code 탭에서 맥의 프로젝트 세션이 뜨는지 본다. 뜨면 상시 구동 세팅은 끝이다. 이 글을 쓰는 지금 이 세션도 터미널 하나 없이 아이폰에서 그대로 잡히고 있다.
3. 아이폰·아이패드에서 이어서 작업하기
기기별로 "이어가기"의 방식이 조금 다르다. 핵심은 세션(대화)과 런타임(살아있는 프로세스)을 구분하는 것이다.
3-1. 평소 — 그냥 이어서 쓰기
아이폰·아이패드에서 Claude 앱 > Code 탭 > 맥의 프로젝트 세션을 고르면 된다. 앱이 맥에서 켜져 있는 한 세션의 런타임이 살아있으므로, 어느 기기에서 열어도 같은 맥락으로 이어진다. 앱 종료나 재부팅이 없으면 세션은 끊기지 않는다.
3-2. 끊겼을 때 — "원격 환경 사용 불가"의 정체
앱을 종료했거나 맥을 재부팅하면, 그 세션은 최근 항목에서 이렇게 뜬다.
이 세션이 연결된 원격 환경을 더 이상 사용할 수 없습니다. 계속하려면 새 세션을 시작하세요.
이건 고장이 아니다. 그 세션이 붙어 있던 런타임(프로세스)이 끝난 것뿐이다. 다행히 대화 기록 자체는 사라지지 않고 맥 디스크에 남아 있다.
# 프로젝트별 세션 기록(transcript) 저장 위치 — 경로는 프로젝트마다 인코딩되어 다르다
ls ~/.claude/projects/*project name*/*.jsonl
3-3. 맥에서 같은 대화로 되살리기
맥미니 앞에 앉았거나 맥북에서 SSH로 붙었다면, 기록을 그대로 불러와 이어갈 수 있다. 프로젝트 폴더에서 실행한다.
# 그 폴더의 가장 최근 대화를 전체 맥락째 이어서 열기
claude --continue
# 과거 세션을 목록에서 골라 이어가기
claude --resume
특정 세션을 콕 집으려면 세션 ID(위 .jsonl 파일명)를 넘긴다.
# 세션 ID를 지정해 정확히 그 대화 복원
claude --resume YOUR_SESSION_ID
참고: --resume은 터미널 명령이라 맥(맥미니·맥북)에서만 된다. 아이폰·아이패드에는 터미널이 없어 이 방식은 못 쓴다. 그래서 모바일에서의 연속성은 3-1처럼 앱을 상시 켜두는 것에 의존하고, 재부팅 뒤 모바일에서는 새 세션으로 시작하게 된다.
3-4. 기기 무관 진짜 안전장치
대화 자체보다 확실한 건 작업 결과를 영속 저장소에 남기는 것이다. 그래야 어느 기기에서 새 세션을 열어도 맥락이 곧바로 복구된다.
git commit— 코드와 이력CLAUDE.md— 프로젝트 지침- 메모리 파일 — 반복해서 참조할 결정·구조
4. 상황별로 어떤 방법을 쓰면 좋을까
먼저 예전 방식과 지금 방식이 어떻게 대응되는지 정리한다.
| 예전에 손으로 짠 것 | 지금 대체하는 것 | 추가 작업 |
|---|---|---|
| claude rc (원격 엔드포인트) | 데스크톱 앱 자체 | 없음 |
| tmux (터미널 닫혀도 유지) | GUI 백그라운드 앱 | 없음 |
| LaunchAgent (부팅 자동 기동) | 로그인 항목 | 항목 추가 1회 |
| caffeinate (수면 방지) | pmset 시스템 설정 | 값 확인 1회 |
기기별로 "이어서 작업"하는 방법은 이렇게 갈린다.
| 기기 | 이어가는 방법 | 재부팅·앱종료 후 |
|---|---|---|
| 맥미니·맥북 | 앱에서 이어서, 또는 터미널 claude --continue | --continue / --resume로 복원 가능 |
| 아이패드 | 앱 Code 탭에서 세션 선택 | 새 세션 시작 (터미널 없음) |
| 아이폰 | 앱 Code 탭에서 세션 선택 | 새 세션 시작 (터미널 없음) |
한 가지 솔직한 한계도 짚어둔다. 로그인 항목 방식은 앱이 크래시로 죽으면 자동으로 다시 띄워주지 않는다. macOS가 GUI 앱을 크래시 후 자동 재실행하진 않기 때문이다. LaunchAgent에 KeepAlive를 걸면 이 자동 재시작 하나는 얻을 수 있는데, 24시간 안정적으로 켜두는 맥에서는 거의 문제가 안 돼서 나는 그 복잡함을 다시 들이지 않았다.
5. 마무리
- 맥에서 할 일은 두 가지뿐이다: Claude 앱을 로그인 항목에 넣고, pmset으로 맥이 자지 않게 한다. tmux·SSH·claude rc는 필요 없다.
- 아이폰·아이패드는 앱 Code 탭에서 맥의 세션을 그대로 이어 쓰고, 맥에서는
claude --continue로 끊긴 대화까지 되살릴 수 있다. - 세션은 앱이 살아있는 동안 유지되므로, 진짜 연속성은 git·CLAUDE.md·메모리에 결과를 남겨두는 것으로 완성된다.
다음 글에서는 이렇게 상시 구동하는 맥에서 Claude Code에 나만의 스킬(Skill)을 붙여 반복 작업을 자동화하는 방법을 다룬다.
그 외 추가로 궁금했던 점
Q. 아이폰에서도 claude --resume으로 이어서 할 수 있나?
못 한다. --resume은 터미널 명령이라 맥에서만 된다. 아이폰·아이패드는 앱을 상시 켜두는 방식으로 세션을 이어간다.
Q. 최근 항목의 옛 세션이 "원격 환경 사용 불가"로 뜨는데 고장인가?
아니다. 그 세션이 붙어 있던 런타임이 끝났다는 뜻이다. 대화 기록은 ~/.claude/projects/에 남아 있고, 맥에서 claude --resume으로 되살릴 수 있다.
Q. 맥을 재부팅하면 세팅이 다 날아가나?
아니다. 앱은 로그인 항목으로 자동 실행되고 파일·코드·git은 디스크에 그대로 있다. 다만 재부팅 전에 돌던 그 세션의 런타임은 끝나므로, 모바일에서는 새 세션을 열어 이어가면 된다.
'IT > AI 자동화' 카테고리의 다른 글
| Vultr 가상서버에 n8n 설치하기 : Docker·Cloudflare로 HTTPS://내도메인 24시간 서버 구축! 맥미니 비용의 30%, 프로모션 코드 혜택까지 정리 (0) | 2026.06.08 |
|---|---|
| 헤르메스(hermes agent) AI Agent 웹 대시보드(UI) 활성화 방법 (0) | 2026.06.06 |
| 헤르메스(hermes agent) AI Agent 웹 검색 기능 활성화 하는 방법(Web search) (0) | 2026.06.03 |
| 헤르메스(hermes agent) AI Agent 변경 방법(클로드에서 재미나이로 변경) (0) | 2026.05.31 |
| 헤르메스(hermes agent) 도커 설치 방법! 2. 도커컴포즈 작성 및 실행 (feat. 맥미니 + 클로드) (0) | 2026.05.31 |