폰에서 Claude Code 쓰기 — 세 가지 접근과, 진짜 되는 방법
폰으로 Claude Code에 붙는 세 가지 방법 — tmux + SSH, /remote-control, 그리고 서버 기반 에이전트. 진짜 해결책은 "모바일 지원"이 아니라 컴퓨트를 기기에서 분리하는 것입니다.

퇴근길 지하철, 두 정거장 사이. 오후 내내 안 잡히던 버그의 해결책이 갑자기 떠오릅니다. 폰을 꺼냅니다. 이제 뭘 할 수 있을까요?
2026년 대부분의 개발자에게 선택지는 셋 중 하나이고, 셋 다 어딘가 아쉽습니다.
첫째, SSH로 노트북에 붙습니다. tmux 안의 Claude Code가 아직 살아있길 바라며, 모바일 키보드로 git status를 오타 없이 쳐야 합니다. 둘째, Claude 모바일 앱을 엽니다. 퇴근할 때 터미널을 안 닫았어야 /remote-control이 붙습니다. 셋째, 포기하고 메모를 남깁니다. 내일 데스크의 내가 기억해주길 바라며.
셋 다 우회책이고, 셋 다 같은 잘못된 전제를 공유합니다 — 컴퓨트는 내가 마지막으로 만진 그 기계에서 돌아야 한다는 전제. 이 전제를 내려놓는 순간, 문제 자체의 모양이 바뀝니다.
이 글은 현재의 세 가지 기본 접근이 각각 어디서 무너지는지, 그리고 "잠들지 않는 서버에 에이전트를 올리는" 접근이 무엇을 바꾸는지를 정리합니다. 구체적인 예로 VibeCheck를 들지만, 요점은 특정 제품이 아니라 아키텍처에 있습니다.
접근 1 — tmux + SSH
가장 많이 반사적으로 잡는 답입니다. 추가 비용이 없고, 그럭저럭 됩니다.
# 노트북에서 (퇴근 전에)
tmux new -s claude
claude
# 폰에서 (iOS는 Blink Shell, Android는 Termux 등)
ssh laptop
tmux attach -t claude노트북이 켜져 있고, 슬립에 들어가지 않았고, 네트워크가 유지되고, 하루 종일 터미널 창을 닫은 적 없다면 됩니다. 폰에서 Claude Code를 쓸 수 있습니다.
문제는 이 전제가 자주 깨진다는 데 있습니다.
- 노트북이 슬립하거나 재부팅되면 tmux 세션이 통째로 사라집니다. 대화 히스토리
.jsonl은 디스크에 남지만 프로세스는 죽어서, 다시 붙은 뒤claude --resume으로 아까 세션을 찾아 헤매야 합니다. - 신호가 끊기면 SSH가 죽습니다. 재접속해도 아까 돌리던 명령이 끝났는지, 반쯤 됐는지, 아직 도는지 알 수 없습니다. 스트림에 다시 붙는 게 아니라 tmux 화면을 위로 스크롤해 읽는 것뿐입니다.
- 이미지를 붙일 수 없습니다. 에러 스크린샷, 목업, 화이트보드 사진 — scp로 옮기며 모바일 키보드로 경로를 치거나, 클라우드 드라이브에 먼저 올려야 합니다.
- 프로젝트 전환이 번거롭습니다. 세션은
claude를 실행한 디렉토리에 묶여 있어서, 바꾸려면 세션을 죽이고cd후 다시 실행해야 합니다. 컨텍스트는 그때마다 손실됩니다. - 모바일 터미널 UX 자체가 나쁩니다. 키보드가 화면 절반을 먹고, 방향키는 롱프레스 세 단계 깊이에 숨어 있으며, 복붙이 자주 깨지고, 긴 응답을 읽는 스와이프가 브라우저 뒤로가기 제스처와 충돌합니다.
하나하나는 치명적이지 않지만, 합쳐지면 tmux + SSH는 첫 선택이 아니라 최후의 비상계단이 됩니다.
접근 2 — 공식 Remote Control
Anthropic이 Claude Code에 `/remote-control`을 넣었습니다. 터미널에서 명령어를 입력하면 URL과 QR 코드가 나오고, 폰으로 스캔하면 브라우저(claude.ai/code)에서 현재 세션이 미러링됩니다. 모바일 웹에 맞춘 레이아웃, 스트리밍 응답, 툴 호출 시각화까지 — UI 완성도가 높습니다.
모바일 UX 문제는 여기서 완전히 해결됩니다. 다만 더 미묘한 문제를 그대로 물려받습니다.
Remote Control은 미러이지 호스트가 아닙니다. Claude Code 프로세스는 여전히 노트북에서 돕니다. 따라서 노트북은 켜져 있어야 하고(슬립하면 멈춤), 종료되면 안 되며(터미널 창을 닫으면 프로세스와 함께 사라짐), 네트워크가 살아 있어야 폰이 무언가를 볼 수 있습니다.
실무적 제약도 있습니다. 동시에 한 세션만 미러링되므로, 다른 프로젝트에서 돌리는 스크립트를 확인하려면 노트북에서 물리적으로 세션을 바꿔야 합니다 — 그러면 폰을 쓰는 의미가 사라집니다. 자동 복구가 없어서, 연결이 끊기면 노트북에 다시 붙어 /remote-control을 재발급받아야 합니다. 그리고 claude.ai 제품 표면이라 현재는 Pro/Max 구독이 필요합니다 — API 종량제로는 쓸 수 없습니다.
이미 Claude Code에 돈을 내고 있고, 단일 세션 워크플로우이며, 노트북을 늘 켜두는 상황이라면 좋은 도구입니다. tmux 대비 명백한 개선이고요. 하지만 근본 아키텍처는 같습니다 — 컴퓨트는 두고 온 기기에 살고, 모바일 경험은 그 기기가 잠들지 않는 것에 달려 있습니다.
접근 3 — 모바일 네이티브 앱
Happy Coder 같은 앱이 세 번째 카테고리입니다. 폰에 설치해 원격 Claude Code 세션을 관리하고, 키보드 문제를 확실히 해결합니다. 진짜 모바일 앱이라 네이티브 제스처, 붙여넣기, 이미지 피커를 그대로 씁니다.
트레이드오프는 컴퓨트를 여전히 사용자의 PC(또는 폰 안의 모바일 SDK — 이건 또 다른 제약이 붙습니다)로 미룬다는 점입니다. 접근 가능한 코드에 대해서는 훌륭한 경험을 주지만, 세션 지속·프로젝트 브라우징·기기 간 연속성은 앱의 아키텍처 선택에 따라 갈립니다.
패턴은 앞의 둘과 같습니다 — 인터페이스는 고치되, 컴퓨트 위치는 건드리지 않는다.
문제는 모바일 UX가 아니라 컴퓨트의 위치다
세 접근 모두 같은 전제를 받아들입니다 — 에이전트는 내가 마지막으로 만진 기기에서 돈다. 그 기기가 노트북이든 폰이든 임대한 앱 런타임이든, 사용 불가한 순간(슬립·종료·오프라인·가방 속)에 코딩이 멈춥니다.
모바일 UX 문제는 증상일 뿐입니다. 진짜 문제는 "폰에서 코딩하기"라는 프레임 자체입니다. 사용자가 실제로 원하는 것은 다음 세 가지입니다.
- 내가 없어도 도는 컴퓨트. 지하철에서 떠오른 fix를 엄지로 던지고 앱을 닫아도, 에이전트가 알아서 실행합니다 — 신호 여부와 무관하게.
- 나를 따라오는 대화. 지하철에서든 데스크에서든 밤에 노트북을 열든 같은 세션. 복붙 없이, 상황을 다시 설명하지 않고.
- 실제로 일할 수 있는 표면적. 여러 프로젝트, 여러 세션, 브라우징, 자유로운 전환 — 데스크에서 하던 일을 더 작은 화면에서.
이렇게 프레임을 다시 잡으면 답은 자명합니다. 에이전트를 서버에 올리고, 그 앞에 괜찮은 웹 UI를 붙이고, 어느 기기에서든 그리로 접속한다.
VibeCheck의 접근
VibeCheck이 하는 게 정확히 이겁니다. 구성은 세 층입니다.
에이전트 층에서는 vibecheck-agent가 서버(VPS, 홈 NUC, 무엇이든)에서 systemd 서비스로 돕니다. Claude Agent SDK로 Claude Code를 헤드리스 구동하며, 재부팅에도 살아남습니다.
WebSocket 허브 층에는 에이전트가 밖에서 붙고 브라우저들이 안에서 붙습니다. 서버에 인바운드 포트를 열 필요가 없어, 방화벽·NAT 뒤에서도 문제없습니다.
웹 UI 층은 모바일 우선 브라우저 인터페이스입니다. 스트리밍 응답, 툴 시각화, 이미지 드래그앤드롭, 프로젝트 브라우저를 제공하며, 폰이든 노트북이든 같은 URL로 접속합니다.
즉 폰과 노트북은 각각 브라우저로 중앙 허브에 붙고, 실제 Claude Code 프로세스는 별도 서버에서 24/7 돕니다. 세 지점(폰·노트북·서버) 어느 것도 다른 것을 필요로 하지 않습니다.

결정적인 디테일 하나 — 세션은 `~/.claude/projects/` 아래 `.jsonl`로 저장되며, 이는 Claude Code CLI가 쓰는 것과 같은 포맷입니다. 그래서 웹에서 시작한 세션이 나중에 SSH로 붙은 로컬 claude CLI에 그대로 보이고, CLI에서 시작한 세션도 웹 브라우저에 뜹니다. "모든 프로젝트 브라우징" UI는 에이전트가 접근 가능한 디렉토리 전체를 훑어 모든 세션을 노출합니다. 웹용 히스토리를 따로 관리하는 게 아니라, 기존 Claude Code 히스토리에 두 번째 인터페이스를 붙이는 방식입니다.
tmux의 실패 지점과 대응
| tmux + SSH의 실패 | VibeCheck의 대응 |
|---|---|
| 노트북 재부팅으로 세션 죽음 | systemd 자동 재시작. Watchdog이 재접속 실패 5분 후 종료, cron 헬스체크가 되살림. |
| 명령 도중 신호 끊김 | 에이전트는 계속 돎. 재접속하면 현재 상태를 받아 "지금 어디까지 왔는지"부터 스트림. |
| 이미지 첨부 불가 | 폰 갤러리에서 드래그앤드롭, 자동 업로드. |
| 프로젝트 전환 불가 | 웹 UI 프로젝트 브라우저에서 클릭 후 전환. |
| 모바일 터미널 UX 나쁨 | 그냥 웹사이트. 진짜 키보드, 진짜 붙여넣기, 진짜 터치 스크롤. |
Remote Control과 겹치는 부분, 더하는 부분
둘 다 모바일 우선 웹 UI를 제공하고, 응답을 스트리밍하고, 툴 호출을 시각화합니다. VibeCheck이 더하는 것은 네 가지입니다. 노트북이 닫혀 있어도 되고(세션은 서버에 삽니다), 현재 세션 하나가 아니라 모든 프로젝트·모든 세션에 접근하며, 크래시·네트워크 끊김·배포 중에도 watchdog + cron이 자동 복구하고, Pro/Max 없이 API 키 종량제로 지불할 수 있습니다.
Remote Control이 여전히 나은 부분
정직하게 짚자면 몇 가지가 있습니다. 셋업이 없습니다 — /remote-control은 이미 도는 세션에서 명령 하나면 되지만, VibeCheck은 서버에 에이전트를 설치하고 systemd를 배선하고 API 키를 연결해야 합니다(셸에 익숙한 사람 기준 약 15분). 네이티브 완성도도 앞섭니다 — claude.ai/code는 성숙한 Anthropic 제품이고, VibeCheck의 self-hosted UI는 견고한 오픈소스 페이지지만 앱스토어급은 아닙니다. 그리고 이미 Claude Max를 쓰고 있다면 Remote Control은 번들이라 추가 비용 계산이 필요 없습니다.
비교표
| tmux + SSH | /remote-control | VibeCheck | |
|---|---|---|---|
| 컴퓨트 위치 | 노트북 | 노트북 | 서버 (24/7) |
| PC 꺼져도 됨? | ❌ | ❌ | ✅ |
| 기기 간 세션 | 같은 tmux, 다른 SSH | 현재 세션 미러 | 완전 동기, 모든 프로젝트 |
| 세션 지속 | 노트북 재부팅 전까지 | 터미널 닫기 전까지 | 지울 때까지 |
| 끊긴 후 재접속 | 수동 tmux attach | 수동 재발급 | 자동 (클라이언트 + watchdog) |
| 이미지 업로드 | scp / 클라우드 드라이브 | 됨 | 드래그앤드롭 |
| 여러 프로젝트 | 세션당 하나 | 현재 세션만 | 전체 브라우징 |
| 모바일 UX | 터미널 (나쁨) | 웹 (좋음) | 웹 (좋음) |
| 요금 체계 | 원래 내던 대로 | Pro/Max 필수 | API 키 or self-hosted |
| 셋업 | 없음 | 없음 | 약 15분 |
상황별 선택
승자를 선언하는 대신, 접근과 상황을 맞춰봅니다.
tmux + SSH — 홈 LAN이고 노트북이 늘 켜져 있는 경우, 혼자 쓰고 세션이 짧은 경우, 새 도구를 더 신뢰하고 싶지 않을 때.
`/remote-control` — 이미 Pro/Max를 쓰며 하루 종일 Claude Code 안에 있는 경우, 모바일이 가끔 확인하는 기회적 용도인 경우, 셋업 0을 무엇보다 우선할 때.
VibeCheck (또는 유사 도구) — 모바일이 fallback이 아니라 first-class 접근 표면일 때, 여러 프로젝트를 모두 접근 가능하게 하고 싶을 때, 노트북 셧다운·배포·야간 무인 작업에도 에이전트가 살아있어야 할 때, API 종량제를 유지하고 싶을 때, 컴퓨트 박스와 접속 기기를 완전히 분리하고 싶을 때.
시작하기
Cloud (가장 빠름)
# vibecheck.sotaaz.com 로그인 → API 키 발급 후
curl -sL https://vibecheck.sotaaz.com/install/YOUR_API_KEY | bash이후 아무 브라우저에서 vibecheck.sotaaz.com/chat을 엽니다.
Self-hosted (무료, 오픈소스)
git clone https://github.com/NestozAI/VibeCheck
cd VibeCheck/self-hosted
./setup.sh
# http://localhost:8501 열기Self-hosted 버전은 전적으로 사용자 인프라에서 돕니다. Slack 연동, TLS, 리버스 프록시 뒤 배포는 self-hosted 가이드에 있습니다.
마무리 — 진짜 이동은 어디로 향하는가
"모바일"이라는 단어에 너무 많은 무게가 실려 있었습니다. 진짜 이동은 데스크톱에서 폰으로가 아니라, 기기 종속 컴퓨트에서 위치 독립 컴퓨트로입니다. 에이전트는 안정적인 어딘가에 살고, 사용자는 그 순간 가장 가까운 화면으로 방문합니다.
같은 이동이 2000년대 중반 이메일(POP3 로컬 → IMAP 서버 → 웹 UI)에서, 2010년대 소스 코드(로컬 리포 → 호스팅 git → 폰에서 PR)에서 일어났고, 지금 에디터(로컬 IDE → 리모트 우선 Cursor/Codespaces)에서 일어나고 있습니다. 방향은 늘 같습니다 — 컴퓨트는 엔드포인트를 떠나고, 인터페이스는 여러 개로 늘어난다.
도입부의 지하철 시나리오는 특별할 필요가 없습니다. 폰에서 fix를 던지고 앱을 닫으면 그게 실행 중이고, 그날 밤 노트북을 열면 diff가 이미 준비돼 있어야 정상입니다.
노트북은 잠들어도 됩니다. 코드는 그럴 필요가 없습니다.
*VibeCheck는 오픈소스(MIT)이며, 호스팅 서비스는 vibecheck.sotaaz.com에서 쓸 수 있습니다. tmux 세션을 잃는 데 지쳐서 만들었습니다.*
이메일로 받아보기
관련 포스트

나만의 LLM Knowledge Base 구축하기 — Karpathy 스타일 지식 시스템
Obsidian + Claude Code로 영구적인 개인 지식 체계를 만드는 완전 가이드. 위키 + 메모리 두 축의 지식 시스템.

Karpathy의 CLAUDE.md가 48K 스타를 받은 이유 — 그리고 나만의 CLAUDE.md 작성법
마크다운 파일 하나로 AI 코딩 정확도를 65%에서 94%로. Karpathy의 4가지 규칙과 실전 작성법을 분석합니다.

AI는 왜 어제 한 일을 잊는가 — 기억력 문제를 해결하는 오픈소스 3종
karpathy-skills, claude-mem, Cognee — AI 기억력 문제를 해결하는 3가지 접근법을 비교 분석합니다.