내가 만든 앱으로 그 앱을 만든다.
muxpad는 iPad와 iPhone에서 서버의 tmux에 붙어 원격으로 개발하려고 만든 네이티브 터미널 앱이다. 그리고 요즘 나는 muxpad 자체를 muxpad로 개발한다. 처음엔 "iPad에서도 개발되면 좋겠다" 정도의 막연한 바람이었는데, Claude Code를 tmux 위에 얹어 쓰기 시작하면서 이 조합이 생각보다 훨씬 강력하다는 걸 알게 됐다. 이 글은 그 사용 방법론에 대한 회고이자 소개다.
mux라는 단위에서 시작한다
muxpad의 설계는 mux라는 단위에서 출발한다. 흔한 SSH 앱은 접속 정보를 호스트 하나에 뭉쳐 담는다. muxpad는 이걸 host(주소·포트)·user(자격증명)·mux(host + user + 세션명)로 쪼갰다.
여기서 mux 하나가 곧 프로젝트 하나가 된다. muxpad-dev, blog-api, homelab-ops 같은 식으로, 진행 중인 프로젝트마다 mux를 하나씩 만들어 사이드바에 나열한다. mux를 열면 그 프로젝트의 tmux 세션에 그대로 붙는다.
중요한 건 이 세션이 내 기기가 아니라 서버에 상주한다는 점이다. 작업 맥락(열려 있는 파일, 실행 중인 프로세스, 스크롤백)은 전부 서버 쪽 tmux 안에 있다. 내 손에 든 기기는 그저 그 세션을 들여다보는 창일 뿐이다.
그래서 mux는 단순한 접속 즐겨찾기가 아니라 "작업 컨텍스트의 이름표"에 가깝다. 프로젝트를 전환한다는 건 mux를 바꾸는 일이고, 그 전환은 기기를 바꿔도 유지된다.
집중은 PC, 이동은 아이패드, 극한은 아이폰
세션이 서버에 상주하니 접속하는 기기는 상황에 따라 갈아탄다. 나는 대체로 이렇게 나눠 쓴다.
- 집중 작업은 PC. 큰 화면에서 여러 pane을 펼쳐놓고 몰아서 짠다.
- 이동 중에는 아이패드. 외장 키보드만 붙이면 개발에 지장이 없다. muxpad가 Ctrl·prefix·방향키·copy-mode 같은 tmux 키를 하드웨어 키보드로 온전히 전달해주기 때문에, 터미널에서 하던 걸 거의 그대로 한다.
- 지하철이나 화장실 같은 극한 환경은 아이폰. 두 손이 자유롭지 않은 곳에서도 아이폰 하나로 세션에 붙어 방금 돌려둔 작업을 확인하고 다음 지시를 내린다.
핵심은 이 전환에 이어붙이는 비용이 없다는 것이다. PC에서 tmux를 detach하고 나오면 세션은 서버에서 계속 살아 있다. 지하철에서 아이폰으로 같은 mux를 열면 detach된 그 자리가 그대로 뜬다. 앱을 완전히 종료했다 켜도 마찬가지다.
# PC에서 작업하던 세션. 창을 닫아도 서버에 남는다.
tmux new -s muxpad-dev
# 이동 중 아이폰에서 muxpad로 같은 mux를 열면 그 자리로 attach된다.이 "끊기지 않는 흐름"이 muxpad를 만든 진짜 이유였다.
tmux와 Claude Code hook이 만나는 지점
이 구조가 특히 빛을 발하는 건 Claude Code를 함께 쓸 때다. 나는 Claude Code를 tmux 세션 안에서 돌린다. 그러면 에이전트가 하는 긴 작업—빌드, 테스트, 리팩터링, 대량 수정—이 전부 서버 쪽에서 진행된다.
여기에 Claude Code의 hook을 얹는다. 작업이 끝나는 시점에 완료를 알리도록 hook을 걸어두면, muxpad가 그 신호를 iOS 알림·배지로 띄워준다. 나는 "작업이 끝나면 알려줘" 정도만 설정해두면 되고, 그걸 손안의 기기까지 전달하는 건 앱이 알아서 처리한다.
흐름을 정리하면 이렇다. PC에서 에이전트에게 큰 작업을 던져두고 노트북을 덮는다. 이동하는 사이 서버에서 작업이 끝나면 아이폰에 알림이 뜬다. 그 자리에서 mux를 열어 결과를 확인하고, 다음 단계를 지시한다. 기기는 세 번 바뀌었지만 작업의 맥락은 한 번도 끊기지 않았다.
tmux가 세션을 붙들어주고, Claude Code가 실제 일을 하고, hook이 그 완료를 내 주머니 속 기기까지 전달한다. 이 세 개가 맞물리는 지점이 지금 내가 가장 재미있게 쓰고 있는 방식이다.
아직 부족한 것과 기대하는 것
물론 완성형은 아니다. 모바일에서 가장 아쉬운 건 역시 텍스트 입력이다. 긴 프롬프트를 작은 화면에서 타이핑하는 건 고역이다. 그래서 나는 각 디바이스의 마이크 전사(음성→텍스트)로 프롬프트를 넣는 방향을 노리고 있다. 말로 지시하고 결과만 눈으로 확인하는 흐름이 되면 아이폰 사용성이 크게 올라간다. 이 부분은 iOS의 받아쓰기 개선을 기대하며 지켜보는 중이다.
또 하나는 숙련도 문제다. tmux의 탭(window) 기능을 손에 익히고 nvim 숙련도가 쌓이면, muxpad는 사실상 별도 IDE가 필요 없는 올인원 개발 앱이 된다. 편집·실행·검색·버전관리가 전부 터미널 안에서 끝나기 때문이다. 지금은 내가 그 숙련도를 올려가는 단계다.
자료를 옮기는 것도 생각보다 자주 필요한데, 이건 파일 업로드(SFTP·드래그 앤 드롭)로 해결한다. 로그·설정·이미지를 기기와 서버 사이에서 끌어다 주고받는다.
끝맺음
muxpad는 내가 개발과 실무에서 매일 직접 쓰는 앱이다. 그래서 부족한 점도 내가 제일 먼저 겪고, 고칠 것도 내가 제일 잘 안다. 앞으로도 시행착오를 반복하며 이 앱을 키워나갈 계획이다.
혹시 "이런 기능이 있으면 나도 이렇게 쓰겠다" 싶은 게 있으면 언제든 제안해 주면 좋겠다. 내가 미처 겪지 못한 워크플로우가 이 앱을 더 단단하게 만든다.
당분간의 목표는 분명하다. PC·아이패드·아이폰 어디에 앉든, 심지어 서서든, 개발의 흐름이 끊기지 않게 하는 것. mux 하나로 시작한 이 실험을 계속 밀고 나가려 한다.