Skip to content

User Manual

Woojin Kim edited this page Jun 23, 2026 · 7 revisions

유저 매뉴얼

이 문서는 pytmux 를 처음 쓰는 분부터 일상적으로 쓰는 분까지 참고할 수 있도록, 설치 → 첫 실행 → 패널/탭 다루기 → 마우스·메뉴·명령 → Claude Code 연동 → 설정·운영까지 차근차근 설명합니다.

pytmux 의 시계·달력·디렉토리 트리(ncd)·IME 배지·Claude 통합·프롬프트 히스토리·사용 한도 등은 모두 플러그인입니다(플러그인 디렉토리를 지우면 그 기능이 조용히 사라집니다). 플러그인을 직접 만들려면 Plugin-Authoring-Guide 를 참고하세요.


목차

  1. pytmux 가 무엇인가요
  2. 설치
  3. 첫 실행 — 화면 한 바퀴
  4. 핵심 개념: 탭 → 윈도우 → 패널, 그리고 영속성
  5. 패널 다루기 (분할·이동·크기·줌·교환)
  6. 탭 다루기 (생성·전환·이름·재정렬)
  7. 스크롤백(복사 모드)
  8. 마우스로 거의 다 하기
  9. 메뉴와 명령 프롬프트
  10. 붙여넣기 · 클립보드 · 이미지
  11. Claude Code 연동
  12. 상태줄·시계·달력·정보 팝업
  13. detach / attach 와 셸 영속성
  14. 네트워크 응답성과 재접속
  15. 작업 보존 서버 재시작
  16. 설정 파일
  17. 명령 레퍼런스
  18. 키 바인딩 레퍼런스
  19. 외부에서 서버 제어 (CLI)
  20. 문제 해결 FAQ

1. pytmux 가 무엇인가요

pytmux 는 Python + Textual 로 만든 tmux 유사 터미널 멀티플렉서입니다. 하나의 터미널 창 안에서 여러 셸을 패널로 나눠 쓰고, 앱이나 터미널 창을 닫아도 셸 세션이 계속 살아 있게 해 줍니다.

tmux 와 다른 점은 마우스와 메뉴를 1급으로 지원한다는 것입니다. 단축키를 다 외우지 않아도, 우클릭 메뉴(prefix Enter)와 명령 프롬프트(prefix :)로 거의 모든 동작을 할 수 있습니다. 경계선을 드래그해 패널 크기를 바꾸고, 휠을 굴려 스크롤백을 봅니다.

구조는 클라이언트 ↔ 서버입니다. 셸 PTY 는 백그라운드 데몬(서버)이 보유하고, 화면을 그리는 앱(클라이언트)은 거기에 붙었다 떨어졌다 합니다. 그래서 앱을 닫아도 셸은 죽지 않습니다.


2. 설치

2.1 의존성

pip install -r requirements.txt
# 또는 직접: pip install textual pyte wcwidth
  • macOS / Linux (POSIX PTY) 에서 동작합니다. Python 3.11 이상을 권장합니다.
  • Windows 네이티브(WSL/Cygwin 불필요)는 ConPTY 백엔드로 지원합니다. 추가로 pip install pywinpty 가 필요합니다(requirements.txtwin32 조건부 포함).

2.2 pytmux 명령으로 등록 (선택)

어디서든 python3 pytmux.py 대신 pytmux 로 실행하려면 래퍼를 설치합니다.

./install.sh                  # 기본 위치(~/.local/bin)에 'pytmux' 래퍼 설치
./install.sh /usr/local/bin   # 다른 디렉터리에 설치
BIN=pt ./install.sh           # 다른 이름(pt)으로 설치

./uninstall.sh                # 제거(설치 시 쓴 DIR/BIN 인자를 동일하게)

Windows(PowerShell) 에서는 install.ps1 / uninstall.ps1 을 사용합니다.

2.3 SSH/mosh 접속 시 자동 attach (선택)

원격 로그인하면 곧바로 pytmux 세션으로 들어가도록 셸 설정(~/.zshrc 등)에 아래를 추가합니다. tmux 의 tmux new-session -A -s main 자동 실행을 대체하는 용도입니다.

# 인터랙티브 SSH/mosh 로그인일 때만 pytmux 세션에 attach.
if command -v pytmux >/dev/null && [[ -o interactive ]] && [[ -t 1 ]] \
   && [[ -z "$PYTMUX" ]] && [[ -n "$SSH_CONNECTION$SSH_TTY" ]]; then
  pytmux
fi

중첩 방지 가드는 pytmux 가 패널 셸에 심는 $PYTMUX 환경변수를 검사합니다(비인터랙티브 도구 셸은 가로채지 않으므로 자동화 명령을 막지 않습니다).


3. 첫 실행 — 화면 한 바퀴

python3 pytmux.py     # 서버가 없으면 자동 기동 후 attach, 있으면 attach
# 래퍼를 설치했다면 어디서든:  pytmux

처음 실행하면 평소 쓰던 셸이 거의 전체 화면으로 뜹니다. 위에는 탭바, 아래에는 상태줄이 있습니다.

첫 실행 화면

화면 요소는 다음과 같습니다.

  • 상단 탭바 — 탭 목록 + 마지막 탭 오른쪽의 [+](새 탭 추가). 탭이 하나여도 기본 표시됩니다(set tab-bar auto 면 2개 이상일 때만 표시). 활성 탭은 아래 콘텐츠와 연결된 노트북 탭 모양(활성색 배경 블록)으로 이어집니다.
  • [x] — 콘텐츠 영역 오른쪽 위 모서리입니다. 현재 탭 닫기(확인 팝업).
  • 콘텐츠 영역 — 현재 탭의 윈도우(패널 집합)입니다. 패널이 하나면 테두리는 옵션입니다.
  • 하단 상태줄[세션] · 탭 목록(현재 탭 * 표시) · 줌 상태 · 오른쪽에 시계/날짜.

조작은 세 가지 방식 모두 가능합니다.

  1. 키보드Ctrl-b(prefix)를 누른 뒤 명령 키.
  2. 마우스 — 클릭(포커스), 드래그(크기·swap), 휠(스크롤백), 우클릭(메뉴).
  3. 메뉴/명령prefix Enter(메뉴), prefix :(명령 프롬프트).

4. 핵심 개념: 탭 → 윈도우 → 패널, 그리고 영속성

pytmux 는 단일 세션 모델입니다. tmux 처럼 여러 세션을 만들지 않습니다. 대신 다음과 같은 계층을 가집니다.

flowchart TD
    S["세션 (단 하나)"]
    S --> T1["탭 1"]
    S --> T2["탭 2"]
    S --> T3["탭 3"]
    T1 --> W1["윈도우"]
    T2 --> W2["윈도우"]
    T3 --> W3["윈도우"]
    W1 --> PA["패널 A"]
    W1 --> PB["패널 B"]
    W2 --> PC["패널 C"]
    W3 --> PD["패널 D"]
    W3 --> PE["패널 E"]
    W3 --> PF["패널 F"]
Loading
  • 탭(최상위) — 새 탭을 만들면 새 터미널 윈도우(단일 패널)가 열립니다. 1번부터 번호.
  • 윈도우 — 각 탭에 종속된 단일 윈도우입니다. 이를 패널 집합으로 분할합니다.
  • 패널 — 실제 셸 PTY 하나입니다. 좌우/상하로 쪼개 여러 개를 동시에 봅니다.

tmux 용어로는 pytmux 의 "탭" = tmux 의 "window", pytmux 의 "패널" = tmux 의 "pane" 입니다. 그래서 탭 명령은 new-tabnew-window 두 이름을 모두 받습니다.

셸 영속성: 셸 PTY 를 서버(백그라운드 데몬)가 보유하므로, 앱을 닫거나(prefix d detach), 상위 터미널 창을 닫아도 셸은 계속 돌아갑니다. 다시 pytmux 하면 이어서 붙습니다.


5. 패널 다루기

5.1 분할

  • prefix %좌우 분할(세로선으로 나눔)
  • prefix "상하 분할(가로선으로 나눔)

패널이 둘 이상이면 각 패널이 테두리 박스로 감싸지고, 현재 활성(포커스) 패널의 테두리 전체가 파란색, 비활성은 회색입니다. 인접 패널 경계는 ┬ ┴ ├ ┤ 로 연결됩니다.

좌우 패널 분할

중첩 분할 레이아웃

5.2 포커스 이동

  • prefix o — 다음 패널로 순환
  • prefix ← — 방향으로 패널 이동
  • 마우스 클릭 — 해당 패널로 즉시 포커스
  • ESC 모드에서 ←↑↓→ — prefix 없이 패널 이동(명령 모드)

5.3 크기 조절

  • prefix H J K L — 패널 경계를 왼/아래/위/오른쪽으로 이동
  • 경계선 드래그 — 마우스로 패널 사이 경계를 끌어 크기 변경

한글 IME 가 켜진 상태에서 prefix H/J/K/L(시프트 구분이 안 되는 두벌식)은 동작이 애매할 수 있습니다. 이때는 마우스 드래그나 영문 입력 상태를 사용하세요.

5.4 줌 (한 패널 전체화면 토글)

  • prefix z 또는 명령 resize-pane -Z

줌하면 해당 패널이 콘텐츠 영역을 가득 채우고, 상태줄에 Z 표시가 뜹니다. 다시 누르면 원래 레이아웃으로 복귀합니다.

패널 줌

5.5 패널 교환(swap)·회전

  • Shift + 왼쪽 버튼 드래그 — 두 패널 위치를 맞바꿉니다(드래그 중 원본은 흐리게, 대상은 강조).
  • 명령 swap-pane -t <n> — 현재 패널과 n 번 패널 교환
  • 명령 rotate-window — 윈도우 안 패널들을 회전

5.6 삭제

  • prefix x — 현재 패널 삭제(kill-pane? (y/N) 확인 뒤 y).

패널 삭제 확인

  • 명령으로 삭제ESC 를 눌러 명령 모드로 들어간 뒤 : 로 명령 프롬프트를 열고 kill-pane 을 입력해 Enter 합니다(prefix : 로 바로 열어도 됩니다).

5.7 레이아웃 저장/복원

  • layout-save <name> — 현재 탭 레이아웃을 이름으로 저장
  • layout-load <name> — 저장 레이아웃을 현재 탭에 덮어쓰기(이름 생략 시 선택기)
  • layout-load-new <name> — 저장 레이아웃을 새 탭으로 열기
  • next-layout — 프리셋 레이아웃 순환

6. 탭 다루기

6.1 생성·전환

  • prefix c — 새 탭(새 윈도우, 단일 패널)
  • prefix n / prefix p — 다음/이전 탭
  • prefix l — 직전 탭(마지막으로 보던 탭)
  • prefix 1 ~ prefix 9 — 번호로 탭 선택(1번부터)
  • 탭바 탭 클릭 — 해당 탭으로 전환
  • [+] 클릭 — 새 탭

Claude Code 가 도는 탭에는 상태 아이콘(//)이 함께 표시됩니다(§11.1).

다중 탭

6.2 이름변경

  • prefix , — 탭 이름변경(입력창)
  • 명령 rename-tab <name> (= rename-window)

POSIX 에서는 포그라운드 프로세스(fg)를 기반으로 탭 이름이 자동으로 따라갑니다(ssh 감지 등).

6.3 재정렬

  • 탭바에서 탭 드래그 — 마우스로 순서 변경
  • ESC 모드로 탭바를 하이라이트한 뒤 Shift+←→ 로 이동, Enter 로 확정
  • 명령 move-tab-left / move-tab-right / move-tab-first / move-tab-last

6.4 ESC 모드에서 탭바 다루기

ESC 를 눌러 명령 모드로 들어간 뒤 위 방향키로 탭바에 포커스를 올리면 다음 키를 쓸 수 있습니다.

  • — 탭 선택
  • Enter — 전환
  • + / a — 새 탭 추가
  • x / d — 탭 닫기
  • Shift+←→ — 탭 이동(재정렬), Enter 로 확정

esc e — 패널에 ESC 보내기: Shift+ESC 로 앱에 ESC 를 못 보내는 터미널(일부 Windows Terminal 설정 등 Shift 수정자가 누락되는 환경)에서, ESC 를 눌러 모드에 들어간 뒤 e 를 누르면 활성 패널(앱)에 ESC(\x1b)가 전달되고 모드를 빠집니다. (단독 ESC 두 번은 모드만 진입/종료할 뿐 앱에 ESC 를 보내지 않습니다 — 앱 ESC 통로는 Shift+ESC·esc e·send-escape.)

6.5 삭제

  • prefix & — 현재 탭 삭제(확인)
  • 콘텐츠 오른쪽 위 [x] 클릭 — 현재 탭 닫기(확인)
  • 명령 kill-tab (= kill-window)

탭을 닫을 때는 중앙 확인 박스가 뜹니다. 탭이 둘 이상이면 그 탭만 닫는 일반 확인입니다 (고정 탭이면 "고정 탭 닫기" 문구로 한 단계 더 확인 — §6.6).

탭 삭제 확인

마지막 탭을 닫을 때는 의미가 다릅니다 — 그 탭을 닫으면 pytmux 자체가 종료되고 모든 셸이 함께 종료되므로, 일반 확인 대신 "pytmux 종료" 경고 팝업이 떠 한 번 더 확인을 받습니다(기본 포커스는 안전하게 취소에 있습니다).

마지막 탭 삭제 확인

6.6 탭 고정(핀)

자주 쓰는 탭(빌드·로그·에디터 등)을 탭바 오른쪽 고정 구역에 분리해 두면, 비고정 탭이 많아 탭바가 스크롤돼도 항상 보이고 실수로 닫는 것을 한 단계 더 막아 줍니다.

  • 토글 방법
    • prefix P (대문자) — 활성 탭 고정/해제. (소문자 p 는 분할/직전 탭에 쓰이므로 P)
    • ESC 모드에서 P — 활성 탭 고정/해제 후 모드 종료
    • 메뉴 → 탭 → 탭 고정 토글
    • 명령 pin-tab / unpin-tab / pin-toggle
    • 드래그 — 탭을 구분자() 위나 반대 구역의 탭 위로 끌어다 놓으면 고정/해제가 토글됩니다(같은 구역 안 드래그는 종전대로 순서만 바뀝니다).
  • 표시 — 고정 탭은 구분자 오른쪽 구역에 핀 글리프 * 를 붙여 모입니다. 탭 선택기(prefix w, choose-tree)에서도 고정 탭에 * 표식이 붙습니다.
  • 닫기 보호 — 고정 탭을 닫으려 하면 "고정 탭 닫기" 확인이 한 번 더 떠 실수 닫기를 막습니다.
  • 원격 탭remote-attach 로 병합된 원격 탭도 고정할 수 있습니다. 고정은 보고 있는 내 탭바 레이아웃에만 적용되며 원격 서버에는 영향을 주지 않습니다.

고정/해제는 탭 번호를 다시 매깁니다(tmux 의 move-window 와 같은 성질) — 보이는 순서가 곧 번호 순서입니다.


7. 스크롤백(복사 모드)

tmux 와 달리 copy-mode 로 따로 들어가지 않아도, 패널 위에서 휠을 올리면 바로 지난 출력을 볼 수 있습니다. 패널마다 독립적입니다.

키보드로 스크롤백 모드에 들어가려면 prefix [ 를 누릅니다.

스크롤백(복사 모드)

동작
/ 한 줄 위/아래
PageUp / PageDown 한 화면 위/아래
g / G 맨 위 / 맨 아래
q 스크롤백 모드 종료

복사 모드 키 스타일은 설정 set mode-keys vi|emacs 로 바꿀 수 있습니다.


8. 마우스로 거의 다 하기

동작 결과
패널 클릭 해당 패널로 포커스 이동
경계선 드래그 패널 크기 조절
패널 위쪽 테두리(헤더 행) 드래그 패널 들어올리기(pick-up) — 다른 패널에 놓으면 swap, 탭바의 탭에 놓으면 그 탭으로 이동, [+]에 놓으면 새 탭으로 분리
패널 Shift+드래그 텍스트 선택 → 복사(OS 클립보드+페이스트 버퍼)
휠 위/아래 커서가 올라간 패널 스크롤백
우클릭 컨텍스트 메뉴
상단 탭바 탭 / [+] / ◀▶ 탭 전환 / (마지막 탭 오른쪽)새 탭 / 가로 스크롤
탭바에서 탭 드래그 탭 재정렬(패널 위로 끌어 놓으면 그 패널과 분할 합류 join)
콘텐츠 오른쪽 위 [x] 현재 탭 닫기(확인 팝업)
하단 바 시계 / 날짜 클릭 시계 모드 / 이번 달 달력 오버레이 토글
하단 바 REC / 토큰 / 서버이름 클릭 통합 정보 팝업
토큰 사용량 클릭 토큰 사용량 팝업
Claude 권한모드 footer 클릭 권한모드 선택 팝업(auto/default/plan)

일부 터미널(iTerm2 등)이 alt-screen 에서 휠을 화살표로 바꿔 스크롤백이 안 열릴 때가 있습니다. 그때는 set alt-scroll on(기본) 으로 pytmux 가 휠을 직접 처리하게 두세요.

이 표는 앱 안에서도 볼 수 있습니다 — :mouse-help(별칭 mouse, list-keys 와 같은 "키 · 마우스" 팝업) 또는 우클릭 메뉴의 마우스 제스처 도움말.


9. 메뉴와 명령 프롬프트

9.1 메뉴 (prefix Enter 또는 우클릭)

단축키를 외우지 않아도 메뉴로 거의 모든 동작을 할 수 있습니다. 방향키로 선택하고 Enter 로 실행합니다(첫 항목이 파란색으로 하이라이트). 마우스 클릭도 됩니다.

메뉴는 그룹(서브메뉴) 으로 정리되어 있습니다. 최상위에는 자주 쓰는 항목(검색·명령· 설정·마우스 도움말·토글 등)과 함께 패널 ▸·레이아웃 ▸·탭 ▸ 같은 그룹 진입점이 보이고(플러그인이 항목을 더하면 플러그인 ▸ 도 나타납니다), 그룹을 고르면(Enter) 서브메뉴가 열립니다(Esc 로 상위 메뉴로 돌아갑니다). 토글 항목은 메뉴를 닫지 않습니다. detach·서버 종료 같은 되돌리기 어려운 동작은 구분선 아래로 따로 떼어 두었습니다.

메뉴

서브메뉴

9.2 명령 프롬프트 (ESC:, 또는 prefix :, 또는 F12)

바닥에 입력창(모달)이 열립니다. 맨 왼쪽에 고정 : 프리픽스가 표시되고(백스페이스로 지워지지 않습니다) 그 뒤에 tmux 와 비슷한 명령을 입력합니다.

명령 프롬프트

입력 중 도우미는 다음과 같습니다.

  • ? 또는 help(commands) — 명령 목록 팝업을 엽니다(아래 §9.3).
  • 자동완성 — 타이핑하면 회색 고스트로 미리보기(자주 쓰는 옵션 -h 등까지 제안), 오른쪽 화살표(→) 또는 Tab 으로 수락합니다.
  • 명령어/인자 구분 — 첫 토큰(명령어)에 옅은 배경이 칠해져 인자와 한눈에 구분됩니다 (예: split-window 만 강조, -h 는 평문).
  • 토글/선택지 인자(on/off 등) — 명령을 다 치면 오른쪽에 ‹ 토글 켜기 끄기 › 처럼 선택지가 떠, 좌우(←→) 또는 상하(↑↓) 화살표로 고르고 Enter 로 실행합니다 (예: monitor-activity, single-border, synchronize-panes).
  • 인자 이력·추천remote-attach 처럼 호스트·이름을 직접 치는 명령은 이전에 입력한 인자를 기억해 다음에 추천합니다. 명령 뒤에 한 칸 띄우면 최근 인자가 후보로 펼쳐져 ↑↓ 로 고르고 Tab 으로 채울 수 있고, 몇 글자 치면 고스트로 자동완성됩니다 (→/Tab 수락). remote-attach·remote-new-tab·remote-detach 는 호스트 이력을 공유하고, 레이아웃 이름(layout-save/layout-loadrun-shell·send-keys 도 기억됩니다. 이력은 서버별 상태파일에 남아 재시작·재접속 후에도 유지됩니다.

예시는 다음과 같습니다.

new-tab                          # 새 탭(= new-window)
split-window -h                  # 좌우 분할(-v 는 상하)
kill-pane                        # 현재 패널 삭제
resize-pane -Z                   # 줌 토글
swap-pane -t 2                   # 2번 패널과 교환
rename-tab build                 # 탭 이름변경
select-tab 3                     # 3번 탭으로
detach                           # 앱만 떼기(셸 유지)

전체 명령은 §17 명령 레퍼런스에 있습니다.

9.3 명령 팝업 (명령 목록)

명령 이름을 외우지 못해도, 카테고리별로 정리된 전체 명령 목록을 팝업에서 찾아 바로 명령줄에 채울 수 있습니다.

명령 팝업(목록)

진입 방법 — 셋 중 아무거나:

  • 명령 프롬프트(prefix : 또는 ESC:)를 연 뒤 ? 를 입력
  • 명령 프롬프트에서 help(또는 commands / list-commands)를 입력하고 Enter
  • ESC 명령 모드에서 곧바로 ? — 프롬프트를 거치지 않고 바로 팝업이 열립니다

구성과 사용 방법:

  • 카테고리 탭 — 명령이 많아 패널 · · 복사/스크롤 · 레이아웃 · 모드 · Claude · 설정/기타 로 나뉘어 있습니다. 또는 탭 클릭으로 전환합니다. 각 탭에는 (검색 중이면) 일치 개수가 함께 표시됩니다(예: 패널 (13)).
  • 검색 — 그냥 타이핑하면 상단 검색창에 들어가 즉시 필터링됩니다. 모든 탭에 일치 개수가 갱신되어 어느 카테고리에 결과가 있는지 한눈에 보입니다. Backspace 로 지웁니다.
  • 이동 로 명령 사이를 오가고, Home/End 로 목록 처음·끝으로 점프합니다. 목록이 길면 오른쪽 스크롤바가 표시됩니다.
  • 선택Enter 를 누르면 그 명령이 명령줄에 채워집니다(팝업이 닫히고 프롬프트로 돌아감). 이어서 인자를 더 입력한 뒤 다시 Enter 로 실행하거나, 인자가 필요 없으면 곧바로 Enter 로 실행합니다.
  • 닫기Esc 또는 오른쪽 위 [x] 클릭.

화면 하단의 안내줄(타이핑 검색 · ←→/클릭 탭 · ↑↓ 명령 · Home/End 처음·끝 · Enter 선택 · Esc 닫기)에 이 조작이 항상 요약돼 있습니다.

9.4 디렉토리 트리 (ncd)

옛 Norton Utilities 의 NCD(Norton Change Directory) 처럼, 디렉토리 전용 트리를 화면 가득 띄워 방향키·타이핑만으로 디렉토리를 골라 빠르게 이동합니다(파일은 안 보이고 디렉토리만 — 파일 매니저가 아니라 "디렉토리 바꾸기" 도구).

NCD 디렉토리 트리

열기 — 명령 프롬프트에서 ncd(별칭 nc). 인자 없이 바로 열립니다.

트리는 드라이브 루트(/)부터 현재 패널의 디렉토리(cwd)까지 펼쳐진 채 열리고, 커서는 현재 디렉토리에 놓입니다 — 지금 위치에서 시작해 위(부모)·아래(하위)·옆 (형제) 어디로든 갈 수 있습니다.

조작:

  • — 이동.
  • — 접힌 디렉토리의 하위를 펼칩니다(필요할 때 서버에서 지연 로드).
  • — 펼쳐져 있으면 접고, 접혀 있으면 부모(상위)로 올라갑니다.
  • 이름 타이핑(speed search) — 디렉토리 이름 일부를 치면 현재 위치부터 그 이름으로 시작하는(없으면 부분일치) 디렉토리로 즉시 점프합니다. 방향키를 누르면 검색어가 초기화되고, Backspace 로 한 글자 지웁니다. 하단 안내줄에 찾기: … 로 보입니다.
  • Enter현재 패널의 셸을 그 디렉토리로 cd 하고 닫습니다(NCD 의 핵심).
  • Shift+Enter(또는 Ctrl+O) — 그 디렉토리에서 시작하는 새 패널을 분할로 엽니다(pytmux 확장). 터미널이 Shift+Enter 를 구분 못 하면 Ctrl+O 를 쓰세요.
  • Esc — 아무 동작 없이 닫기.

Enter 의 cd 는 대상 패널이 셸 프롬프트 상태일 때 의미가 있습니다(claude/vim 등이 실행 중이면 그 앱 입력으로 들어갑니다 — 실제 셸 cd 와 같은 한계).


10. 붙여넣기 · 클립보드 · 이미지

  • 붙여넣기 패스스루 — 멀티라인 텍스트를 bracketed paste 로 그대로 전달합니다. 그래서 Claude Code CLI 등에서 줄마다 실행되지 않고 한 번에 붙습니다.
  • 이미지 붙여넣기 — 내부 프로그램이 공유 OS 클립보드에서 읽어 동일하게 동작합니다.
  • 명령 paste-clipboard (= Ctrl+V) — OS 클립보드(텍스트/이미지) 붙여넣기.
  • 명령 send-escape — 활성 패널에 ESC 전달(Shift+ESC 가 안 먹는 터미널용).

붙여넣기 테두리 정화 (strip-box-drawing)

OS(터미널) 네이티브 마우스 드래그로 pytmux 화면을 복사하면 패널 좌/우 경계의 박스드로잉(│ ├ ┤ ─ 등)이 줄 앞·뒤에 딸려 들어와 코드 붙여넣기가 깨집니다. strip-box-drawing(기본 ON)은 붙여넣기(Ctrl+V/paste-clipboard) 경로에서 줄 앞·뒤의 박스드로잉 런만 떼고 테두리 전용 줄은 버려 이 오염을 제거합니다.

  • 내부 박스드로잉(markdown 표·아트)·원래 빈 줄·ASCII |·들여쓰기는 보존하므로 일반 텍스트엔 안전합니다(박스드로잉이 없으면 무동작). 터미널 bracketed paste 는 제외.
  • 토글: settings → 입력 → "붙여넣기 테두리 제거", 또는 strip-box-drawing on|off.
  • 자세한 설명은 Settings-Popup#붙여넣기-테두리-정화.

Shift 조합 키 패스스루

Shift+Enter(줄바꿈 LF) · Shift+Tab(backtab/CSI Z) · Shift+Escape(ESC) 는 prefix 없이 바로 활성 패널로 전달됩니다. Claude Code 등에서 Shift+Enter 로 멀티라인 입력, Shift+Tab 으로 권한/자동 모드 순환에 씁니다. (그냥 Enter 는 제출 CR, 그냥 ESC 는 명령 모드 진입이라 구분됩니다.)


11. Claude Code 연동

pytmux 는 패널에서 돌리는 Claude Code CLI 에 특화된 보조 기능이 많습니다. 탭바의 상태 아이콘, 하단 상태줄의 컨텍스트·토큰이 모두 pytmux 가 Claude Code 출력을 읽어 자동으로 채운 것입니다.

Claude 패널

실제 Claude 출력

11.1 상태 아이콘

Claude Code 가 실행 중인 탭에 상태 아이콘을 표시합니다.

  • — 대기(입력 받을 준비)
  • — 처리중
  • — 사용량 리밋으로 멈춤

비활성 탭의 작업이 끝나면 탭 배경색으로 완료를 알립니다(그 탭을 보면 해제됩니다).

11.2 프롬프트 히스토리 (플러그인)

프롬프트 확인은 claude-prompt-history 플러그인이 맡습니다 — 평소엔 아무것도 그리지 않고, 필요할 때만 transient 하게 나타납니다.

  • : 명령 프롬프트에서 prompt-history(별칭 prompts·ph)를 입력하는 동안, 대상(활성) Claude 패널 위에 직전 프롬프트 미리보기가 잠깐 나타납니다.
  • Enter 로 실행하면 프롬프트 팝업이 열립니다 — ↑↓ 로 이전 프롬프트들을 살펴보고, Enter 를 누르면 그 프롬프트가 입력된 스크롤백 위치로 점프합니다(Esc 닫기).
  • 미리보기 최대 행수는 prompt-history-lines <1-3> 으로 설정(영속)합니다.

프롬프트 히스토리

  • 플러그인이므로 pytmuxlib/plugins/claude-prompt-history/ 디렉토리를 지우면 기능 전체가 조용히 사라집니다(delete-to-disable).

프롬프트 작성창 (블록 선택 편집). Claude Code 의 프롬프트 입력기는 범위 선택 후 수정·삭제 편집을 지원하지 않습니다. 긴 프롬프트를 다듬고 싶을 때는 ESCInsert 로 pytmux 자체 작성창을 띄우세요(옵트인 — 필요할 때만). 활성 패널의 프롬프트 줄 바로 위에 떠서 이전 출력을 보며 작성할 수 있고, 입력한 내용을 시드로 가져옵니다.

  • Enter = 전송(활성 패널에 붙여넣기) · Shift+Enter(또는 Ctrl+J) = 줄바꿈 — Claude Code 프롬프트와 같은 규칙입니다. Ctrl+S 도 전송, Esc 는 취소입니다.
  • Shift+방향키·Home·End블록 선택, Ctrl+A 로 전체 선택 후 삭제·교체 편집이 됩니다(자식 프롬프트엔 없는 편집을 작성창이 제공).
  • 전송은 bracketed paste 로 감싸 멀티라인이 줄마다 제출되지 않게 하고, 끝에 Enter 를 붙이지 않아 자동 제출되지 않습니다(검토 후 직접 Enter). 취소해도 작성 내용은 초안으로 남아 다음에 다시 엽니다.

프롬프트 작성창

11.3 토큰 사용량

활성 Claude 패널의 모델·컨텍스트·한도를 상태줄 왼쪽에 표시합니다 — 예: opus-4.8 · ctx:10%/1M · 37%/5h 사용.

토큰 로그

  • opus-4.8 — 현재 모델(배지에서 자동 인식).
  • ctx:10%/1M — 컨텍스트 사용량% / 윈도우 크기. Claude 가 잔량(예: N% context left)을 그리면 100-N(사용량)으로 환산해 보입니다. 못 그리면 세션 누계로 근사(~).
  • 37%/5h 사용 — 5시간 세션 한도 사용률(/usage 실측, 아래 §11.8). 단 모델이 Sonnet 이면 5h 세션은 Anthropic 이 모델 통합값으로만 제공해 모델별 측정이 불가하므로, 대신 주간 Sonnet only % (12%/주(Sonnet))를 보입니다.

상태줄의 이 토큰 영역을 클릭/터치하면 토큰 사용량 팝업이 열립니다. 팝업은 위쪽에 노트북 탭(클릭 또는 키)으로 보기를 전환하는 구조이며, 활성 탭은 박스 테두리와 같은 주황색으로 본문까지 이어집니다. 한 번에 한 차원만 보여 줍니다:

내용
기간 hdwm 시간 버킷별 토큰 합. 서브옵션 정렬(o)로 시간순↔토큰순
계정 c 계정별 전체 이력 합(행 선택 시 그 계정으로 필터+드릴다운)
세션 p Claude 세션별 합. 세션(대표 탭:패널 라벨)·타임스탬프(세션 시작 시각)·토큰 3열 — 이름 없는 세션을 시작 시각으로 식별
한도 l /usage 실측 한도 상세 + 다음 리셋까지 카운트다운(아래)
대사 r 실측 Δ%(실제 /usage) vs 추정 Σ(스크랩) 추세 대조 진단
경고 포맷 미인식·반복 루프·장기 턴 등 상태 경고 설명
/usage u 숨은 세션으로 실측 한도 즉시 갱신(§11.8)
시나리오 s 토큰 절감 설정 팝업(§11.7)

a 로 계정 필터를 순환하고, 방향키로 스크롤, Esc 로 닫습니다. 모든 전환은 서버 왕복 없이 즉시 이뤄집니다. 맨 위 요약줄에 /usage 로 확보한 세션(5h)·주간 한도 %와 현재 창 추정 Σ가 한 줄로 깔립니다.

캐시 토큰 포함: 토큰 수치(기간/세션/계정/모델 표와 상태줄 누계)는 Claude 의 트랜스크립트 기록(~/.claude/projects/*.jsonl)에서 읽은 정확한 4항목 합 (입력·출력·캐시 생성·캐시 읽기)입니다. 화면 footer 의 ↑/↓ N tokens 스크랩은 캐시 토큰을 못 봐 실제의 ~0.4%만 잡으므로, 요약줄에 activity~ 보조신호로만 곁들여집니다(에이전트 세션 토큰의 대부분은 캐시 읽기라 둘은 200배 이상 차이날 수 있습니다).

시간(h) 뷰에서는 각 시각의 **세션 5h 한도 누적%**를 초록(여유)·노랑(≥50%)·빨강 (≥80%) 계단식 가로 막대로 그려, 5h 창이 차오르다 리셋되는 흐름을 한눈에 봅니다. 막대 앞 연한 톤은 직전 시각에서 이어진 누적이고, 옆 1w% 열은 같은 시각의 주간 한도% 입니다.

토큰 로그(시간별)

한도(l) 뷰/usage 실측 한도를 막대(세션 5h·주 전체·주 Sonnet, % 사용·리셋 시각)와 현재 창 추정 Σ, 그리고 다음 리셋까지의 블록-숫자 카운트다운으로 보여 줍니다.

토큰 로그(한도)

사용량은 세션 동안 유지·누적되며 token-log 로 파일에 영속 기록됩니다.

패널에서 돌던 Claude 세션이 끝나면, pytmux 가 그 패널 프롬프트 위쪽 스크롤 영역에 토큰 사용량 요약(/usage 한도)을 자동으로 한 번 끼워 넣어 줍니다 — 화면(프롬프트)을 깨지 않으면서, 세션을 닫고 나서도 마지막 사용량을 바로 확인할 수 있습니다 (auto-token-on-exit, 기본 ON).

11.4 토큰 리밋 자동 재개

패널에서 돌리던 Claude Code 가 사용량 리밋에 걸려 멈추면, 출력에 표시된 해제 시각을 읽어 그 시각이 되면 자동으로 재개 메시지를 입력합니다.

  • prefix R — 패널마다 켜고 끕니다. 켜진 패널은 상태줄 왼쪽에 주황색 AR 배지가 뜹니다.

Claude 자동 재개

11.5 권한모드 연동

Claude Code 가 패널 하단에 그리는 권한모드 footer(auto mode on …)를 클릭하면 권한모드 선택 팝업이 열립니다(auto/default/plan 순환 주입).

권한 모드

  • claude-auto-mode on — idle 진입 시 자동으로 오토모드로 맞춥니다.

11.6 시작 규칙

  • claude-rules — 시작 규칙을 편집해 두면 새 세션이나 /clear 직후 첫 프롬프트에 자동 주입됩니다.

Claude 시작 규칙

11.7 Claude 보조 자동화 설정 (token-saver)

token-saver(별칭 claude-settings)로 Claude 보조 설정 팝업을 엽니다. 각 행을 Enter(또는 클릭)로 토글/순환합니다.

이전의 토큰 과사용 자동 완화(컨텍스트 잔량 자동 정리·하드스톱 자동 /compact·실측 한도 게이트·일/세션/계정 예산·모델 과선택 힌트)는 제거됐습니다. 토큰 추적·로그·상태줄 표시는 그대로이고, 설정 팝업에는 아래의 옵트인 보조 동작만 남습니다.

Claude 설정 팝업

  • 토큰리밋 자동재개 — 리밋이 풀리는 시각에 자동으로 continue 를 보냅니다.
  • 세션 종료 시 토큰 사용량 화면 — 세션이 끝나면 한도 요약을 패널에 표시합니다.
  • 권한모드 자동 오토 — idle 진입 시 권한모드를 auto 로 맞춥니다(bypass 는 건드리지 않음).
  • 프롬프트 단위 클리어 — 응답이 끝날 때마다 진행상황을 문서화한 뒤 /clear 합니다.
  • 장기 턴 / 반복 루프 경고 — 한 턴이 너무 오래 돌거나(폭주 의심) 같은 출력이 반복되면 (루프 의심) 상태줄에 배지로 알립니다(알림만, 자동 개입 없음).

또한 PTY 밖 알림 훅으로 자리를 비웠을 때도 알림을 받을 수 있습니다 — 리밋 도달·무장된 자동재개 시 set-hook claude-limit 'run-shell …'(또는 claude-auto-armed) 등으로 데스크톱 알림·소리에 연결합니다(기본 미바인딩).

11.8 사용량 한도 조회 (/usage)

claude-usage(별칭 usage) 또는 토큰 팝업의 /usage 버튼으로, 사용자에게 안 보이는 숨은 Claude 세션을 잠깐 띄워 /usage 패널을 읽어 세션(5시간)·주간 한도 %와 리셋 시각 을 가져옵니다(현재 화면엔 전혀 안 뜹니다). 결과는 토큰 팝업 맨 위와 상태줄 5h 표기에 실측값으로 반영됩니다.

사용량 패널

사용량 뷰

11.9 원격 제어(Remote Control) 토글

Claude 데스크탑 앱 원격 제어로 연결된 패널은 화면에 Remote Control active 가 보입니다. 이 표시를 클릭/터치하면 정보 팝업이 열리고, 거기서 [r] 로 원격 제어를 켜고 끕니다(해당 패널에 /rc 슬래시 명령을 주입).

Claude 원격 제어

11.10 새 세션 자동 셋업 (auto-launch)

auto-launch(기본 ON)는 패널에서 Claude Code 가 새로 시작될 때마다(세션 시작 감지) 다음을 세션당 1회 자동 적용합니다.

  • /rc 주입 — 원격 제어(리모트 커넥션)를 켭니다. 화면에 이미 Remote Control active 가 보이면(재접속·재시작 복원 등) 건너뛰어 켜진 원격 제어를 도로 끄지 않습니다.
  • 권한모드 auto 유도 — 첫 idle 에서 권한모드를 auto(자동 수락)로 한 번 맞춥니다 (shift+tab 폐루프).

claude-auto-mode(§11.5)가 idle 마다 상시 auto 로 강제하는 것과 달리, auto-launch세션 시작 1회만 작동합니다 — 이후 사용자가 shift+tab 으로 바꾸면 다시 건드리지 않습니다. /rc 제출과 권한 shift+tab 은 입력 프레임을 갈라 한 묶음으로 섞이지 않게 보냅니다.

  • auto-launch off 로 끄고 auto-launch on 으로 켭니다(기본 ON). 설정은 opts.json 에 영속됩니다.

위 자동화 기능들로 Claude Code 토큰 사용을 절약할 수 있습니다.


12. 상태줄·시계·달력·정보 팝업

12.1 상태줄

하단 바에 탭 목록·줌 상태·시계가 표시됩니다(상단 탭바가 보이면 하단 탭 목록은 생략될 수 있습니다). 다중 줄 상태줄도 설정으로 추가할 수 있습니다. 색은 Textual textual-dark 팔레트가 기본이며 status-bg/status-fg 로 바꿉니다.

포맷은 status-left/status-right 로 지정합니다(#S 세션, #h 짧은 호스트, #H 호스트, #{pane_title}, %H:%M 등 strftime).

12.2 시계 모드 / 달력

  • prefix t 또는 하단 바 시계 클릭시계 모드. 현재 패널을 큰 블록-숫자 시계로 덮습니다(뒤 출력은 흐리게 계속 보입니다).

시계 플러그인

  • 하단 바 날짜 클릭 또는 명령 calendar-mode/cal달력 오버레이. 패널이 충분히 크면 날짜가 블록 문자로 그려진 큰 달력이 되고, 오늘 날짜는 초록색으로 강조됩니다(공간이 좁으면 일반 격자 또는 날짜 문자열로 자동 폴백).

달력 플러그인

멱등 켜기/끄기 명령은 open-clock / close-clock / open-calendar / close-calendar 입니다.

12.3 통합 정보 팝업

하단 상태줄의 REC(캡처) · 토큰 · 서버 이름을 클릭하면 탭으로 구분된 단일 팝업이 열립니다 — 캡처 경로 · 계정별 사용량 합계 · 서버 연결상태/RTT 를 ←→ 로 오가며 볼 수 있습니다.

정보 팝업(RTT/호스트 status)

서버 탭에는 최근 60분 RTT 그래프가 함께 그려집니다. 세로 스케일은 관측 peak 에 자동으로 맞춰져 1ms 안팎의 낮은 지연도 막대로 보이고, 임계(degraded 기준)가 그래프 범위 안에 들면 그 높이에 점선 기준선이 표시됩니다. RTT 는 클라이언트가 측정하므로, 클라이언트가 떠 있지 않던 구간은 측정이 없어 바닥에 · 로 표시됩니다(그래프 이력은 재시작에도 유지되도록 영속됩니다).


13. detach / attach 와 셸 영속성

  • prefix d 또는 명령 detach앱만 떼어냅니다. 셸과 실행 중 프로그램은 서버에서 계속 돌아갑니다. 터미널 창을 닫아도 마찬가지입니다.
  • 다시 python3 pytmux.py (또는 pytmux) — 같은 세션에 attach 해서 이어서 작업할 수 있습니다.
pytmux              # 서버 없으면 기동 후 attach, 있으면 attach
pytmux attach       # 명시적 attach
pytmux ls           # 탭/패널 요약 출력
pytmux kill-server  # 서버와 모든 탭/셸 종료

단일 세션 모델이라 세션 이름을 지정할 필요가 없습니다.


14. 네트워크 응답성과 재접속

클라이언트 ↔ 서버 IPC 지연이 커지면 패널 외곽선을 빨간색으로 표시(degraded)하고, 개선되면 원복합니다.

저하 모드(네트워크 응답성)

고착되면 reconnect(또는 resync, 또는 워치독 자동)으로 실행 중 셸/Claude 를 죽이지 않고 IPC 만 다시 세워 반응성을 회복합니다.

14.1 원격 pytmux 탭 어태치 (remote-attach) — 분홍 탭

다른 머신에서 도는 pytmux 서버의 탭들을 이 pytmux 의 탭바에 그대로 가져옵니다 (ssh 안에서 pytmux 를 또 띄우는 중첩 대신 — 페더레이션).

예를 들어 로컬 탭(1:main) 옆에 원격 서버의 탭이 2:⇄host:cmd 분홍 탭으로 병합되고, 그 원격 탭을 보는 동안 패널 외곽선까지 분홍으로 바뀌어 로컬과 한눈에 구분됩니다.

remote-attach 분홍 탭

  • remote-attach <host> — 원격 서버의 열린 탭 전부⇄host:이름 모양의 분홍 탭으로 병합됩니다(여러 개면 여러 개). 클릭/alt+숫자로 진입하면 원격 화면·입력이 그대로 이어지고, 보는 동안 패널 외곽선도 분홍이라 로컬과 즉시 구분됩니다(네트워크 저하 빨강이 더 우선). 예: remote-attach user@host.
  • 원격에서 pytmux 를 치면 자동 승격 — ssh 로 들어간 원격 셸에서 pytmux 를 실행하면, 중첩 거부 대신 바깥(로컬) pytmux 가 그 호스트를 자동으로 remote-attach 해 분홍 탭으로 띄웁니다(원격 명령은 위임 안내 후 종료). nest-auto-attach off 로 끄면 종전처럼 거부 메시지가 나옵니다(기본 ON).
  • remote-detach [host] — 그 원격(생략 시 전부)의 분홍 탭을 모두 닫습니다. 원격 서버와 셸은 그대로 살아 있고, 다시 remote-attach 하면 같은 탭 세트가 동일하게 복원됩니다.
  • 섞기 금지(로컬↔원격): 원격 탭엔 원격 패널만, 로컬 탭엔 로컬 패널만 둘 수 있습니다. 원격 탭을 보는 중 분할/패널닫기 등 탭 안 조작은 원격에 그대로 적용되지만, 로컬↔원격으로 패널/탭을 옮기는 조작(join-pane·move-pane·탭 드래그 합치기· 재정렬)은 거부되고 상태줄에 안내가 표시됩니다.
  • 원격끼리는 머지 OK: 단, 같은 호스트의 두 원격 탭은 마우스로 끌어 한 탭의 두 패널로 합칠 수 있습니다(드래그 합치기 join). 이 조작은 원격 서버로 릴레이되어 그쪽에서 실제로 합쳐집니다(다른 호스트끼리는 불가).
  • 전제는 키 인증 또는 ControlMaster 설정입니다.

15. 작업 보존 서버 재시작

pytmux 는 활발히 개발 중이라 서버/클라이언트 코드가 자주 바뀝니다. 보통이라면 코드를 새로 반영하려면 서버를 죽이고 다시 띄워야 하는데, 그러면 돌고 있던 셸·프로그램· 스크롤백이 모두 사라집니다. 작업 보존 재시작은 세션을 살린 채 코드만 새것으로 바꿔 줍니다.

15.1 세 가지 재시작 명령

  • restart-server서버만 제자리에서 re-exec 합니다. 열린 패널의 셸 · 실행 중 프로그램 · 스크롤백을 그대로 살린 채 서버 코드만 새 이미지로 교체합니다. 클라이언트는 자동으로 다시 붙습니다. 서버 측 코드(server.py/model.py/…)를 갱신할 때.
  • restart-all(별칭 full-restart/restart-client-server) — 서버 + 클라이언트 동시 재시작입니다. 서버는 위와 똑같이 세션을 보존한 채 코드만 교체하고, 클라이언트도 자기 자신을 새 코드로 relaunch(재실행)해 다시 attach 합니다. 즉 서버·클라 양쪽 코드를 한 번에 갱신하면서 작업은 잃지 않는 "전체 업그레이드" 입니다. 클라 측 코드(client.py/ clientwidgets.py/…)까지 같이 갱신할 때. 명령 프롬프트뿐 아니라 외부 CLI python3 pytmux.py cmd restart-all 로도 트리거됩니다(연결된 클라가 재시작 통지를 보고 relaunch — 스크립트·헤드리스에서 클라 코드 픽스를 라이브 발효시킬 때).
  • restart-check(별칭 restart-dry-run) — restart-all실제로는 하지 않고 안전한지만 점검해 PASS/FAIL 팝업으로 알려 줍니다(부작용 없음). 서버 re-exec 지원 · 복원할 세션 존재 · 상태 직렬화 round-trip · 모든 패널의 master fd 보유 · 클라 relaunch 인자 해석을 확인하고, 실행 중 버전과 디스크 버전을 비교해 "재시작하면 새 코드가 로드된다" 는 점도 함께 보여 줍니다.

작업 보존 재시작 점검

위 팝업의 "버전 차이"(실행 vs 디스크)는 위험 신호가 아니라 재시작 시 새 코드가 로드된다는 뜻입니다. 먼저 restart-check 로 PASS 를 확인한 뒤 restart-all 을 실행하면 안심하고 전체 업그레이드를 할 수 있습니다.

15.2 드라이런 FAIL 시 재시작 재확인

restart-server/restart-all실행 직전에 위 드라이런을 자동으로 한 번 돌립니다. 모든 항목이 PASS 면 곧바로 재시작하지만, 하나라도 FAIL 이면 그대로 강행하지 않고 어떤 점검이 실패했는지 보여 주며 "그래도 재시작할까요?" 를 다시 묻습니다. 작업을 잃을 수 있는 위험한 동작이라 기본 선택은 취소(붉은 강조)입니다. ←→ 로 이동 · Enter 확정 · y/n 단축 · Esc(=취소)로 닫습니다.

재시작 확인

FAIL 항목(예: 패널 master fd 보유 (0/4))은 그 상태로 재시작하면 해당 셸·실행 중 프로그램이 보존되지 않을 수 있다는 경고입니다. 확신이 없으면 취소를 고른 뒤 restart-check 로 원인을 확인하세요.


16. 설정 파일

~/.config/pytmux/config(또는 ~/.pytmux.conf, 또는 PYTMUX_CONFIG 환경변수)를 읽습니다. 탐색 순서는 인자 경로 → $PYTMUX_CONFIG$XDG_CONFIG_HOME/pytmux/config~/.config/pytmux/config~/.pytmux.conf 입니다. 예시는 pytmux.conf.example 를 참고하세요.

직접 편집하지 않아도 settings 화면(§17)에서 바꾼 config-scoped 설정은 이 파일의 해당 set 줄에 자동 기록됩니다(없으면 추가). 주석· 키 바인딩 등 손으로 쓴 내용은 그대로 보존됩니다.

# prefix 키 변경 (기본: Ctrl-b)
set prefix C-a

# 마우스 on/off
set mouse on

# 휠 스크롤백을 pytmux 가 처리(기본). 일부 터미널에서 스크롤백이 안 열릴 때 유지.
set alt-scroll on              # off = 터미널 기본 동작에 맡김

# 붙여넣기 시 패널 테두리(박스드로잉) 제거(기본 ON, 일반적으로 유지)
set strip-box-drawing on       # off = 정화 없이 클립보드 원문 그대로 붙여넣기

# 상단 탭바: always(기본)=탭 하나여도 표시 / auto=2개 이상일 때만
set tab-bar always

# 복사 모드 키 스타일: vi(기본) 또는 emacs
set mode-keys vi

# 새 탭/패널 시작 디렉토리: current(현재 패널)/home/<경로>
set default-path current

# 상태줄 색(미지정 시 textual-dark 테마)
# set status-bg green
# set status-fg black

# 상태줄 포맷(#S 세션, #h 짧은 호스트, #{pane_title}, strftime)
set status-left  " [#S] "
set status-right " #{pane_title}#h %H:%M %Y-%m-%d "

# prefix 후 키 바인딩: bind <key> <command...>
bind | split-window -h
bind - split-window -v
bind r rename-tab
bind k kill-pane

# prefix 없이 바로 발동하는 root 바인딩: bind -n <key> <command...>
# (내장 키 ESC/`/F12/prefix/Ctrl+V 가 우선. 매칭된 키는 셸로 전달되지 않으니
#  셸/앱 키와 안 겹치는 F1~F11·M- 계열을 권장)
bind -n F2 new-window
bind -n M-Right next-tab

런타임에 설정 파일을 고치지 않고도 바인딩을 바꾸려면 bind-key/unbind-key/list-keys 명령을 사용합니다(§17) — bind-key -n/unbind-key -n 이 root 테이블입니다.


17. 명령 레퍼런스

명령 프롬프트(prefix :)나 외부 CLI(pytmux cmd <명령>)에서 사용합니다. 탭 명령은 tmux 의 윈도우 명령 이름과 별칭을 둘 다 받습니다.

💡 통합 설정 화면: 흩어진 설정을 외우지 않아도 settings(별칭 config, preferences, prefs; prefix Enter 메뉴의 "⚙ 설정…")로 한 화면에서 보고 바꿀 수 있습니다. 좌측 세로 카테고리 탭(표시·입력/키·동작·상태줄·Claude·고급)을 클릭하거나 Tab/Shift+Tab 으로 그 카테고리 위치로 점프하고, ↑↓ 이동 · ←→ 로 값 변경(켜짐/꺼짐· 선택지를 펼쳐 현재값 강조, 즉시 적용) · 문자열은 Enter 입력 · Claude·플러그인 전용 설정은 링크로 엽니다. config 파일에 영속되는 설정(마우스·prefix·흐리게·상태줄 등)은 바꾸면 사용자 config 파일에 자동 기록되어 재시작해도 유지됩니다.

자세한 사용법과 카테고리별 설정 표는 Settings-Popup 페이지를 참고하세요.

통합 설정 화면(:settings)

패널

명령 동작
split-window -h / splitw -h 좌우 분할 (-v = 상하)
kill-pane / killp 현재 패널 삭제
resize-pane -Z 줌 토글
swap-pane -t <n> n 번 패널과 교환
rotate-window 윈도우 내 패널 회전
pane-border on|off 단일 패널 테두리 표시 토글

탭/윈도우

명령 동작
new-tab / new-window / newt / neww 새 탭
kill-tab / kill-window 탭 삭제
rename-tab <name> / rename-window <name> 탭 이름변경
select-tab <n> / select-window <n> / selectt / selectw n 번 탭 선택
next-tab / prev-tab 다음/이전 탭
move-tab -t <n> / move-tab-left|right|first|last 탭 이동
swap-tab -t <n> 탭 교환
choose-tree / choose-tab 탭/패널 트리 선택기
ncd (별칭 nc) 디렉토리 트리(NCD)로 이동 — §9.4
remote-attach <host> 원격 pytmux 서버의 탭 전부를 분홍 탭으로 병합 — §14.1
remote-detach [host] 그 원격(생략 시 전부)의 분홍 탭 모두 닫기(원격 서버는 유지)

레이아웃

명령 동작
layout-save <name> 현재 탭 레이아웃 저장
layout-load [name] 저장 레이아웃을 현재 탭에 덮어쓰기(생략 시 선택기)
layout-load-new <name> 저장 레이아웃을 새 탭으로 열기
next-layout 프리셋 레이아웃 순환

UI / 오버레이

명령 동작
clock-mode 현재 패널을 큰 블록 시계로 덮기(토글)
calendar-mode / cal 이번 달 달력 오버레이 토글
open-clock / close-clock 시계 모드 멱등 켜기/끄기
open-calendar / close-calendar 달력 멱등 켜기/끄기
settings / config / preferences 통합 설정 화면(모든 설정을 한 곳에서, config 영속)
ncd / nc 디렉토리 트리(루트→cwd 펼침·찾기·Enter cd)
ime-indicator IME(한/영) 상태 배지 토글 — 활성 패널 커서 줄의 오른쪽 끝에 표시. macOS·Windows 는 한/영 키만 눌러도(입력 전) 즉시 반영
inactive-dim on|off 한 탭에 패널이 둘 이상일 때 비활성 패널을 흐리게(활성 식별) 토글
inactive-dim-ratio [0~0.8] 비활성 패널 흐리게 세기 조정(클수록 어두움, 기본 0.18; 인자 생략 시 현재 값 표시)

클립보드

명령 동작
paste-clipboard OS 클립보드(텍스트/이미지) 붙여넣기 (= Ctrl+V)
strip-box-drawing on|off 붙여넣기 시 패널 테두리(박스드로잉) 제거 토글(기본 ON)
send-escape 활성 패널에 ESC 전달

Claude

명령 동작
token-log / token-usage 토큰 사용량 팝업(기간·계정·세션 뷰 + 실측 한도)
token-saver / claude-settings Claude 보조 설정 팝업(자동재개·세션종료 토큰화면·오토모드·프롬프트 클리어·경고)
usage-view 사용 한도 막대 + 다음 리셋 카운트다운 화면
claude-usage / usage-panel 그림자 /usage 갱신 / 한도 막대 그래프
prompt-history / prompts / ph Claude 프롬프트 히스토리 팝업·미리보기
model 모델·컨텍스트 변경 팝업(/model 주입)
claude-rules 시작 규칙 편집(새 세션/clear 후 자동 주입)
claude-auto-mode on|off idle 시 권한모드 자동 오토모드 전환
auto-launch on|off 새 세션 시작 시 /rc(원격 제어)+권한 auto 1회 자동 적용(기본 ON)
auto-retry on|off 전송 에러 1분 뒤 계속 자동 주입(기본 ON)
auto-resume on|off 토큰 리밋 자동 재개
prompt-clear on|off 응답 완료마다 진행상황 문서화 + /clear
auto-token-on-exit on|off 세션 종료 시 토큰 사용량 화면 표시(기본 ON)

키 바인딩 / 진단 / 운영

명령 동작
bind-key <키> <명령> / unbind-key <키> / list-keys 런타임 키 바인딩
capture-output on|off 패널 출력 캡처(진단) 토글
reconnect / resync IPC 강제 재접속(degraded 회복, 서버 보존)
remote-attach <host> / remote-detach 원격 pytmux 의 탭을 분홍 탭으로 어태치/해제
nest-auto-attach on|off 원격에서 pytmux 실행 시 거부 대신 자동 remote-attach 승격(기본 ON)
restart-server 작업 보존 재시작(셸/PTY 유지, 서버 코드만 교체)
restart-all / restart-check 세션유지 재시작 + 클라 relaunch / 그 드라이런
version 클라/서버 버전·업타임 팝업
detach 앱만 떼기(셸 유지)
kill-server 서버와 모든 탭/셸 종료
help / commands / ? 전체 명령 목록

18. 키 바인딩 레퍼런스

prefix 기본값은 Ctrl-b 입니다 (설정 set prefix C-a 등으로 변경 가능).

동작 동작
prefix % 좌우 분할 prefix " 상하 분할
prefix x 패널 삭제(확인) prefix z 패널 줌 토글
prefix o 다음 패널 prefix ←↑↓→ 패널 이동
prefix H/J/K/L 패널 경계 이동 prefix c 새 탭
prefix , 탭 이름변경 prefix & 탭 삭제(확인)
prefix . 탭 이동(인덱스) prefix : 명령 입력
prefix n / p 다음/이전 탭 prefix 1-9 탭 선택(1번부터)
prefix d detach(셸 유지) prefix [ 스크롤백 모드
prefix t 시계 모드 prefix l 직전 탭
prefix Enter 메뉴 열기 prefix R 토큰리밋 자동재개 토글
ESC 명령 모드 F12 명령 프롬프트 바로 열기
prefix F12 중첩 시 prefix 패스스루 토글
  • ESC 명령 모드: ←↑↓→ 패널 이동, 위 방향키로 탭바 포커스, h Claude 헤더 포커스, : 명령 프롬프트.
  • 스크롤백 모드(prefix [): ↑/↓, PageUp/PageDown, g/G, q 종료.
  • Shift 조합(Shift+Enter/Shift+Tab/Shift+Escape)은 prefix 없이 활성 패널로 전달됩니다.
  • 한글 IME 가 켜져 있어도 단축키가 동작합니다(두벌식 자모를 QWERTY 키로 자동 변환).

IME 한/영 배지


19. 외부에서 서버 제어 (CLI)

앱 안에 들어가지 않고도 셸에서 서버를 제어할 수 있습니다.

pytmux                            # attach (없으면 기동)
pytmux attach                     # 실행 중 서버에 attach
pytmux ls                         # 탭/패널 요약
pytmux kill-server                # 서버와 모든 탭/셸 종료
pytmux cmd new-tab                # 외부에서 명령 실행
pytmux cmd split-window -h        # (명령 프롬프트와 동일한 구문)
pytmux cmd restart-all            # 서버+클라 전체 재시작(작업 보존, 클라 코드 갱신)
pytmux --socket PATH …            # 사용할 소켓 경로 직접 지정

렌더 진단 (화면 없이)

프로그램 출력을 녹화한 뒤 텍스트 프레임으로 재생해 렌더링을 점검합니다.

# 옵션은 파일명 앞, 실행할 명령은 -- 뒤
python3 pytmux.py record --cols 120 cap.raw -- ls -C
python3 pytmux.py replay --cols 120 cap.raw --ruler   # 텍스트로 덤프(+열 자)

20. 문제 해결 FAQ

Q. 휠을 굴려도 스크롤백이 안 보입니다. A. 일부 터미널(iTerm2 등)이 alt-screen 에서 휠을 화살표로 바꿉니다. set alt-scroll on (기본) 으로 두면 pytmux 가 휠을 직접 처리합니다. 그래도 안 되면 prefix [ 로 스크롤백 모드에 들어가 키보드로 보세요.

Q. 패널 외곽선이 빨갛습니다. A. 클라↔서버 IPC 지연이 크다는 표시(degraded)입니다. 보통 자동으로 회복되며, 고착되면 reconnect 를 실행하세요. 셸/Claude 는 죽지 않습니다(§14).

Q. 앱을 닫았는데 셸이 살아 있나요? A. 그렇습니다. 서버가 PTY 를 보유하므로 detach/창 닫기로 셸은 죽지 않습니다. 다시 pytmux 하면 이어서 붙습니다. 정말 다 끝내려면 kill-server 를 쓰세요 (§13).

Q. prefix H/J/K/L(패널 크기)이 한글 입력 중엔 안 먹습니다. A. 두벌식에서 시프트 구분이 안 되기 때문입니다. 마우스 경계 드래그를 쓰거나 영문 입력 상태에서 누르세요(§5.3).

Q. 중첩(ssh 안에서 또 pytmux)인데 prefix 가 충돌합니다. A. prefix F12 로 prefix 패스스루를 토글해 안쪽 인스턴스로 prefix 를 흘려보내세요.

Q. 명령 이름이 기억나지 않습니다. A. 명령 프롬프트에서 ? 또는 help 를 누르면 전체 목록을 방향키로 고를 수 있고, 타이핑하면 회색 고스트 자동완성이 뜹니다(§9.2).


관련 문서

Clone this wiki locally