0020. Claude 탭은 Orca의 Native Chat을 가져와 채팅 화면과 자체 입력창으로 쓴다
This content is not available in your language yet.
- 상태: 채택
- 날짜: 2026-10-06
- 관련: 0019-claude-chat-transcript.md, 0012-claude-hook-auto-install.md, THIRD_PARTY_NOTICES.md, stablyai/orca
Claude 탭은 채팅 뷰 아래에 터미널을 두고, 터미널을 Claude Code 입력 박스만 보이게 잘라서 입력을 받았다. 자르기는 터미널 화면의 가로줄을 찾아 입력 박스 위치를 추측하는 방식이라, Claude Code 화면이 바뀌면 깨진다. 채팅 뷰는 transcript를 단순하게 해석해서 도구 결과, diff, 이미지, 중단 표시를 보여 주지 못했고, 파일 감시는 파일 교체나 이벤트 누락에 약했다.
Orca(MIT)는 같은 문제를 “Native Chat”으로 이미 풀었다. transcript 감시, 줄 해석, 도구 묶음과 diff 카드, pty에 쓰는 자체 입력창, 권한과 질문 카드가 있다.
Orca v1.4.215의 Native Chat 중 Claude, 로컬 경로만 가져와 2~3차 구현을 대체한다. 입력은 채팅 화면 아래의 자체 입력창이 pty에 쓴다. 터미널은 채팅 화면 아래에 계속 실행되고, 전환 버튼과 단축키로 볼 수 있다.
- Claude는 지금처럼 터미널(pty)에서 실행한다. 하네스, 훅, statusLine은 그대로 동작한다.
- 입력창은 Orca와 같은 순서(Ctrl+U, 본문, 500ms, Enter)로 pty에 쓴다.
- 권한 요청은 기존
PermissionRequest훅에 요청 내용 필드만 더해 카드로 답한다. 훅 이벤트는 더하지 않는다(ADR 0019 유지). - 3차의 터미널 자르기(
inputRegion)는 지운다. - 가져오지 않는 것: Agent SDK 구조화 세션, WSL과 원격 런타임, Claude 외 에이전트, 가상 스크롤, 메시지 레일, 음성 입력, 모델 선택기, TipTap 편집기, Orca 앱 상태와 Tailwind.
- 저작권 고지는
THIRD_PARTY_NOTICES.md의 Orca 항목으로 충족하고, 파일마다 주석을 달지 않는다.
근거 / 검토한 대안
섹션 제목: “근거 / 검토한 대안”- 3차 구조 유지(터미널을 잘라 입력): 입력이 Claude Code 그대로라 기능 손실이 없지만, 자르기가 화면 모양 추측에 기대고 채팅 화면과 입력이 분리되어 보인다.
- Agent SDK로 직접 구동: 메시지와 권한 요청을 구조화된 이벤트로 받지만, TUI 전용 기능(statusLine 등)이 빠지고 Belloga의 상태 표시가 statusLine에 기대고 있다. “터미널에 친 claude”라는 요구와도 어긋난다.
- Orca Native Chat 전체 이식: 약 420개 파일, 7만 줄이고 대부분 SDK, WSL, 원격, 다른 에이전트 지원이라 쓰지 않는다.
- 채택안: Claude와 로컬에 필요한 부분(약 60개 파일, 5,000줄)만 가져온다. Orca에서 검증된 감시, 해석, 전송 규칙을 쓰면서 Claude는 터미널에서 그대로 돌아간다.
- transcript 형식과 TUI 키 입력(Ctrl+U, bracketed paste, 메뉴 숫자 키)은 공개 API가 아니다. Claude Code가 바뀌면 해석이나 전송이 깨질 수 있지만, 터미널로 전환하면 계속 쓸 수 있다.
- 선택지 질문 카드는 transcript에 질문이 먼저 기록되어야 뜬다. 뜨지 않으면 터미널 전환으로 답한다.
- Orca와 다르게 하는 것: 메시지 정렬은 파일 순서, thinking은 흐린 기울인 글로 구분, sidechain 줄은 숨김, 세션 파일은 훅 경로만 사용.
- Orca를 다시 가져와 맞출 때를 위해, 계획 문서에 Orca 원본 경로와 이식 방식(복사, 축소, 재작성)의 대응표를 남긴다.