입력창이 더는 안 흔들린다
Claude가 작업하는 동안 화면이 번쩍이고, 출력이 쏟아질 때 스크롤이 맨 위로 튀어 오르고, 긴 세션에서 메모리가 슬금슬금 차오르던 경험. Claude Code를 오래 쓴 사람이면 익숙하다. Fullscreen 렌더링은 그 세 가지를 한 번에 잡으려고 나온 새 렌더링 경로다. 대화를 터미널의 alternate screen buffer에 그린다. vim이나 htop이 화면을 통째로 차지하는 그 방식이다.
/tui fullscreen 한 줄이면 켜진다. 대화는 그대로 유지된 채 fullscreen으로 다시 뜬다. 세션 중간에 켜도 맥락을 잃지 않는다. Claude Code v2.1.89 이상에서 동작하는 리서치 프리뷰 기능이다. (Fullscreen 렌더링 공식 문서)
주의: 이 글은 전부 리서치 프리뷰 기준이다. 동작 방식·키 바인딩·설정 키 이름 모두 정식 출시 전에 바뀔 수 있다.
한 줄 정의 — fullscreen은 창 최대화가 아니다
먼저 오해부터 풀고 간다. 여기서 fullscreen은 터미널 창을 최대화한다는 뜻이 아니다. Claude Code가 터미널의 그리는 표면(drawing surface)을 vim처럼 통째로 가져간다는 뜻이다. 창 크기와 무관하게, 작은 창에서도 똑같이 동작한다.
기존 렌더러(classic)는 대화를 터미널의 native scrollback에 차곡차곡 쌓는다. 매 업데이트마다 화면을 다시 그리면서 터미널로 많은 데이터를 흘려보낸다. Fullscreen은 다르다. 지금 화면에 보이는 메시지만 렌더 트리에 둔다. 터미널로 보내는 데이터량이 확 줄어든다.
왜 나왔나 — 깜빡임·메모리·스크롤 점프
세 가지 문제를 노린다.
| 문제 | classic 렌더러 | fullscreen 렌더링 |
|---|---|---|
| 화면 깜빡임 | 출력 스트리밍 중 번쩍임 발생 | alternate screen buffer로 제거 |
| 메모리 | 대화가 길어질수록 증가 | 보이는 메시지만 유지, 일정하게 |
| 스크롤 점프 | 작업 중 맨 위로 튀어 오름 | 입력창 하단 고정, 점프 없음 |
차이가 가장 크게 느껴지는 곳은 렌더링 처리량(throughput)이 병목인 터미널이다. 공식 문서는 VS Code 통합 터미널, tmux, iTerm2를 콕 집는다. 이런 환경에서 화면이 번쩍이거나 스크롤이 튀었다면 fullscreen이 정확히 그 증상을 겨냥한다.
켜고 끄는 법
가장 쉬운 방법은 대화 안에서 슬래시 명령을 실행하는 것이다.
/tui fullscreen # fullscreen 렌더링으로 전환 (대화 유지된 채 재시작)
/tui default # classic 렌더러로 복귀
/tui # 인자 없이 실행하면 현재 어떤 렌더러인지 출력
/tui 명령은 tui 설정을 ~/.claude/settings.json에 저장하고 그 값으로 다시 띄운다. 그래서 다음 세션에도 선택이 유지된다.
환경 변수로 켤 수도 있다. /tui 명령이 생긴 v2.1.110 이전 버전에서는 이쪽이 유일한 방법이었다.
CLAUDE_CODE_NO_FLICKER=1 claude
tui 설정과 CLAUDE_CODE_NO_FLICKER 환경 변수는 같은 의미다. /tui 명령은 재시작하는 프로세스에서 CLAUDE_CODE_NO_FLICKER를 지워, 새로 쓴 설정 값이 우선 적용되게 한다.
fullscreen이 켜졌는지 확인하는 가장 직관적인 신호는 입력창이다. 출력이 쏟아져도 입력창이 화면 하단에 고정돼 움직이지 않으면 fullscreen이 동작 중이다. classic 렌더러에서는 입력창이 출력을 따라 위로 밀려 올라간다.
두 렌더러는 어디서 갈리나
대화가 어디에 저장되느냐가 갈림길이다. 그 한 가지 차이에서 검색·복사 동작이 전부 달라진다.
flowchart TD
A[Claude Code 출력] --> B{렌더러 선택}
B -->|classic| C[native scrollback에 누적]
B -->|fullscreen| D[alternate screen buffer]
C --> E[Cmd+f·tmux 검색 가능]
C --> F[긴 세션서 메모리 증가]
D --> G[보이는 메시지만 렌더]
D --> H[메모리 일정·깜빡임 제거]
G --> I[검색은 transcript 모드]
대화가 alternate screen buffer에 살기 때문에, 터미널의 native scrollback에 의존하던 동작이 달라진다.
| 기존 (classic) | fullscreen | 비고 |
|---|---|---|
Cmd+f·tmux 검색으로 텍스트 찾기 | Ctrl+o로 transcript 모드 진입 후 /로 검색 | 검색 경로가 앱 안으로 |
| 터미널 native 드래그로 선택·복사 | 앱 안에서 선택, 마우스 떼면 자동 복사 | 클립보드는 앱이 채움 |
Cmd-클릭으로 URL 열기 | macOS는 Cmd-클릭, 그 외는 Ctrl-클릭 | OS별 키 차이 |
마우스가 붙는다
Fullscreen은 마우스 이벤트를 캡처해 Claude Code 안에서 처리한다. classic 렌더러에는 없던 기능이다.
- 입력창 클릭 — 입력 중인 텍스트의 원하는 위치로 커서를 옮긴다.
/명령·@파일 목록 클릭 — 제안 항목을 바로 선택한다. 호버하면 해당 행이 강조된다.- select 메뉴 클릭 — 권한 프롬프트,
/model,/config같은 선택지 목록을 클릭으로 고른다. (v2.1.187 이상) - 접힌 tool 결과 클릭 — 펼쳐서 전체 출력을 본다. 다시 클릭하면 접힌다.
Cmd(macOS)·Ctrl(Linux·Windows) + URL/파일 경로 클릭 — 링크는 브라우저로, 파일 경로는 기본 앱으로 연다. v2.1.181부터는 키 없이 그냥 클릭하면 링크를 열지 않는다. native 터미널 동작에 맞춘 변경이다.- 드래그로 선택, 휠로 스크롤 — 더블클릭은 단어, 트리플클릭은 줄 단위로 선택한다.
선택한 텍스트는 마우스를 떼는 순간 클립보드에 자동 복사된다. 이 동작이 거슬리면 /config에서 Copy on select를 끈다.
스크롤과 검색
스크롤도 앱 안에서 처리한다. 주요 단축키는 다음과 같다.
| 단축키 | 동작 |
|---|---|
PgUp / PgDn | 반 화면씩 위·아래 |
Ctrl+Home | 대화 맨 처음으로 |
Ctrl+End | 최신 메시지로 + auto-follow 재개 |
| 마우스 휠 | 몇 줄씩 스크롤 |
MacBook처럼 PgUp·PgDn 전용 키가 없는 키보드는 Fn과 방향키를 조합한다. Fn+↑이 PgUp, Fn+↓가 PgDn이다.
위로 스크롤하면 auto-follow가 멈춰, 새 출력이 다시 맨 아래로 끌어내리지 않는다. Ctrl+End를 누르거나 맨 아래로 내리면 다시 따라가기 시작한다.
검색은 transcript 모드에서 한다. Ctrl+o로 일반 프롬프트와 transcript 모드를 오간다. transcript 모드는 less 스타일 탐색을 지원한다.
| 키 | 동작 |
|---|---|
/ | 검색 시작 |
n / N | 다음·이전 매치로 이동 |
g / G | 맨 위·맨 아래로 |
Ctrl+o·Esc·q | transcript 모드 종료 |
터미널의 Cmd+f나 tmux 검색은 대화를 보지 못한다. 대화가 native scrollback이 아니라 alternate screen buffer에 있기 때문이다. 내용을 터미널로 다시 넘기려면 Ctrl+o로 transcript 모드에 들어간 뒤 [를 누른다. 전체 대화가 native scrollback에 평범한 텍스트로 다시 쓰이고, 그때부터 Cmd+f·tmux copy mode가 다시 통한다.
tmux와 함께 쓸 때
Fullscreen은 tmux 안에서도 동작한다. 세 가지만 주의한다.
첫째, 마우스 휠 스크롤은 tmux의 mouse mode가 필요하다. ~/.tmux.conf에 아래 한 줄을 넣고 설정을 다시 읽는다. 없으면 휠 이벤트가 Claude Code 대신 tmux로 간다.
set -g mouse on
둘째, iTerm2의 tmux 통합 모드(tmux -CC)와는 호환되지 않는다. 이 모드에서는 alternate screen buffer와 마우스 추적이 제대로 동작하지 않고, 더블클릭이 터미널 상태를 깨뜨릴 수 있다. tmux -CC 세션에서는 fullscreen을 켜지 말자. -CC 없는 일반 tmux는 문제없다.
셋째, tmux는 synchronized output을 지원하지 않아, Claude Code를 터미널에서 바로 실행할 때보다 redraw 중 깜빡임이 더 보일 수 있다. SSH 환경에서 특히 거슬리면 tmux 밖 별도 탭에서 실행하는 편이 낫다.
native 선택을 그대로 두고 싶다면
마우스 캡처는 가장 흔한 마찰 지점이다. SSH나 tmux 안에서 특히 그렇다. Claude Code가 마우스 이벤트를 가져가면 터미널의 native copy-on-select가 멈춘다. 드래그로 만든 선택은 Claude Code 안에만 있고, 터미널의 선택 버퍼에는 없다.
한 번만 native 선택을 쓰고 싶으면 터미널별 지정 키를 누른 채 드래그한다. Terminal.app은 Fn, iTerm2는 Option, VS Code·Cursor는 Shift다.
마우스 캡처 자체가 늘 거슬린다면, 깜빡임 제거와 일정한 메모리는 유지하면서 마우스 캡처만 끌 수 있다.
CLAUDE_CODE_NO_FLICKER=1 CLAUDE_CODE_DISABLE_MOUSE=1 claude
이렇게 하면 PgUp·PgDn·Ctrl+Home·Ctrl+End 키보드 스크롤은 그대로 살고, 선택은 터미널이 native로 처리한다. 대신 클릭으로 커서 옮기기, tool 결과 펼치기, URL 클릭, 앱 안 휠 스크롤은 포기해야 한다.
DBA·개발자가 지금 해 볼 것
긴 작업을 자주 돌리는 사람일수록 효과가 크다. 대형 리팩터링이나 수십 개 파일을 훑는 세션에서 classic 렌더러는 출력이 쌓이며 메모리가 늘고 스크롤이 튀지만, fullscreen은 일정하게 버틴다.
- 일단 켜 본다 —
/tui fullscreen실행하고 출력이 쏟아질 때 입력창이 고정되는지 본다. 안 맞으면/tui default로 즉시 복귀한다. - VS Code·tmux·iTerm2 사용자라면 우선순위 높게 — 깜빡임·스크롤 점프가 가장 심하던 환경이라 체감 차이가 크다.
- tmux면
set -g mouse on먼저 — 안 그러면 휠 스크롤이 tmux로 새어 나간다. - 검색 습관을 바꾼다 —
Cmd+f대신Ctrl+o→/. 터미널로 내용을 넘기려면 transcript 모드에서[.
복귀 경로가 명확한 것도 안심된다. /tui default로 돌아가거나, 저장된 설정과 무관하게 classic 렌더러를 강제하려면 CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1을 둔다. agent view나 claude attach로 여는 백그라운드 세션은 항상 fullscreen으로 뜬다는 점만 기억하면 된다.
정리
Fullscreen 렌더링은 Claude Code의 TUI를 vim·htop 계열로 한 단계 올린다. 핵심은 alternate screen buffer다. 깜빡임이 사라지고, 메모리가 일정해지고, 마우스가 붙는 대신, 검색·복사는 앱 안 동작으로 바뀐다. 손에 익히는 데 며칠 걸리지만, 긴 세션을 자주 돌리는 사람에게는 그만한 값을 한다.
아직 리서치 프리뷰다. 흔치 않은 터미널이나 특이한 설정에서는 렌더링 문제가 생길 수 있고, 그럴 땐 /feedback이나 claude-code GitHub 저장소로 터미널 이름·버전과 함께 알리면 된다. 동작이 바뀔 여지도 남아 있다. 그래도 한 줄(/tui fullscreen)로 켜고 한 줄(/tui default)로 끄는 비용이면, 한 번 켜 보고 판단하기에 충분히 싸다.