Claude CodeCodexSSHTailscale모바일 개발

클로드 코드 핸드폰 원격 제어 — 폰을 메인으로, tmux 없이, 모델을 갈아타도 같은 조작감

(수정: 2026년 10월 19일)

결론부터

  • 공식 Remote Control(Claude Code)과 Codex 모바일은 설정이 간단하지만, PC 쪽 세션이 주인공이고 핸드폰은 그걸 들여다보고 승인하는 보조 화면입니다. 이 글은 핸드폰을 메인 조작 기기로 쓰는 구성을 다룹니다.
  • SSH Term의 유지 셸을 쓰면 tmux 없이도 앱이나 탭을 닫은 뒤 셸과 에이전트가 호스트에서 계속 돕니다.
  • Tailscale을 쓰면 포트 개방·DDNS 없이 붙습니다. macOS라면 연결 준비에 터미널 명령이 거의 필요 없습니다.
  • Claude냐 GPT냐는 한 달이면 바뀝니다. 터미널 하나로 묶어 두면 모델·하네스를 갈아타도 같은 조작감으로 계속 쓸 수 있습니다.
  • 한국어 사용자는 한글 입력을 따로 챙겨야 합니다. 입력창에서 완성한 뒤 터미널로 보내는 방식이 기본입니다.

PC 앞에 앉을 수 있는 시간은 생각보다 짧습니다. 출퇴근길, 점심시간, 아이를 재운 뒤. 그런데 Claude Code에 맡기고 싶은 일은 그 시간에도 계속 떠오릅니다. 저는 바로 이 이유로, 밖에서 핸드폰으로 Claude Code를 다루기 위해 모바일 SSH 앱 SSH Term을 직접 만들었습니다(개발자 본인입니다). 이 글은 그 과정에서 정리한 구성이고, 다른 도구와 무엇이 다른지도 솔직하게 적었습니다.

SSH Term의 에이전트 탭. 왼쪽에 mac-studio·build-linux 연결 목록, 오른쪽에 호스트별 agent 카드가 있고, mac-studio 카드에는 '승인 필요 1'·'1개 작업 중', 그 아래 web-app '결제 API 테스트 추가 · 승인 필요 2분'과 mobile '로그인 화면 수정 · 작업 중 20초'가 표시되어 있다
제가 만드는 SSH Term의 에이전트 탭(스토어용 데모 화면). 어느 호스트의 어느 에이전트가 승인을 기다리는지 한 화면에서 보입니다

전체 구조는 이렇습니다.

핸드폰 (SSH Term)
   │  Tailscale (포트를 열지 않고 집 PC에 연결)
   ▼
집 PC / 서버
   └─ 유지 셸 (앱이 넣는 작은 보조 프로그램이 셸을 붙잡아 둠)
        ├─ 탭 1: Claude Code  (worktree 작업: feature-a)
        ├─ 탭 2: Codex        (worktree 작업: fix-b)
        └─ 탭 3: 다른 CLI 에이전트 / 일반 셸

핸드폰에서 연결하는 방법들

방법대상필요한 것특징
Claude Code Remote ControlClaude CodePro·Max·Team·Enterprise 구독(API 키 불가), Claude 앱 또는 claude.ai/codeQR 코드로 바로 연결. PC에서 claude가 계속 돌고 있어야 함
Codex 원격 연결(모바일)CodexMac·Windows에서 실행 중인 ChatGPT 데스크톱 앱, ChatGPT 모바일 앱데스크톱 앱에서 QR로 페어링. 작업 시작·승인·diff 확인·알림
SSH(+ SSH Term)터미널에서 도는 CLI 전반PC의 SSH 서버, Tailscale, 핸드폰 SSH 앱호스트의 셸을 그대로 조작. 구독·벤더와 무관

공식 기능은 편합니다. 다만 Remote Control은 Anthropic 서비스를 거쳐 대화를 중계하고, Codex 모바일은 OpenAI의 릴레이를 거칩니다. 둘 다 PC 쪽에서 claude 프로세스나 ChatGPT 데스크톱 앱이 계속 돌아야 하고, 각각 자기 회사 에이전트 전용입니다. SSH 방식은 내 네트워크(SSH / Tailscale) 안에서 끝납니다.

ADE(에이전트 개발 환경)와 무엇이 다른가 — 네 가지 축

요즘 여러 코딩 에이전트를 나란히 돌리는 도구를 ADE(Agentic/Agent Development Environment) 라고 부르기 시작했습니다. Warp, Orca, ade-app.dev 모두 모바일 기능을 갖고 있지만, 공식 문서를 읽어 보면 데스크톱이 중심이고 핸드폰은 보조라는 설계입니다(Orca는 스스로 “read-mostly view”라고 씁니다). 아래 표는 2026년 10월 19일에 각 공식 문서를 확인해 정리한 것입니다.

SSH TermClaude Code Remote ControlCodex(모바일)OrcaADE (ade-app.dev)Warp Remote Control
핸드폰이 메인 기기인가메인 조작 기기: SSH 터미널, 한글 입력 모드, 파일 탐색기, 작업 만들기, 에이전트 실행PC 세션을 들여다보는 창. 새 세션도 만들 수 있음작업 시작·승인·diff 확인보조 앱(공식 표현 “read-mostly”)데스크톱을 조작하는 클라이언트(iOS)공유 링크로 보고 지시
멀티플렉서(tmux 등) 필요 여부불필요. 앱이 넣는 작은 보조 프로그램이 셸을 유지불필요. 대신 PC에서 claude를 계속 실행불필요. 대신 PC에서 ChatGPT 데스크톱 앱을 계속 실행데스크톱 Orca 또는 orca serve상주 서비스(brain)Warp 데스크톱에서 실행 중일 때만
연결 준비Tailscale + OS의 SSH 서버 켜기. 공개 키 등록은 직접/login, /rc, QR데스크톱 앱에서 설정, QR, 같은 계정페어링 코드(Relay 또는 LAN)페어링. LAN 또는 Tailscale원클릭 공개
통신 경로내 네트워크(SSH / Tailscale). 알림만 ntfy 등을 경유Anthropic 경유OpenAI 릴레이Orca Relay 또는 LANLAN / tailnet 또는 계정 디렉터리Warp 클라우드
지원 하네스·벤더 종속상태 표시·채팅·알림은 claude·codex·omp. 그 밖의 CLI도 셸로는 사용 가능(상태 표시 등은 없음)Claude Code 전용Codex 전용모든 CLI. 프리셋이 많음(SSH Term보다 넓음)6종Claude Code·Codex·OpenCode 등
가격한 번 구매Pro 이상(API 키 불가)Codex를 쓸 수 있는 ChatGPT 플랜무료·오픈 소스무료(공식 사이트 표기)공식 사이트 참조

SSH Term이 부족한 점도 적어 둡니다. 채팅 화면은 아직 베타이고, 상태 목록·알림을 인식하는 하네스는 3종뿐입니다(이 점은 Orca가 훨씬 넓습니다). 알림을 받으려면 ntfy 앱(또는 Slack·Discord·Telegram)이 따로 필요하고, Tailscale도 별도 앱이며 공개 키 등록은 직접 해야 합니다. GUI로 diff를 넓게 보고 싶거나 데스크톱 IDE 기능이 필요하다면 제품형 ADE가 맞습니다.

반대로 “핸드폰을 메인으로”, “tmux 없이”, “연결 준비는 최소로”, “특정 벤더에 묶이지 않게”를 원한다면 이 글의 구성이 맞습니다. 하나씩 보겠습니다.

1. 핸드폰을 메인 조작 기기로

공식 Remote Control은 문서에 “웹·모바일 화면은 로컬 세션을 들여다보는 창”이라고 적혀 있습니다. Codex 모바일, Orca, ade-app.dev, Warp도 PC 쪽 데스크톱 앱이나 그 상주 프로세스가 전제입니다. 핸드폰에서 할 수 있는 일이 적다는 뜻은 아닙니다(Codex는 핸드폰에서 작업을 시작할 수 있고, Orca는 에이전트를 실행할 수 있습니다). 다만 주인공은 PC입니다.

SSH Term은 SSH로 호스트의 셸 자체를 조작합니다. 그래서 PC 쪽에 전용 데스크톱 앱을 띄워 둘 필요가 없고, 처음 설정만 끝내면 이런 일이 핸드폰에서 끝납니다.

  • 접속, 에이전트 실행, 대화 목록에서 이어서 하기
  • Issue / PR을 골라 이름 붙은 worktree 작업 만들기
  • 승인·질문에 답하기, 알림 받기
  • SFTP 파일 탐색기로 파일 보기(문법 강조 미리보기, 태블릿에서는 2분할)
  • 키 툴바로 Ctrl+C·Tab·Esc·방향키·F1~F12 보내기

PC(호스트)의 전원은 켜 둬야 합니다. 또 PC 터미널에서 직접 띄운 에이전트까지 핸드폰에 보이게 하려면, 앱의 “이 호스트 준비”로 셸 설정에 래퍼를, 에이전트 설정에 훅을 추가한 뒤 PC에서 터미널을 새로 열어야 합니다(바꾸는 파일은 적용 전에 화면에서 확인할 수 있습니다).

2. Tailscale로 연결하기 — 명령어는 거의 필요 없다

밖에서 접속하려면 SSH 포트를 인터넷에 여는 대신 Tailscale을 씁니다. 포트 개방·DDNS·고정 IP가 필요 없고, LTE·5G에서도 집 Wi-Fi와 똑같이 붙습니다. 최소 절차는 이렇습니다.

  1. Tailscale 계정을 만듭니다. PC와 핸드폰은 같은 로그인 방식(Google 등)으로 로그인해야 합니다.
  2. PC에서 SSH 서버를 켭니다.
    • macOS: 시스템 설정 → 일반 → 공유 → 원격 로그인을 켭니다. 명령어는 필요 없습니다.
    • Windows: 설정의 선택적 기능에서 OpenSSH 서버를 추가하고, sshd 서비스를 시작해 자동 시작으로 둡니다(PowerShell로 해도 됩니다).
    • Linux (Ubuntu 등): sudo apt install openssh-server 후 sudo systemctl enable --now ssh.
  3. PC에 Tailscale을 설치하고 로그인합니다.
  4. (선택) 관리 화면에서 MagicDNS를 켜면 100.x.x.x 대신 머신 이름으로 접속할 수 있습니다.
  5. 핸드폰에 Tailscale 앱을 설치하고 로그인해 VPN을 허용합니다.
  6. SSH Term에 호스트 이름(머신 이름 또는 100.x.x.x)과 사용자 이름을 넣습니다.
  7. 앱에서 Ed25519 키를 만들고 공개 키를 복사해 PC의 ~/.ssh/authorized_keys에 등록합니다. 그다음 비밀번호 로그인을 끄는 것을 권합니다.

tailscale up --ssh 같은 명령은 필요 없습니다. Tailscale SSH를 쓰고 싶다면 SSH Term은 그것도 지원합니다(check 모드의 인증 URL을 연결 중에 보여 줍니다). Tailscale은 SSH Term에 내장된 것이 아니라 별도 앱이고, 호스트를 자동으로 찾아 주지도 않습니다. 그래도 tmux 설정이나 포트 포워딩 명령까지 생각하면, 연결 준비의 손은 크게 줄어듭니다.

3. tmux 없이 병렬로 돌리기 — 유지 셸 × 이름 붙은 worktree 작업

모바일 연결은 반드시 끊깁니다. 지하철이 터널에 들어가거나, 앱을 백그라운드로 보내거나, 화면이 꺼질 때입니다. 중요한 것은 끊겨도 PC 쪽의 에이전트가 살아 있느냐입니다.

SSH Term에서 유지 셸을 켠 탭은 셸을 SSH 연결에 직접 붙이지 않고, 호스트의 작은 보조 프로그램 안에서 돌립니다. 세션마다 유지 역할의 프로세스가 화면과 최근 출력을 디스크(~/.ssh-term/agent/)에 남겨 두므로, 연결이 끊기거나 폰이 잠들거나 앱을 닫아도 셸과 에이전트는 계속 돕니다. 다시 연결하면 놓친 출력만 받아 오거나 화면을 다시 그립니다.

  • tmux·screen을 직접 설치하고 단축키를 외울 필요가 없습니다.
  • 보조 프로그램은 앱이 자동으로 설치하고, 앱에 고정된 sha256으로 검증합니다. 네트워크 포트는 열지 않고, 앱 메뉴에서 삭제할 수 있습니다.
  • 호스트 OS는 Linux / macOS / Windows(기본 셸이 cmd 또는 PowerShell인 경우).
SSH Term에서 dev-server에 접속해 claude를 실행 중인 화면. '지하철 터널 · 연결 끊김(셸은 호스트에서 계속 실행)' 표시 뒤에 '다시 연결됨 · 놓친 출력 표시'가 나오고, 끊긴 동안 진행된 go test 통과와 git commit 출력이 이어진다
SSH Term의 서버 쪽 세션 유지(tmux 없이). 끊긴 동안의 출력은 다시 연결하면 이어서 보입니다(스토어 이미지)

여러 에이전트를 동시에 돌릴 때 핵심은 작업 폴더를 나누는 것입니다. 같은 폴더에서 두 에이전트가 같은 파일을 고치면 서로의 변경을 덮어씁니다. SSH Term에서는 Issue나 PR을 고르면 worktree와 브랜치를 만들어 이름 붙은 작업으로 등록하고, 그 작업에서 바로 에이전트를 실행할 수 있습니다. 폴더를 골라 시작해도 됩니다. 탭을 닫아 둔 유지 셸도 목록에서 다시 열 수 있습니다.

SSH Term에서 열린 탭 5개를 목록으로 띄운 화면. 맨 위에 '승인 필요' 상태의 mac-studio '로그인 화면 수정', 그 아래 '작업 중'인 '결제 API 테스트 추가'와 build-linux '의존성 업데이트', 마지막에 셸 탭 2개가 있고, 오른쪽에는 결제 API 테스트를 작성 중인 Claude Code 화면이 크게 열려 있다
병렬로 돌리면 에이전트 수만큼 창(탭)이 늘어납니다. SSH Term은 승인을 기다리는 탭을 목록 맨 위에 올립니다(스토어용 데모 화면)

참고로 공식 Remote Control도 서버 모드(claude remote-control)에 --spawn worktree를 주면 세션마다 git worktree를 따로 만들고, --capacity로 동시 세션 수를 정할 수 있습니다(공식 문서). 다만 PC에서 이 프로세스가 계속 돌아야 하고, 서버 모드는 약 10분 동안 네트워크에 닿지 못하면 종료됩니다.

다른 SSH 앱을 쓴다면 — tmux로 같은 일 하기

Termius 같은 다른 SSH 클라이언트를 쓴다면 tmux가 유지 역할을 대신합니다. SSH Term에서도 원하면 열기 방식을 tmux·zellij·screen 중에서 고를 수 있습니다.

cd ~/projects/my-app

# 작업마다 worktree(별도 작업 폴더 + 브랜치)를 만든다
git worktree add ../my-app-feature-a -b feature-a
git worktree add ../my-app-fix-b -b fix-b

# tmux 세션 하나에 창을 나눠 에이전트를 하나씩
tmux new -s agents -n feature-a -c ../my-app-feature-a
# (세션 안에서) claude
# Ctrl-b c 로 새 창 → cd ../my-app-fix-b && codex

핸드폰에서는 tmux attach -t agents로 들어간 뒤 Ctrl-b n(다음 창), Ctrl-b w(창 목록)로 오갑니다. 접속 후 자동 실행 명령에 tmux attach -t agents || tmux new -s agents를 넣어 두면 편합니다. 모바일 SSH 앱을 고르는 기준은 안드로이드 SSH 앱 비교에 정리해 두었습니다.

4. 모델·하네스를 갈아타도 같은 조작감

Claude가 좋은지 GPT가 좋은지, 아니면 다른 모델이 앞서는지는 한 달이면 바뀝니다. 새 모델이 나올 때마다 에이전트도 Claude Code, Codex, 그 밖의 CLI로 옮겨 다니게 됩니다. 그런데 Remote Control은 Claude Code 전용이고, Codex 모바일은 Codex 전용입니다. 갈아탈 때마다 핸드폰 쪽 앱과 조작법까지 바뀌는 셈입니다.

SSH Term은 터미널에서 도는 CLI를 하나의 화면으로 묶습니다.

  • 어떤 CLI든 유지 셸, 한글 입력 모드, 파일 탐색기, 키 툴바, 자동 재연결을 같은 조작으로 씁니다.
  • Claude Code·Codex·Oh My Pi(omp) 는 여기에 더해 상태 목록(작업 중 / 입력 대기 / 승인 필요), 채팅 화면(베타), 알림까지 지원합니다. 그 밖의 CLI는 상태 표시·알림이 없는 일반 셸로 씁니다.
  • 모델과 프로바이더는 호스트 설정(API 키, Bedrock 등) 그대로입니다. 대화 기록도 호스트에 있고 제3자 서비스를 거치지 않습니다(알림을 쓰면 ntfy 등을 경유).

그래서 다음 달에 주력 모델이 바뀌어도, 핸드폰에서 하는 일은 그대로입니다. 탭을 열고, 에이전트를 실행하고, 승인하고, 결과를 봅니다.

5. 승인과 알림 — 핸드폰을 계속 보고 있을 필요는 없다

병렬로 돌리면 “어느 탭이 지금 내 승인을 기다리는지”가 가장 큰 문제가 됩니다.

  • SSH Term: 호스트별 카드에 claude·codex·omp의 상태가 나오고, 채팅 화면(베타)에서 승인·선택에 답할 수 있습니다. 승인 대기·입력 대기·완료 알림은 앱을 닫아 둬도 받을 수 있는데, 받으려면 ntfy 앱(또는 Slack·Discord·Telegram)이 필요합니다. 이때 프로젝트 이름과 도구 이름이 ntfy 서버를 거칩니다(직접 운영하는 서버도 지정 가능).
  • Remote Control: /config에서 Push when actions required와 Push when Claude decides를 켜면 Claude 앱으로 푸시가 옵니다. 연결된 터미널에 포커스가 있으면 푸시를 건너뜁니다(공식 문서).
  • Codex 모바일: ChatGPT 앱에서 승인, diff·테스트 결과 확인, 완료 알림을 받을 수 있습니다(공식 문서).
SSH Term에서 터미널 두 개를 나란히 띄운 화면. 왼쪽 Claude Code가 'npm test -- payment' 실행 승인을 묻고(Do you want to proceed?), 세 번째 선택지에 '결제 테스트만 돌리고 결과를 한국어로 정리해 줘'를 입력하고 있다. 오른쪽은 같은 호스트의 API 로그
Claude Code의 실행 승인 프롬프트에 핸드폰에서 답하는 모습. 오른쪽은 같은 호스트의 로그(SSH Term, 스토어용 데모 화면)

지시하는 요령도 있습니다. 한 번에 확인할 수 있는 크기로 나눠 맡기고, “끝나면 npm test를 돌려서 전부 통과하는지 확인해 줘”처럼 확인 조건을 지시에 넣어 두면 알림을 받은 뒤 결과만 보면 됩니다.

6. 한글로 지시하기

한국어 사용자에게만 생기는 벽이 하나 있습니다. 터미널에 한글을 직접 치면 자모가 분리되거나 글자가 사라지는 경우가 많습니다. 한글 조합(미확정 상태)을 터미널이 제대로 다루지 못해서 생기는 문제로, 원인과 앱별 대처법은 따로 정리해 두었습니다.

→ SSH 한글 입력이 깨지는 이유와 해결법

짧게 말하면 입력창에서 문장을 완성한 뒤 터미널로 한 번에 보내면 됩니다. 메모 앱에서 써서 붙여넣어도 되고, 입력창 방식을 내장한 SSH 앱을 써도 됩니다. SSH Term의 입력 모드는 입력창에서 한글을 완성한 뒤 터미널로 한 번에 보내고, 한글 폴백 글꼴도 넣었습니다. Claude 앱이나 ChatGPT 앱으로 원격 연결하는 경우에는 일반 채팅 입력창이라 이 문제가 생기지 않습니다.

제가 만든 앱: SSH Term

이 글의 네 가지 축을 핸드폰 하나로 하려고 만든 앱이 SSH Term입니다.

SSH Term 소개 영상(한국어). Google Play 스토어 페이지의 미리보기 영상과 같습니다
App Store에서 SSH Term 다운로드 Google Play에서 SSH Term 다운로드

iPhone · iPad · Android를 지원하며, 한 번 구매하면 모든 기능을 쓸 수 있습니다(App Store ₩7,700 / Google Play ₩8,500, 구독·광고 없음). 자세한 소개는 SSH Term 한국어 페이지에 있습니다.

물론 반드시 이 앱이어야 하는 것은 아닙니다. tmux + worktree 구성은 다른 SSH 앱에서도 똑같이 쓸 수 있고, Claude Code만 쓰면서 구독 플랜이 맞는다면 공식 Remote Control이 가장 손이 덜 갑니다. 여러 CLI를 데스크톱 GUI에서 넓게 다루고 싶다면 Orca도 좋은 선택입니다.

정리

  • 핸드폰을 메인으로: 호스트의 셸을 SSH로 직접 조작하면, 실행·작업 만들기·승인·파일 확인까지 핸드폰에서 끝난다
  • tmux 없이: 유지 셸이면 앱을 닫아도 셸과 에이전트가 호스트에서 계속 돈다
  • Tailscale: 포트 개방 없이 연결. macOS라면 명령어 없이 준비 가능, 공개 키 등록만 직접
  • 모델을 갈아타도 같은 조작감: CLI는 같은 화면에서, claude·codex·omp는 상태·알림까지
  • 한글은 입력창에서 완성해서 보낸다