리눅스 콘솔에서 살아가기 — 파트 2: casty, TTY용 풀 브라우저
Source: Dev.to
소개
“GUI는 선택 사항이 아니다.” — 익명
파트 1에서 저는 bcon을 만들었습니다 – 리눅스 콘솔용 GPU 가속 터미널 에뮬레이터.
하지만 개발자라면 피할 수 없는 것이 하나 있습니다: 웹 브라우저.
AI 코딩 에이전트가 연구를 처리할 수는 있지만, 자신의 웹 앱이 올바르게 렌더링되는지 확인하고, GitHub Actions, PR 등을 검토하는 등 여전히 실제 브라우저가 필요합니다.
기존 옵션
| 도구 | 엔진 | 렌더링 | JavaScript | 사이트 충실도 | GUI 없음 환경 | 텍스트 복사 | 마우스 | 설치 |
|---|---|---|---|---|---|---|---|---|
| eww | Emacs shr | 텍스트 + 제한된 이미지 | ❌ | 🔴 낮음 | ✅ (Linux) | ✅ | ❌ | M-x package-install |
| browsh | headless Firefox | ANSI 블록 문자 | ✅ | 🟡 낮음 | ✅ (Linux) / ❌ (Mac) | ✅ | 🔺 | go install |
| Carbonyl | Chromium fork | Unicode blocks (▄ + 24‑bit) | ✅ (WebGL/WebGPU) | 🟡 중간 | ✅ | ✅ | ✅ | npm i -g carbonyl |
| awrit | Electron | Kitty Graphics | ✅ | 🟢 높음 | ❌ (디스플레이 서버 필요) | ❌ | ✅ | curl | bash |
| casty ⭐ | Chrome headless‑shell | Kitty Graphics | ✅ | 🟢 높음 | ✅ (X11 없음, SSH 친화적) | ✅ (Alt + C) | ✅ | npm i -g @sanohiro/casty |
기존 도구 중 어느 것도 모든 항목을 만족하지 못했으므로, 저는 casty를 만들었습니다.
casty
- Repository:
- Install globally:
npm i -g @sanohiro/casty
casty는 Kitty‑Graphics와 호환되는 모든 터미널에서 실행됩니다 (예: bcon, Ghostty, Kitty).
작동 방식
- Chrome headless‑shell을 실행합니다 (첫 실행 시
~/.casty/에 자동 다운로드). - WebSocket을 통해 CDP (Chrome DevTools Protocol)와 연결합니다.
- 스크린샷을 캡처하고 Kitty Graphics Protocol을 사용해 터미널에 스트리밍합니다.
- 터미널에서 발생한 키보드와 마우스 이벤트를 CDP를 통해 Chrome으로 전송합니다.
쿠키와 스토리지는 ~/.casty/에 유지되므로 Google 등 서비스에 정상적으로 로그인할 수 있습니다.
데모 하이라이트
- casty가 Linux 콘솔에서 bcon 내부에서 실행되는 모습
- bcon에서 casty 내부의 YouTube 동영상 재생
- Claude Code와 함께 React 앱을 편집하면서 casty에서 실시간으로 변경 사항을 확인 (UI는 일본어로 표시).
변경 사항이 즉시 반영되며, 워크플로우는 “그대로 작동합니다.” 😎
결론
casty를 사용하면 순수 Linux 콘솔만으로 최신 웹을 탐색하고, 동영상을 시청하며, 인터랙티브하게 개발할 수 있습니다. 앞으로도 더 많은 기능이 추가될 예정입니다.