개발자 도구EN

폰에서 Claude Code 쓰기 — 세 가지 접근과, 진짜 되는 방법

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

폰에서 Claude Code 쓰기 — 세 가지 접근과, 진짜 되는 방법

퇴근길 지하철, 두 정거장 사이. 오후 내내 안 잡히던 버그의 해결책이 갑자기 떠오릅니다. 폰을 꺼냅니다. 이제 뭘 할 수 있을까요?

2026년 대부분의 개발자에게 선택지는 셋 중 하나이고, 셋 다 어딘가 아쉽습니다.

첫째, SSH로 노트북에 붙습니다. tmux 안의 Claude Code가 아직 살아있길 바라며, 모바일 키보드로 git status를 오타 없이 쳐야 합니다. 둘째, Claude 모바일 앱을 엽니다. 퇴근할 때 터미널을 안 닫았어야 /remote-control이 붙습니다. 셋째, 포기하고 메모를 남깁니다. 내일 데스크의 내가 기억해주길 바라며.

셋 다 우회책이고, 셋 다 같은 잘못된 전제를 공유합니다 — 컴퓨트는 내가 마지막으로 만진 그 기계에서 돌아야 한다는 전제. 이 전제를 내려놓는 순간, 문제 자체의 모양이 바뀝니다.

이 글은 현재의 세 가지 기본 접근이 각각 어디서 무너지는지, 그리고 "잠들지 않는 서버에 에이전트를 올리는" 접근이 무엇을 바꾸는지를 정리합니다. 구체적인 예로 VibeCheck를 들지만, 요점은 특정 제품이 아니라 아키텍처에 있습니다.

접근 1 — tmux + SSH

가장 많이 반사적으로 잡는 답입니다. 추가 비용이 없고, 그럭저럭 됩니다.

bash
# 노트북에서 (퇴근 전에)
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 돕니다. 세 지점(폰·노트북·서버) 어느 것도 다른 것을 필요로 하지 않습니다.

VibeCheck 아키텍처 — 폰·노트북 브라우저가 WebSocket 허브에 붙고, 서버의 vibecheck-agent가 허브로 outbound 연결하는 구조

결정적인 디테일 하나 — 세션은 `~/.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-controlVibeCheck
컴퓨트 위치노트북노트북서버 (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 (가장 빠름)

bash
# vibecheck.sotaaz.com 로그인 → API 키 발급 후
curl -sL https://vibecheck.sotaaz.com/install/YOUR_API_KEY | bash

이후 아무 브라우저에서 vibecheck.sotaaz.com/chat을 엽니다.

Self-hosted (무료, 오픈소스)

bash
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 세션을 잃는 데 지쳐서 만들었습니다.*

더 많은 콘텐츠를 받아보세요

SNS에서 새로운 글과 튜토리얼 소식을 가장 먼저 받아보세요

이메일로 받아보기

관련 포스트