3-5. 다시 뜯어고치기, 그리고 플랫폼 확장 (8/1 ~ 8/17)
8월은 두 얼굴이다. 전반은 두 달 동안 쌓인 chrome·app_session을 뜯어 제자리에 놓는 정리 작업이고, 후반은 macOS 밖으로 나가는 확장(모바일·Windows·다국어)이다.
세션을 잃지 않게
8월 1일, "세션이 사라진다"는 문제를 정면으로 팠다. 세션이 유실되는 세 경로를 고치고 원인을 관측 가능하게 만들었으며, 죽은 host의 잔여 entry가 살아 있는 host를 밀어내지 못하게 했다. 앱 업데이트 경로도 손봐서 살아 있는 host를 exec으로 이어받되 업그레이드된 host만 채택하도록 했다.
다음 날에는 세션 아카이브 UI를 처음부터 끝까지 만들었다 — 카드 그룹화, 워크스페이스 범위 필터, 검색 필터, 선택 항목의 로그 안전 노출, 상세 탭과 bounded 상세 파싱, 새로고침 컨트롤.
chrome을 제자리에 (CIM · SV · SB)
8월 3일에 도크 텍스트를 시스템 UI 수준으로 끌어올린 뒤(system UI chrome text shaper, public font API rasterize), 8월 4~8일 닷새 동안 세 축을 이관했다.
이 시기 chrome 작업의 목표는 "그리는 코드"를 없애고 선언으로 바꾸는 것이었다.
"장기적으론 컴포넌트에 있는것들 ui에 있는걸로 다 구현할 예정인데 문서에 언급되어있나요??" — 2026-08-05
"결국 트리노드가 있으면 디자인 시스템에 트리노드를 하나 만들어주고 호출하는게 맞지 않은지?" — 2026-08-07
"장기적으로 명확하게 책임 분리가 되어야하고, SSOT, 적은 간단한 문법으로 되는게 꿈이라서요. 지금 구조는 어떤..." — 2026-08-02
"그리고 flex, gird란 개념이 사실상 지금 없을것 같은데 어떻게 하는지도 궁금." — 2026-08-02
8월 9일에는 비대해진 app_session을 주제별 17개 파일로 갈랐다 — tab·term·workspace·pane·input·scroll·sidebar·dock·settings·notification·git·agent·web·file_panel·agent_dock. 한 그룹만 쓰는 파일 레벨 헬퍼도 함께 옮기고, 호출 그래프로 소유를 확인한 46개를 각 그룹으로 배치했다.
편집기가 Term이 된다
7월 말에 웹 스택(CodeMirror 6)으로 정리했던 편집기는, 8월에 방향이 한 번 더 바뀐다. 웹뷰 편집기를 두더라도 네이티브 텍스트 편집기가 먼저 있어야 한다는 판단이었다.
"일단 그럼 그전에 간단한 텍스트 에디터부터 네이티브로 구현되어야 할 것 같은데요" — 2026-08-09
"그리고 어쨋든 나중에 LSP나 토큰화 하면 코드 문법에 따라 색상도 하이라이트가 되어야 할텐데 이건 어떤 생각이..." — 2026-08-09
"근데 일반적인 IDE는 반대겠지만, 우린 터미널 베이스니까 터미널 경로에따라 따라가줘야 할것 같은데" — 2026-08-10
마지막 문장이 8월 12일 cwd 축 통일 작업의 근거가 된다. 탐색기·소스 컨트롤·에디터가 따라가는 기준은 IDE처럼 열어 둔 프로젝트가 아니라 활성 터미널의 경로다.
- 8/10 — 네이티브 편집기의 selection 계약을 VSCode·CM6·Zed와 전수 대조해 빈틈 셋을 메우고, 열/블록 선택 원본을
Selections안에 두는 쪽으로 §3.2a를 뒤집었다. - 8/13 —
SurfaceKind에editor를 더해 편집기를 하나의 Term 종류로 승격했다.kind == .web으로 뭉뚱그려 있던 8곳을 분류하고, 훅이 파일을 편집기 Term으로 열어 렌더 블록까지 잇도록 했다. - 8/14 — 네이티브 diff 본문(N1.5). §7을 고쳐 자체 differ로 가기로 하고, 비교 요청을 화면 네 상태로 잇고 나란한 비교를 세운 뒤 색과 세로 스크롤을 붙였다. 검증은 손으로 고른 예제 대신 불변식을 무작위로 치는 방식으로 바꿨다.
- 8/15~17 — 바뀐 글자만 진하게(N1.5 e), 경로 breadcrumb, 랩/가로 스크롤 성능(첫 가로 휠 501ms, 5만 줄에서 프레임당 498ms를 잡았다), 긴 한글 줄의 조각 수를 21배 적게 세던 계산 오류 수정.
문서와 축 정리
- 8/11 — 커진 계약 문서들을 주제별로 갈랐다(네이티브 편집기, 컨트롤 플레인, 파일 패널, 에디터 Surface, 사이드바 그룹, 웹 패널, Metal UI, 설정, 터미널 분해, I/O–렌더). 구현 계획은
docs/plans/아래 이니셔티브별 파일로 내리고, 분할이 남긴 깨진 앵커와 절 참조를 CI 게이트로 잡게 했다. - 8/12 — cwd를 하나의 축으로 통일했다. 사이드바 폴더·브랜치줄, 에이전트 대화 매핑, 아카이브 범위 칩, 컨트롤 플레인 세션 목록을 모두 소스 컨트롤과 같은 축에 합류시키고, 이 규율을 주석이 아니라 게이트로 옮겼다.
macOS 밖으로
모바일 (8/15)
두 달 가까이 별도 라인에서 굴리던 iOS·Android 작업을 161커밋으로 main에 합쳤다(#2205).
- M0~M2 — PoC를 제품 구조로, draw-list를 인스턴스 드로우 한 번으로, 빌드를
build.zig가 소유, Android IME를 자체 Java shim으로 - M4a — 셀 속성·합성 글리프·글자 상자 정렬, 키를 코어 인코더에 태우기, 컬러 아틀라스 이모지
- M4b — 스크롤·선택·복사·보조 키바
- 한글 IME는 iOS를 UITextInput으로 올려 실측한 뒤 보류로 기록했다
이후 8월 16~17일에 config를 실제로 읽어 화면에 닿게 하고(M10b·M10c), 설정 화면을 스키마에서 자동 생성했으며, 터치는 손가락 id와 소유권을 코어가 들도록 옮겼다(T0~T3 · R0~R3 · G0~G5). 관성 스크롤도 OS 기계에 맡기지 않고 코어로 가져왔다.
Windows (8/15~17)
문서부터 열었다. 플랫폼 계약과 구현 계획을 세우고 적대적 검증 12라운드를 반영해 기본 셸을 PowerShell로, OSC 9;9 authority를 확정했다.
W7.1 은 이 글의 첫 판을 쓸 때 열려 있었고, 같은 날 저녁에 머지된 뒤 W7.2~W7.6 이 밤까지 이어져 Windows 에 실제 터미널 화면이 처음 떴다(W7.2c-2).
다국어 (8/16~17)
이 작업은 세션 Stop 훅으로 조건을 걸어 두고 돌렸다 — 조건은 "다국어 작업 끝날때까지 해주시고 매 PR마다 적대적 검증 반복해서 안 나올때까지"였다.
UI 문자열 국제화를 doc-first로 열고 이틀 만에 실사용 단계까지 밀었다. 표시 문자열 테이블·조회·보간의 중립 leaf(I3-0)를 세우고 platform 문자열 40건, notice 토스트 97건, 분기·보간형 13건, 컨텍스트 메뉴, config 설명문 86건, 세션 도크·아카이브 상세·SCM 도크를 차례로 키로 옮겼고, 8/17 밤에는 app_session 본체와 git·diff·SCM·탐색기 잔여까지 가 I3a 337/339 에 닿았다. session 레이어(I3d)·모바일과 리터럴 게이트(I3e·I3g)·Swift 가 UI 문장을 만들지 않게 하는 것(I3f)을 닫고, CLI 출력 137건을 영어로 옮겼다(I5).
중간에 "옮긴 문자열이 아무도 안 보는 테이블에 쌓이고 있다"는 것을 발견해 ui.language를 실제로 배선했고(I4a), 한국어 라벨에 알림 패널 폭이 박혀 있던 것을 고치고 시각 골든 캡처의 UI 언어를 고정했다.
여러 작업대를 동시에
8월에 하루 100건 넘는 PR이 나온 날들이 있는데, 이는 저장소를 여러 벌 복제해(maru, maru2 … maru5) 각각에서 Claude Code와 Codex 세션을 동시에 굴린 결과다. 축이 다른 작업(session-host / chrome / 모바일 / i18n)을 각 작업대에 하나씩 물려 두고, 리베이스로 main에 합류시킨다.
같은 기능을 두 도구가 나눠 검증하기도 한다.
"PoC 2로 활동 상관 매핑 검증해주세요 코덱스 클로드 둘 다 하시는거죠?" — 2026-07-25
"그리고 지금 마루 4에 그거 개발하고 있는 세션이 있는데 이녀석한테 의견 물어볼 수 있나요?" — 2026-08-15
이 구조 때문에 리베이스가 잦고, 그 흔적이 fix(ci): 리베이스 뒤 digest를 맞춘다 계열 커밋으로 남는다. 그리고 이 방식 자체가 제품에 반영됐다 — 사이드바가 에이전트 세션을 카드로 보여주고, 상태표시줄이 실행 중인 에이전트 수를 세고, 세션 아카이브가 대화 이력을 훑는 기능은 전부 "여러 세션을 동시에 굴리는 사람"에게 필요한 것들이다.
8월 17일 시점
같은 날 오후에는 자체 SSH 클라이언트의 첫 절반도 들어갔다 — 계약·패킷·협상(S0~S2), curve25519 키 교환(S3), chacha20-poly1305(S4), 호스트키 검증과 known_hosts(S5), publickey·password 인증과 openssh-key-v1 파싱(S6). 세션 채널부터는 3-6에서 이어진다.
터미널로 시작한 앱에 지금 들어 있는 것: 멀티탭·분할, 스크롤백, kitty 그래픽, 유니코드 클러스터, 스키마 설정과 GUI, 사이드바 워크스페이스 그룹, 파일 탐색기와 소스 컨트롤 도크, 네이티브 편집기와 diff, 인앱 브라우저, 에이전트 제어 프로토콜, 앱 종료 후에도 살아남는 세션 호스트, iOS·Android 앱, Windows 첫 터미널 화면, 한국어·영어 UI.