Claude Chill: 터미널에서 Claude Code의 깜빡임 현상 수정하기
(github.com/davidbeesley)- Claude Chill은 Claude Code가 터미널 전체를 반복적으로 다시 그릴 때 발생하는 지연과 깜빡임 문제를 완화하는 PTY 프록시 도구
- Claude Code가 사용하는 동기화 출력(sync blocks) 을 가로채고, VT100 기반 렌더링으로 화면의 변경된 부분만 갱신
- 히스토리 버퍼를 유지해 스크롤백이 가능하며, Ctrl+6 키로 ‘룩백 모드’에 진입해 전체 출력 기록을 확인할 수 있음
- 일정 시간 입력이 없을 경우 자동으로 히스토리를 덤프하는 자동 룩백(auto-lookback) 기능 제공
- Linux와 macOS에서 동작하며, 터미널 성능과 가독성을 개선하는 경량 솔루션
개요
-
Claude Chill은 Claude Code의 터미널 출력 문제를 해결하기 위해 만들어진 PTY 프록시 프로그램
- Claude Code는 출력 전체를 동기화 블록으로 감싸 한 번에 렌더링하지만, 이 과정에서 수천 줄의 전체 화면 갱신이 발생
- 이로 인해 지연, 깜빡임, 스크롤백 손실 등의 문제가 생김
- Claude Chill은 터미널과 Claude Code 사이에 위치해 출력 차이만 반영하고, 히스토리 버퍼를 유지
주요 기능
- Sync 블록 가로채기: Claude Code가 보내는 대규모 동기화 블록을 감지해 처리
- VT 기반 렌더링: VT100 에뮬레이터를 사용해 화면 상태를 추적하고 변경된 부분만 출력
-
히스토리 유지 및 룩백 모드: 출력 내용을 버퍼에 저장해 과거 로그를 확인 가능
- Ctrl+6 키로 룩백 모드 진입
- Claude의 출력을 일시 중단하고 전체 히스토리를 터미널에 표시
- 다시 키를 누르거나 Ctrl+C로 종료 가능
-
자동 룩백(auto-lookback) : 일정 시간(기본 15초) 입력이 없으면 자동으로 히스토리를 덤프
-
-a 0옵션으로 비활성화 가능 - 자동 덤프 시 화면이 잠시 깜빡일 수 있음
-
설치 및 사용
- 설치:
cargo install --path crates/claude-chill - 실행 예시:
- 기본 실행:
claude-chill claude - 인자 전달:
claude-chill -- claude --verbose - 히스토리 크기 지정:
claude-chill -H 50000 claude - 자동 룩백 비활성화:
claude-chill -a 0 claude
- 기본 실행:
- 주요 옵션:
-
-H, --history: 히스토리 최대 줄 수 (기본 100000) -
-k, --lookback-key: 룩백 모드 전환 키 -
-a, --auto-lookback-timeout: 자동 룩백 대기 시간(ms)
-
설정 파일
- 위치:
- Linux:
~/.config/claude-chill.toml - macOS:
~/Library/Application Support/claude-chill.toml
- Linux:
- 주요 항목:
-
history_lines: 히스토리 최대 줄 수 -
lookback_key: 룩백 모드 전환 키 -
refresh_rate: 렌더링 FPS -
auto_lookback_timeout_ms: 자동 룩백 시간
-
키보드 프로토콜 및 키 설정
-
Kitty Keyboard Protocol을 지원하는 터미널(Kitty, Ghostty, WezTerm 등)에서 자동으로 모드 전환
- Claude Code가 Kitty 모드를 활성화하면 Claude Chill도 자동으로 해당 인코딩을 인식
- 키 형식:
[modifier][key]- 예:
[f12],[ctrl][g],[ctrl][shift][j]
- 예:
- 기본 키 Ctrl+6은 ASCII 0x1E을 전송하며, 대부분의 터미널과 충돌하지 않음
- macOS에서는 Ctrl+Shift+6 (Ctrl+^) 로 동일 동작
작동 방식
- Claude Chill은 가상 터미널(PTY) 을 생성하고 Claude Code를 자식 프로세스로 실행
-
입출력 프록시 구조:
Terminal ⇄ claude-chill ⇄ Claude Code - 주요 처리 단계:
- 입력: Claude로 전달, 룩백 키만 차단
- 출력: 동기화 블록을 탐지하고 비동기 출력은 그대로 전달
- VT 에뮬레이션으로 화면 상태 추적
- 이전 상태와 비교해 차이만 렌더링
- 히스토리 버퍼 유지 및 룩백 모드 지원
- SIGWINCH, SIGINT, SIGTERM 등의 신호를 Claude로 전달
주의 사항
- 개인 편의를 위해 개발된 도구로, 광범위한 테스트는 진행되지 않음
- Linux와 macOS에서 동작 확인
- 중요 시스템이나 인프라 환경에서는 사용을 권장하지 않음
- MIT 라이선스
Hacker News 의견들
-
나는 Claude Code의 TUI 렌더링을 담당하고 있음
오랫동안 불편을 드려 죄송하지만, 오늘 모든 사용자에게 차등 렌더러(differential renderer) 를 배포했음
렌더링 시스템을 완전히 새로 작성했고, 이제 세션의 약 1/3만이 간헐적인 깜빡임을 경험함. 연속적인 깜빡임은 거의 사라졌음
또한 VSCode 터미널과 tmux에 동기화 출력(DEC mode 2026) 지원 패치를 제출했고, 이미 병합되었음
완전한 무깜빡임을 원한다면 Ghostty를 추천함. 관련 내용은 이슈 #769 코멘트, xterm.js PR #5453, tmux PR #4744에서 확인 가능함- 왜 이렇게 중요한 문제에 대해 공식 커뮤니케이션이 부족했는지 궁금함
GitHub 이슈들(#1913, #826, #3648)에 매일 댓글이 달리는데, 12월 롤백 이후 Anthropic의 답변이 거의 없었음
기술적 난이도는 이해하지만, 소통 부족이 사용자 신뢰를 잃게 만든 것 같음 - $200 플랜을 쓰고 있는데 API 요청 타임아웃이 자주 발생함
에이전트는 한두 개만 돌리고 있는데도 이런 현상이 생김. 혹시 이전 요금제의 rate limit이 남아 있거나, 긴 컨텍스트 세션이 원인일 수 있을지 궁금함
그래도 이 도구 덕분에 전에 불가능했던 앱을 만들고 있어서 정말 흥미로움 -
이슈 #769에 좀 더 관심을 가져줬으면 함
macOS iTerm에서 창 포커스를 잃을 때마다 화면이 위로 스크롤되어 너무 불편했음 - Ghostty를 추천하기 전에 이 글을 읽어보길 권함
Ghostty 1.0부터 메모리 누수가 있었고, Claude Code 같은 CLI 앱이 그 조건을 자주 만들어 문제를 드러냈음
수정은 이미 머지되었고 1.3 릴리스에 포함될 예정임 - 혹시 TUI와 UI를 분리해서 누구나 자신만의 인터페이스를 만들 수 있게 할 계획이 있는지 궁금함
Zed처럼 유연하게 구성할 수 있다면 훨씬 나은 경험이 될 것 같음
- 왜 이렇게 중요한 문제에 대해 공식 커뮤니케이션이 부족했는지 궁금함
-
몇 달 동안 Claude Code를 안 썼는데 아직도 flicker가 해결되지 않았다니 놀라움
오픈소스화하지 않는 이유가 경쟁 때문이 아니라 코드베이스의 혼란스러움 때문일지도 모른다는 생각이 듦- 문제의 원인은 Ink 라이브러리가 매 업데이트마다 전체를 지우고 다시 그리는 방식 때문임
이슈 #769에 관련 내용이 있음
나는 로컬에서 npm 패키지를 패치했지만 완벽하지 않음. 구조적으로 렌더링 방식을 바꿔야 함
참고로 OpenAI Codex는 Rust + ratatui로 작성되어 이런 문제가 없음 - 내 추측으로는 Claude Code 팀이 Claude Code로 Claude Code를 개발하고 있어서 문제 해결이 느린 것 같음
이런 복잡한 버그는 결국 사람이 직접 주말에 앉아서 고쳐야 하는데, 에이전트만 돌리고 있는 듯함 - Anthropic이 “90%의 코드는 AI가 쓸 것”이라 말했지만, 정작 기본적인 flicker 버그도 못 고치는 건 아이러니함
다른 CLI 도구들(opencode, codex, gemini, droid 등)은 이런 문제가 없음 - 팀이 너무 많은 이슈와 빠른 모델 변화 속에서 버티고 있는 듯함
tmux 환경에서 직접 써봤다면 얼마나 고통스러운지 알 텐데, 그래도 조금은 이해해주고 싶음 - Codex가 Claude Code보다 훨씬 부드럽고 안정적임. Rust로 작성된 게 큰 차이를 만드는 듯함
- 문제의 원인은 Ink 라이브러리가 매 업데이트마다 전체를 지우고 다시 그리는 방식 때문임
-
나는 Claude Code를 쓰고 싶지만, Ghostty의 스크롤백 기능이 깨져서 사용할 수 없음
PTY 프록시가 출력 스트림을 가로채서 Ghostty의 내부 버퍼 접근이 막힘- 나는 Ghostty에서 스크롤 문제를 못 느꼈음. 다만 스크롤바 부재는 아쉬움
- tmux를 써보길 권함. 부드러운 스크롤은 없지만 다양한 기능이 있어서 만족스러움
-
flickering이 정확히 뭔지 궁금했음
가끔 Claude Code가 갑자기 위로 스크롤되어 다시 내리기 힘들고, 터미널을 재시작해야 정상으로 돌아옴- 나도 같은 문제를 겪고 있음. macOS iTerm2에서도 동일하며, 세션 재시작만이 임시 해결책임
- VSCode 터미널에서는 Claude Code뿐 아니라 Gemini에서도 더 심했음. Ghostty로 바꾸니 완전히 해결됨
-
입력창을 터미널 하단에 고정하는 토글 기능이 있었으면 좋겠음
채팅과 입력창 사이를 계속 스크롤하는 게 번거로움- 나도 tmux–mosh–모바일 환경에서 쓰다가 같은 생각을 했음
모바일 사용성 측면에서 게임 체인저급 기능이 될 것 같음
- 나도 tmux–mosh–모바일 환경에서 쓰다가 같은 생각을 했음
-
readme.md의 포맷을 보니 Claude Code가 직접 작성한 듯한 느낌이 들어 흥미로움
- 하지만 CC 자체가 글을 쓰는 건 아니고, 다른 모델(Codex, Gemini 등) 을 통해 작성된 결과일 가능성이 높음
-
이번 업데이트가 최근 몇 달간 Claude Code에 가장 큰 기여인 듯함
바로 설치하고 테스트해볼 예정임 -
관련 소식으로, “Claude Code의 터미널 렌더링을 85% 개선했다”는 이전 게시글을 봤음
- 하지만 여전히 스크롤 문제는 남아 있음
-
드디어 flickering을 줄여줘서 고마움. 두통 유발 버그였는데 이제 좀 살 것 같음
Anthropic이 이 문제를 빨리 완전히 해결해주길 바람 -
Codex는 세션이 길어져도 훨씬 반응성이 좋음, Claude는 시간이 지나면 버벅거림
- Codex가 Rust로 작성된 게 확실히 차이를 만드는 듯함