1.5.2 2026-11-02 지금 버전
변경 파일이 수천 개인 저장소에서 창이 느려지고 메모리를 많이 잡던 것을 고친 릴리즈입니다. 잠든 에이전트는 이제 탭을 누르면 깨어납니다.
Git
- 변경 파일이 수천 개여도 Git 패널이 느려지지 않습니다. 화면에 보이는 행만 그려서, 변경 6천 개에서 커밋 메시지를 입력하면 한 글자마다 멈추던 것과 메모리를 많이 잡던 것을 고쳤습니다. 커밋 · 비교 · Pull · 리뷰 화면의 파일 목록도 같습니다.
- 큰 diff 가 창을 멈추지 않습니다. 앞의 3000줄을 먼저 보여 주고 나머지는 「3000줄 더 보기」로 엽니다. 다 보이지 않는 변경 묶음에는 스테이징 · 버리기 버튼이 나오지 않습니다.
- 브랜치가 수천 개인 저장소에서도 브랜치 메뉴가 바로 열립니다. 300개까지 보여 주고 나머지는 검색으로 찾습니다. 지금 브랜치는 어디에 있든 보입니다.
에이전트
- 잠든 에이전트는 탭을 누르면 깨어납니다. 키를 쳐야 깨어나서 그때까지 탭이 빈 셸처럼 보이던 것을 고쳤습니다. × 로 닫거나 우클릭할 때는 깨우지 않습니다.
창
- 창이 1초마다 통째로 다시 그려지지 않습니다. 터미널 세션 목록이 그대로일 때도 창 전체를 다시 그리던 것을 고쳤습니다. 파일 트리도 바뀐 것이 없으면 다시 그리지 않습니다.
1.5.1 2026-10-30
다시 켰을 때 Codex · Claude 탭이 셸로 오던 것, 워크트리 전환이 느리던 것, 전체화면에서 창 오른쪽이 잘리던 것을 고친 릴리즈입니다. 저장하지 않은 편집이 사라지던 몇 가지 경우도 막았습니다.
에이전트
- 다시 켜면 Codex · Claude 탭이 셸로 오지 않습니다. 같은 폴더에 Codex 탭이 여럿이어도 탭마다 자기 대화로 돌아오고, 어느 대화인지 알 수 없는 탭은 빈 셸 대신 대화 목록을 띄웁니다.
- 에이전트 화면에서 Option 을 누른 채 드래그하면 글자를 선택할 수 있습니다.
- 깨어나는 에이전트가 제대로 돌아옵니다. 플래그를 주고 손으로 띄운 Claude 가 잠들었다가 플래그 없이 깨어나던 것, 깨어나는 사이에 「끝남」 알림이 뜨거나 팀 Claude 탭이 보통 Claude 로 바뀌던 것을 고쳤습니다.
- 에이전트 행의 툴팁에 화면 조각이 나오지 않습니다.
창
-
워크트리 전환이 빨라졌습니다. 사이드바가 4초마다 모든 워크트리에
git을 돌리던 것을 줄였고,git을 기다리는 일이 전환을 막지 않습니다. 상태바의 「switch」에 마우스를 올리면 어디에 시간이 들었는지 나옵니다. - 전체화면에서 창 오른쪽이 잘리지 않습니다. 해상도가 다른 모니터에서 전체화면에 들어가면 창이 화면보다 넓어지던 것을 고쳤습니다.
- 저장하지 않은 편집이 사라지지 않습니다. 미리보기로 바꾸거나 워크트리를 전환하면 먼저 저장하고, 그사이 디스크에서 바뀐 파일은 덮어쓰지 않고 멈춥니다. 「다른 탭 모두 닫기」는 저장하지 않은 탭을 남깁니다.
- 드래그한 워크트리 순서가 유지됩니다. 다른 워크트리를 열거나, 워크트리를 만들거나 지우면 순서가 풀리던 것을 고쳤습니다.
- 워크트리로 돌아오면 뒤쪽 탭도 보던 자리에 있습니다. 앞에 있지 않던 문서 탭이 맨 위로 돌아가던 것을 고쳤습니다.
Git
- 머지 패널에서 고르던 답이 지워지지 않습니다. 다른 파일을 해결하거나 스테이징할 때마다 처음으로 돌아가던 것을 고쳤습니다.
- Fetch 뒤에 받을 커밋 수가 바로 보입니다. 전환 직후 Git 바가 떠난 워크트리의 상태를 보이던 것, 전환 뒤 파일 트리가 새로 생긴 파일을 보여 주지 않던 것도 고쳤습니다.
1.5.0 2026-10-26
여러 워크트리에서 에이전트를 함께 돌리는 쓰임을 위한 릴리즈입니다. 쉬는 Codex 와 다른 워크트리의 에이전트도 잠들어 메모리를 돌려주고, 다시 켰을 때 Claude · Codex 탭이 하던 대화로 돌아옵니다. 「내 작업」은 할 일 목록으로 열리고, 대화가 길어진 에이전트를 알려 주며, 바뀐 이미지를 전후로 볼 수 있습니다.
에이전트
- 다시 켜면 Claude · Codex 탭이 하던 대화로 돌아옵니다. Claude 탭이 가끔 빈 셸로 오고, Codex 탭은 폴더의 가장 최근 대화로 오던 것을 고쳤습니다. 탭마다 자기 대화를 기억해 그 대화로 이어 갑니다.
-
대화가 길어진 에이전트를 알려 줍니다. 턴마다 대화 전체를 다시 보내기 때문에, 대화가 길수록 턴 하나가 토큰을 많이 씁니다. 길어지면 에이전트 행에 토큰 수가 붙고, 대화마다 한 번
/compact나/clear를 권하는 알림이 뜹니다. - Claude · Codex 의 스크롤이 덜 움직입니다. 트랙패드를 살짝 밀어도 수십 줄이 넘어가던 것을 고쳤습니다. 이제 손이 움직인 거리만큼 움직이고, 설정의 「에이전트 스크롤 속도」(1~10, 기본 5)로 맞출 수 있습니다.
- 터미널의 파일 링크가 보이는 이름과 다른 파일을 열지 않습니다. 링크의 글자와 실제 주소가 다르면 열지 않습니다.
메모리
- 쉬는 Codex 도 잠듭니다. 지금까지는 Claude 만 잠들었습니다. 다음 키를 치면 같은 대화로 깨어납니다.
- 보이지 않는 워크트리의 에이전트는 5분 쉬면 잠듭니다. 화면의 워크트리는 그대로 15분입니다. 설정의 「다른 워크트리의 에이전트 재우기」로 바꿀 수 있고, 일하는 중인 에이전트는 어디서든 재우지 않습니다. 앱 밖에서 손으로 띄운 Claude 도 이제 잠듭니다.
창
- 「내 작업」이 할 일 목록으로 열립니다. 실패했거나 변경 요청을 받은 내 PR, 나를 기다리는 리뷰, 이번 주 마감, 진행 중인 내 티켓 순서입니다. 예전 화면은 「통계」 탭에 있고, 설정의 「내 작업을 열면」으로 처음 화면을 고를 수 있습니다.
- Git 변경사항에서 바뀐 이미지를 전후로 봅니다. 「바이너리」 한 줄만 나오던 자리에 바뀌기 전과 후의 그림이 나란히 나옵니다. 스테이지한 것, 안 한 것, 커밋 기록 모두.
- HTML 미리보기가 다크 테마가 있는 페이지를 흰 바탕으로 그리지 않습니다. 페이지는 창의 테마를 따르고, 미리보기 위쪽 버튼으로 밝게 · 어둡게를 고를 수 있습니다.
사용량 미터
- Codex 사용량이 실제와 맞습니다. 없는 5시간 창을 지어내던 것, 한도가 초기화되거나 크레딧이 더해진 것이 안 보이던 것을 고쳤습니다.
- 사용량 토큰을 전부 셉니다. 긴 기록 파일의 끝 8MB 만 읽어 실제의 1~4할만 세던 것을 고쳤습니다.
1.4.2 2026-10-23
한 번에 여러 워크트리를 오가는 쓰임에서 걸리던 것들을 고친 릴리즈입니다. 쉬는 Claude 가 화면에 떠 있으면 잠들지 않던 것, 워크트리를 오가면 가끔 Claude 화면이 깨지던 것, 터미널의 파일 링크와 Markdown 이미지가 열리지 않던 것을 고쳤고, 탭을 고정할 수 있습니다.
창
- 탭을 고정할 수 있습니다. 탭을 우클릭해 「탭 고정」. 고정한 탭은 줄 앞쪽에 모이고, × 대신 핀이 붙으며, 가운데 클릭 · Cmd-W · 「다른 탭 모두 닫기」로 닫히지 않습니다. 메뉴의 「탭 닫기」로는 닫힙니다.
- 워크트리를 갔다 와도 스크롤 위치가 그대로입니다. Markdown 미리보기, 에디터, diff, CSV 가 다른 워크트리에 다녀오면 맨 위로 돌아가 있던 것을 고쳤습니다.
-
Markdown 미리보기에 문서의 이미지가 나옵니다. 문서 폴더 기준의 상대 경로와 워크스페이스 기준의
/경로를 읽습니다. 웹 주소의 이미지는 여전히 불러오지 않습니다.
에이전트
-
Claude 가 준 파일 링크를 누르면 파일이 열립니다. 터미널의 파란 밑줄 링크(
file://)가 아무것도 하지 않던 것을 고쳤습니다. 줄 번호가 있으면 그 줄로 가고, 워크스페이스 밖의 파일은 읽기 전용으로 엽니다. 웹 링크는 브라우저로 엽니다. -
워크트리를 오가도 Claude 화면이 깨지지 않습니다. 풀스크린 렌더러(
"tui": "fullscreen")는 바뀐 칸만 그리기 때문에, 저장해 둔 출력으로 화면을 되살리면 조각이 겹쳐 남을 수 있었습니다. 이제 되살린 뒤 Claude 에게 화면 전체를 다시 그리게 합니다.
메모리
- 화면에 떠 있는 Claude 도 쉬면 잠듭니다. 풀스크린 Claude 는 포인터가 지나가거나 창을 오갈 때마다 터미널 신호를 받고 화면을 조금 다시 그리는데, 앱이 이것을 입력과 출력으로 세어 15분이 차지 않았습니다. 하루 가까이 깨어 있던 Claude 가 있었습니다. 이제 사람이 친 키와 에이전트 자신의 출력만 셉니다. 포인터가 지나가도 잠든 Claude 가 깨지 않습니다.
1.4.1 2026-10-21
1.4.0 에서 창이 멈추던 것을 고친 릴리즈입니다. 에이전트가 명령을 돌리는 동안 터미널이 키를 받지 않고, 새 탭의 Claude · Codex 가 시작되지 않고, 다른 워크트리로 넘어가지 않을 수 있었습니다.
창
-
터미널과 워크트리 전환이 멈추지 않습니다. 1.4.0 은 에이전트가 띄운 명령이 dev 서버인지 보려고 열린 포트를 읽었는데(
lsof), 그것을 모든 터미널이 함께 쓰는 잠금 안에서 했습니다. 보안 프로그램이 도는 맥에서는 이것이 몇 초씩 걸려, 그동안 키 입력 · 에이전트 시작 · 워크트리 전환이 전부 기다렸습니다. 이제 그런 조회는 잠금 밖에서만, 필요할 때만 합니다.
1.4.0 2026-10-21
여러 워크트리에 에이전트를 하나씩 붙여 두는 쓰임을 위한 릴리즈입니다. 「확인 필요」는 에이전트가 정말 물을 때만 뜨고, 끝난 턴은 「완료」, 에이전트가 띄운 명령이 아직 도는 동안은 「작업 중」입니다. 할 일 없이 기다리는 Claude 는 잠들어 메모리를 돌려주고, 탭에 키를 치면 같은 대화로 깨어납니다. 워크트리 카드에는 그 워크트리가 잡은 메모리가 나옵니다.
에이전트
-
「확인 필요」는 에이전트가 물을 때만 뜹니다. 이 앱에서 띄운 Claude 는 앱의 훅을 들고 시작해서, 권한 승인 같은 질문일 때만 「확인 필요」, 턴이 끝나면 「완료」가 됩니다. 30초 조용하면 묻는 것으로 읽던 것이 끝난 턴마다 「확인 필요」가 뜨던 원인이었습니다.
~/.claude/settings.json은 건드리지 않습니다. -
Codex 의
[!]를 읽습니다. Codex 가 승인이나 질문을 띄우면 창 제목에[ ! ] Action Required를 거는데, 이제 그때만 「확인 필요」이고 알림도 바로 옵니다. 표시 없이 조용해진 Codex 는 「완료」입니다. - 백그라운드 명령이 도는 동안은 「작업 중」입니다. 에이전트가 띄운 테스트나 빌드가 아직 돌고 있으면 턴의 글이 끝났어도 「확인 필요」로 바뀌지 않습니다. 포트를 열고 도는 dev 서버는 일로 세지 않습니다.
- 한 번 본 것은 「완료」로 내려갑니다. 탭을 열어 본 뒤 에이전트가 움직이지 않으면 다시 「확인 필요」로 올라오지 않습니다. 에이전트가 직접 물은 것은 열어 보는 것으로 끝나지 않으므로 답할 때까지 남습니다.
- 재시작 뒤 그 탭의 대화로 돌아옵니다. 한 워크트리에 Claude 탭이 둘이면 둘 다 그 폴더의 가장 최근 대화로 돌아왔습니다. 이제 탭마다 자기 대화를 기억합니다.
-
훅을 직접 붙여 두었다면 매처를 더하세요.
~/.claude/settings.json의Notification훅에 매처가 없으면 턴이 끝나고 1분 뒤에도 「확인 필요」가 뜹니다."matcher": "permission_prompt|elicitation_dialog|elicitation_url_dialog|agent_needs_input"을 더하거나, 이 앱에서만 Claude 를 쓴다면 그 훅을 지워도 됩니다.
메모리
- 쉬는 Claude 를 재웁니다. 턴을 마치고 아무것도 돌리지 않은 채 15분 동안 손대지 않은 Claude 는 프로세스를 끝내 메모리를 돌려줍니다. 탭과 화면은 남고 행에 「잠듦」이 붙으며, 탭에 키를 치면 같은 대화로 깨어납니다(그 키는 입력되지 않습니다). 시간은 설정의 「쉬는 에이전트 재우기」에서 바꾸고, 0 이면 재우지 않습니다. 일하거나 묻는 에이전트는 건드리지 않고, 동시에 몇 개를 돌릴지에는 제한이 없습니다.
- 워크트리가 잡은 메모리를 카드에서 봅니다. 에이전트, 그 MCP 서버, 터미널에 띄워 둔 dev 서버까지 합친 값입니다. 상태바의 메모리는 앱 프로세스 하나라 이것들이 빠져 있었습니다.
창
- 워크트리 카드를 클릭한 뒤 마우스만 움직여도 카드가 끌려가지 않습니다. 전환하느라 창이 바쁠 때 버튼을 뗀 것을 놓치면, 버튼을 누르지 않았는데도 다음 움직임이 드래그가 됐습니다.
1.3.0 2026-10-16
AWS Kiro, 한글 인코딩, 파일 아이콘의 릴리즈입니다. Kiro CLI 를 Claude · Codex 처럼 탭에서 열고, 쓴 크레딧을 봅니다. EUC-KR(CP949) 파일을 찾고, 열고, 고치고, diff 와 머지 충돌에서 한글로 봅니다. 파일 트리와 탭의 아이콘은 VS Code 에서 보던 Material 아이콘이 됩니다. 덩어리를 버리거나 언스테이지할 때 엉뚱한 줄을 지울 수 있던 것, 저장하는 사이에 친 글자가 저장된 것으로 표시되던 것도 고쳤습니다.
에이전트
-
Kiro 를 탭에서 엽니다.
+메뉴에 Claude · Codex 와 나란히 AWS Kiro 가 있고, 탭과 사이드바에 Kiro 표시가 붙습니다. 앱을 다시 켜면 그 폴더의 마지막 대화로 이어집니다. -
Kiro 에게 일을 맡깁니다. 「에이전트에게 일 맡기기」에서 Kiro 를 고르면 프롬프트를 받아 시작하고, 지켜보지 않을 때는
--no-interactive로 한 번 돌고 끝납니다. - Kiro 가 쓴 크레딧을 봅니다. 사용량 칩에 오늘 쓴 크레딧이, 카드에 지난 7일 · 30일의 크레딧과 요청 수가 나옵니다. Kiro 가 이 컴퓨터의 세션 파일에 남긴 그대로이고, 크레딧을 남기지 않는 Classic 모드는 요청 수로 셉니다.
에디터
-
EUC-KR 파일을 열고 저장합니다. 한국어 Windows 도구가 저장한 CP949 파일이 「UTF-8 로 읽을 수 없는 파일」로 막혔습니다. 이제 한글로 열리고, 저장도 EUC-KR 그대로 합니다. 편집기 머리줄에
EUC-KR이 붙고, 이모지처럼 EUC-KR 에 없는 글자가 있으면 파일을 바꾸지 않고 저장을 멈춥니다. -
폴더와 확장자마다 인코딩을 정합니다. 설정의 「파일 인코딩」에
legacy/→euc-kr처럼 적으면, 아직 한글이 없는 파일이나 새 파일도 EUC-KR 로 저장합니다. 이미 한글이 든 파일은 지금 인코딩 그대로 둡니다. - 저장하는 사이에 친 글자가 저장된 것으로 표시되지 않습니다. ⌘S 직후에 친 글자는 디스크에 없는데 탭의 점이 사라져, 탭을 닫거나 앱을 끌 때 묻지 않고 잃었습니다.
- 「디스크에서 바뀜」 위의 ⌘S 가 먼저 알려 줍니다. 에이전트나 다른 편집기가 쓴 내용을 말없이 덮었습니다. 이제 첫 ⌘S 는 멈추고, 한 번 더 누르면 덮어씁니다.
- 포매터가 아무것도 출력하지 않으면 파일을 비우지 않습니다. 무시하는 경로라며 빈 출력을 낸 포매터 때문에 파일이 빈 채로 저장될 수 있었습니다.
- BOM 이 있는 파일을 저장해도 「디스크에서 바뀜」이 뜨지 않습니다. 자기 저장을 바깥의 변경으로 읽었습니다.
- 언어 서버의 이름 바꾸기가 로컬 히스토리에 남습니다. 여러 파일에 걸친 이름 바꾸기를 되돌릴 사본이 없었고, EUC-KR 파일이 하나라도 섞이면 전체가 거절됐습니다.
검색
- 프로젝트에서 찾기가 고른 글자로 시작합니다. ⇧⌘F 가 편집기에서 고른 단어를 무시했고, 우클릭으로 한 번 찾은 옛 검색어가 계속 남았습니다. 고른 것이 없으면 커서 아래 단어로, 여러 줄을 골랐으면 빈 칸으로 엽니다.
- EUC-KR 파일도 찾고 바꿉니다. UTF-8 이 아닌 파일은 검색에서 말없이 빠졌습니다. 바꾸기는 파일을 EUC-KR 그대로 다시 씁니다.
- 검색하지 못한 파일을 결과 아래에 알려 줍니다. 2MB 넘는 파일과, 찾는 말이 있어 보이지만 읽을 수 없는 인코딩의 파일이 몇 개인지 보여 주고, 마우스를 올리면 이름이 나옵니다.
- 머지 중인 파일의 결과가 세 번씩 나오지 않습니다. 충돌 파일이 세 번 검색돼, 바꿀 말이 찾는 말을 품으면 「모두 바꾸기」가 같은 자리를 세 번 바꿨습니다.
-
정규식의
$가 Windows 줄바꿈 파일에서도 맞습니다.foo$가 CRLF 파일을 통째로 놓쳤습니다. - 프로젝트 밖을 가리키는 링크를 따라 검색하지 않습니다. 저장소 안의 심볼릭 링크가 가리키는 바깥 파일의 내용이 결과에 나왔습니다.
- 검색어를 지우면 결과도 지워집니다. 검색하는 도중에 지우면 이전 결과와 「모두 바꾸기」가 빈 칸 아래 남았습니다. 한글 폴더 안의 파일이 「파일로 이동」에서 뒤로 밀리던 것도 고쳤습니다.
파일 트리
-
파일 아이콘이 Material 아이콘이 됩니다. VS Code 의 Material Icon Theme 과 같은 아이콘이 파일 트리 · 탭 · 검색 · Git · 로컬 히스토리에 나옵니다. 폴더도
src·docs·node_modules처럼 이름에 따라 다릅니다..env는 설정 톱니,.svg는 다른 그림과 같은 아이콘, 테스트 파일은 언어 아이콘 그대로입니다. 예전 아이콘은 설정의workbench.iconTheme에서 고를 수 있습니다. -
파일 아이콘을 직접 정합니다. 설정의 「내 파일 아이콘」에
Cargo.toml→rust,*.properties→java처럼 적습니다. 폴더는 이름 끝에/를 붙입니다. -
Java · Kotlin 패키지는 패키지 아이콘입니다. 소스 루트 안의
com·domain같은 폴더가 IntelliJ 처럼 패키지로 보입니다.
Git
- 덩어리를 버리거나 언스테이지할 때 엉뚱한 줄을 지우지 않습니다. 위에 고르지 않은 덩어리가 있고 비슷한 블록이 있으면, 새로 더한 줄 대신 커밋된 줄을 지웠습니다.
- 스테이징도 그린 뒤 파일이 바뀌었으면 거절합니다. 그사이 에이전트가 파일을 바꾸면 아무도 보지 않은 변경이 스테이지됐습니다. 새로 더한 파일의 일부 줄만 언스테이지하면 늘 실패하던 것도 고쳤습니다.
-
diff 와 머지 충돌에서 한글이 보입니다. 머지 충돌 패널에서는 UTF-8 한글도 깨져 보였고, diff 에서는 EUC-KR 한글이
���로 보였습니다. 파일에 쓰는 바이트는 전과 같습니다. - EUC-KR 파일이 든 PR 이 열립니다. 「stream did not contain valid UTF-8」로 PR 전체가 열리지 않았습니다.
로컬 히스토리
- 같은 순간에 남긴 두 버전이 하나로 겹치지 않습니다. 한 파일을 1ms 안에 두 번 남기면 앞의 것이 사라졌습니다. 에이전트가 바꾼 EUC-KR 파일이 남지 않던 것도 고쳤습니다.
창
- 작은 창에서 덜 느립니다. 좁아진 패널 위의 흐림 효과가 터미널 출력과 타자마다 다시 계산됐고, 탭 줄 · diff · 상태바가 창 크기를 바꿀 때마다 필요 없이 다시 그려졌습니다. 좁은 패널은 이제 반투명 덮개로 보입니다.
1.2.4 2026-10-15
디버거와 히스토리가 넓어진 릴리즈입니다. JavaScript · TypeScript 를 Node 위에서 디버그하고, 에디터 여백의 ▶ 에서 테스트 하나를 디버거로 띄웁니다. 히스토리에서는 범위를 골라 깨뜨린 커밋을 찾고(git bisect), 커밋에 태그를 달아 원격과 맞춥니다. 폴더 아이콘은 담긴 것에 따라 달라집니다. 열린 파일의 이름을 바꾸면 저장이 옛 파일을 되살리던 것, 터미널 타자가 몇 초마다 멈추던 것도 고쳤습니다.
디버거
-
JavaScript 와 TypeScript 를 디버그합니다. 따로 설치할 것
없이 Node 만 있으면 됩니다. TypeScript 는 Node 22.6 이상이 타입을 걷어 내고 그대로
돌리므로 줄이 파일과 같고,
tsc나 번들러의 결과물은 소스맵을 따라 원래.ts의 줄에서 멈춥니다. 조건 · 횟수 중단점과 logpoint 도 됩니다. -
이미 떠 있는 Node 에 붙고, npm 스크립트를 그대로 디버그합니다.
node --inspect로 띄운 이 프로젝트의 스크립트가 디버그 패널에 「Attach to …」 행으로 나옵니다.package.json의 스크립트도 행이 되고, npm · nodemon · vite 같은 도구는 지나쳐 프로젝트 코드에 붙습니다. nodemon 이 다시 띄우면 새 프로세스에 다시 붙습니다. - 테스트 하나를 디버거로 띄웁니다. 에디터 여백의 ▶ 를 ⌥-클릭하거나 메뉴의 「커서 위치의 테스트 디버그」. vitest · jest · pytest · Go · cargo 테스트, 그리고 Gradle · Maven 의 JUnit 테스트가 됩니다. JUnit 은 빌드가 띄우는 JVM 에 붙으므로 빌드에서와 같은 조건으로 돕니다.
-
하위 폴더의 Go 모듈도 디버그됩니다.
go.mod가 한 단계 아래 있으면 「cannot find main module」로 실패했습니다. 끝까지 돈 Go 프로그램이 패키지에__debug_bin을 남기던 것도 고쳤습니다. -
Java 파일을 열어도 프로젝트에 파일이 생기지 않습니다. 언어 서버가
pom.xml옆에.project·.classpath·.settings/를 써서 워크트리가 더러워졌습니다. 폴더 이름이 같은 두 Java 프로젝트를 함께 열지 못하던 것도 고쳤습니다. - 디버거의 포트가 서버로 보이지 않습니다. 디버깅하는 동안 Node 인스펙터 · debugpy · Java 디버거가 여는 포트가 워크트리 카드에 그 워크트리의 서버처럼 붙었습니다.
히스토리
- 깨뜨린 커밋을 찾습니다. 히스토리에서 두 커밋을 범위로 고르고 「깨뜨린 커밋 찾기…」. 목록 위의 띠가 지금 확인하는 커밋과 남은 단계를 보여 주고, 됨 · 깨짐 · 모르겠음으로 답하거나 명령 하나를 터미널에서 돌려 끝까지 찾게 합니다. 진행 중인 워크트리에는 카드에 「bisect 진행 중」이 붙습니다.
- 커밋에 태그를 달고, 밀고, 지웁니다. 커밋을 고르면 「태그…」 메뉴가 생깁니다. 메시지를 쓰면 annotated 태그가 됩니다. 지우기는 원격에서 먼저 지웁니다 — 여기서만 지운 태그는 다음 fetch 때 돌아옵니다.
- 태그를 원격과 견줍니다. 패널 머리의 「태그…」가 아직 밀지 않은 태그, 원격에만 있는 태그, 양쪽이 다른 커밋을 가리키는 태그를 보여 주고, 한 번에 밀거나 가져오거나 원격에서 지웁니다. 이미 있는 태그를 강제로 덮어쓰지는 않습니다.
-
머지 커밋이 낀 범위는 되돌리기 · 복사 전에 거절합니다. 반쯤 하다
「실패」가 났고, 「계속」은 머지를 조용히 건너뛰었습니다. 이제 어느 부모를 기준으로 할지 터미널에서
-m 1처럼 정하라고 알려 줍니다. - 스크롤을 내린 채로 목록을 다시 읽으면 비던 것을 고쳤습니다. 검색 · pull · 터미널의 커밋 뒤에 그랬습니다.
Git
- 머지 충돌을 다 풀면 커밋 메시지가 채워져 있습니다. 「Merge branch …」처럼 git 이 준비해 둔 메시지를 씁니다. 전에는 요약을 직접 지어내야 커밋 버튼이 눌렸습니다.
-
머지의 「둘 다」가 양쪽이 같이 더한 줄을 두 번 쓰지 않습니다. 양쪽이 같은
import를 더했으면 결과에도 한 번만 들어갑니다. - 머지 패널을 연 채 파일이 바뀌어도 답이 엇나가지 않습니다. 다른 곳에서 충돌 하나를 풀면 남은 답이 한 칸씩 밀려 들어갔습니다. 이제 패널이 다시 읽고 이유를 보여 줍니다. 저장하지 않은 편집기가 열린 파일에는 해결을 쓰지 않습니다 — 다음 저장이 충돌 표시를 되살렸습니다.
- 새 브랜치 이름이 잘못되면 상자 안에서 말합니다. 상자가 닫혀 친 것이 사라지고, git 의 fatal 이 창 위에 떴습니다. 이미 있는 이름도 같습니다.
- 푸시하면 툴바의 ↑ 도 바로 사라집니다. 커밋 패널에서 민 뒤에도 15초 가까이 「↑3」이 남았습니다. 파일 트리의 git 표시가 몇 초씩 늦던 것도 고쳤습니다.
에디터와 파일
- 열린 파일의 이름을 바꾸면 탭이 따라갑니다. 탭이 옛 경로에 남았고, 저장하면 옛 파일이 새 파일 옆에 되살아났습니다. 폴더 이름을 바꿔도 그 안의 탭이 따라가고, 저장하지 않은 내용이 있으면 먼저 저장하라고 말합니다.
- F2 로 이름을 바꾼 뒤 ⌘S 가 그것을 되돌리지 않습니다. 열린 탭이 옛 내용을 그대로 들고 있다가 저장으로 다시 썼습니다.
- 파일이 편집기 내용과 같아지면 「디스크에서 바뀜」이 내려갑니다. 바깥에서 고쳤다가 되돌려도, 다시 읽어 봐야 아무것도 바뀌지 않는 파일을 다시 읽으라고 했습니다.
- 지워졌다 돌아온 파일이 「디스크에서 삭제됨」에 머물지 않습니다. 체크아웃으로 잠깐 사라졌다 돌아온 파일이 그랬습니다. 지운 파일의 탭이 앱을 다시 열 때마다 「파일 감시 오류」 배너를 띄우던 것, 파일이 돌아와도 그 탭이 비어 있던 것도 고쳤습니다.
- ⌘-호버로 본 파일을 열면 디스크의 내용이 열립니다. 호버 뒤에 파일이 바뀌었으면 호버 때의 옛 내용이 열렸고, 저장하면 그것이 새 내용을 덮었습니다.
- 읽기 전용 파일은 저장하지 않습니다. 전에는 그냥 덮였습니다.
- 지운 파일의 로컬 히스토리가 보입니다. 에이전트가 지운 파일을 찾으러 열면 「파일이 이미 이렇습니다」라고 했습니다.
파일 트리
-
폴더 아이콘이 담긴 것에 따라 달라집니다. 소스 · 테스트 · 문서 · 설정
· 에셋 · 스크립트 폴더가 서로 다른 색을 갖고,
node_modules·dist같은 생성물은 흐리게 보입니다. 설정의workbench.iconTheme을monochrome으로 두면 아이콘에서 색을 뺍니다. -
대소문자만 바꾸는 이름 변경이 됩니다.
readme.md→README.md가 「이미 있음」으로 거절됐습니다. 자기 자신을 가리키는 링크 안에 폴더를 붙여넣으면 끝없이 복사되던 것, 워크스페이스 밖을 가리키는 링크를 지우거나 이름을 바꿀 수 없던 것도 고쳤습니다.
검색
-
정규식 바꾸기의
$1_id가 빈 문자열이 되지 않습니다.$1뒤에 글자가 이어지면 그룹 이름의 일부로 읽혀, 매치를 지우고 「N개 바꿈」이라 했습니다. - 똑같이 생긴 결과 행이 둘씩 나오지 않습니다. 한 줄에 두 번 맞으면 열 번호를, 이름이 같은 다른 파일이면 경로를 함께 보입니다.
- 되돌릴 사본을 남길 수 없는 큰 파일은 바꾸지 않습니다. 1MB 가 넘는 파일이 바꾸기에 들어 있으면 그렇다고 말하고 아무것도 쓰지 않습니다.
터미널
- 터미널 타자가 몇 초마다 멈추지 않습니다. 사이드바가 세션 목록을 읽는 동안 모든 터미널의 키 입력이 기다렸습니다. 개발 서버를 띄워 둔 창에서 더 길었습니다.
- 새 터미널 버튼을 누른 뒤 바로 칠 수 있습니다. 키보드가 버튼에 남아 있어서, 글자는 어디에도 들어가지 않고 스페이스와 Enter 가 터미널을 더 열었습니다.
워크트리
-
../이름이나~/이름으로 만든 워크트리가 열립니다. 워크트리는 생겼는데 창이 엉뚱한 경로를 찾아 열 수 없었고,~는 저장소 안에~폴더를 만들었습니다. - 하위 폴더로 연 창이 지운 워크트리에 남지 않습니다. 「끝난 워크트리 정리」가 그 하위 폴더에서 일하는 에이전트를 함께 끝내던 것도 고쳤습니다. 잠긴 워크트리는 터미널을 끄기 전에 거절합니다.
그 밖에
- 「업데이트 확인…」이 누른 즉시 답합니다. 「업데이트 확인 중…」을 먼저 띄우고, 20초 안에 답이 없으면 오류로 끝냅니다. 프록시나 보안 프로그램이 연결을 붙잡으면 아무 반응도 없는 것처럼 보였습니다.
-
설정의 숫자 칸은 다 친 뒤에 저장됩니다. 글자 크기에
999를 치면 가는 길의9가 저장돼 글자가 9px 이 됐습니다. 이제 Enter 나 칸을 벗어날 때 범위 안으로 맞춰 저장하고, 비우면 기본값으로 돌아갑니다. - SQLite 의 BLOB 값이 빈칸으로 보이지 않습니다. 표와 행 편집기에서 바이트 수와 함께 BLOB 이라고 보입니다.
- 다시 뜬 언어 서버가 열린 파일을 압니다. 언어 서버가 죽었다 다시 뜨면 호버 · 완성 · 정의 이동이 답하지 못했습니다. rust-analyzer 가 설치되지 않은 rustup 에서는 「서버가 멈췄다」 대신 설치되지 않았다고 말합니다.
1.2.3 2026-10-12
미리보기에서 찾을 수 있게 된 릴리즈입니다. Markdown · HTML · PDF · CSV 미리보기에서 ⌘F 로 찾고, CSV · TSV 는 표로 보입니다. 도커 탭에서는 데몬을 띄울 런타임과 docker context 를 고릅니다. 브랜치 삭제는 이제 origin 에서도 지웁니다. 한글 조합을 끝내는 Return 이 입력란을 제출해 버리던 것도 고쳤습니다.
미리보기
- 미리보기에서 ⌘F 로 찾습니다. Markdown · HTML · PDF · CSV 미리보기에서 일치를 모두 칠하고 지금 것을 따로 표시하며, 「2/5」처럼 몇 번째인지 알려 줍니다. HTML 은 페이지 안을 클릭한 뒤에도 되고, 화면에 보이는 글자만 찾습니다. PDF 뷰어 안에서는 ⌘F 를 뷰어가 가져가므로 미리보기 위쪽의 「찾기」 버튼을 씁니다.
- CSV · TSV 가 표로 보입니다. 첫 행은 머리글로 고정되고, 숫자 열은 오른쪽으로 맞춥니다. 구분자 — 쉼표 · 세미콜론 · 탭 · 세로선 — 는 파일을 보고 고릅니다. 수십만 행도 바로 열리고, 찾기는 파일 전체에서 합니다.
- 큰 Markdown 이 창을 멈추지 않습니다. 600KB 가 넘는 문서는 텍스트로 먼저 보여 주고 「그래도 렌더링」 버튼을 둡니다. 1MB 가 넘으면 텍스트로만 보여 줍니다. PR 본문과 티켓 설명도 같습니다.
- 저장해도 HTML · 이미지 미리보기가 맨 위로 돌아가지 않습니다. 파일이 바뀔 때마다 읽던 자리를 잃었습니다. 찾기를 열어 둔 채 저장해도 일치로 끌려가지 않습니다.
- PDF 가 패널 폭을 따라갑니다. 분할선을 끌어도 페이지는 처음 폭 그대로였고, 다른 탭에 있는 동안 다시 쓰인 PDF 는 돌아와 보면 우표만 하게 그려졌습니다.
도커 탭
-
데몬을 띄울 런타임을 고릅니다. 「Docker 실행」은
docker명령이 가리키는 앱 하나만 열었습니다. 이제 이 맥에 있는 Docker Desktop · Rancher Desktop · OrbStack · Podman · colima · Lima 가 각각 버튼으로 나옵니다. colima 는 프로필마다, Lima 는 인스턴스마다입니다. -
docker context 를 탭에서 바꿉니다. context 가 둘 이상이면 고르는
칸이 나옵니다. 다른 런타임을 띄웠는데
docker가 옛 소켓을 보고 있으면 여기서 바꿉니다.DOCKER_HOST·DOCKER_CONTEXT가 설정돼 있으면 잠기고, 어느 변수 때문인지 알려 줍니다. - 런타임이 뜨지 못하면 이유를 보여 줍니다. 바로 실패한 런처 위에서 패널이 「실행하는 중」에 멈춘 채 다른 버튼도 누를 수 없었습니다.
브랜치
- 브랜치를 지우면 origin 에서도 지웁니다. 브랜치 메뉴의 삭제는 로컬 브랜치만 지워 origin 의 것이 남았고, 로컬에서 이미 지운 브랜치에서는 「branch not found」 오류가 났습니다. 이제 확인 창이 어디서 지우는지 말하고 그대로 지웁니다. 기본 브랜치에 머지되지 않은 브랜치는 한 번 더 묻습니다.
워크트리
-
워크트리를 지우면 하위 폴더로 연 창의 터미널도 끝납니다.
모노레포의 하위 폴더로 연 창에서는 터미널과 개발 서버가 지워진 폴더에서 포트를 잡은 채
계속 돌았습니다. 터미널에서
git worktree remove로 지운 워크트리도 앱이 켜져 있는 동안이면 같이 정리합니다.
한글 입력
- 한글 조합을 끝내는 Return 이 입력란을 제출하지 않습니다. 브랜치 이름, 워크트리 경로, 파일 이름 바꾸기, 검색 팔레트 같은 입력란에서 마지막 글자를 확정하려던 Return 이 그대로 제출해, 마지막 음절이 빠지거나 대화상자가 닫혔습니다.
- 터미널에서 조합 중인 한글의 왼쪽이 잘리지 않습니다. Claude Code 프롬프트에서 특히 보였고, 글자를 확정하는 순간에야 온전히 그려졌습니다.
1.2.2 2026-10-07
워크트리 여럿을 나란히 돌리는 일을 위한 릴리즈입니다. 레일의 워크트리 카드가 그 워크트리가 켠
서버의 포트, 브랜치 PR 의 CI, 다른 워크트리나 기본 브랜치와 부딪히는 파일을 보여 줍니다. 켜
두면 새 워크트리의 포트를 옮겨 서로 겹치지 않게도 합니다. 포트 패널은 다른 워크트리의 서버를 따로
묶습니다. 이름이 constructor 인 파일 하나가 파일 트리를 통째로
깨뜨리던 것, 에이전트가 지운 파일이 목록에 남던 것도 고쳤습니다.
워크트리 레일
-
카드에 그 워크트리가 켠 서버의 포트가 나옵니다. 여러
워크트리에서 개발 서버를 띄우면 어느 쪽이 켰는지 하나씩 열어 봐야 알았습니다. 이제 카드
구석에
:5173같은 배지가 붙고, 카드의 ⋯ 메뉴와 우클릭 메뉴의 「localhost:5173 열기」로 바로 엽니다. 워커를 여럿 띄우는 서버도 배지는 하나입니다. - 그 브랜치에서 연 PR 의 CI 결과가 카드에 나옵니다. 로컬 검사 표시 옆에 「✓ CI」 · 「✕ CI」 · 「… CI」가 붙습니다. 같은 저장소의 내 PR 만 보고, 내 작업 패널이 읽어 둔 보드를 씁니다. 지금은 GitHub PR 만 됩니다.
-
워크트리끼리 부딪히는 곳을 미리 알려 줍니다. 기본
브랜치(
origin/main)에 지금 합치면 충돌할 파일, 그리고 다른 워크트리도 고치고 있는 파일이 있으면 카드에 경고 한 줄이 붙고, 파일 목록은 툴팁에 나옵니다. 1분마다, 그리고 창으로 돌아올 때 다시 잽니다. 충돌 검사는 git 2.38 이상에서만 됩니다. -
작업 줄에 아이콘이 빠지지 않습니다. 표에 없는 프로그램에는
터미널 아이콘이 나오고, macOS 의
Python도 알아봅니다. Python · Go · Java · Ruby 도구와 Node 위에서 도는 도구들도 더 알아봅니다. - 개발 서버 줄이 조용해져도 「완료」가 되지 않습니다. 에이전트가 아닌 프로그램은 출력이 멎으면 「✓ 완료」로 바뀌어, 서빙 중인 서버가 끝난 것처럼 보였습니다. 이제 「실행 중」입니다.
새 워크트리
-
새 워크트리에 포트를 따로 줄 수 있습니다. 설정의 「새
워크트리에 포트를 따로 주기」를 켜면, 새 워크트리로 복사한
.env· YAML · TOML 같은 설정 파일의 포트를 다른 워크트리와 겹치지 않게 같은 간격만큼 옮깁니다. 그 포트를 가리키는localhost주소 — API 주소, CORS 허용 출처 — 도 같이 옮기고, 데이터베이스 · Redis 처럼 함께 쓰는 서비스는 그대로 둡니다. 커밋된 파일은 고치지 않고 옛 포트가 남은 줄을 알려 줍니다. 기본은 꺼져 있습니다. -
다른 워크트리를 가리키는 링크도 가져옵니다.
node_modules/를 링크로 받은 워크트리에서 또 워크트리를 만들면 「워크트리 밖을 가리킴」으로 실패했습니다. -
이미 있는 폴더에도 파일을 가져옵니다. git 이 방금 만든
.vscode같은 폴더가 있으면 그 안에 가져올 파일이 통째로 빠졌습니다. 이제 파일 단위로 넣고, 이미 있는 파일은 그대로 둡니다. - 「이미 있어서 그대로 둔 것: .env」가 거짓으로 뜨지 않습니다. 기본 설정에서는 워크트리를 만들 때마다 빨갛게 떴습니다.
- 모노레포의 하위 폴더로 연 창에서는 같은 하위 폴더에 가져옵니다. 새 워크트리의 맨 위에 넣어서 앱이 그 파일을 찾지 못했습니다.
-
한글 브랜치 이름도 제 경로를 받습니다.
feat/로그인과feat/가입이 같은 경로가 되고, 한글로만 된 이름은 만들기가 조용히 꺼졌습니다. - 만드는 동안 두 번 누르거나 취소해도 엉키지 않습니다. 두 번째 만들기가 성공 위에 「already exists」를 띄웠고, 취소해도 몇 초 뒤 창이 새 워크트리로 넘어갔습니다. 이제 만드는 동안은 버튼이 멈추고, 8초가 지나면 취소할 수 있습니다.
포트 패널
- 다른 워크트리의 서버를 워크트리별로 묶어 보여 줍니다. 「이 프로젝트」가 지금 열린 워크트리 하나뿐이라, 다른 워크트리에서 켠 서버는 남의 저장소 서버와 같은 「이 머신의 다른 포트」로 갔습니다. 기억한 포트를 다른 워크트리가 잡고 있으면 어느 워크트리가 쓰고 있는지 알려 줍니다.
- 이 프로젝트 것이 아닌 포트에는 재시작이 없습니다. 다른 프로젝트의 서버나 Claude Code 같은 프로그램의 줄에서 재시작을 누르면 그 프로그램을 멈추고 그 명령을 이 프로젝트의 터미널에 쳤습니다. 정지는 그대로 있습니다.
-
폴더를 알 수 없는 프로세스가 기억한 포트를 차지하지 않습니다.
다른 워크트리 컨테이너의
docker-proxy가 이 워크트리의 서버로 보였고, 재시작이 그것을 멈췄습니다. -
재시작이 서버를 띄운 폴더에서 띄웁니다.
yarn --cwd apps/web dev를 재시작하면apps/web/apps/web을 찾았고, 다른 폴더에 가 있는 셸에 쳐서 다른 패키지가 뜨기도 했습니다. - 워크트리를 지우면 그 워크트리가 기억한 포트도 지웁니다. 같은 경로에 다시 만든 워크트리가 옛 줄을 물려받았습니다.
파일 트리
-
constructor·__proto__라는 이름이 화면을 깨뜨리지 않습니다. 그런 이름의 파일이나 폴더가 있으면 파일 트리 · 파일 패널이 통째로 깨졌고, 같은 이름을 언어로 단 diff 와 Markdown 코드 블록도 그랬습니다. - 지운 파일이 목록에 되살아나지 않습니다. 변경이 연달아 오면 먼저 시작한 읽기가 나중에 끝나 옛 목록이 마지막에 그려졌습니다. 에이전트가 지운 파일이 다음 변경 때까지 남아 있곤 했습니다.
- 지웠다 다시 만든 폴더도 변경을 따라갑니다. 브랜치를 바꾸거나 빌드 폴더를 다시 만들면 그 폴더의 변경이 더는 보이지 않았습니다. 그 아래 펼쳐 두었던 폴더도 다시 펼쳐집니다.
-
탭 · Git 패널 · 검색에서도
Makefile·Dockerfile·.env.local아이콘이 나옵니다. 경로째로 받는 자리에서는 이름 표시를 잃었습니다.
그 밖에
- 「포지」라는 말 대신 서비스 이름을 씁니다. 예를 들어 편집할 수 없는 Jira 설명에는 「Jira 에서 수정」이 나옵니다.
- tcsh · csh 탭을 쉬는 셸로 봅니다. 레일에서 「도는 프로그램」으로 나왔습니다.
1.2.1 2026-10-01
버그 수정 릴리즈입니다. 가장 먼저 고친 것은 남의 저장소를 열기만 해도 일이 벌어지던 경로들입니다 — 저장소의 설정 파일이 터미널 셸과 토큰을 보낼 서버 주소를 바꿀 수 있었고, DB · 빌드 패널은 열자마자 저장소가 정한 코드를 돌렸습니다. 저장하다가 작업을 잃던 여러 경우와, Jira 프로젝트 전체를 보드로 쓸 때 남의 티켓이 「내 것」으로 나오던 문제도 고쳤습니다. Bitbucket · Jira 에 새로 로그인하려면 이 버전이 필요합니다.
보안
-
저장소의 설정 파일이 터미널 셸과 서버 주소를 정하지 못합니다.
저장소 안의
.codeme/settings.json은 내 설정 위에 얹히는데, 여기서 터미널 셸을 저장소에 든 스크립트로 바꾸면 터미널을 처음 여는 순간 그 스크립트가 돌았고, GitHub · Forgejo · Bitbucket · Jira 주소를 바꾸면 다음 보드 읽기에서 토큰이 그 서버로 갔습니다. 이제 셸 · 서버 주소 · OAuth 클라이언트 · 계정 이메일은 내 설정에서만 읽고, 프로젝트 설정 파일에 있으면 무시한다고 알려 줍니다. 탭 크기처럼 프로젝트가 정할 만한 것은 그대로 프로젝트 설정을 따릅니다. -
DB 패널이 저장소의
.env로 코드를 돌리지 않습니다..env의 H2 주소에INIT=RUNSCRIPT같은 설정이 들어 있으면, 패널을 여는 순간 그 연결로 접속하며 그것을 실행했습니다. 이제 H2 주소의 설정은 파일을 여는 방법에 관한 것만 받고,.env나 컨테이너에서 찾아낸 연결은 누르기 전에는 접속하지 않습니다. 직접 저장한 연결만 스스로 엽니다. -
빌드 패널이 열자마자
./gradlew를 돌리지 않습니다. 작업 목록을 읽는 것 자체가 저장소의 래퍼와 빌드 스크립트를 실행하는 일이라, 새로 클론한 저장소에서 패널만 열어도 돌았습니다. 이 기계에서 그 러너의 작업을 고른 적이 없으면 「작업 불러오기」를 누를 때까지 기다립니다. -
미리보기 페이지가 홈 폴더의 파일을 읽지 못합니다. 밖에서 연
파일 옆의 파일을 내주는 예외가 모든 미리보기 페이지에 적용돼,
~/notes.txt하나를 열어도 저장소의 HTML 페이지가 홈 폴더의 JSON —~/.docker/config.json같은 자격 증명 포함 — 을 읽을 수 있었습니다. 이제 기준이 되는 것은 밖에서 연 HTML · Markdown · SVG 페이지뿐이고, 그 아래라도 점으로 시작하는 폴더 안은 내주지 않습니다. - Bitbucket · Jira 로그인은 앱이 도는 컴퓨터의 브라우저에서 승인해야 끝납니다. 누군가 시작한 로그인의 동의 링크를 다른 사람이 승인하면, 승인한 사람의 토큰이 시작한 쪽으로 갈 수 있었습니다. 이제 승인한 브라우저가 앱으로 돌아와야 토큰이 넘어갑니다. 그래서 이전 버전의 앱으로는 이 둘에 새로 로그인할 수 없고 업데이트를 안내받습니다. 이미 로그인해 둔 것은 그대로 동작합니다.
- 서버가 다른 포트로 리다이렉트하면 토큰을 떼고 따라갑니다. 호스트만 같으면 포트가 달라도 인증 헤더를 붙인 채 따라갔습니다.
- 파비콘을 찾으려고 페이지 주소를 한 번 더 부르지 않습니다. 브라우저 탭에 연 주소가 로그인 · 확인 · 비밀번호 재설정 링크면, 아이콘을 찾는 요청이 일회용 링크를 먼저 써 버릴 수 있었습니다. 이제 그 사이트의 첫 페이지에서 찾습니다.
에디터
- 「저장하고 종료」가 편집하지 않은 파일까지 쓰지 않습니다. 열린 에디터를 전부 써서, 에이전트가 고친 파일이 에디터에 남아 있던 옛 내용으로 덮이고 트리에서 지운 파일이 되살아났습니다. 업데이트를 받으며 재시작할 때도 같았습니다. 이제 저장하지 않은 편집이 있는 파일만 씁니다.
- 포맷터가 도는 동안 친 글자가 저장에서 빠지지 않습니다. 포맷 결과가 그사이 친 글자를 덮었습니다. 그새 바뀌었으면 포맷 없이 지금 내용 그대로 저장합니다.
- 「저장하고 닫기」는 저장이 끝나야 닫습니다. 읽기 전용이거나 디스크가 가득 차 저장이 실패해도 탭이 닫혀 편집이 사라졌습니다.
- 저장하다 파일이 비거나 잘리지 않습니다. 디스크가 가득 찼거나 쓰는 도중 앱이 끝나면 파일이 빈 채로 남을 수 있었습니다. 이제 옆에 새로 쓴 뒤 바꿔 넣고, 권한과 심볼릭 링크는 그대로 둡니다. 파일 맨 앞의 BOM 도 지우지 않습니다.
- 찾아 바꾸기가 저장하지 않은 편집이 있는 파일은 건드리지 않습니다. 디스크에서 바꿔 놓은 것을 다음 저장이 조용히 되돌렸습니다. 이제 그런 파일이 있으면 거절하고, 바꾸기 전에 로컬 히스토리를 남기고, 열린 에디터에도 알립니다.
-
목차 갱신이 문서 내용을 지우지 않습니다. 코드 블록 안에서
<!-- toc -->마커를 보여 주는 README 는 그 블록부터 진짜 목차까지가 지워졌습니다. 이제 코드 블록 밖에 있고 사이에 목록만 든 마커 쌍만 목차로 봅니다.## C#이 「C」가 되던 것, 같은 제목이 셋일 때 링크가 겹치던 것도 고쳤습니다. -
rustfmt 가
async fn같은 코드에서 포맷에 실패하지 않습니다. 프로젝트의 Rust 에디션을 넘기지 않아 2015 로 읽혔습니다.
Git
-
개행 없이 끝나는 파일 뒤에 붙인 줄만 골라 스테이징해도 파일이 망가지지
않습니다.
}로 끝나는 JSON 에 줄을 더하고 새 줄만 고르면}new처럼 붙은 채 스테이징됐습니다. 그런 선택은 이제 마지막 줄의 변경도 같이 고르라며 거절합니다. - 덩어리 버리기가 내가 보지 않은 변경을 버리지 않습니다. 확인 대화상자가 떠 있는 사이 에이전트가 위쪽을 고치면 번호가 밀려 다른 덩어리가 버려졌습니다. 이제 내가 본 덩어리가 지금도 같을 때만 버리고, 아니면 다시 보라고 합니다.
-
덩어리 하나를 버리거나 스테이징할 때 실행 권한 변경이 따라가지
않습니다.
chmod +x한 스크립트에서 덩어리 하나를 버리면 실행 권한도 사라졌습니다. 모든 변경을 고를 때만 권한 변경이 함께 갑니다. -
push 가 추적 대상을 바꾸지 않습니다. push 할 때마다
추적 대상을
origin으로 다시 정해, 포크에서upstream의 브랜치를 따라가던 브랜치가 push 한 번에 다른 원격을 보게 됐습니다. 이제 같은 이름의 브랜치를 추적하고 있으면 그대로 둡니다.
PR 리뷰
- 줄 코멘트가 엉뚱한 줄에 붙지 않습니다. 리뷰를 쓰는 사이 작성자가 push 하면 코멘트가 다른 코드에 붙거나, 줄이 범위를 벗어나 리뷰 전체가 거절됐습니다. 이제 패널이 그린 커밋에 붙고, 그 뒤 바뀐 줄이면 GitHub · Forgejo 가 outdated 로 보여 줍니다.
- 다른 사람 포크의 같은 이름 브랜치 때문에 내 PR 을 못 여는 일이 없습니다. Forgejo 에서 브랜치 이름만 견줘 이미 있다고 했습니다.
내 작업
-
「나에게 배정된 것」이 담당자로 거릅니다. JQL 을
project = APP처럼 프로젝트 전체로 바꾸면 남의 티켓도 전부 내 것으로 쳐서, 토글을 눌러도 Jira 쪽은 하나도 빠지지 않았습니다. 남의 티켓과 담당자 없는 티켓은 맨 아래 「다른 사람의 것」에 모이고, 「나를 기다리는 것」과 리뷰 요청 알림은 PR 에만 씁니다. -
두 프로젝트의 같은 이름 스프린트를 하나로 합치지 않습니다. 두
프로젝트에
Sprint 12가 있으면 한 선택지였고, 한쪽이 닫혔어도 진행 중으로 보였습니다. 대시보드의 지금 스프린트 막대도 같았습니다. 여러 프로젝트에 걸친 한 스프린트와, 저장소마다 같은 이름을 붙인 GitHub · Forgejo 마일스톤은 계속 하나로 묶습니다. - 저장하면 내용이 사라질 Jira 설명은 편집을 열지 않습니다. 오타 하나 고친 저장에 멘션 · 첨부 이미지 · 날짜 · 패널 · 링크 카드 같은 것이 지워졌습니다. 그런 설명에는 「포지에서 수정」과 그 이유가 나옵니다.
- Jira 체크리스트가 저장 뒤에 깨지지 않습니다. 빈 항목이 있거나 글머리표 바로 아래에 체크리스트가 오면, 그 뒤 항목이 글머리표가 되고 완료 상태를 잃었습니다.
에이전트
- 「여러 에이전트에게 말하기」가 셸에 명령으로 들어가지 않습니다. 에이전트가 끝나 셸이 앞에 있는 탭도 목록에 — 기본으로 체크된 채 — 올라와, 보낸 글이 줄마다 셸 명령으로 실행됐습니다. 이제 지금 에이전트가 앞에 있는 탭만 보이고, 보낼 때 한 번 더 확인합니다. 여러 줄은 한 메시지로 갑니다.
- fish 에서 대기열 프롬프트의 따옴표가 깨지지 않습니다. 작은따옴표가 든 프롬프트가 거기서 끊기고 나머지가 명령으로 실행될 수 있었습니다. 「이 파일 실행」의 인자도 같았습니다.
- 재시작 뒤 한 워크트리의 두 Claude 탭이 같은 대화로 돌아오지 않습니다. 복원은 「이 폴더의 최신 대화」를 이어 받아, 두 탭이 한 대화에 썼습니다. 이제 워크트리마다 첫 탭만 이어 받고, 나머지는 셸에서 대화를 고르게 합니다.
- 버전을 오가도 저장한 레이아웃을 잃지 않습니다. 이 버전이 읽지 못하는 탭(새 버전의 탭 종류)은 다른 레이아웃을 저장할 때 지워졌습니다. 이제 그대로 들고 있다가 함께 쓰고, 파일 전체를 못 읽으면 덮어쓰기 전에 옆으로 치워 둡니다.
- 끝난 워크트리 정리가 남겨 둘 워크트리의 에이전트를 끄지 않습니다. 커밋하지 않은 변경이 있어 git 이 지우기를 거절해도, 그 안의 에이전트와 셸은 이미 꺼진 뒤였습니다. 이제 변경이 있거나 셸이 아닌 것이 도는 워크트리는 먼저 빼고 이유를 말합니다.
터미널
- npm 으로 설치한 Claude Code 를 알아봅니다. 최근 npm 패키지가 네이티브 실행 파일을 깔면서, 탭에 터미널 아이콘이 나오고 레일과 「차례를 기다림」 표시에서도 빠졌습니다.
- 트랙패드로 옆으로 쓸어도 Claude 가 아래로 스크롤되지 않습니다.
-
색 대신
196m같은 글자가 찍히지 않습니다. Claude 가 출력을 쏟을 때 다시 그리는 경계가 색 지정 한가운데 떨어지면 생겼습니다. - 레이아웃을 연 직후 탭을 빠르게 옮겨도 화면이 조각나지 않습니다. 스크롤백 없이 조각난 화면이 남을 수 있었습니다.
브라우저 탭
- 링크를 누를 때마다 페이지가 한 번씩 깜빡이던 것을 고쳤습니다.
- 개발 서버보다 먼저 연 탭도 서버가 뜨면 파비콘이 나옵니다. 앱을 다시 켤 때까지 지구본이었고, 같은 주소에 다른 프로젝트가 떠도 처음 아이콘이 나왔습니다.
- 분할된 창에서 포커스 테두리가 페이지에 가려 위쪽만 보이던 것을 고쳤습니다.
로컬 히스토리
- 에이전트 턴 사이에 내가 고친 것을 잃지 않습니다. 기준을 턴이 끝날 때 잡아서, 그 사이 내가 고친 것을 다음 턴이 덮어쓰면 어디에도 남지 않았습니다. 이제 턴이 시작할 때도 잡습니다.
- 한 번 실패해도 멈추지 않습니다. 에이전트가 git commit 하는 순간처럼 한 번 실패하면, 그 워크트리는 재시작까지 아무것도 남기지 않았습니다.
-
저장소의 하위 폴더를 열어도 경로가 맞습니다.
app/을 열면app/app/y.rs처럼 풀렸습니다. 에이전트 변경 패널도 같이 고쳐졌습니다. - 탭으로 연 로컬 히스토리가 새로 남는 기록을 바로 보여 줍니다.
패널
- 포트 패널이 다른 폴더의 프로세스를 이 프로젝트 것으로 보지 않습니다. 기억한 포트를 번호만으로 판단해, macOS 의 ControlCenter 같은 프로세스를 이 프로젝트 것으로 보이고 재시작이 그것을 멈췄습니다.
-
포트 정지가 서버를 띄운 쪽까지 끄지 않습니다. 에이전트가
npm run dev &로 띄운 서버를 멈추면 에이전트도 같이 꺼질 수 있었습니다. - 도커 「지우기」가 확인을 묻습니다.
1.2.0 2026-09-30
탭 안에서 웹 페이지를 엽니다. 개발 서버를 코드 옆에 띄워 두고, 개발자 도구도 그 탭 안에 붙습니다. 내 작업의 보드는 프로젝트마다 따로 그려지고 각 프로젝트의 Jira 칸을 씁니다. PR 리뷰는 Bitbucket Cloud PR 도 열고(읽기만), 달린 코멘트를 그 브랜치의 에이전트에게 바로 넘길 수 있습니다. 로컬 히스토리는 탭이 됐고 에이전트가 고친 파일도 남깁니다. 워크트리를 오가면 Claude 화면이 깨지던 문제와 Claude 안에서 스크롤이 느리던 문제도 고쳤습니다.
브라우저 탭
-
탭 안에서 웹 페이지를 엽니다. 탭 줄의 + 메뉴 · 상단의 지구본
버튼 · 포트 패널의 「열기」로 열리고, 주소창에
3000만 넣어도localhost:3000이 열립니다. 페이지가 새 창을 열려고 하면 같은 그룹의 새 탭으로 열리고, 레이아웃을 다시 열면 마지막으로 보던 페이지로 돌아옵니다. - 개발자 도구가 탭 안에 붙습니다. 페이지의 우클릭 메뉴는 크롬과 같은 순서입니다 — 링크를 새 탭에서 열기, 주소 복사, 선택한 글 검색, 검사.
- 페이지를 보고 있어도 앱 단축키가 듣습니다. 새로 고침 · 뒤로 · 앞으로 · 주소창 · 개발자 도구는 크롬과 같은 키입니다.
- 탭 아이콘은 그 사이트의 파비콘입니다.
- 메뉴나 알림과 겹칠 때. 페이지는 창이 그리는 모든 것 위에 있어서, 메뉴나 대화상자가 그 위에 열리면 잠시 숨고 그 자리에 페이지 제목이 나옵니다. 오른쪽 아래 알림이 뜨면 그동안 페이지가 알림 위까지 줄어듭니다. 다운로드는 아직 되지 않습니다.
로컬 히스토리
- 탭으로 엽니다. 상단 버튼 · 단축키 · + 메뉴 모두 탭을 열고, 에디터 옆에 두고 비교할 수 있습니다. 파일 하나의 히스토리는 전처럼 대화상자입니다.
- 에이전트가 고친 파일도 남습니다. 전에는 이 창의 에디터로 저장한 파일만 남아서, 어떤 파일은 있고 어떤 파일은 없었습니다. 이제 에이전트가 한 턴을 마칠 때마다 그 턴에 바뀐 파일의 이전 내용을 남깁니다. 지운 파일도 남습니다.
내 작업
- 보드가 프로젝트마다 나뉩니다. 여러 프로젝트가 섞이면 보드가 「할 일 · 진행 중 · 완료」 세 칸으로만 그려져서 「검토 중」과 「진행 중」이 한 칸에 들어갔습니다. 이제 프로젝트마다 보드가 하나씩 생기고, Jira 프로젝트는 그 프로젝트에 설정된 칸을 씁니다. 카드는 자기 프로젝트 보드 안에서만 옮길 수 있습니다. 스크롤해도 프로젝트 이름과 칸 이름이 위에 붙어 있습니다.
- 목록에서도 프로젝트끼리 모입니다. 「나를 기다림」과 「내 것」 안에서 프로젝트마다 소제목이 붙습니다.
-
필터가 무엇인지 말합니다. 프로젝트 필터는 티켓과 PR 을
제목으로 나눠 보여 주고, 스프린트 필터는 이름 앞에 프로젝트를 붙입니다
(
SkillDB · Sprint 12). 「지금 도는 스프린트」는 「활성 스프린트」가 됐습니다. - Jira 설명의 표와 체크리스트가 제 모양으로 나옵니다. 표는 칸마다 한 줄씩 세로로 풀려 나왔고, 체크리스트는 상자 없이 글자만 이어졌습니다. 편집해서 저장해도 표와 체크리스트로 돌아갑니다.
- PR 상세에서 「파일 보기」로 PR 리뷰 탭에 건너갑니다.
- Bitbucket Cloud 에서 다른 사람의 PR 도 올라옵니다. 전에는 내가 쓴 PR 만 왔습니다. 쓰기 권한이 있는 저장소 가운데 최근에 갱신된 곳들의 열린 PR 을 가져옵니다.
- 워크트리를 오가도 보드가 틀어지지 않습니다. 돌아올 때마다 대시보드와 기본 칸을 거쳐 원래 보드로 돌아왔습니다. 이제 떠날 때의 화면으로 바로 돌아옵니다.
PR 리뷰
- Bitbucket Cloud PR 을 읽습니다. 파일별 diff 와 이미 달린 줄 코멘트가 나옵니다. 코멘트와 승인은 당분간 Bitbucket 에서 보내 주세요.
- 코멘트를 에이전트에게 넘깁니다. PR 의 브랜치가 열린 워크트리에 에이전트가 있으면, 스레드마다 「에이전트에 붙여넣기」와 머리줄의 「코멘트 전부」가 생깁니다. 파일과 줄, 코멘트를 인용해 붙여넣기만 하고, 무엇을 할지는 직접 적어 보내면 됩니다.
- 파일 목록의 폭을 조절하고 폴더로 묶어 볼 수 있습니다. 폴더 / 한 줄 보기는 에이전트 변경 리뷰 · 히스토리 · 비교에도 똑같이 있고, 고른 보기는 기억됩니다.
- 오른쪽 위 버튼을 정리했습니다. 목록으로 돌아가기는 왼쪽 화살표가 됐고, 한 줄 / 좌우 보기는 다른 diff 화면과 같은 버튼을 씁니다.
히스토리와 워크트리
- 에이전트 커밋을 정리합니다. 히스토리에서 커밋 범위를 골라 합치기(squash), 메시지 고치기, 버리기를 할 수 있습니다. 이미 푸시한 커밋이면 먼저 묻고, 머지 커밋이 낀 범위나 변경이 남은 워크트리에서는 하지 않습니다.
- 일이 끝난 워크트리를 알려 줍니다. 브랜치가 머지됐거나 원격 브랜치가 사라진 워크트리를 사이드바에 표시하고, 한 번에 정리할 수 있습니다. 변경이 남은 워크트리는 지우지 않습니다. squash 로 머지한 브랜치는 원격 브랜치가 지워진 경우에만 알아봅니다.
-
이름에 대괄호가 든 파일을 버릴 때 다른 파일이 지워지지 않습니다.
pages/[id].tsx같은 경로를 git 이 패턴으로 읽어서, 추적되지 않은 이 파일을 버리면pages/d.tsx까지 지워졌습니다. 이제 경로를 글자 그대로 넘깁니다. -
Git 패널의 「치워 둔 것」은 「임시 보관」이 됐습니다.
git stash입니다.
터미널
- 워크트리를 오가도 Claude 화면이 깨지지 않습니다. 다른 워크트리를 보는 동안 터미널은 출력을 받지 않고, 돌아올 때 저장된 출력을 다시 그렸습니다. 그 저장본은 앞부분이 잘려 있어서 Claude 화면 위쪽에 옛 조각이 남고 빈 줄이 생겼습니다. 이제 보이지 않는 동안에도 출력을 받아 두기 때문에 다시 그릴 필요가 없습니다.
- Claude 안에서 스크롤이 밀리지 않습니다. 트랙패드로 한 번 쓸면 Claude 에게 스크롤 신호가 초당 60번쯤 가서, 화면을 다시 그리는 일이 밀렸습니다. 이제 신호를 모아서 보냅니다.
- Claude 가 길게 출력할 때 번쩍이지 않습니다. 워크트리로 돌아올 때 터미널마다 한 번씩 번쩍이던 것도 함께 고쳤습니다.
- 한 번 깨진 터미널이 흐릿하고 무거운 채로 남지 않습니다. GPU 렌더러는 이제 보이는 워크트리의 터미널만 쓰고, 다시 보일 때 새로 붙습니다.
-
npm 으로 설치한 Claude Code 도 에이전트로 알아봅니다.
Homebrew 의 Node 에
npm i -g로 설치하면 탭이 Claude 를 알아보지 못하고 터미널 아이콘을 그렸습니다. -
프로젝트를 오가도 Claude 화면이 아래로 밀리거나 잘리지 않습니다.
그 뒤
/exit하면 셸 프롬프트가 대화 위에 겹쳐 찍히던 것도 고쳤습니다.
diff
- 추가와 삭제가 분명한 초록과 빨강으로 나옵니다. 테마의 색을 옅게 섞어 쓰다 보니, 어두운 기본 테마에서 둘 다 비슷한 갈색이 됐습니다. 에디터 안의 변경 표시도 같은 색입니다.
- 창 크기를 바꿔도 좌우 diff 의 옛 쪽 줄이 새 쪽을 덮지 않습니다.
창
- 탭 + 메뉴를 네 묶음으로 나눴습니다. Git · 실행·디버그 · 서비스 · 작업. 패널 열다섯이 한 제목 아래 있었습니다.
- 대화상자에서 긴 경로가 줄바꿈됩니다. 워크트리 삭제 확인에서 긴 경로가 창 밖으로 밀려 버튼이 잘렸습니다.
에디터
- Markdown 표 정렬과 목차. 우클릭 메뉴의 「이 표 정렬」은 한글을 두 칸으로 세어 줄을 맞추고, 「목차 넣기 / 갱신」은 GitHub 와 같은 앵커로 목차를 넣거나 고칩니다.
디버거
-
PATH 에 없는
lldb-dap도 찾습니다. Xcode 에 든 것과 Homebrew 의 llvm 에 든 것이 있어도 「설치되어 있지 않습니다」라고 했습니다. 따로 설치할 필요가 없었습니다.
파일 트리
- 프로젝트 안의 워크트리 폴더가 따로 된 아이콘으로 나옵니다. 이 프로젝트의 파일인지 다른 체크아웃인지 이름을 읽지 않아도 구분됩니다.
1.1.2 2026-09-29
좌우 diff 의 가운데를 끌어서 옮길 수 있게 됐고, diff 를 보여 주는 네 패널 모두에 크게 보기 버튼이 생겼습니다. 나머지는 버그 수정입니다. 가장 중요한 것은 Git 패널에서 파일을 바꾸자마자 「Stage hunk」를 누르면 엉뚱한 줄이 스테이징되던 문제입니다. 1.1.1 에서 고쳤다고 했지만 실제로는 그대로였던 두 가지 — 스프린트 마지막 날과 새로고침 뒤의 사용량 — 도 이번에 제대로 고쳤습니다.
터미널
- 프로젝트를 오가도 에이전트 화면이 비지 않습니다. 터미널은 다시 보일 때 화면을 초기화하고 저장해 둔 출력을 다시 그립니다. 그런데 「화면 지우기」 직후나 전체 화면 프로그램이 막 끝난 뒤처럼, 다시 그릴 글자가 하나도 없을 때도 화면을 초기화했습니다. 그래서 프로세스는 살아 있는데 하단 상태줄만 남은 빈 화면이 됐고, 입력을 기다리는 에이전트는 스스로 다시 그리지 않으니 계속 비어 있었습니다. 이제 그릴 내용이 있을 때만 초기화합니다.
- 입력 중인 한글이 제자리에 표시됩니다. 조합 중인 글자가 3px 오른쪽에 떠 있다가 입력이 끝나는 순간 왼쪽으로 튀었습니다. Claude 에서는 글자가 왼쪽으로 쏠리는 것처럼, 셸에서는 조금씩 밀리는 것처럼 보이던 현상입니다. GPU 렌더러와 조합 상자가 글자를 놓는 기준이 달라서였고, 이제 조합 상자도 같은 기준을 씁니다. GPU 없이 그리는 환경에서는 원래 문제가 없었으므로 그대로 둡니다.
Git
- 파일을 바꾸자마자 누른 「Stage hunk」가 다른 파일에 적용되지 않습니다. 새 파일의 diff 가 도착하기 전까지 이전 파일의 hunk 가 새 파일 이름 아래에 그대로 남아 있었습니다. 버튼은 hunk 번호로 동작하기 때문에, 그 사이에 누르면 새 파일이 이전 파일의 번호대로 스테이징됐습니다. 파일을 누르고 바로 첫 hunk 를 스테이징하는 일이 흔해서 드물지 않게 일어났습니다. 이제 다른 파일을 고르면 패널을 먼저 비우고 새 diff 를 기다립니다.
-
새 폴더 안에 만든 파일이 이름 없는 빈 줄로 나오지 않습니다.
git 은 새 파일만 든 폴더를
features/처럼 한 줄로 알려 주는데, 변경사항 트리가 이것을 폴더 하나와 이름 없는 파일 하나로 그렸습니다. 안에 파일이 몇 개든 개수는 「1」이었고, 열어 보거나 하나만 골라 스테이징할 수도 없었습니다. 이제 파일이 하나씩 나옵니다. 그 가운데 일부만 버렸을 때 빈 폴더가 남던 문제도 함께 고쳤습니다. 워크트리 안에 들어 있는 다른 저장소는 여전히 한 줄이지만, 이제lib/처럼 이름이 표시됩니다.
diff
- 좌우 diff 의 경계를 끌어서 옮길 수 있습니다. 두 열이 항상 반반이어서, 한쪽 줄은 짧고 다른 쪽은 긴 diff 에서는 코드를 보려고 옆으로 스크롤했다가 되돌아와야 했습니다. 옮긴 위치는 다른 파일을 열어도 유지됩니다.
- 히스토리 · 리뷰 · 비교 · Git 패널 모두에 크게 보기 버튼이 생겼습니다. 탭 메뉴의 「다이얼로그로 크게 보기」와 같은 기능입니다. 바이너리 파일처럼 보여 줄 텍스트가 없을 때는 버튼이 나오지 않습니다.
창
- 스크롤바를 15px 에서 8px 로 줄이고 창의 색에 맞췄습니다. 좁은 사이드바 옆에서 회색 스크롤바가 지나치게 넓게 자리를 차지했습니다. 글자 크기를 키우면 스크롤바도 함께 커집니다.
- 파일 트리를 처음 읽는 동안 빈 화면 대신 자리 표시가 나옵니다. 전에는 목록이 비어 있어서 파일이 없는 저장소처럼 보였습니다. 이제 실제 행과 같은 높이의 회색 행이 먼저 나옵니다. 읽기에 실패한 경우에는 오류를 닫아도 회색 행이 다시 나타나지 않습니다.
내 작업
- 스프린트 마지막 날에 카드가 사라지지 않습니다. 1.1.1 에서 마지막 날에는 카드를 남긴다고 했지만, 종료 시각을 UTC 기준으로 계산하는 바람에 금요일 아침에 끝나는 스프린트가 한국에서는 금요일 내내 끝난 것으로 처리됐습니다. 이제 사용자의 시간대로 계산합니다. 카드는 숨었는데 바로 아래 「지금 할 일」은 끝난 스프린트를 계속 「이번 스프린트」로 보고 순위를 매기던 것도 같은 기준으로 맞췄습니다.
사용량
- 새로고침에 실패해도 「~0% 남음」으로 떨어지지 않습니다. 1.1.1 에서는 다음 1분 주기의 응답을 받을 때까지 「읽는 중…」을 보여 주도록 했는데, 정작 그 주기가 서버에 다시 묻지 않고 방금 실패한 결과를 그대로 가져왔습니다. 이제 실제로 서버에 다시 묻습니다. 「읽는 중…」 상태에서 한 번 더 눌러도 대기가 풀리지 않습니다.
디버거
- cargo 빌드를 기다리는 디버그 시작을 멈출 수 있습니다. 터미널이나 rust-analyzer 가 빌드 잠금을 잡고 있으면 패널이 「시작하는 중…」 에서 멈춘 채 빠져나갈 방법이 없었습니다. 이제 옆에 정지 버튼이 있고, 누르면 rustc 까지 함께 멈춥니다. 폴더를 바꾸거나 앱을 끌 때도 빌드가 멈춥니다.
로컬 히스토리
- 되돌리기 후에도 이력 목록이 최신 상태로 보입니다. 목록에서 파일을 골라 되돌린 뒤 돌아오면 버전 수와 시간이 예전 값 그대로였습니다. 이제 돌아올 때마다 다시 읽습니다. 이름이 공백으로 끝나는 파일의 이력이 목록에서 보이지 않던 문제도 고쳤습니다.
1.1.1 2026-09-28
어제 들어온 디버거에는 Rust 프로젝트에 줄 것이 없었습니다. 이 앱이 Rust 로 쓰여 있으니, 그 사실을 제일 먼저 만난 것은 만든 사람이었습니다 — 빈 화면에 「다른 편집기 이름이 붙은 폴더에 설정을 추가하세요」. 두 가지가 같이 틀렸고, 둘 다 고쳤습니다.
디버거
-
Rust 는 무엇을 실행할지 cargo 에게 묻습니다. 패널을 열면
cargo metadata --no-deps가 이 워크스페이스의 bin 과 테스트 바이너리를 세우고, 디버그를 누르면cargo build|test --no-run --message-format=json이 방금 쓴 실행 파일의 경로를 말해 줍니다. 1.1.0 이 Rust 에게 아무것도 주지 않은 근거는 «target/밑을 찍어 보는 것은 디버거가 엉뚱한 프로그램을 시작하는 방법이다» 였고, 그 말은 맞습니다 — 그래서 뒤집는 대신 충족시켰습니다. 아무것도 찍어 보지 않습니다.target/debug/deps/dap-8f3c1a4e7b2d0c19같은 이름을 찾아낼 방법은 애초에 이것 하나였습니다. 빌드는 피커를 그릴 때가 아니라 디버그를 누를 때 일어나고, 컴파일이 실패하면 rustc 가 한 말이 그대로 옵니다. -
설정 파일은
.codeme/launch.json입니다. 1.1.0 은 그 답이.vscode/launch.json이라고 말했습니다. 그 파일을 읽는 것은 맞습니다 — 이미 한 편집기에 서버를 어떻게 띄우는지 적어 둔 리포가 이 창에게 다시 적을 이유가 없고, 포매터·린터·테스트 러너를 고르는 규칙이 바로 그것입니다. 남의 파일을 읽는 것은 예의고, 요구한 것이 잘못이었습니다: 이 창을 설정하려면 다른 편집기 이름이 붙은 폴더를 만들라는 말이었으니까요. 그래서 빈 화면과 에러가 말하는 파일은 이 창이 이미 쓰는.codeme/안에 있고,.vscode/launch.json은 있으면 그대로 읽습니다. 같은 이름이 양쪽에 있으면 이 창의 파일이 이깁니다 — 설정을 옮기는 중인 리포의 피커에 같은 줄이 두 번 뜨지 않게. -
C 와 C++ 는 여전히 설정 파일뿐입니다. Makefile 에는
물어볼 cargo 가 없고,
compile_commands.json은 번역 단위를 어떻게 컴파일하는지 말할 뿐 트리의 어느 바이너리가 프로그램인지는 말하지 않습니다. Go 와 Python 은 열린 파일이, Java 와 Rust 는 그 프로젝트의 빌드가 답하고, 남는 자리가 그 둘입니다.
로컬 히스토리
- 이력이 있는 파일을 한자리에서 봅니다. 저장할 때마다 직전 내용을 보관하는 것은 1.0 부터 있었지만, 볼 수 있는 곳은 그 파일을 열어 둔 에디터와 파일 트리뿐이었습니다 — 에이전트가 열한 개를 고친 직후에 그 열한 개의 이름을 외우고 있는 사람은 없습니다. 상단 툴바에 버튼이 생겼고, 이력이 있는 파일만 폴더 트리로 나옵니다. 행을 누르면 지금까지처럼 버전 목록과 diff, 되돌리기입니다.
- 저장소가 그 질문에 답할 수 없었던 이유도 고쳤습니다. 보관 폴더의 이름은 경로를 해시한 것이고 — 경로에는 슬래시가 있어서, 같은 이름의 파일과 폴더가 한 프로젝트에 같이 있는 날 하나를 아예 쓸 수 없게 되는 것을 막는 선택이었습니다 — 해시는 되돌릴 수 없습니다. 그래서 이제 경로를 복사본 옆에 적어 둡니다. 그 전에 쌓인 이력은 목록에 오르지 않지만 사라지지도 않습니다: 그 파일을 열면 지금까지처럼 보이고, 다음 저장부터 목록에 나타납니다.
내 작업
-
아무도 닫지 않은 스프린트가 대시보드 상단을 차지하지
않습니다. Jira 는 사람이 닫을 때까지 스프린트를
active로 두고, 금요일에 그것을 닫는 사람은 없습니다. 그래서 끝난 지 엿새 된 계획이 「지금 도는 사이클」로 남아 있었고, 얼마나 남았는가를 말하는 자리가 「6일 지남」을 말했습니다 — 그 섹션이 절대 말해서는 안 되는 한 문장입니다. 끝이 지난 사이클은 이제 그 자리에서 물러납니다. 마지막 날은 남습니다: 막대를 제일 많이 읽는 날이 그날입니다. 행이 숨는 것은 아닙니다 — 큐에 그대로 있고, 위쪽 필터의 선택지로도 그대로입니다.
터미널
-
네이티브 설치한 Claude Code 도 에이전트로 알아봅니다.
탭은 앞에서 도는 프로그램을 실행 파일의 이름으로 부르는데, Claude Code
의 설치 스크립트는 그 파일을
versions/2.1.283처럼 버전 번호로 둡니다. 그래서 Homebrew 에서 옮겨 온 날부터 탭은 에이전트가 아니라2.1.283을 돌리고 있었고 — 아이콘도, 작업 행도, 「차례입니다」도 없었습니다.versions폴더 안의 번호는 이제 그 위 폴더의 이름으로 읽습니다.
사용량
- 새로고침한 직후의 사용량이 「~0% 남음」이 아닙니다. Claude 카드의 새로고침은 로그인이 바뀌었을 수 있으니 받아 둔 서버 값을 지우고 다시 묻는데, 그 한 번이 늦거나 막히면 칩이 이 맥에서 센 추정치로 떨어졌습니다 — 서버가 준 숫자와는 다른 것을 잰 숫자가, 누른 것에 대한 답처럼. 이제 서버 값이 올 때까지 칩은 「읽는 중…」이라고 말하고, 다음 1분 주기가 답을 가져오면 그것을 씁니다.
1.1.0 2026-09-27
번호가 1.0 을 벗어난 이유는 하나입니다 — 디버거. 언어 서버 옆에 빈 자리로 남아 있던 줄이고, 이 창이 못 하던 일 중 제일 큰 것이었습니다. 그 김에 언어 서버도 열린 파일을 벗어나는 질문 넷을 배웠고, 커밋 사이의 30분을 기억하는 로컬 히스토리와 git 의 되돌리기와 치워 두기가 들어왔습니다. 그리고 UTF-8 이 아닌 파일을 말없이 망가뜨리던 자리 둘을 고쳤습니다.
디버거
-
Go · Python · C/C++ · Rust, 그리고 Java 를 이 창에서
디버그합니다. DAP 는 LSP 의 형제라 — 같은 저자, 같은 파이프,
같은
Content-Length프레이밍 — 전송은 언어 서버 것을 그대로 씁니다. 물려받지 않은 것은 대화의 모양입니다. LSP 는 서로 독립적인 질문 집합이지만 DAP 의 시작은 순서입니다:launch를 보내고 기다리지 않은 채 어댑터가 「이제 중단점을 말해라」라고 할 때까지 있다가, 그때 중단점을 보내고, 그제서야 launch 의 답이 옵니다. 답을 먼저 기다리는 클라이언트는 교착합니다 — delve 와 debugpy 가 둘 다 그런 어댑터입니다. -
어댑터는
PATH에 이미 있는 것만 씁니다.dlv dap, 프로젝트 자기 virtualenv 안의debugpy, 그리고 LLVM 17+ 에 같이 오는lldb-dap— C 프로젝트를 빌드하는clang옆에 이미 있고, Rust 바이너리도 이것으로 디버그합니다. 아무것도 번들하지 않고 아무것도 설치하지 않는다는 규칙은 언어 서버 때와 같습니다. 다만 거기서는 그 규칙이 일곱 언어를 한 번에 데려왔고, 여기서는 그만큼 못 갑니다: 디버그 어댑터 대부분이 VS Code 확장으로 배포되고,.vsix는 누구의PATH에도 없는 프로그램입니다. -
무엇을 실행할지는
.vscode/launch.json이 답합니다. VS Code 호환 제스처가 아니라 그 프로젝트 자신의 파일이라서고, 포매터·린터·테스트 러너를 고르는 규칙이 그것과 같습니다. 주석과 마지막 쉼표가 든 JSONC 도 읽습니다 — VS Code 의 기본 템플릿이 거의 주석이라, 엄격한 파서는 제일 흔한 경우에 실패합니다. 파일이 없으면 열린 파일이 답이지만 Go 와 Python 에서만입니다:lldb-dap이 실행하는 것은 먼저 빌드돼야 하는 바이너리고,target/밑을 찍어 보는 것은 디버거가 엉뚱한 프로그램을 시작하는 방법입니다. -
Java 의 디버거는 언어 서버 안에 있습니다.
java-debug는 프로그램이 아니라 Eclipse JDT 플러그인이라, jar 하나를jdtls에 실어 보낸 다음 언어 서버에게 「디버그 세션 열고 포트 알려 줘」라고 물어서 닿습니다. 이 창은 이미 jdtls 를 띄웁니다. 그래서 Java 의 「무엇을 실행할까」가 여섯 언어 중 제일 좋은 답입니다 —launch.json도 추측도 필요 없이 언어 서버가 이미 읽어 둔 Maven/Gradle 빌드에서 main 클래스가 나오고, 클래스패스(진짜 프로젝트면 jar 백 개)도 같은 길로 옵니다. jar 은 Maven Central 에서 사람이 한 번 받는 것이고, 찾는 자리는~/.m2와 mason 입니다 — 다른 에디터의 설치 폴더는 일부러 안 봅니다. -
TypeScript 와 Node 는 안 됩니다. 그리고 창이 그렇게
말합니다.
js-debug는.vsix안에만 있어서, 받아오는 순간 이 앱의 첫 다운로드 바이너리가 됩니다 — 버전 고정, 서명 확인, 업데이트 이야기를 전부 우리가 지게 됩니다. 아무 일도 하지 않는 버튼을 그리는 대신 안 된다고 적어 두었습니다. -
중단점이 줄 하나만 말하지 않습니다 — 조건 · 히트 카운트 ·
로그포인트. 줄만 있는 중단점은 백 번 중 아흔 번이고, 나머지 열
번이 오후를 태우는 쪽입니다: 오백 번째에만 틀리는 루프, 마흔 군데에서
불리는데 한 군데만 문제인 함수. 손으로 하면 사백아흔아홉 번을 멈추게
되므로 사람들이 실제로 하는 것은 프로그램을 고치는 것입니다 — 디버거가
이미 보고 있는 파일에
print를 넣었다 지우는 것. 세 가지 전부 디버거가 평가합니다:i > 500은 Python 파일에서 Python 이고 Go 파일에서 Go 이며, 문법을 이 창이 검사한다면 그건 두 번째이자 더 나쁜 컴파일러입니다. - 여백은 색이 아니라 모양으로 구분합니다 — 원 · 마름모 · 화살표. 색만으로 나누면 색각 이상인 사람이 못 읽고 다음 테마가 지워 버리는데, 여기서 갈리는 차이는 장식이 아닙니다: 로그포인트는 절대 멈추지 않고 조건부도 보통 안 멈추므로, 잘못 보고 있는 사람은 오지 않을 정지를 기다립니다.
-
예외 중단점, 그리고 그것이 드러낸 것.
setExceptionBreakpoints를 빈 필터 목록으로 보내고 있었는데, 빈 목록은 「의견 없음」이 아니라 끄기입니다. debugpy 는uncaught를 켜 두고 오므로, 잡히지 않은 예외로 죽는 프로그램이 디버거 밑에서 끝까지 달려 트레이스백을 찍었습니다 — 디버거 없이 돌리는 것과 같은 결과입니다. 이제 어댑터가 켜 두고 온 것을 그대로 보내고, 목록도 문구도 어댑터의 것입니다. 어댑터별로 기억하므로 두 번째 실행부터는 돌리기 전에 고를 수 있습니다. - 중단점이 창보다 오래 삽니다. 메모리에만 있어서 앱을 닫으면 전부 사라졌습니다 — 첫 실행이 아니라 두 번째 실행에서 알아채는 종류입니다. 레이아웃을 두는 자리 옆에 같은 방식으로 키를 잡아 둡니다. 폴더 안에는 두지 않습니다: 중단점은 당신이 어디를 보고 있는가지, 커밋할 것이 아닙니다. 파일이 말이 안 되면(없음, 크래시로 반쯤 잘림, 다른 기계에서 복사해 온 것) 셋 다 같은 답입니다 — 중단점 없이 시작.
-
디버그 패널을 여는 키는 ⌘⇧D,
컨테이너는 Ctrl⌥D 로
갔습니다. 그 키를 컨테이너 목록이 빌려 쓰고 있었고, 빌린 근거가
코드에 이렇게 적혀 있었습니다 — VS Code 에서는 Run and Debug 이고 「이
앱에는 그것이 없다」. 이제 있습니다. 그리고 창 단축키에 수식자가 있어야
한다는 규칙에 함수 키 예외를 넣었습니다: 그 규칙은 타이핑에
관한 것이고(
d는 단어 가운데서 눌립니다),F5는 글자를 만들지 않습니다 — 두 제품이 함수 열을 디버거에 쓰는 이유가 정확히 그것입니다. - 멈춘 파일이 디버거를 덮지 않습니다. 디버그 패널은 다른 것과 같은 분할 트리의 탭이라, 멈추면서 그 파일을 같은 그룹에 열면 스택 · 변수 · 감시가 통째로 가려졌습니다. 돌아가려고 탭을 누르면 이번엔 멈춘 줄이 사라지고 — 한 답의 두 쪽이 번갈아 나왔습니다. 그룹이 하나뿐이면 아무 일도 하지 않습니다: 남의 프로그램이 멈췄다고 창을 쪼개는 것은 고치려던 것보다 나쁩니다.
언어 서버
-
하이라이팅을 정규식이 아니라 언어 서버가 합니다.
Board를 에디터의 토크나이저는 구조체든 변수든 매크로든 똑같이 칠합니다 — 글자를 읽기 때문입니다. 서버는 그것을 이미 풀어 놓았고, Rust 에서 읽는 사람이 구분하고 싶은 것의 절반이 정확히 그것입니다. 서버마다 범례가 다르므로 코어가 서버의 색인을 이쪽 목록으로 옮기고, 이 창에 색이 없는 종류는 가장 가까운 것으로 칠하지 않고 버립니다 — 그건 코드에 대한 거짓말이고, 그럴 바에는 토크나이저의 추측이 낫습니다. 서버가 없거나 아직 인덱싱 중이면 이미 칠해진 파일을 그대로 둡니다. -
열린 파일을 벗어나는 질문 넷. 심볼로 이동 —
십만 줄 어딘가에 있는
Board를 텍스트로 찾으면 그것을 언급한 이백 줄이 나오지만, 서버의 인덱스는 그 구조체 하나를 줍니다(Rust 와 Python 이 같이 든 저장소에서는 인덱스가 둘이므로 살아 있는 서버 전부에 묻습니다). 구현으로 이동 — 트레이트 메서드에서 정의로 가면 트레이트에 내리지만, 원했던 것은 그것을 구현한 네 타입입니다. 타입 정의로 이동 —let rows = read()?;에서 원했던 것은read가 아니라Vec<Row>입니다. 호출한 곳 보기 — 한 단계만입니다: 「무엇이 여기 닿나, 내 생각대로인가」는 열에 아홉 첫 단계에서 답납니다.
로컬 히스토리
-
커밋 사이의 30분을 기억합니다. git 은 「그 커밋에서 이
파일이 무엇이었나」에 답하지만 커밋 두 개 사이의 30분에 대해서는 할 말이
없는데, 이 창이 다루는 시간이 바로 그 30분입니다 — 에이전트가 파일 열한
개를 다시 쓰고, 저장할 때마다 포매터가 돌고, 리네임이 마흔 개를 건드립니다.
「이 함수가 20분 전에 뭐였지」에 답하는 자리가 창 어디에도 없었습니다.
저장하기 직전의 내용을 한 부 남기고, diff 는 당신의 git 을 그대로
씁니다(
git diff --no-index). 1MB 넘는 파일과 안 바뀐 저장은 남기지 않고, 파일당 50개 · 전체 64MB 에서 오래된 것부터 버립니다. - 트리의 우측 버튼에서도 엽니다. 문이 에디터 헤더 하나뿐이면 무엇이 바뀌었는지 보려고 먼저 그 파일을 열어야 하는데, 이 기능이 필요한 순간은 그 반대입니다: 에이전트가 열한 개를 고쳐 놓았고 궁금한 것은 아직 안 열어 본 파일 쪽입니다. 「변경 내용 보기」 바로 옆에 두었습니다 — 같은 질문을 다른 구간에 대고 묻는 것이라서(저쪽은 마지막 커밋 이후, 이쪽은 마지막 반 시간) 붙여 두는 편이 읽힙니다.
- 저장하지 않은 편집이 있으면 복원을 거절합니다. 보관본은 디스크에 있던 것이고, 버퍼가 그보다 앞서 나가 있으면 그 텍스트는 어디에도 없습니다. 복원한 뒤에는 에디터가 전부 디스크에서 다시 읽으므로, 고치던 것이 디스크에도 보관함에도 버퍼에도 없게 됩니다 — 이 기능이 존재하는 이유의 정반대입니다. 한 번 저장하면 그 저장이 직전 내용을 보관함에 남기므로, 저장하고 복원하면 잃는 것이 없습니다.
git
- 커밋을 되돌리는 두 가지 — revert 와 reset. 히스토리 패널에 커밋이 다 있는데 그중 하나를 되돌릴 방법이 없었습니다. 둘의 차이가 메뉴의 전부입니다: revert 는 히스토리에 더하고 reset 은 고쳐 씁니다. 그래서 남이 이미 pull 한 브랜치에서 안전한 것은 앞의 것이고, 그것이 메뉴에서 먼저 서 있는 이유입니다. reset 세 줄은 각각 무엇을 가져가는지를 말합니다 — 스테이지에 남기거나, 편집 상태로 남기거나, 가져가거나. 마지막 것은 이 패널에서 아무것도 되돌려 주지 않는 유일한 동작이라 먼저 묻고, 그 대화상자가 revert 를 다시 이름으로 가리킵니다.
-
치워 두기 — 버리는 것 말고 세 번째 답. 「이 워크트리에
커밋되지 않은 변경이 3개 있습니다. 전부 사라집니다」라고 말해 놓고 그 아래에
「취소」와 「버리고 삭제」만 놓는 대화상자였습니다. 손실을 이름까지 붙여
설명한 다음, 그 손실을 가져가는 버튼 하나만 내미는 것입니다. 사람들이 원하는
답 — 작업도 지키고 체크아웃도 치운다 — 이 창 어디에도
없었습니다. 추적되지 않는 파일까지 가져가는 것이 여기서는 기본입니다:
남겨 두면
git worktree remove가 거부하므로, 절반만 옮겨 놓고 두 번째 단계에서 실패해 작업이 두 군데로 흩어집니다. 되찾는 자리는 커밋 패널입니다 — 보이지 않는 stash 는 잃어버린 stash 이고, 터미널에서 만든 것도 같이 뜹니다. - 충돌을 해결하면 UTF-8 이 아닌 파일이 통째로 망가지던 것. 머지 패널은 파일 전체를 다시 씁니다. 그래서 디코드하지 못한 바이트는 전부 그 자리에서 파괴됐습니다 — 워크트리에서, 곧 커밋될 파일에서, 아무 말 없이. cp949 파일 하나를 충돌 상태로 만들고 「우리 것」을 고르면 11바이트 파일이 19바이트가 되어 나오고 한글이 전부 물음표가 됩니다. 읽는 경로가 셋이었고 셋 다 디코드하고 있었습니다. 셋을 다 고쳐야 했습니다: 파일만 고치면 바이트는 지켜지지만 삼자 뷰의 조상 컬럼이 사라지는데, 삼자 편집기가 이자 편집기보다 나은 이유가 그 컬럼입니다.
-
헝크 스테이징이 같은 일을 인덱스에서 하던 것. 패치는
텍스트가 아닙니다. diff 를 문자열로 읽으면 디코드 안 되는 바이트마다 대체
문자가 되고, 그것을 다시 쓰면 세 바이트가 되어 나갑니다. cp949
.properties하나를 헝크로 스테이징하면 인덱스에는 깨진 바이트가, 워크트리에는 원본이 들어가 파일이 영원히 수정됨으로 보이고 커밋에는 깨진 쪽이 실립니다. 같은 경로에서 셋 더: 마지막 줄에 줄바꿈이 없는 파일은 패치가 한 바이트 길어져 나갔고, 추적되지 않는 새 파일의 헝크 스테이징은 조용히 아무 일도 하지 않았고, 헝크로 자를 수 없는 diff(바이너리, 모드 변경만)를 성공으로 답했습니다. -
따옴표가 든 파일 이름이 경로가 아니었고, 이름 바꾼 파일이 리뷰
목록에서 사라지던 것.
core.quotePath=false는 절반만 덮습니다 — 그 설정과 무관하게"·\· 줄바꿈은 언제나 따옴표에 싸여 나오고, 그런 이름은 이 창이 도는 모든 시스템에서 합법입니다. 그대로 받으면 경로가 아닙니다:q"uote.txt행의 모든 버튼이 존재하지 않는 파일을 가리켰고, 커밋 diff 에서는 더 조용했습니다 — 이름을 못 붙인 섹션은 버려지므로 파일이 목록에서 그냥 빠졌습니다. 이름 변경 쪽도 같은 종류였습니다.--numstat이 옮겨진 파일을src/{a => b}/f.rs로 적는데 그것은 경로가 아니라, 존재한 적 없는 이름의 삭제된 파일로 그려지고 정작 사라진 파일과 생긴 파일은 둘 다 목록에 없었습니다. - 커밋 · 풀 · 중단 · 스태시 복원이 창의 나머지에게 말하지 않던 것. 히스토리 목록도, 에디터 거터도, 파일 트리의 변경 표시도, 사이드바의 개수도 각자 자기 사본을 그립니다. 알리는 유일한 수단을 여섯 군데에서 보내고 네 군데에서 빠뜨렸고, 빠진 넷은 전부 워크트리를 움직이는 것들이었습니다. 「커밋」 버튼은 아무에게도 말하지 않고 「커밋하고 푸시」만 말했습니다 — 옆에 띄워 둔 히스토리 패널이 방금 만든 커밋 이전을 계속 보여줍니다.
알림과 내 작업
-
게이트가 빨개진 것을 다른 앱에 있어도 압니다. 감독자가
에이전트가 멈춘 그 순간 실제로 원하는 것은 「초록이냐」 하나인데, 그 답이
닿는 곳은 창 안의 카드 하나뿐이었습니다. 창은 에이전트 넷이 일하는 내내
다른 앱 뒤에 있습니다. 무엇을 말하지 않는지가 절반입니다 —
초록은 소식이 아니고(아무것도 필요 없는 경우에 「방해하지 않았습니다」라고
방해하는 것입니다), 취소된 게이트와 버튼을 눌러 돌린 게이트는 그 사람이
이미 보고 있는 것입니다. 문장은 워크트리 이름으로 시작하고, 아랫줄은 판정한
단계의 명령과 실패 개수입니다 —
cargo test --workspace는 가서 다시 돌릴 수 있는 것이고 「Tests」는 아닙니다. - 내가 낸 PR 이 빨개지거나 답을 받은 것도 압니다. 지금까지 알림이 답하던 것은 큐의 한쪽 — 남이 나를 기다리는 것 — 이었습니다. 내 PR 이 빨개졌는지, 변경 요청이 왔는지, 승인돼서 이제 머지할 수 있는지는 패널을 열어야만 알 수 있었고, 패널은 그 탭이 화면에 있을 때만 폴링합니다. 에이전트 넷을 굴리는 사람에게는 이쪽이 더 자주 일어납니다 — 브랜치가 넷이면 검사도 넷입니다. 상태가 아니라 모서리를 봅니다: 어제부터 빨갰던 브랜치는 5분마다 다시 알리지 않고, 앱을 켤 때 이미 빨간 브랜치 둘은 둘 다 조용하고, 침묵은 변심이 아닙니다 — 페이로드가 말하지 않은 값이 기억해 둔 빨간불을 덮으면 다음 폴링이 그것을 새 빨간불로 읽습니다.
-
티켓 → worktree → PR 의 고리가 마지막 한 칸에서 닫힙니다.
worktree 는 티켓에서 만들고 브랜치 이름도 거기서 나오는데, 그 브랜치로 여는
PR 의 설명은 비어 있었습니다. 아무것도 적어 둘 필요가
없었습니다 — 브랜치가 곧 연결입니다: 티켓에서 이름을 만든 그 규칙을
보드에 거꾸로 돌리면 다시 찾아집니다.
Closes #42는 그것이 실제로 작동하는 한 경우 — 같은 저장소의 깃 포지 이슈 — 에만 씁니다. 다른 저장소의 PR 이나 Jira 키에 같은 말을 쓰면 약속처럼 읽히고 아무것도 지키지 않습니다. 그리고 PR 이 나간 뒤 티켓을 옮길지 묻기만 합니다: 진행 중인 요청이 어느 칸에 속하는지는 팀이 워크플로에 적어 둔 결정이고, 하나를 골라 주는 것은 창이 프로세스를 지어내는 것입니다. -
403 이 「토큰 문제가 아닙니다」까지만 말하고 이유를 버리던
것. 로그인했다고 생각하지 않는 사람에게 그 문장은 모순으로 읽히고,
읽고 나서 할 수 있는 것이 없습니다. 어느 403 인지는 오직 본문에만
있습니다 — 토큰이 그 스코프를 안 들고 있거나, 조직에 SAML 이 켜져 있거나,
버스트로 막혔거나. 다른 상태 코드는 전부 본문을 읽고 있었고 403 에서만
버리고 있었습니다. 대신 본문이 말한 것만 싣습니다: 403 의 본문은
포지 앞단 프록시의 HTML 페이지일 때가 많고, 170px 칸 아래에
<!DOCTYPE html>이 붙는 것은 아무것도 안 붙는 것보다 나쁩니다. - 포지 하나가 거부하면 같은 줄이 세 개씩 서던 것. 배너는 포지당 한 줄인데 넘기는 쪽은 질의당 한 줄이었습니다. GitHub 은 셋을 묻고 Forgejo 도 셋을 물으므로, 토큰이 아니라 포지가 거부하면 똑같은 줄이 셋, 각자 제 버튼 두 개를 달고 섰습니다. 그리고 그 403 은 사실이기 때문에 로그인해도 없어지지 않습니다 — 폴링할 때마다 세 줄이 다시 섭니다.
- 네트워크 없는 폴링 한 번이 큐를 비워 두던 것. 물어본 소스가 전부 변명만 내놓으면 기억해 둔 줄을 나이표를 달아 내놓는 규칙이 있는데, 알림 스레드는 같은 캐시를 그 규칙 바깥에서 씁니다. 그래서 네트워크가 없는 순간에 폴링이 한 번 돌면 빈 보드가 캐시에 들어가고, 그다음 패널을 여는 사람이 그것을 받습니다 — 줄은 없고 변명만 넷, 기억해 둔 줄도 나이표도 없이. 짧지도 않습니다: 캐시는 2분짜리인데 패널이 스스로 다시 묻는 것은 5분 뒤입니다.
그 밖에
-
리눅스에서 빈 패널이던 PDF 를 창이 직접 그립니다.
WebKitGTK 에는 내장 PDF 뷰어가 없고,
<object type="application/pdf">는 오류도 대체 내용도 없이 아무것도 그리지 않습니다 — 문서가 있어야 할 자리에 빈 패널이 뜨고 창은 아무 말도 하지 않습니다. 판단은 플랫폼 이름이 아니라 능력으로 합니다:navigator.pdfViewerEnabled가 정확히 이 질문에 답하는 표준 속성이라, 어느 웹뷰가 뷰어를 갖는 날 저절로 번들 뷰어를 그만 씁니다. 뷰어는 PDF 를 여는 순간에만 오는 별도 청크(gzip 129KB)이고, 페이지는 멀어지면 비트맵을 놓습니다 — 500쪽 문서를 다 그리면 보고 있는 두 쪽 때문에 반 기가가 비트맵이 됩니다. -
폴더를 복제하면 심볼릭 링크가 링크 대신 그 내용이 되던 것.
디렉터리인지 묻는 한 줄이 링크를 따라갔습니다. pnpm 의
node_modules— 거의 전부가 공용 스토어로 가는 링크입니다 — 를 가진 폴더를 복제하면 스토어 전체가 복사되고, 워크스페이스 밖을 가리키는 링크면 이 모듈이 다른 모든 자리에서 조심스럽게 건드리지 않는 곳의 사본이 들어옵니다. 조상을 가리키는 링크는 끝이 없어서, 커널이 40단계에서 멈추기 전에 디렉터리 122개를 남기고 실패했습니다. 그리고 끊어진 링크는 「이름이 비었다」로 읽혀 복사가 그 링크를 통해 쓰였습니다 —notes copy.md를 만들라고 했더니elsewhere.txt가 생겼습니다. - 같은 초에 턴이 둘이면 사용량이 두 배로 세지던 것. 재개된 세션은 앞선 턴들을 새 파일에 되풀이해 적으므로 재개 이전의 모든 턴이 디스크에 두 번 있는데, 중복을 지우는 쪽은 붙어 있는 짝만 비교하고 정렬은 다른 키로 서 있었습니다. 한 초에 턴이 하나면 두 복사본이 실제로 나란히 서기 때문에 작동하는 것처럼 보였습니다. 한 초에 둘이면 아닙니다 — 300 토큰짜리 1초가 600 으로 나오고, 그 1초가 오늘 총계에도 · 열린 5시간 블록에도 · 주간 합계에도 · 워크트리별 분배에도 두 번씩 들어갑니다. 툴을 빠르게 도는 턴은 한 초에 응답 둘을 하루 종일 만듭니다. 스토리 패널에도 같은 버그가 하나 있어 같은 초를 통째로 두 번 그렸습니다.
-
문장의 빈칸에 들어가는 값이 치환 패턴으로 읽히던 것.
자바스크립트의 문자열 치환은 치환값 안의
$&·$'같은 것을 매치 주변 텍스트로 바꿉니다. 그래서fix-$&라는 브랜치나 사람이 친 검색 패턴이 들어가면 문장이 그 값 한가운데로 쪼개져 들어갔습니다 — git 은 브랜치 이름에$를 허용하고, 검색 상자는 사람이 무엇이든 칠 수 있는 곳입니다. 사람이 친 것 · 경로 · 브랜치 · 설정 파일에서 온 명령 · 남의 프로그램이 쓴 말이 들어가는 자리를 전부 옮겼습니다. - 사인인 리밋이 재는 창이 실제로 있는 창이 아니던 것. 스스로를 「시간당 열 번」이라고 부르면서 한 시간으로 세는데, 같은 함수 맨 위의 스윕이 방금 10분 넘은 행을 전부 지웁니다 — 셀 때 10분보다 오래된 행은 남아 있을 수가 없습니다. 실제 리밋은 10분당 10회였고, 그것을 설명하는 문장은 여섯 배 틀려 있었습니다. 있는 창을 세는 쪽으로 고치고 이름도 사실대로 바꿨습니다 — 한 주소가 동시에 열어 둘 수 있는 사인인 수입니다.
1.0.21 2026-09-24
지난 판이 맨 앞에 내세운 큐에는 누를 것이 없었습니다 — 단축키 하나가 유일한 입구였고, 맥에서 그 단축키는 로그아웃이었습니다. 거기서 시작해 창을 파일 단위로 훑었고, 되돌리기 어려운 쪽부터 고쳤습니다. 그리고 컨트롤의 높이와 모서리가 제각각이던 것을 숫자 둘과 사다리 하나로 정리했습니다.
큐
- 큐를 여는 버튼이 생겼습니다 — 시작 탭에. 지난 판의 머리기사인데, 그것을 여는 곳이 창 전체에 단축키 하나였습니다. 버튼도, 메뉴 항목도, 명령 팔레트 항목도 없었으니 릴리즈 노트를 읽은 사람만 누를 수 있는 기능이었습니다. 시작 탭의 액션 줄은 이 창에서 동작마다 제 단축키를 옆에 찍어 두는 유일한 자리라, 버튼과 키를 같이 배웁니다.
- 그 단축키가 맥을 로그아웃시키던 것. ⌥⇧⌘Q 는 macOS 가 시스템 차원에서 「즉시 로그아웃」에 쓰는 화음이고, 확인을 묻지 않는 쪽입니다. 창은 그 키를 받아 본 적이 없으므로 증상이 「단축키가 안 먹는다」로 보이지 않았습니다 — 「이 앱이 컴퓨터를 재시작시킨다」로 보입니다. 글자는 두고 줄을 옮겼습니다: Ctrl⌥Q. 설정에서 손으로 같은 화음을 걸면 이제 거절당하고, 거절은 「왜 안 되는지」가 아니라 「무슨 일이 대신 일어나는지」를 말합니다.
- 「그래도 지웁니다」가 이름을 댄 적 없는 워크트리를 지우던 것. 갈래 하나를 고르면 끝난 나머지에서 워크트리와 브랜치를 걷어 가는데, 그 목록을 아직 도는 갈래를 취소하기 전에 찍고 있었습니다. 그래서 턴 중이던 갈래는 첫 번째 누름의 대상도 아니고 사람이 읽는 거절 목록에도 없다가, 두 번째 누름 때는 멈춰 있어 대상이 됩니다 — 커밋 안 된 한 시간이 그렇게 사라질 수 있었습니다. 이제 두 번째 누름은 첫 번째가 이름을 댄 트리에만 닿습니다.
- 검사가 옆 프로젝트의 계획으로 판정하던 것. 게이트 스트립이 계획을 마운트할 때 한 번만 읽는데, 워크트리를 바꿔도 다시 마운트되지 않습니다. 검사를 선언하지 않은 프로젝트에서 선언한 쪽으로 옮기면 스트립도 판정도 「검사」 버튼도 통째로 사라졌습니다. 이제 열린 워크트리를 따라 갑니다.
- 린터가 UTF-8 이 아닌 바이트를 하나 찍으면 검사가 영영 안 끝나던 것. 출력을 읽는 쪽이 거기서 「몇 줄 버린다」가 아니라 읽기를 그만뒀습니다. 자식은 계속 쓰므로 파이프가 차고, 자식이 막히고, 게이트는 창이 살아 있는 내내 돌아오지 않습니다 — 판정도, 다음 일도, 이유를 말하는 것도 없이. 로케일대로 파일 이름을 찍는 린터 하나면 그렇게 됩니다.
잃어버릴 뻔한 것들
- 체크박스 하나를 누르면 설정 파일의 주석이 전부 사라지던 것. 파서는 주석을 일부러 받아 줍니다 — 사람은 설정에 메모를 답니다. 그런데 쓰는 쪽이 읽어 들인 값을 통째로 다시 찍고 있었습니다. 그래서 설정 메뉴에서 값 하나만 바꿔도 주석과 빈 줄이 지워지고 키 순서가 알파벳순으로 뒤집혔습니다 — 묶어서 정리해 둔 파일이 전혀 다른 곳에서 누른 클릭 하나에 납작한 목록으로 돌아옵니다. 이제 파일 제 텍스트에 값만 끼워 넣고, 바꾼 자리 말고는 건드리지 않습니다.
- 읽을 수 없는 배치 하나가 저장된 배치를 전부 데려가던 것. 규칙은 「이 빌드가 모르는 트리는 한 항목씩 버린다」였는데, 로더는 전부-아니면-전무였습니다. 첫 항목에서 실패하면 목록이 통째로 비고, 그 뒤에 배치를 하나 저장하는 순간 그 빈 목록 위에 쓰여 나머지가 영구히 지워집니다. 이제 항목을 하나씩 읽고 못 읽은 것만 버립니다.
- 새로 만든 파일의 「스테이지」와 「버리기」가 한 번도 동작한 적 없던 것. 추적되지 않는 파일에는 git 이 내놓는 diff 가 없어서 창이 하나 지어 내는데, 그 조각에 파일 이름이 없었습니다. git 은 머리말 없는 패치를 받지 않습니다 — 그 버튼 둘과 줄 단위 체크가 전부 그 길로 갑니다. 모드 줄도 같이 붙였습니다: 스크립트를 실행 비트 없이 올리면 되돌리기가 경고를 냅니다.
- 충돌한 파일을 누르면 0번째 줄부터 번호가 매겨지던 것. 머지 안 된 경로의 diff 는 부모마다 한 칸인 결합 형식이라 머리말이 다릅니다. 그것을 못 읽은 실패가 조용히 삼켜져 0으로 읽혔고, 거기서 스테이지하면 빈 범위가 나갔습니다. 읽을 수 없는 머리말은 이제 헝크가 아닙니다 — 충돌은 헝크로 올리는 것이 아니라 해결하는 것이고, 그 문은 패널에 이미 있습니다.
- 터미널을 닫을 때 남의 프로세스 그룹에 신호를 보내던 것. pid 가 재사용돼 이미 남의 것이 된 그룹은 「다시 건드리지 않는다」가 규칙인데, 코드는 그 경우를 「아직 살아 있다」로 읽었습니다. 유예 2초를 다 쓴 뒤 무조건 도는 마지막 루프가 그 그룹을 죽입니다. 이 창이 낼 수 있는 실수 중 유일하게 창 바깥에 떨어지는 것이었습니다.
내 작업과 로그인
- 브라우저로 로그인한 Jira 는 보드가 영원히 비어 있던 것. 요청이 가는 주소와 링크가 가리키는 주소는 다릅니다 — 둘이 갈라지는 경우는 정확히 하나, 클라우드 Jira 입니다. 보드의 유일한 Jira 질의가 링크용 주소로 가고 있었고, 멀쩡한 토큰이 그 주소에서 거절당합니다. 화면에는 「토큰이 거부되었습니다」라고 적혔습니다.
- 포지 하나가 안 닿으면 나머지의 보드까지 어젯밤 것으로 남던 것. 실패는 질의마다 쌓이는데 그 수를 포지 수와 견주고 있었습니다. 소스 둘 중 GitHub 만 죽어도 셋이 쌓이니 「아무것도 못 배웠다」가 되고, 정직하게 비어 있다고 답한 다른 포지의 오늘이 그대로 덮입니다.
- 네트워크 없이 켜면 돌아왔을 때 밀린 것이 전부 알림으로 오던 것. 「이미 본 것」은 소스별인데 「심었다」는 창 전체에 하나였습니다. 그래서 첫 조회가 답하지 않은 소스까지 봤다고 표시하고, 오프라인으로 켠 창은 전부 빈 집합으로 심습니다 — 처음 통한 조회가 서 있던 리뷰 요청 전부를 새 것으로 읽습니다. 실패한 조회는 이제 아무것도 심지 않습니다. 빈 집합은 「여기 없다」는 주장인데, 실패는 그런 말을 한 적이 없습니다.
-
사내 GitHub 에 로그인한 기계에서 github.com 의 PR 이 사내 주소로
가던 것. 리모트를 읽는 쪽이 설정된 호스트보다 리터럴
github.com을 먼저 봤습니다. 기본 설정에서는 둘이 같은 답이라, 그 줄은 틀린 자리에서만 발동했습니다. -
로그인 창이 열려 있는 동안 아무 프로그램이나 그 스레드를 죽일 수
있던 것. 돌아온 주소의
%뒤 두 글자를 문자열에서 잘라 내는데, 브라우저가 보낼 리 없는 바이트는 그 앞에서 세 바이트짜리 대체 문자가 됩니다 — 자르는 자리가 글자 한가운데 떨어지면 오류가 아니라 패닉입니다. 그것도 이 소켓이 지키기로 한 검사 앞에서. 이제 바이트로 자르고, 글자가 아니면%를 그대로 흘려보냅니다. - 제공자가 이미 이름을 댄 거절을 10분 동안 기다리던 것. 사람이 읽을 문장이 오류 코드를 이기는 것은 의도인데, 빈 문장까지 이겼습니다. 그래서 「사용자가 거부했다」가 지워진 채 돌아오고, 대화상자는 아무 답도 없는 것처럼 기한을 다 씁니다.
- 「내 작업」의 로그인 행에 D-Bus 에러 한 문단이 들어가 있던 것. 이유 칸은 세 칸짜리 줄의 가운데라 170픽셀쯤인데, 거기 들어가는 것은 플랫폼 자격 증명 저장소가 한 말이고 길이에 상한이 없습니다. 한국어 문장 한가운데 영어 문단이 앉고 포지 넷 중 둘이 나머지의 세 배 높이가 됐습니다. 말은 그대로 둡니다 — 사람이 웹에서 검색하는 부분이고 어느 사전도 담을 수 없습니다. 문장 안에 있기를 그만두고 제 줄로 내려가 말줄임을 달았고, 전문은 호버 한 번 거리입니다. 행 높이 110px → 60px.
-
맥에서 「git 을 찾지 못했습니다」 배너가 안 뜨던 것.
Command Line Tools 가 없는 맥에도 PATH 에는
git이 있습니다 — 애플의 스텁이고, 잘 뜨고, 아무것도 안 찍고, 0이 아닌 코드로 끝납니다. 끝 코드를 안 보고 있었으므로 그 빈 문자열이 프로세스 수명 내내 버전으로 기억됐습니다. 배너 대신 사람이 보는 것은 워크트리·히스토리·커밋이 하나씩 git 자신의 말로 실패하는 것이었습니다 — 방금 창이 괜찮다고 말한 기계에서.
고를 것이 없는데 「고르세요」라고 하던 자리
-
견주기 패널이 「다를 게 없다」를 답으로 그립니다. 이 탭이
제일 자주 여는 상태가 그것인데 — 방금 자른 브랜치 둘, 아직 커밋하지 않은
에이전트 둘 — 화면은 빈 열 왼쪽 위의 회색 문장 하나와, 고를 파일이 없는데
「파일을 고르세요」라고 하는 오른쪽 판이었습니다. 이제 오른쪽은 초록 체크와
함께 어느 두 워크트리에 대한 답인지를 말하고, 거기서 갈 곳을 하나
답니다:
A…B가 비었다면 다음 질문은 언제나 A 는 했는가이므로, 「반대 방향으로 비교」입니다. - 같은 자리가 세 군데 더 있었습니다. 아무 파일도 안 바꾼 커밋(히스토리), 기준점만 잡고 아직 아무것도 안 쓴 워크트리(리뷰 — 에이전트를 지켜보는 사람이 제일 많이 보는 상태입니다), 그리고 테이블이 없는 데이터베이스. 빈 목록은 빠진 것이 아니라 답이고, 답을 지시문으로 그리면 따를 수도 없는 말이 됩니다.
창의 생김새
-
한 번도 선언된 적 없는 이름 다섯 개를 스물여덟 줄이 쓰고 있던
것. CSS 에서 없는 이름을 가리키면 폴백이 아니라 그 선언 자체가
무효가 되고, 브라우저는 아무 말도 하지 않습니다. 그래서 창이 거의
맞게 보였습니다 — 바탕이 조용히 투명해지면 「플랫한 디자인」으로 읽히고,
흐려야 할 글자가 제 밝기로 남으면 「그렇게 정한 것」으로 읽힙니다. 실제로는
불러오기 팔레트에 종이가 없어 아래 패널이 비쳤고, 큐의 입력 칸은
친 글자가 라벨용 회색으로 찍혔고, 눈으로 옮겨 적으라고 크게
찍는 기기 코드가
l과1이 같은 획인 폰트로 그려지고 있었습니다. - 한 줄에 같이 서는 컨트롤이 아홉 가지 높이였던 것. 크로미움에 실제 픽셀을 물어 재보니 20.5 부터 32 까지였고, 입력 칸이 바로 옆 버튼보다 4px 컸습니다. 높이를 정하는 규칙의 주석이 「같은 줄에 서니까 같은 높이로 선다」라고 적어 둔 자리조차 그 줄과 어긋나 있었습니다. 이제 둘입니다 — 28, 그리고 일부러 촘촘한 줄의 24. 모서리도 같이 정리했습니다: 열네 종류였던 것이 물건의 크기에 따른 여섯 칸이 되고, 이 스타일시트에 날 픽셀 모서리는 더 없습니다.
-
작은 틴트 상자 열다섯 개에 높이가 없던 것. 색과 여백만 있고
높이가 없으면 제가 쓰인 자리의 줄 상자를 높이로 삼습니다 — 그래서 같은 칩이
패널마다 다른 키로 서고(재보니 아홉 가지), 글리프가 있는 줄에서는 가운데를
벗어났습니다. 글자가 위로 붙어 보이던 것도 같이 고쳤습니다: 줄 상자는 폰트의
ascent 와 descent 만큼 높은데 그 둘은 글자를 기준으로 대칭이 아니고,
TAG·main에는 베이스라인 아래로 내려가는 획이 없습니다. 폰트마다 다른 값이라 숫자를 적는 대신 엔진이 실제 메트릭으로 깎게 했습니다. - 스피너 셋이 안 돌고, 하나는 아예 그려지지 않던 것. 회전이 글리프가 아니라 스피너가 보이는 자리마다 적혀 있어서, 기억하지 못한 자리에서는 멈춘 호가 그려졌습니다 — 그건 진행이 아니라 깨진 글리프로 읽힙니다. 게이트의 검사 진행 줄은 그보다 더했습니다: 규칙이 어디에도 없는 빈 요소라 아무것도 그려지지 않았습니다. 「기다리라」고 말하는 유일한 줄이 기다리는 동안 아무것도 보여 주지 않았습니다.
-
목록 셋이 창이 아니라 엔진의 것이던 것. 견주기의 워크트리
둘과 큐의 에이전트·방식이 네이티브
<select>였습니다. 닫힌 상자는 스타일이 먹고 열린 목록은 안 먹으므로, 어두운 창에서 그것 하나만 밝게 뜨고 글꼴도 행 높이도 화살표도 엔진 것입니다. - 버튼 이름 넷이 이름이 아니라 서술문이던 것. 영어로는 넷 다 평범한 명령형인데 한국어에서만 「안 씁니다」·「이걸로 간다」가 됐고, 그중 셋이 한 대화상자에 몰려 있었습니다 — 한자리에서 쓴 기능이 자기 목소리를 갖는 것이고, 알아채려면 나머지 백 몇 개를 같이 열어 봐야 합니다. 이제 「그만 읽기」·「이것만 남기기」·「그대로 두기」·「그래도 지우기」입니다.
- 아무것도 그리지 않는 규칙 마흔 개. 전부 이름을 바꾸면서 마크업만 옮기고 규칙을 두고 간 자리입니다. 죽은 CSS 는 무해하지 않습니다 — 리뷰에서 살아 있는 것처럼 읽히고, 고쳐집니다. 바로 위의 모서리 정리와 높이 정리가 둘 다 공들여 고친 규칙 하나는, 그 상자가 이름을 바꾼 뒤로 한 번도 요소에 걸린 적이 없었습니다.
그 밖에
- 파일 팔레트가 글자 하나마다 git 프로세스를 띄우던 것. 검색은 매번 후보 목록을 다시 만들고, 그것이 매번 인덱스를 읽고 워킹 트리를 걸었습니다 — 같은 답을 받으려고. 2만 개 파일이 있는 저장소에서 키 하나가 26.6ms 였고 그중 4분의 3이 이 호출이었습니다. 이제 목록을 1초 동안 나눠 씁니다: 키 입력 사이보다 길고 눈길 사이보다 짧은 시간입니다. 7.8ms — 3.4배.
-
.env의 상대 경로가 엉뚱한 곳을 가리키던 것.file:./dev.db같은 것은 프로젝트를 기준으로 쓰이는데, 앱이 실행된 자리에서 풀리고 있었습니다. sqlite 는 거기 새 빈 DB 를 만들고, 패널은 「테이블이 없다」고 보고합니다. 같은 자리에서sqlite:////var/lib/app.db의 앞 슬래시를 전부 떼어 절대 경로를 상대 경로로 만들던 것도 고쳤습니다. - 임자 없는 트레이스백 한 줄이 그 뒤 모든 실패에게서 줄번호를 가져가던 것. 실패한 케이스와 찍힌 줄을 순서대로 짝지으면서, 파일 이름이 안 맞으면 그 줄을 목록 맨 앞에 그대로 뒀습니다 — 그래서 다음 실패도, 그다음도 같은 줄과 비교되고 전부 어긋납니다. 헬퍼나 픽스처 안에서 난 실패가 앞쪽에 하나만 있으면 그 아래 패널 전체가 줄로 못 갑니다.
-
사이트와 서버에서 넷.
UPDATE_DISABLED=false가 업데이트를 껐습니다 — 값이 아니라 존재 여부로 읽었기 때문이고, 그 뒤로 모든 앱이 받는 답은 「이미 최신입니다」와 같은 204 입니다. 공백 한 칸이 든 빈 줄은 빈 줄로 치지 않아 댓글 하나가 나머지를 화면 밖으로 밀어낼 수 있었고, 쉼표로 이어 붙인 주소는 하나로 세어져 「링크는 둘까지」가 링크 농장이 실제로 쓰는 모양에는 한 번도 걸리지 않았고, 「열 분이면 없어진다」던 행이 하루를 살았습니다.
1.0.20 2026-09-23
감독하던 사람이 하던 일 두 가지를 창이 가져갑니다. 에이전트가 턴을 돌려주면 그 프로젝트가 스스로 선언한 검사를 그 워크트리에서 대신 돌리고, 자리를 비운 사이 일거리를 맡아 두는 큐가 각각에게 자기 브랜치와 워크트리와 에이전트를 줍니다. 그리고 고침 열한 가지입니다.
검사
-
에이전트가 멈추면 검사가 그 자리에서 돕니다. 감독하는 사람이
그 순간 가진 질문은 「통과하나」 하나인데, 답을 얻으려면 터미널로 나가서 이
프로젝트가 무엇을 돌리는지 기억해 내고 돌리고 끝을 읽어야 했습니다 —
워크트리마다, 턴마다. 계획은 증거에서만 나옵니다:
package.json이 선언한typecheck·lint와 이미 찾아 둔 테스트 스위트뿐이고, 그 도구가 실제로 있을 때만입니다. 순서는 싼 것 먼저이고 — 타입 에러가 난 상태에서 스위트를 4분 돌려 봐야tsc가 4초에 한 말 말고 새로 아는 것이 없습니다 — 첫 실패에서 멈추며, 못 돌린 단계는 「건너뜀」으로 남습니다. 안 본 초록을 봤다고 말하지 않기 위해서입니다. - 판정은 카드 구석과 리뷰 패널 위에 섭니다. 초록이나 빨강과 그 판정을 낸 단계 이름이 카드에 붙고(툴팁에 실제 명령), 리뷰 패널 위의 한 줄을 펴면 실패한 단계·테스트·출력 꼬리가 나옵니다. 「검토함」을 누르면 판정도 같이 잊습니다 — 기준점이 옮겨 간 트리에 대한 초록은 이미 서명한 일에 대한 표시입니다. 기본값은 꺼짐입니다: 클릭 없이 남의 기계에서 테스트 스위트를 돌리는 일이라, 켜는 결정은 그 배터리의 주인이 합니다. 대신 「검사」 버튼이 같은 계획을 그 자리에서 돌립니다.
맡겨 두기
- Ctrl⌥Q — 일거리를 넣어 두면 각각이 자기 브랜치·워크트리·에이전트를 받습니다. 띄우는 일은 여태 손일이었습니다 — 워크트리 만들고, 터미널 열고, 에이전트 이름 치고, 프롬프트 붙여넣고. 티켓이 다섯이면 그 춤을 다섯 번 추고, 그것도 키보드 앞에 있을 때만 출 수 있습니다. 아침에 보는 것은 초록·빨강·「뭘 물어봤다」가 적힌 목록입니다. 틀어진 일은 조용히 다시 시도하지 않습니다 — 아는 것을 행에 적고 다음으로 갑니다. 무인 작업이 알아서 재시도하면 아침에 아무도 결산할 수 없습니다.
-
일마다 「한 번 돌고 끝내기」와 「열어 두고 지켜보기」를
고릅니다. 대화형 에이전트에는 「끝났다」는 순간이 없어서 침묵으로
미루어 짐작해야 합니다. 에이전트들에게는 자기 비대화형 모드가 있고
(
claude -p,codex exec), 그쪽에서는 일을 마치는 것과 프로세스가 끝나는 것이 같은 사건이라 추측할 것이 없습니다 — 대신 들어가서 이어받을 대화가 남지 않습니다. 어느 쪽이 맞는지는 일마다 다르므로 설정이 아니라 그 자리의 선택입니다. - 한 프롬프트를 여러 갈래로 던지고, 이긴 갈래만 남깁니다. 같은 지시를 받은 에이전트 둘은 같은 것을 하지 않으므로, 실제로 가진 질문은 「어느 답이 더 나은가」입니다. 갈래 수를 적으면 한 판이 한 번에 깔리고, 비교는 이미 있는 견주기 패널이 그립니다. 「이걸로 간다」를 누르면 그 갈래는 손대지 않고 끝난 나머지에서 워크트리와 브랜치를 걷어 갑니다 — 아직 도는 갈래는 패자가 아니라 턴 중인 에이전트입니다. 커밋 안 된 변경이 있는 트리는 첫 번째 요청에서 그대로 두고 경로와 이유를 돌려주며, 두 번째 버튼이 사람의 대답입니다.
-
인자 칸의 예시가 에이전트마다 다릅니다. 한 에이전트에게서
빌려 온 플래그는 다른 에이전트에서 실패하는 명령입니다 —
-p는 저쪽에서--print가 아니라--profile입니다. 고른 에이전트의 것만 보이고, 모르는 에이전트에는 빈칸입니다.
터미널
-
에이전트에게
/clear하면 화면이 검게 남던 것. 지우고 나서 다시 그려진 화면이 보고 있는 그 화면인데, 창이 그 위에 한 번 더 지우기를 걸고 있었습니다 — 그 지우기는 커서가 있는 줄만 남기므로, 남는 것은 입력 상자 한 줄이고 그 위에 방금 그려진 안내는 전부 사라집니다. 지울 것은 위로 흘러간 대화뿐입니다. - 한글 조합 글자가 확정되는 순간 몇 px 밀리던 것. 한글은 폰트 목록의 어느 모노스페이스 가족에도 없어서 시스템 폴백으로 떨어지는데, 그 폴백을 조합 중인 글자와 확정된 글자가 각자 고르고 있었습니다. 한글 얼굴이 둘 이상인 기계는 그 두 번의 조회에 다른 답을 낼 수 있습니다.
내 작업
- 만료된 토큰이 1분마다 키체인 대화상자를 다시 띄우던 것. 읽을 수 없었던 경우에는 물러섬이 있었는데 만료된 경우에만 없었습니다. 토큰이 상해 가는 중이라면 한 번 더 물어볼 값어치가 있지만, 그 항목은 CLI 가 다시 로그인하기 전까지 계속 같은 말을 합니다 — 그래서 「한 번 더」가 끝나지 않고, 미터가 도는 1분마다 대화상자가 하나씩 떴습니다.
- 다시 열 대화 목록의 순서와 「N시간 전」이 틀리던 것. 시간대 오프셋이 붙은 시각을 UTC 로 읽던 자리가 하나 더 남아 있었습니다. 같은 순간 하나가 오프셋에 따라 서로 다른 숫자가 되고, 그 숫자가 이 목록의 정렬 기준입니다 — 마지막 말이 이레 전인 대화가 목록 둘째 자리에 앉습니다.
그 밖에
- origin 에서 받아도 커밋 그래프가 그대로던 것. 저장소가 움직였다는 신호를 git 패널은 전부 듣는데 히스토리만 듣지 않아서, 방금 내려온 커밋이 거기 없고 목록이 낡았다는 말도 화면에 없었습니다.
-
포트 범위를 퍼블리시한 컨테이너가 데이터베이스 목록에서 통째로 빠지던
것. docker 는 범위를
8000-8002→8000-8002/tcp로 그리는데, 숫자가 아닌 그 한 줄에서 읽기를 포기하면서 그 컨테이너가 목록에서 사라졌습니다. 디버그 포트를 같이 여는 compose 서비스 하나면 그 DB 가 아예 안 뜹니다. -
테스트 실패 줄에 「가서 열기」가 없던 것. 자리가 적히지 않은
스택 프레임 —
(Unknown Source), 람다 호출 지점 — 을 만나면 그 아래 있는 진짜 프레임을 보지도 않고 찾기를 통째로 포기했습니다. 가장 읽기 어려운 실패에서 하필 그랬습니다. -
테스트 이름 자리에 클래스 이름이 오던 것. 리포트에서
name을 부분 문자열로 찾고 있었는데, 그것은classname의 꼬리이기도 합니다. 클래스를 먼저 쓰는 도구의 리포트에서는 한 파일의 스무 개가 전부 같은 이름 하나가 되고, 「이것만 다시 돌리기」도 엉뚱한 것을 겨눕니다. -
저장소 행의
+를 누르면 그 행의 더보기 메뉴가 열리던 것. 호버로 떴다 사라지는 레이어가 폭을 차지하지 않는 채 같은 자리에 떠 있어서, 보이는 것은+인데 클릭을 받는 것은 그 위의 메뉴였습니다. 같은 계열로, 숨어 있는 레이어가 보이지 않는 채 클릭을 먹던 경우도 같이 막았습니다. - 워크트리가 잠깐 없는 사이에 줄 하나를 끌면 그 자리표가 지워지던 것. 없어진 경로는 지우는 것이 아니라 지나치는 것이 규칙인데, 읽는 쪽만 그것을 지키고 있었습니다. 지웠다 같은 이름으로 다시 만든 워크트리가 공들여 놓아 둔 자리를 잃고 맨 아래로 갔습니다.
- 보낸 글에서 탭이 지워져 두 낱말이 붙어 버리던 것. 제어문자를 걷어내는 범위의 끝이 탭이었습니다. 스프레드시트나 코드에서 복사한 줄은 칸이 전부 사라진 채 한 덩어리가 되고, 길이 검사는 그대로 통과합니다.
1.0.19 2026-09-22
창이 죽거나 멎던 네 가지와, 같은 일을 여러 번 하고 있던 세 군데입니다. 새 기능은 없습니다 — 이미 있던 것들이 약속한 대로 동작하게 한 판입니다.
창이 죽거나 멎던 것
- 언어 서버가 말한 숫자 하나로 창이 통째로 죽던 것. LSP 가 보내는 프레임에는 본문 길이가 적혀 있고, 그 숫자만큼 자리를 잡아 두고 읽습니다. 그 숫자를 그대로 믿고 있었습니다 — 1테라바이트라고 주장하는 프레임은 1테라바이트짜리 요청 하나였고, 그 끝은 크래시입니다.
- 에이전트가 만든 큰 파일이 검토 패널을 무너뜨리던 것. 새로 만들어진 파일은 견줄 반대쪽이 없어서 전체가 그려지는데, 거기에 상한이 없었습니다. 120MB 짜리 생성 파일 하나가 「2,419,791 줄 추가」를 말하려다 창을 끌고 내려갔습니다.
-
검색의 포함·제외 상자에 긴 글롭을 치면 창이 멈추던 것.
검색 상자 자신에는 상한이 다 걸려 있었는데 옆의 두 상자에는 없었습니다.
*는 얼마나 삼킬지가 매번 선택이라, 스무 자면 그 조합이 사람이 기다릴 수 있는 수를 넘습니다. -
워크트리 안의 심링크가 밖을 가리켜도 따라가던 것. 규칙은
원래 「정규화한 뒤 검사한다」였고, 그래서 밖을 가리키는 심링크는
../../etc/passwd와 똑같이 거부돼야 합니다. 그게 대상이 이미 있는 심링크에만 지켜지고 있었습니다.
빠르기
-
새로고침 한 번이 워크트리를 네 번 걷던 것. 헤더의 합계와
아래의 파일 목록은 서로 다른 질문처럼 보이지만 같은
git status입니다. 창에는 그 둘을 따로 묻는 자리가 없는데도 각자 돌리고 있었습니다. - 에이전트가 쓴 파일 하나마다 git 을 하나씩 띄우던 것. 줄이 몇 개 늘고 줄었는지 두 숫자를 얻으려고 diff 를 통째로 파싱하고 있었고, 추적되지 않는 파일은 그 전에 프로세스를 하나 더 띄웠습니다.
- 주석이 한국어면 검색의 파일 게이트가 게이트가 아니던 것. 한 줄씩 걷기 전에 파일 전체를 한 번 훑어 「여기 있기는 한가」를 보는데, 그 훑기가 한국어에서 통과를 남발했습니다. 아껴 주라고 있는 단계가 아무것도 안 아꼈습니다.
내 작업
- 설정 메뉴에서 바꾼 것이 보드에 닿지 않던 것. 패널의 「안 씁니다」는 늘 맞게 동작했는데, 같은 변경이 설정 메뉴를 통해 오면 아무 일도 일어나지 않았습니다 — 2분짜리 캐시가 그대로 답했습니다.
- 티켓에 제안한 브랜치 이름을 git 이 거부하던 것. 이름을 다듬는 자리는 「git 이 받아들일 것으로 정리한다」고 약속하고 있었는데, git 에게 직접 물어보니 일곱 가지가 거부당했습니다.
- 지웠다 다시 만든 워크트리가 옛 기준점으로 측정되던 것. 워크트리 경로는 브랜치 이름을 따라가므로, 같은 브랜치로 다시 만들면 같은 자리에 앉습니다. 그러면 예전 기준점이 그대로 남아 있어 「검토함」이 엉뚱한 시점을 가리켰습니다.
-
저장소가 아닌 폴더에서 검토 기준점을 찍으려 하던 것. git
없는 폴더를 열고 에이전트를 띄우면
not a git repository가 빨간 배너로 떴습니다. 아무도 요청하지 않은 일이 실패해 고장 보고가 된 것이고, 그 폴더는 멀쩡히 열린 것이었습니다.
미리보기
-
하위 폴더에 있는 페이지가 스타일도 스크립트도 못 받던 것.
프레임에 넘기는 주소에서 경로 구분자까지 escape 되어 경로 전체가 한 덩어리가
됐습니다. 페이지 자체는 열리지만, 브라우저가
shared/styles.css를 루트 기준으로 풀어 버려 폴더가 사라집니다. 루트에 있는 페이지는 우연히 맞아서 여태 드러나지 않았습니다.
그 밖에
- 복사 버튼이 아무 일도 하지 않던 것. 알림 카드와 터미널 메뉴 양쪽입니다. WebView 에 클립보드가 없으면 성공도 실패도 아닌 침묵이 됐습니다 — 눌러도 복사가 안 되고 오류도 안 나서, 버튼이 고장 난 줄 모르고 다시 누르게 됩니다.
- 사용량의 시각을 잘못 읽어 토큰이 엉뚱한 창에 떨어지던 것. 시간대 오프셋이 붙은 시각을 UTC 로 읽고 있었습니다.
-
브라우저 로그인이 거절을 돌려줄 때 확인 순서가 뒤바뀌어 있던 것.
코드 앞에는
state검사가 있었는데 거절 앞에는 없었습니다. - 저장소를 모아 둔 폴더를 열 때마다 「저장소가 아님」이 서던 것. 아래 행들이 이미 하는 말이었고, 없는 고장을 만들어 냈습니다.
1.0.18 2026-09-21
리뷰 요청이 온 PR 을 앱 안에서 읽고 줄에 답하고 보냅니다. 히스토리에서 커밋을 검색합니다. 그리고 오래 켜 두면 터미널 아래쪽 글자가 깨지던 것 — 그 원인이 1.0.9 에서 같은 증상을 고치려고 넣은 코드였습니다.
로그인해 둔 포지가 「다시 로그인하세요」로 돌아오던 것도 이 버전입니다. 토큰은 있는데 만료됐을 뿐이었고, 그것을 되살리는 갱신이 두 군데에서 건너뛰어지고 있었습니다.
리뷰
- 리뷰 요청이 온 PR 을 앱에서 봅니다. 바뀐 파일을 읽고, 줄에 직접 코멘트를 달고, 승인이나 변경 요청과 함께 보냅니다. 브라우저로 나가지 않아도 되는 만큼이 이 패널입니다. 초안은 탭을 바꿔도 남습니다 — 보내지 않은 코멘트가 탭 전환에 사라지던 것을 포함해 열 건을 같이 고쳤습니다.
내 작업
- 로그인해 둔 포지가 「토큰이 거부되었습니다 — 다시 로그인하세요」로 돌아오던 것. 포지 셋이 동시에 거부한다는 것 자체가 서버가 아니라 이쪽을 가리켰습니다. 토큰은 저장돼 있고 만료됐을 뿐인데, 그것을 되살리는 갱신이 두 군데에서 건너뛰어지고 있었습니다 — 2분짜리 캐시가 갱신 요청보다 먼저 답해 버렸고, 창으로 돌아오는 것이 타이머와 같은 취급이었습니다. 창으로 돌아온 것은 사람입니다.
- 하단 계정 줄이 사실과 다른 것을 말하던 두 가지. 포지가 그 토큰을 거부하고 있는데 「로그인됨」이라 적혀 있었고 — 저장소가 토큰을 갖고 있다는 것과 포지가 그것을 받아 준다는 것은 다른 사실입니다 — 「안 씁니다」로 꺼 둔 포지까지 거기 세고 있었습니다. 그 줄이 답하는 질문은 「지금 무엇을 읽고 있나」입니다. 거부된 포지는 마크가 흐려지고 메뉴에 「다시 로그인」이 섭니다.
-
가져오는 줄 수의 상한을 포지마다 따로 둡니다. 한 숫자가
네 포지의 서로 다른 파라미터로 나가고 있었는데, 그 천장은 포지마다 다릅니다 —
올리면 Bitbucket 이
400으로 답했습니다. 그리고 한 페이지가 가득 차서 왔으면 그렇다고 말합니다. 잘린 목록은 전부인 것처럼 읽히고, 티켓이 전부 잘린 프로젝트는 필터에서 고를 수조차 없어 없는 것처럼 보입니다. - Jira 는 토큰으로 로그인합니다. 브라우저 버튼은 내렸습니다 — 우리 Atlassian 앱이 아직 개발 상태라, 그 버튼은 브라우저를 열어 놓고 거절을 보여 줄 뿐이었습니다. 옆의 토큰 상자는 그대로 동작합니다. 브라우저에서 로그인이 끝나면 창이 스스로 앞으로 나옵니다.
- 대시보드가 계획과 막힌 것을 말합니다. 지라를 열지 않고도 오늘 무엇을 하기로 했는지, 무엇이 멈춰 있는지 보입니다. 티켓 상세도 이슈 트래커의 상세 화면만큼 읽히게 다시 만들었습니다.
- 보드의 칸을 그 프로젝트의 보드에서 읽습니다. 「검토 중」이 「진행 중」으로 접혀 들어가던 것 — 칸 이름은 프로젝트마다 다르고, 다른 프로젝트의 이름으로 읽으면 없는 칸의 티켓이 옆 칸에 쌓입니다.
히스토리
- 커밋을 검색합니다. 상자에 치면 화면에 있는 줄을 거르는 것이 아니라 히스토리 전체를 다시 읽습니다 — 목록에 올라와 있는 것은 최신 수백 개고, 찾는 커밋은 대개 그보다 오래됐습니다. sha, 작성자, 제목, 가리키는 ref 중 하나라도 맞으면 나옵니다. Ctrl/Cmd+F 로 열고 Esc 로 지웁니다.
터미널
- 오래 켜 두면 아래쪽 글자가 깨지던 것. 원인이 우리 코드였고, 그것도 1.0.9 에서 같은 증상을 고치려고 넣은 코드였습니다. 그때는 터미널 애드온이 글리프 페이지를 스스로 관리하지 못해 상한을 대신 두었는데, 지금 애드온은 한계에 닿으면 페이지 넷을 하나로 병합합니다 — 그 병합도 우리가 세던 신호를 발생시킵니다. 그래서 10초마다 글리프 캐시를 통째로 버리고 있었고, 그 값을 가장 먼저 치르는 줄이 가장 자주 다시 그려지는 줄, 곧 전체화면 프로그램의 맨 아랫줄입니다.
편집기
-
import위에서 Cmd 를 누르면 나던Error: Model not found. Cmd+클릭은 탭으로 열어서 괜찮았지만, 누른 채 올려놓기만 하면 Monaco 가 미리보기를 그리려고 그 파일의 모델을 찾다가 없어서 던졌습니다. 그 파일이 마침 열려 있으면 조용히 잘 됐고, 그래서 될 때도 있고 안 될 때도 있었습니다. 밑줄이@one,ui,field로 토막 나던 것도 같이 고쳤습니다.
워크트리와 탭
-
세션 아래 줄이 무엇을 돌리는지 말합니다.
node는 런타임의 이름이지 무엇의 이름이 아닙니다. 이제pnpm dev처럼 실행한 것이 나오고, 서버라면 오른쪽 끝에:5173이 붙습니다. 탭도node:5173이라고 말하고, 포트 패널의 줄도 같습니다. -
에이전트가 지금 하는 일이 한 줄로 나옵니다. 이전에는 그
자리에
cargo,head,ugrep처럼 파이프라인 조각이 읽을 때마다 바뀌며 나왔고, 그 앞에는 에이전트가 자기가 쓰려고 띄운 MCP 서버들이 여섯 줄을 채웠습니다. 이제 한 줄이고, 파이프라인이면 사람이 그것을 부르는 이름 — 맨 앞 것 — 입니다. - 기다리는 워크트리의 주황 테두리를 뺐습니다. 열린 워크트리도 가장자리로 표시되니, 다른 체크아웃의 에이전트가 무언가 물어보는 순간 테두리를 두른 카드가 둘이 되어 「내가 지금 어디에 있나」가 한눈에 안 읽혔습니다. 가장자리는 선택이 가져갑니다 — 「너를 필요로 한다」는 카드 안의 활동 배지와 에이전트 줄이 이미, 그것도 어느 에이전트가 무엇을 물었는지까지 말합니다.
-
git과cargo도 마크를 답니다. 느린 링크의git push나cargo test는 이 줄에 가장 오래 머무는 것들인데, 그 자리만 빈 글리프 칸이라 「모르는 프로그램」처럼 보였습니다. -
파이선은 파이선 마크를 답니다. 마크가 없는 것은 터미널
글리프로 나옵니다 — 스파크는 「마크가 없는 에이전트」라는 뜻이라
python3에 붙으면 틀린 말이 됩니다. 프로젝트 목록에는 옅은 구분선이 생겼습니다.
미리보기
- 바깥 페이지가 제 옆의 스타일시트를 못 읽던 것. 스타일이 빠진 채로 그려져서, 고칠 것이 없는 페이지가 깨져 보였습니다.
- Ctrl/Cmd+R 로 새로고침합니다.
그 밖에
-
사용량 계기가
/usage와 같은 숫자를 말합니다. 키체인을 한 번 읽지 못하면 — 절전에서 깬 직후에 잠겨 있으면 — 「토큰 없음」으로 영구히 기억해서, 앱을 끌 때까지 이 기계의 추정치에 머물렀습니다. - 프로젝트를 바꿀 때 로딩 막대가 헤더 밑에 나옵니다. 바뀌는 것 — 저장소, 브랜치, 원격 — 이 적힌 줄이 거기고, 전환을 시작하는 전환기도 그 줄에 있습니다. 빠른 전환에는 아예 나오지 않습니다: 두 픽셀이 세 프레임 만에 나타났다 사라지는 것은 일이 아니라 창이 들썩인 것으로 읽힙니다.
- 브랜치 목록에서 현재 브랜치의 클릭 영역이 다른 줄과 같아집니다. 삭제 버튼이 없는 줄이 그 자리까지 늘어나 있었습니다. 그리고 「가져오기」· 「올리기」가 무엇을 하는지 — 어디서 몇 개를 — 툴팁으로 말합니다.
1.0.17 2026-09-18
1.0.16 에서 반만 고친 두 가지입니다. 세션 아래 목록이 에이전트가 자기가 쓰려고
띄운 것들로 가득 차 있던 것, 그리고 코덱스의 이어서 시작할 대화 목록이 여전히
codex resume 과 다르던 것.
에이전트
-
세션 아래에는 누군가 돌린 것만 나옵니다.
에이전트는 시작할 때 자기가 쓸 MCP 서버들과 맥을 깨워 두는
caffeinate를 스스로 띄웁니다. 그것들이 그대로 줄이 되어npm node node npm uv caffeinate— 여섯 줄 한도를 꽉 채우고, 모든 세션 아래에 똑같이, 아무것도 말해 주지 않는 목록이 그려졌습니다. 둘을 가르는 것은 무엇이 시작했는가입니다. 에이전트가 자기 것으로 띄운 기계장치는 에이전트의 자식이고, 에이전트가 실행하는 것은 사람이 하듯 셸을 거쳐 한 칸 아래에 있습니다. 이제 셸이 시작한 것만 줄이 됩니다. -
코덱스의 대화 목록이
codex resume과 같아집니다. 세 가지가 달랐습니다. 이름 — 코덱스는 대화의 이름을 기록 안이 아니라 자기 색인에 적어 두는데, 우리는 기록만 읽어서 제목 대신 첫 문장을 늘어놓고 있었습니다. 순서 — 파일이 마지막으로 바뀐 시각이 아니라 마지막 대화 시각입니다. 코덱스는 대화가 끝난 뒤에도 설정 같은 것을 기록에 덧붙입니다. 빠진 것 — 에디터에서 시작한 대화가 통째로 빠져 있었습니다. 코덱스가 목록에서 빼는 것은 사람이 아니라 프로그램이 돌린 대화(codex exec)이지, 편집기에서 한 대화가 아닙니다.
1.0.16 2026-09-18
1.0.15 에서 나온 것들을 고쳤습니다. 새로 만든 파일이 「변경된 것이 없습니다」로
나오던 것, 이어서 시작할 대화 목록이 /resume 과 다르던 것, 워크트리를
오가면 터미널 아래쪽이 깨지던 것.
git
-
새로 만든 파일이 통째로 추가된 것으로 나옵니다.
git diff는 인덱스와 작업 트리를 견주는데 추적된 적 없는 파일은 그 어느 쪽에도 없어서, 빈 답이 오고 화면에는 「변경된 것이 없습니다」가 그려졌습니다. 변경 목록의 새 파일이 전부 그랬고, 전부 같은 답이라 파일을 바꿔 눌러도 오른쪽이 그대로여서 패널이 멈춘 것처럼 보였습니다.
에이전트
-
이어서 시작할 대화 목록이
/resume과 같아집니다. 제목을 에이전트가 쓰는 순서대로 읽습니다 — 세션 이름,/rename으로 붙인 이름, 에이전트가 스스로 지은 제목, 요약, 그리고 첫 프롬프트. 지금까지는 마지막 하나만 읽어서 열두 개 중 여덟 개가 다른 이름이었습니다. 서브에이전트의 기록은 목록에서 빠집니다 — 그 이름은 세션 id 가 아니라 눌러도 열리지 않습니다. 정렬은 파일이 마지막으로 바뀐 시각이 아니라 마지막 대화 시각 기준입니다. 일주일 전이 마지막인 대화가 위에 올라와 있던 이유입니다. -
세션 아래 백그라운드 목록이 한 줄에 하나씩 나옵니다.
npm run dev하나가npm, 그것이 띄운node, 그 node 의 워커들로 갈라져서npm node node node처럼 보였습니다. 위치도 줄 오른쪽에 붙어 있던 것을 세션 아래로 옮겼습니다. - 작업 중인 워크트리에 주황색 테두리가 남지 않습니다. 테두리는 「확인 필요」를 뜻하는데, 에이전트가 답을 받고 다시 일을 시작해도 켜진 채였습니다. 옆의 배지는 「작업 중」인데 테두리는 그대로라, 한 카드가 두 말을 하고 있었습니다.
터미널
- 워크트리를 오가면 아래쪽이 깨지던 것. 돌아올 때 화면을 다시 그릴 폭은 맞췄지만, 그 폭을 터미널에서 돌고 있는 프로그램에게 알리지 않았습니다. 그래서 프로그램은 옛 폭으로 계속 그렸고, 상태줄 조각이 엉뚱한 칸에 떨어졌습니다. 크기가 바뀐 적이 없으니 스스로 낫지도 않았습니다.
1.0.15 2026-09-18
import 를 Ctrl/Cmd+클릭하면 그 파일로 갑니다.
tsconfig 의 별칭이든 node_modules 안이든,
설치할 것은 없습니다. 그 밖에 고친 것들: 확인한 알림이 다시 뜨던 것, 질문해 놓고
「작업 중」이라고 하던 것, 접어 둔 패널이 프로젝트를 다녀오면 펼쳐지던 것.
에디터
-
import 를 누르면 그 파일로 갑니다.
import { DatePicker } from '@one/ui/date-picker'의 경로를 Ctrl/Cmd+클릭하거나 F12 를 누르면 그 파일이 열립니다. 지금까지는 아무 반응이 없었습니다. 창 안의 TypeScript 는 열려 있는 파일 하나만 알아서, 그 옆 파일도 찾지 못했습니다. 이제tsconfig.json의paths·baseUrl(상속 포함), 패키지의exports·types,node_modules를 직접 읽습니다. -
typescript-language-server가 있으면 더 됩니다. 함수 이름에 Ctrl/Cmd+클릭, 레퍼런스 찾기, 이름 바꾸기, 타입 오류 표시. 이름이 무엇을 가리키는지는 언어 서버만 알 수 있습니다. 설치돼 있으면 쓰고, 없으면 없다고 표시합니다. 프로젝트의node_modules/.bin을 먼저 보므로package.json에 넣어 두면 팀 전체가 쓸 수 있습니다.
알림과 상태
- 확인한 알림이 다시 뜨지 않습니다. 「확인 필요」를 보고 세션에 가서 읽어도, 답을 입력하지 않으면 확인한 것으로 기록되지 않았습니다. 그래서 30초 뒤에 같은 알림이 다시 떴습니다. 이제 읽은 것도 확인으로 칩니다. 다시 뜨는 것은 에이전트가 다음 턴을 마친 뒤입니다.
- 질문 중인 세션을 「작업 중」이라고 하지 않습니다. 에이전트가 「네 차례다」라고 알려도, 다음 출력에 그 신호가 지워졌습니다. 그 뒤로는 판단할 근거가 없어서 5분간 「작업 중」, 이후 「완료」로 표시됐습니다. 이제 답을 입력할 때까지 유지됩니다.
- 세션이 돌리는 백그라운드 프로세스가 보입니다. 에이전트가 띄운 dev 서버·워처·빌드가 세션 아래에 한 단 들여써서 나옵니다.
- 「노는 중」을 「에이전트 없음」으로 바꿨습니다. 이 숫자가 세는 것은 「에이전트가 안 도는 터미널」이고, 사람이 쓰고 있는 셸도 여기 들어갑니다. 「노는 중」은 쓸모없다는 뜻으로 읽혀서, 옆의 정리가 그것을 지우지 않는 것이 오작동처럼 보였습니다.
창
- 접어 둔 패널이 프로젝트를 다녀와도 접혀 있습니다. 접힘을 창 전체에 하나로 저장해서, 다른 프로젝트를 열면 지워졌습니다. 이제 프로젝트마다 따로 저장합니다.
- 메뉴는 줄 전체가 눌립니다. 글자 위에서만 눌리던 것을 고쳤고, 서브메뉴 화살표도 줄 끝으로 옮겼습니다. 이어서 시작할 대화 목록에는 마지막으로 쓴 시각이 함께 나옵니다.
-
node아이콘이 어디서나 같습니다. 탭·워크트리 레일·포트 목록이 같은 프로세스를 각각 다르게 그리고 있었습니다. 포트 목록에도 무엇이 그 포트를 쓰는지 아이콘이 붙습니다. - 터미널 아래쪽이 안 그려지고 스크롤도 안 되던 것을 고쳤습니다. 그래픽 컨텍스트가 바뀐 뒤 다시 그리지 않아서, 커서 아래가 이전 화면으로 남고 스크롤 범위도 예전 값이었습니다.
- 저장소가 아닌 폴더에 「저장소가 아님」이라고 쓰지 않습니다. 안에 저장소가 있어서 그 줄이 목록의 제목이 될 때만 표시합니다.
1.0.14 2026-09-18
+ 메뉴에서 에이전트에 마우스를 올리면 그 워크트리에서 하던 대화가 나오고, 누르면 이어서 시작합니다. 그리고 창이 잘못 표시하던 것들을 고쳤습니다: 끝난 턴을 5분 더 「작업 중」이라고 하던 것, 지운 워크트리가 목록에 남던 것, 한 번 끌어다 놓으면 마우스 커서가 굳던 것, 절전에서 깨면 키체인 비번을 묻던 것.
에이전트
-
지난 대화를 골라서 이어 시작합니다.
+메뉴에서claude나codex에 마우스를 올리면 이 워크트리에서 하던 대화가 최근 열 개까지 나오고, 누르면 그 대화로 시작합니다. 에이전트 이름을 그냥 누르는 것은 지금까지처럼 새 대화입니다 — 메뉴에서 에이전트를 고른다는 것은 그런 뜻이고, 새 탭 둘이 같은 대화에 앉으면 안 됩니다. 시작 탭에도 최근 다섯 개가 「하던 것 이어서」로 놓입니다. -
끝난 턴을 5분 더 「작업 중」이라고 부르던 것을 고쳤습니다.
화면에는
done이 떠 있고 질문이 사람을 기다리는데 레일은 그 워크트리를 바쁘다고 했습니다. 에이전트가 「끝났다」고 말해도 그 말은 다음 출력 한 줄에 묻혀 사라졌고, 그 뒤로는 창이 시계로 판정했기 때문입니다. 이제 그 말이 턴을 닫습니다. - 카드의 불을 정리했습니다. 작업 중을 뜻하던 강조색 테두리를 걷었습니다 — 그 색은 이 레일이 열린 워크트리에 쓰는 색이라, 에이전트가 도는 카드마다 선택된 것처럼 보였습니다. 기다리는 중을 뜻하는 주황색은 남기되, 답할 때까지 한 번만 켜집니다. 예전에는 에이전트가 한 줄 찍을 때마다 꺼졌다가 다시 켜져서, 이미 본 질문이 다시 묻는 것처럼 읽혔습니다.
워크트리와 프로젝트
- 열어 둔 워크트리도 지웁니다. 지금까지는 「다른 것을 먼저 여세요」라며 막았는데, 답이 언제나 같은 심부름이었습니다. 이제 창이 저장소 자체의 체크아웃으로 먼저 비켜선 뒤 지웁니다 — 패널도 파일 트리도 그 디렉터리를 읽고 있으므로, 없어지기 전에 열린 것이 아니게 되어야 합니다.
- 지운 워크트리가 목록에 남던 것을 고쳤습니다. 삭제와 재조회는 별개의 호출이고, 삭제 전에 출발한 읽기가 사라질 그 줄을 들고 늦게 도착해 되살렸습니다. 그래서 카드가 남고, 눌러 보면 없는 디렉터리라 오류가 나고, 그때서야 사라졌습니다. 그 사이에 누른 카드가 브랜치 이름의 프로젝트로 등록되던 것도 같은 자리에서 나온 일이고, 같이 막았습니다.
- 저장소가 아닌 폴더도 엽니다. 폴더를 추가했는데 저장소가 아니면 「저장소가 아님」이라고만 하고 누를 것이 없어서, 다른 프로젝트를 봤다가 다시 돌아올 수 없었습니다. 워크트리가 없다는 말은 그대로 두고, 폴더 자체를 여는 줄을 그 아래에 놓았습니다 — 파일 트리도 에디터도 터미널도 저장소를 필요로 하지 않습니다.
- 사이드바를 둘로 놓아도 프로젝트 아이콘이 나오고, 고정한 프로젝트가 보입니다. 아이콘은 한 레일 목록과 전환기에만 있어서 같은 프로젝트가 배치에 따라 다른 물건처럼 보였고, 고정은 메뉴에 있는데 누르고 나면 줄에서 바뀌는 것이 없었습니다.
터미널
- 한글을 칠 때 조합 중인 글자가 안 보이던 것을 고쳤습니다. 첫 자모는 보이고 그다음부터 확정할 때까지 보이지 않았습니다. 글자는 그려지고 있었고, 그것을 담은 상자를 창이 매번 숨기고 있었습니다.
- 워크트리를 오가면 에이전트 화면 아래쪽이 어긋나던 것을 고쳤습니다. 돌아올 때 지난 화면을 다시 재생하는데, 그것을 다른 폭으로 써 넣은 뒤 맞는 폭으로 고쳐 감으면서 마지막 프레임 — 에이전트의 입력 틀 — 이 잘렸습니다. 이제 재생은 확정된 폭에서 합니다.
- 종료된 터미널에 다시 들어가면 이스케이프 문자가 글자로 찍히던 것을 고쳤습니다. 재생된 화면 속에는 프로그램이 살아 있을 때 터미널에게 던진 질문들이 들어 있고, 터미널이 거기에 다시 답하면서 그 답이 화면에 찍혔습니다.
창
- 한 번 끌어다 놓으면 창 전체의 마우스 커서가 굳던 것을 고쳤습니다. 버튼 위에서도 패널 경계에서도 화살표 그대로였습니다. 드래그가 끝나고도 포인터를 돌려주지 않아서, 문서 전체가 그 요소의 커서를 그리고 있었습니다.
-
깃 변경사항에서 체크 표시가 클릭에 바로 움직입니다. 스테이징은
git한 번인데 그 뒤의 전체 새로고침을 기다리느라 상자가 옛 상태로 남아 있었고, 그동안 그 클릭은 빗나간 것처럼 보였습니다. 푸시처럼 네트워크를 타는 버튼은 도는 동안 아이콘이 돕니다. - 절전에서 깨면 키체인 비번을 묻던 것을 고쳤습니다. 배경에서 도는 새로고침이 만료된 토큰을 갱신하면서 자격 증명 저장소에 썼고, 잠긴 키체인에 쓰는 것이 그 비번 창이었습니다. 이제 갱신은 사람이 보드를 열거나 새로고침을 눌렀을 때만 합니다 — 기다려서 잃는 것은 없습니다.
내 작업
- 창을 열면 큐가 이미 있습니다. 보드를 디스크에 남겨 두므로, 포지를 다시 물어보는 동안 빈 화면을 보지 않습니다.
- PR 줄이 초록인지, 승인됐는지 말합니다. 열어 보지 않고도 지금 무엇을 기다리는 중인지 알 수 있습니다.
- 티켓을 그 워크트리의 에이전트에 붙여넣습니다. 티켓을 열고 복사해서 터미널로 가져가던 걸음을 줄였습니다.
1.0.13 2026-09-17
빌드 파일이 저장소 맨 위가 아니라 services/api 같은 폴더에 있으면, 테스트 패널이 gradlew test 를 목록에는 올리면서 Run 은 못 돌리던 것을 고쳤습니다. 빌드 패널은 키보드로 다닐 수 있고, 경고를 오류와 따로 세고, 마지막에 돌린 작업을 기억합니다. 레일에서는 작업 중인 워크트리에 표시가 들어옵니다. 터미널에서 에이전트가 그린 표가 겹쳐 찍히던 것은 이모지 폭 계산 문제였고, 고쳤습니다.
빌드와 테스트
-
한 단계 아래에 있는 Gradle · Maven 빌드를 실제로 돌립니다.
저장소 맨 위에는 빌드 파일이 없고
services/api아래에 있는 배치에서, 테스트 패널은gradlew test를 목록에 올려 두고 Run 을 누르면 「no suite」라고 답했습니다. 있다고 말해 놓고 없다고 답하는 것이라, 무엇이 잘못됐는지 알 길이 없는 종류의 실패였습니다. 스위트가 자기 폴더를 적는 방식과 빌드 쪽이 적는 방식이 서로 달랐던 것이고, 이제 한 가지입니다. -
모듈은 저장소 맨 위의 래퍼로 돌아갑니다. 같은 자리에서 나온
것입니다. 모듈 옆에는
gradlew가 없고 — 여러 모듈짜리 저장소는 래퍼를 맨 위에 하나 둡니다 — 그것을 찾지 못하면 이 컴퓨터의PATH에 있는 아무 Gradle 로 조용히 넘어갔습니다. 래퍼가 막으려고 있는 바로 그 버전 차이입니다. 「CI 에서는 되는데 여기서는 왜」가 이 한 줄에서 갈립니다. - 빌드 패널의 작업 목록과 문제 목록을 키보드로 다닙니다. 두 목록 다 가진 몸짓이 더블클릭 하나였는데, 그것이 하필 키보드로는 낼 수 없는 몸짓입니다. 빌드를 시작하는 것도 그 컴파일 오류로 가는 것도 마우스로만 됐습니다. 이제 화살표 · Home · End · PageUp · PageDown 으로 옮기고, Return 이 작업은 돌리고 문제는 엽니다. 선택이 움직이는 것만으로는 아무것도 하지 않습니다 — 화살표로 목록을 지나가다 빌드가 시작되면 안 됩니다. 파일 트리 · git 패널 · 히스토리 · 테스트 패널이 이미 쓰는 그 규칙입니다.
- 경고는 오류와 따로 셉니다. 둘을 한 칩에 합쳐 세고 그 칩이 오류 색이었습니다. deprecation 경고 열두 개를 달고 성공한 빌드가 초록 「빌드됨」 바로 옆에 빨간 「문제 12개」를 달았습니다 — 멀쩡한 빌드를 두고 패널이 자기와 다투는 꼴입니다.
- 마지막에 돌린 작업을 기억합니다. Run 버튼은 「다시」라는 뜻이고, 한 세션 안에서는 그랬는데 창을 다시 켜면 작업이 비어 있어 버튼이 비활성이었습니다. 어제 열한 번 돌린 그 작업을 목록에서 다시 찾아야 했습니다. 러너마다 따로 기억하고, 빌드 스크립트에서 사라진 이름은 버립니다.
터미널
- 프로젝트를 바꿔 돌아오면 지난 화면의 조각이 남던 것을 고쳤습니다. 한참 전에 스크롤되어 사라진 줄의 반 토막이 멀쩡한 새 화면 한가운데 앉아 있는 식이었습니다. 터미널은 바뀐 칸만 다시 칠하는데, 그게 참이려면 그 사이 내내 화면에 있어야 합니다. 프로젝트를 바꾸면 터미널이 페이지에서 통째로 빠졌다가 돌아오므로 그 동안 바뀐 줄은 그냥 그려지지 않았고, 옛 픽셀이 남았습니다. 위에 없는 탭에 대해서는 이미 막고 있던 것인데, 같은 일이 더 크게 일어나는 쪽을 놓치고 있었습니다.
- 에이전트가 그린 표가 겹쳐 찍히던 것을 고쳤습니다. 표의 오른쪽 테두리가 한 칸 앞에 그려지고 이전 테두리가 뒤에 남거나, 한글이 파일 경로 중간에 끼어 들어가는 식이었습니다. 터미널이 자리를 잃은 것이 아니라 이모지의 폭을 한 칸으로 재고 있던 것입니다. 화면을 그리는 프로그램은 자기 글자가 몇 칸인지 세어서 커서를 옮기므로, 그 숫자가 한 칸 어긋나면 그 뒤 프레임 전체가 같이 어긋납니다. 한글은 내내 정확했고, 그래서 평소에는 멀쩡해 보이다가 가끔 깨지는 것처럼 보였습니다 — 깨진 줄에는 언제나 이모지가 있었습니다. 이제 Unicode 15 로 셉니다. 가족 이모지나 국기처럼 여러 조각이 하나로 합쳐지는 글자도 같이 맞습니다.
창
- 작업 중인 워크트리에 불이 들어옵니다. 프로젝트 줄의 「3개 실행 중」은 에이전트가 떠 있는 세션의 수입니다 — 읽는 동안 변하는 숫자는 읽을 수 없으므로 일부러 그렇습니다. 그런데 「지금 뭘 하고 있나」에 답하는 것은 그 옆의 점 하나뿐이었고, 그 점은 프로젝트 전체의 합이라 워크트리 셋 중 어느 쪽이 도는 중인지는 프로젝트를 펼쳐서 카드마다 읽어야 알 수 있었습니다. 이제 카드가 말합니다. 답을 기다리는 카드는 전부터 노란빛이었고, 여기에 도는 중이 파란 테두리로 붙습니다 — 더 조용하게, 움직임 없이. 기다리는 것은 사람이 손대야 하는 일이고 도는 것은 아니기 때문입니다. 프로젝트마다 워크트리를 따로 세우는 배치에서는 기다리는 불조차 없었는데, 그것도 같이 켜집니다.
- 워크트리 카드가 한 줄 낮아졌습니다. 토큰 사용량이 자기 줄을 하나 차지하고 있어서 카드가 네 줄이었고, 그 넷째 줄은 숫자 하나를 위한 줄이었습니다. 워크트리가 여섯이면 숫자 여섯 개에 여섯 줄입니다. 브랜치 줄 오른쪽 끝으로 옮겼습니다. 변경 개수와 한 모서리를 나눠 쓰지만 색과 굵기가 달라서 — 변경 개수는 색이 있고 굵고, 사용량은 흐리고 제 아이콘을 답니다 — 오른쪽에서 왼쪽으로 읽으면 브랜치에서 먼 쪽이 작업 트리, 가까운 쪽이 그게 든 비용입니다.
손질
- 가이드를 창이 실제로 하는 것에 맞췄습니다. 단축키 표가 히스토리를 없는 키로 가르치고 있었고(그 키는 「파일 전체에서 바꾸기」입니다), 빌드 · 문제 · 포트 · 워크트리 견주기 패널이 표에도 본문에도 없었습니다. 「내 작업」 절은 브라우저 로그인 이전을 말하고 있었고, 설치 절은 맥만 말했습니다.
-
Bitbucket 「브라우저로 로그인」이
server-error라고만 하던 것을 고쳤습니다. 사이트의 데이터베이스에 준비가 덜 끝난 상태였는데, 화면에 나온 것은 코드 한 줄이라 읽는 사람이 할 수 있는 일이 없었습니다. 이제 「로그인 중개가 설정되어 있지 않다」고 말하고, 바로 아래에 있는 다른 길 — 토큰을 붙여넣는 상자 — 로 물러납니다. 그리고 코드가 사람 앞에 나오지 않습니다: 거절의 이유를 문장으로 바꾸고, 사전에 없는 것만 이름을 괄호에 담아 남깁니다.
1.0.12 2026-09-17
「내 작업」을 켜려면 토큰을 만들어 붙여넣어야 했는데, 이제 브라우저에서 로그인합니다. GitHub · Forgejo · Gitea 는 우리 서버를 거치지 않고, Bitbucket · Jira 는 토큰을 바꾸는 순간만 사이트가 중개합니다. 터미널에서는 몇 시간 켜 두면 글자가 한 자씩 빠지던 것과, 한글을 칠 때 조합 중인 글자가 안 보이던 것을 고쳤습니다. 마크다운 미리보기에서 드래그한 선택이 사라지던 것도 고쳤습니다. 안 보낸 커밋을 펼치면 파일 목록이 바로 아래에 붙고, 하나를 누르면 오른쪽 칸에 차이가 나옵니다. 프로젝트가 많으면 레일 목록이 스크롤됩니다.
로그인
- 토큰을 붙여넣는 대신 포지에서 로그인합니다. 지금까지 「내 작업」을 켜려면 포지의 설정으로 가서 토큰을 만들고, 어느 권한을 켜야 하는지 읽고, 그것을 복사해 와야 했습니다. 이제 버튼 하나입니다. 네 포지가 요구하는 것이 서로 달라서 길은 셋입니다 — GitHub 은 브라우저에 코드를 한 번 적는 방식이고, Forgejo · Gitea 는 이 컴퓨터로 되돌아오는 주소를 씁니다. Bitbucket · Jira 는 그 둘이 다 막혀 있어, 토큰을 바꾸는 그 한 번만 사이트가 대신합니다. 토큰 상자는 없어지지 않았습니다 — 등록되지 않은 자체 호스팅 인스턴스에서는 그대로 그것이 뜹니다.
- 만료된 토큰을 스스로 갱신합니다. 브라우저로 받는 토큰에는 수명이 있습니다 — Bitbucket 은 두 시간입니다. 만료 시각을 적어 두지 않고, 거절당하면 그때 한 번 갱신하고 다시 묻습니다. 적어 두면 잠들었다 깬 기계에서 그 시각을 참으로 유지하는 일이 생기는데, 언제 만료인지는 이미 포지가 알고 있습니다.
- Jira 는 주소를 먼저 묻지 않습니다. Atlassian 의 동의 화면은 사이트가 아니라 계정의 것이고, 어느 사이트인지는 로그인이 끝난 뒤에 물어서 압니다. 그런데 주소 칸이 비어 있으면 버튼이 뜨지 않았습니다 — 로그인이 답해 줄 수 있는 값을 로그인 앞에 세워 둔 것입니다. 이제 승인한 그 사이트의 주소를 로그인이 적습니다. 계정에 Jira 가 둘 이상이면 이름이 맞는 것을, 없으면 첫 번째를 씁니다.
- 붙여넣은 토큰이 남아 있던 갱신 토큰에 덮이지 않습니다. 브라우저로 한 번 로그인했다가 다른 계정의 토큰을 붙여넣으면, 저장소에 남은 옛 갱신 토큰이 첫 거절에서 되살아나 방금 붙여넣은 것을 갈아 끼웠습니다. 로그인이 이제 짝이 되는 항목을 같이 지웁니다.
- Bitbucket 에 앱 비밀번호로 로그인해 둔 적이 있으면 브라우저 로그인이 거부되던 것을 고쳤습니다. 계정 칸이 차 있으면 그 값으로 예전 방식의 자격증명을 만드는데, 브라우저 로그인이 그 칸을 비우지 않고 있었습니다. 멀쩡한 토큰이 「거부됨」으로 돌아옵니다. 그리고 로그인 창이 10분이면 만료된다는 것을 이제 말합니다 — 비밀번호를 찾다가 그 시간을 넘긴 사람에게 아무 말도 없이 실패하던 화면입니다.
Git
- 안 보낸 커밋의 파일을 누르면 오른쪽 칸에 그 차이가 나옵니다. 바로 옆 변경 목록은 같은 몸짓으로 오른쪽 칸을 채우는데, 이 목록의 행은 누를 수 없는 이름표였습니다. 한 패널 안에서 같은 모양의 두 목록이 다르게 반응하면 어느 쪽이 규칙인지 매번 다시 배워야 합니다. 행을 펼칠 때 이미 패치 전부를 받아 두므로 추가 조회는 없습니다. 읽기 전용입니다 — 스테이지도 버리기도 나오지 않습니다. 그것들은 「다음 커밋이 무엇을 가져갈지」에 대한 결정이고, 이미 커밋된 변경에는 뜻이 없습니다. 머리줄에 그 커밋의 짧은 sha 를 적어서, 이 칸이 작업 트리를 보여 주고 있지 않다는 것을 말합니다.
- 안 보낸 커밋을 펼치면 파일이 바로 아래에 붙습니다. 커밋 행은 왼쪽 절반에, 파일 목록은 오른쪽 절반에 있었고, 커밋 행은 그 목록 높이의 가운데에 떠 있었습니다. 이 패널의 모든 목록 항목을 한 줄짜리 행으로 만드는 규칙이 여기까지 닿은 것인데, 여기 항목은 「행」이 아니라 「행 + 목록」입니다. 같은 원인으로 파일 하나를 가리키면 커밋과 형제 파일까지 같이 밝아지던 것, 그리고 들여쓰기가 선언은 되어 있는데 한 번도 화면에 닿지 않아 파일들이 커밋과 같은 왼쪽 선에 붙던 것도 함께 고쳤습니다.
- 히스토리의 파일 목록 위에 「파일 몇 개, 얼마나」를 적습니다. 남이 쓴 커밋을 열었을 때 가장 먼저 묻는 두 가지입니다 — 몇 개짜리 변경인가, 얼마나 큰가. 더한 줄과 지운 줄은 행들이 자기 숫자를 두는 오른쪽에, 행들의 색으로 적습니다. 파일이 하나도 없으면 머리글을 그리지 않습니다 — 거기는 「아직 읽는 중」과 「없음」을 갈라야 하는 자리이고, 0 을 적은 머리글은 아래 목록이 이미 하는 말을 한 번 더 하는 것입니다.
- 변경 목록의 「더보기」가 행 가운데에 옵니다. 이 버튼은 자기가 앉은 행보다 큽니다. 레일의 두 줄짜리 카드를 보고 쓴 위쪽 정렬 값을 그대로 쓰면 버튼의 중심이 행 중심보다 3px 내려가고 아래쪽이 행 밖으로 걸칩니다. 양옆 행의 상태 점과 눈에 띄게 어긋나 있었습니다.
- 변경된 파일을 누를 때 차이가 한 군데에서만 열립니다. 1.0.11 은 깃 패널에서 파일을 누르면 작업 영역에도 차이 탭을 열었는데, 패널 안의 차이 칸이 그대로 남아 있어 한 번의 클릭에 같은 차이가 두 군데 열렸습니다. 그 변경은 「패널 안 2단 차이는 쓰지 않는다」와 짝이어야 했고, 그 절반이 지켜지지 않았습니다. 그래서 되돌렸습니다 — 차이는 패널 안에서 열리고, 그 칸이 좁으면 분할을 끌어서 넓히면 됩니다.
터미널
- 오래 켜 둔 터미널에서 글자가 한 자씩 빠지던 것을 고쳤습니다. 줄이 사라지는 것이 아니라 있던 자리가 빈칸이 되고, 가장 자주 다시 그려지는 줄 — 전체화면 프로그램의 맨 아래 상태줄 — 부터 드러납니다. 글자는 (글자 × 색 × 스타일)마다 한 번 그려져 텍스처에 쌓이는데, 그 텍스처가 이 기계의 그래픽이 한 번에 볼 수 있는 수를 넘으면 넘친 것들이 그려지지 않습니다. 하루치 diff 와 문법 강조면 수천 개입니다. 이제 그 수에 닿기 전에 쌓인 것을 비웁니다. 비우는 값은 지금 화면에 있는 글자를 다시 그리는 것뿐이고, 그것은 폰트 크기를 한 칸 바꾸면 글자가 전부 돌아오던 것이 이미 치르던 값입니다. 테마를 바꿀 때도 비웁니다 — 쌓인 글자는 그려질 때의 색을 그대로 갖고 있어서, 창은 새 팔레트인데 이미 나온 글자들은 옛 색으로 남아 있었습니다.
- 한글을 칠 때 조합 중인 글자가 보입니다. 「ㅎ」을 쳐도 아무것도 나오지 않고, 다음 음절을 시작해야 앞 글자가 나타났습니다. 조합 중인 글자를 그리는 상자는 하나인데 거기에 그리는 주체가 둘이고, 한쪽이 물러난 뒤에도 다른 쪽이 매 렌더마다 그 상자를 도로 숨기고 있었습니다. 터미널은 글자가 메아리칠 때마다 다시 그리므로, 조합 중인 글자는 볼 수 있을 만큼 화면에 머문 적이 없습니다. 이제 「그린다 / 숨긴다」 사이에 「건드리지 않는다」가 생겼습니다.
미리보기
- 마크다운 문서에서 드래그한 선택이 사라지지 않습니다. 1.0.11 에서 한 번 고쳤는데 절반이었습니다. 링크 · 인라인 코드 · 표를 그리는 방식이 렌더마다 새로 만들어지고 있어서, 문서가 다시 그려질 때마다 그 노드들이 통째로 교체됐습니다. 선택은 노드에 붙어 있으므로 같이 죽습니다 — README 에서 복사할 만한 선택은 거의 다 링크나 코드 조각을 지나갑니다. 그리고 다시 그리는 일은 반드시 일어납니다: 파일 감시가 내용이 바뀌지 않은 건드림까지 보고하고, 드래그는 1~2초 걸립니다.
-
/docs/x.md처럼 루트로 시작하는 링크가 제 파일을 엽니다. GitHub 이 README 에 쓰라고 하는 형식이라 어느 저장소에나 있는데, 읽던 문서의 폴더에 그대로 이어 붙어서 아무것도 열지 않거나 아무도 요청하지 않은 파일을 열었습니다. 저장소 밖으로 올라가는../../../은 거부되지 않고 깎여서, 루트의 같은 이름 파일로 조용히 풀렸습니다. 감시할 파일을 찾는 쪽은 두 규칙을 다 알고 있었고 사람이 누르는 링크를 푸는 쪽만 몰랐으므로, 이제 한 자리에 두고 양쪽이 그것을 씁니다.
창
- 프로젝트가 많으면 목록이 스크롤됩니다. 40개를 넣으면 27번에서 잘리고, 휠을 여덟 번 굴려도 한 픽셀도 움직이지 않았습니다 — 거기에 스크롤 상자가 없었기 때문입니다. 잘린 티도 나지 않습니다: 레일은 툴팁이 반토막 나지 않게 넘침을 보이게 두므로, 넘친 행들은 그냥 창 밖으로 흘러나갔습니다. 섹션 셋을 펼친 짧은 창에서 같은 방식으로 행을 삼키던 한 레일의 전환 목록도 함께 고쳤습니다.
- 프로젝트를 여는 중이라는 표시가 창 맨 아래로 옮겨 갔습니다. 지금까지는 누른 카드의 아래 테두리에 있었습니다. 전환을 시작하는 자리는 다섯 군데이고 그중 넷은 누른 순간 눈이 떠나는 자리인 데다, 그 2px 은 스크롤되거나 접힐 수 있는 레일 안에 있었습니다. 전환 중이라는 것은 카드 하나가 아니라 창에 관한 사실이고, 브라우저와 에디터가 전부 그것을 창 아래에 둡니다. 어느 것을 눌렀는지는 카드가 계속 말합니다.
- 워크트리의 사용량이 커밋 줄 아래로 내려왔습니다. 에이전트가 쓴 돈에 대한 숫자가 브랜치와 그 브랜치가 한 일 사이에 끼어 있었습니다. 구석의 글자들은 작업 트리에 대한 것이고 이것은 계획에 대한 것이라, 카드의 맨 아래가 그 자리입니다.
- 절전 막기를 켠 채로 앱을 닫으면 기계가 계속 깨어 있던 것을 고쳤습니다. 절전을 막는 것은 앱이 띄운 별도의 프로세스인데, 자식 프로세스는 부모가 죽어도 죽지 않습니다. 그래서 스위치를 켠 채로 앱을 닫을 때마다 하나씩 남아 영원히 절전을 막았고, 다음에 켠 앱의 스위치는 자기가 띄우지 않은 그것에 대해 「절전 허용됨」이라고 — 사실대로 — 말합니다. 실제로 이 기계에 136시간짜리가 하나 살아 있었습니다. 이제 그 프로세스에게 자기가 누구 것인지 알려 주어, 앱이 사라지면 운영체제가 같이 정리합니다 — 크래시와 강제 종료까지 덮는 보장입니다.
손질
- 개인정보 처리방침을 브라우저 로그인에 맞춰 고쳤습니다. 「토큰은 우리에게 전송되지 않습니다 — 받을 서버가 없습니다」가 Bitbucket · Jira 로그인에 대해서는 더 이상 참이 아닙니다. 문장을 지우는 대신 무엇이 얼마나 거쳐 가는지 적었습니다 — 암호화되어 10분간 놓였다가, 로그인을 시작한 그 앱이 한 번 가져가면 그 자리에서 지워진다는 것.
1.0.11 2026-09-16
같은 지시를 여러 에이전트에게 한 번에 보낼 수 있고, 어느 세션에서 나온 말인지 세션을 가로질러 찾을 수 있고, 워크트리마다 얼마나 썼는지 카드에 나옵니다. 워크트리 둘을 나란히 비교하는 패널이 생겼고, 커밋 하나를 옆 워크트리로 복사할 수 있습니다. 저장소들을 담은 폴더는 프로젝트 목록에서 그 저장소들을 안에 넣어 보여줍니다 — 저장소 여섯 개짜리 폴더가 일곱 줄이 되지 않습니다. 워크트리·프로젝트 전환이 빨라졌고, 전환 중이라고 표시합니다.
에이전트
- 같은 지시를 여러 에이전트에게 한 번에 보냅니다. 워크트리 넷에 에이전트가 하나씩 있고 그중 셋에게 할 말이 같을 때 — 「테스트 돌려」, 「main 받아와」, 「멈추고 지금까지 한 것을 정리해」 — 지금까지는 터미널 셋에 들어가 세 번 치는 일이었고, 세 번째 에이전트는 첫 번째보다 1분 늦게 들었습니다. 쉬고 있는 세션은 기본으로 선택되어 있고, 턴이 진행 중인 세션은 왜 빠져 있는지를 함께 적어 둡니다. 에이전트가 아닌 셸은 목록에 나오지 않습니다 — 프롬프트 넷에 한 줄을 동시에 치는 것은 아무도 읽지 않은 명령 넷입니다. 일부에게만 닿았으면 창을 닫지 않고 어느 세션이 못 들었는지 말합니다. ⌘+Alt+Shift+A.
- 어느 세션이 그 얘기를 했는지 찾습니다. 터미널의 찾기는 「이 패널의 어디」를 묻습니다. 워크트리 넷에 에이전트 다섯이 있고 그중 셋은 지금 그려져 있지도 않은데 그중 하나가 한 시간 전에 그 얘기를 했다면, 지금까지는 하나씩 열어서 찾기를 다섯 번 누르는 것 말고 방법이 없었습니다. 이제 살아 있는 세션의 스크롤백을 한 번에 가로지르고, 행을 누르면 그 세션으로 갑니다 — 다른 워크트리에 있으면 그 워크트리를 먼저 엽니다. 에이전트가 그려 놓은 상자 안의 글자도 찾습니다. ⌘+Alt+Shift+F.
-
이 갈래가 얼마나 썼는지 카드에 적습니다. 상태 표시줄의 미터는
「얼마나 남았나」에 답하고, 그것은 이 기계의 플랜에 대한 질문이라 답이 하나입니다.
에이전트를 넷씩 굴리는 사람이 실제로 가진 질문은 다른 쪽입니다 — 「이 갈래가 얼마나
들었나」. 세션이 기록해 두는 작업 디렉터리를 읽어서 워크트리마다 토큰을 셉니다.
중첩된 워크트리는 가장 가까운 것에 달립니다. Codex 만 쓴 워크트리는 0 이 아니라
아무것도 적지 않습니다 — 거기
0이 있으면 「이건 공짜였다」로 읽힙니다. - 클로드를 업데이트하는 중인 에이전트를 끝났다고 말하지 않습니다. 「끝남」은 에이전트가 연달아 두 번 관찰되지 않으면 나가는 알림인데, 그 두 번은 2초입니다. 업데이트는 그보다 한참 오래 걸리고 그동안 앞에 서 있는 것은 설치 프로그램입니다. 둘을 가르는 것은 얼마나 오래가 아니라 무엇이 앞에 있느냐입니다 — 정말로 끝난 에이전트는 자기 셸을 남깁니다. 그래서 프롬프트가 돌아왔을 때만 끝난 것으로 셉니다.
- 없어진 워크트리에 남은 세션을 정리 대상으로 알아봅니다. 워크트리는 지워졌는데 그 안에서 돌던 셸이 살아 있는 경우입니다. 배치 파일은 자기가 설명하는 워크트리보다 오래 살고 아무것도 그것을 지우지 않기 때문에, 그 파일이 남아 있으면 세션을 계속 보증했고 그 파일마저 없으면 「읽을 수 없음」이라 그냥 두었습니다. 없어진 디렉터리에는 탭을 다시 열 수 없으므로, 그 세션들은 어디에서도 닿을 수 없는 것이 맞습니다.
프로젝트
- 저장소들을 담은 폴더가 목록에서 그것들을 품습니다. 폴더 선택창이 저장소의 상위 폴더에 머무는 일은 흔하고, 그렇게 들어온 프로젝트의 행은 「읽을 수 없음」이라고 적혀 있었습니다 — 폴더는 멀쩡히 열렸고 그 안에 저장소가 없을 뿐인데, 마운트가 풀린 드라이브와 같은 문장을 받은 것입니다. 이제 그런 폴더는 그 안의 저장소를 목록으로 내놓고, 누르면 열립니다. 그리고 열린 저장소는 목록에 따로 들어가지 않고 그 폴더 아래에 남습니다 — 저장소 여섯 개짜리 폴더를 추가했을 때 사람이 말한 것은 프로젝트가 하나라는 뜻이었습니다. 두 단계까지 찾고, 찾은 저장소 안으로는 들어가지 않으며, 상한에 걸려 목록을 끊었으면 끊었다고 말합니다.
- 폴더 안의 저장소 하나를 독립 프로젝트로 올립니다. 폴더 하나로 묶는 것은 안에 든 대부분에 맞는 답이지만, 매일 들어가는 그 하나에는 틀린 답입니다. 지금까지 그렇게 말하는 방법은 폴더를 목록에서 빼는 것뿐이었고, 그러면 나머지 다섯이 같이 사라졌습니다. 올린 저장소는 목록에 자기 행을 얻고 폴더 아래 에서는 빠지며, 돌아오는 길은 그 행의 「고정 해제」입니다.
- 찾아 놓은 저장소 목록을 잃어버리던 두 가지를 고쳤습니다. 첫째, 폴더를 훑는 중에 프로젝트 목록이 다른 이유로 움직이면 아직 도착하지 않은 답이 버려졌고, 그 폴더는 이미 물어본 것으로 기억되어 있어서 다시 묻는 일이 영영 없었습니다. 둘째, 고정해 둔 저장소가 상위 폴더 아래에도 한 번 더 그려져서 「지금 여기」 표시가 동시에 세 행에 붙었습니다.
워크트리
- 다른 터미널에서 만든 워크트리가 이제 나타납니다. 창은 자기 git 명령만 알고 있었고, 트리를 감시하는 것은 아무것도 없습니다. 그래서 레일이 둘인 배치에서는 프로젝트를 처음 펼칠 때 한 번 읽은 목록이 앱을 다시 띄울 때까지 그대로였습니다 — 옆 터미널에서 만든 워크트리는 끝내 나타나지 않았습니다. 이제 창이 앞으로 올 때 펼쳐 둔 프로젝트를 다시 읽습니다. 터미널에서 하나 만들고 건너오는 것이 바로 그 동작이기 때문입니다. 창 안의 터미널은 포커스를 뺏지 않으므로, 프로젝트 줄에 다시 읽기 버튼도 함께 두었습니다.
- 워크트리 둘을 나란히 견줍니다. 「검토」가 이 트리의 에이전트가 무엇을 바꿨는지 말한다면, 이 패널은 그것이 옆 트리와 어떻게 다른지 말합니다 — 같은 자리에서 자른 두 갈래에 각각 한 시간씩 에이전트를 붙여 두었을 때, 어느 쪽이 더 갔고 저쪽은 이쪽이 안 한 무엇을 했는가. 기준은 갈라진 지점입니다. 두 브랜치의 끝만 견주면 그사이 메인라인에 들어온 커밋까지 전부 「둘의 차이」라고 부르게 되는데, 사람이 뜻한 것은 그것이 아닙니다. 한 번에 한 방향씩 묻고, 반대 방향은 버튼 하나 거리에 있습니다. Ctrl+Alt+C.
-
새 워크트리가 무시된 파일을 전부 들고 시작합니다. 지금까지의 기본값
.env*,application-local.yml은 미리 하는 추측이었고, 추측이 틀렸다는 것은 한 시간 뒤 「앱이 안 뜬다」로 알게 됩니다. 갈림은 길이가 아니라 파일이냐 디렉터리냐입니다 — 앞쪽은 작고 기계마다 다른 설정이라 전부 원하는 것이고, 뒤쪽은node_modules나target처럼 크고 다시 만들 수 있는 것이라 전부 원하지 않는 것입니다. git 이 그 둘을 이미 갈라 주므로 그대로 따릅니다. 쓸어 담기에는 64 MB 상한이 있고, 넘긴 것은 이유와 함께 보고합니다 — 설정에 이름을 적은 파일은 사람이 요청한 것이므로 크기와 무관하게 가져옵니다. - 삭제를 감추는 대신 왜 안 되는지 말합니다. 워크트리를 만들면 앱이 곧바로 그것을 여는데, 열려 있는 워크트리의 메뉴에서는 「워크트리 삭제…」를 아예 빼고 있었습니다. 그래서 방금 만든 카드의 메뉴에는 항목이 하나뿐이었고, 그러면 「여기서는 못 하는 일」과 「아예 없는 기능」이 구별되지 않습니다. 줄은 언제나 그리고, 못 하는 상황이면 회색으로 먼저 무엇을 해야 하는지를 달아 둡니다.
- 레일이 둘인 배치에도 「변경을 버리고 삭제」가 생겼습니다. 그쪽의 확인 대화상자는 「커밋되지 않은 변경이 있어 git 이 거부합니다」라고 알려 준 다음 그 거부로 걸어 들어가는 버튼 하나만 내밀었기 때문에, 더러운 워크트리는 이 배치에서 지울 수 없었습니다. 같은 일이 가능한지가 그때 어느 배치를 쓰고 있었느냐에 달려 있었던 셈입니다.
-
카드의
⋯가M·S·!위에 내려앉지 않습니다. 겹치는 폭이 정확히 배지 하나여서 맨 오른쪽 하나가 아이콘 밑에 깔렸습니다. 뒤에 깔린 그라데이션이 그것을 막으라고 있던 것인데, 그것은 흐린 색에 본문 굵기인 브랜치 이름을 보고 만든 것이라 색과 굵기를 가진 이 글자들은 지워지지 않았습니다. 이제 모든 카드에 메뉴가 있으므로 그 자리를 미리 비워 둡니다.
Git
- 커밋을 옆 워크트리로 복사합니다. 갈래를 여럿 나란히 열어 두는 것이 이 앱의 배치이고, 한 시간쯤 지나면 「저 커밋은 옆 브랜치 것인데」가 나옵니다. 지금까지 그것은 터미널에 다녀오는 일이었습니다. 한 저장소의 워크트리들은 객체 데이터베이스를 공유하므로, 어느 히스토리에든 보이는 커밋은 어느 워크트리로든 복사할 수 있습니다. 여러 개를 고르면 오래된 것부터 싣고 — 순서가 어긋나면 순전히 순서 때문에 충돌합니다 — 원본 sha 를 메시지에 남깁니다. 「옮기기」가 아니라 「복사」라고 적은 이유는 원본이 그대로 있기 때문입니다.
- 변경된 파일을 누르면 차이가 읽을 수 있는 곳에서 열립니다. 이 패널은 「왼쪽 목록 · 오른쪽 차이」 2단으로 설계되어 있는데, 그 설계는 자리를 전제합니다. 좁은 칸에 꽂아 두면 2단이 무너지고 차이는 화면에 있는데 한 줄도 읽을 수 없습니다. 작업 영역에 차이 탭을 여는 길은 이미 있었지만 깃 패널에만 연결되어 있지 않았습니다. 패널 안의 차이 칸은 그대로 둡니다 — 거기가 부분 스테이징이 사는 자리입니다. 그리고 차이는 물어본 칸을 덮지 않는 자리에서 열리고, 화살표로 목록을 훑는 것은 탭을 열지 않습니다.
창
- 전환이 시작되었다고 말합니다. 워크트리나 프로젝트를 누르면 창은 경로를 정리하고 배치를 복원하고 감시를 다시 걸고 저장소를 찾는데, 그동안 화면의 모든 픽셀은 떠나려는 체크아웃의 것입니다. 그래서 누른 것이 아무 반응도 없는 상태가 코어가 답할 때까지 이어졌고, 그것은 빗나간 클릭과 구별되지 않습니다. 이제 누른 카드나 행이 진행 막대를 그립니다. 전환 둘이 겹쳤을 때 늦게 도착한 옛 답이 새 답 위에 덮이던 것 — 한 체크아웃의 배치가 다른 체크아웃의 루트 아래에 깔리던 것 — 도 함께 고쳤습니다.
-
전환이 빨라졌습니다. 파일 트리는 전환할 때마다 복원하는 폴더의
수만큼 다시 그려졌습니다. 폴더 하나하나가 자기 차례에 트리 전체를 걷게 했고, 걷는
트리가 커질수록 다음 것이 더 비쌌습니다. 이제 한 벌을 함께 읽고 한 번에 적습니다.
그리고 전환 한 번이
git을 네 번 띄워 경로 셋을 알아내던 것을 두 번으로 줄였습니다 — 값을 치르는 것은 일 자체가 아니라git을 띄우는 것이고, 실시간 검사가 도는 기계에서는 그 하나하나가 실행 전에 검사를 거칩니다. - 복원한 폴더도 감시합니다. 폴더는 사람이 열 때와 한꺼번에 접힐 때만 감시 대상이 되었고, 체크아웃을 다시 열면서 복원되는 경우는 어느 쪽도 아니었습니다. 그래서 열린 채로 돌아온 폴더에 에이전트가 파일을 써도 그 행을 닫았다 다시 열기 전에는 나타나지 않았습니다 — 감시가 막으려던 바로 그 결함이, 하필 열어 둔 채로 두었다는 것으로 이미 관심을 표시한 폴더에 떨어지고 있었습니다.
- 미리보기에서 글을 드래그하는 동안 선택이 사라지지 않습니다. 패널은 열린 파일을 따라가는데, 그 답이 그려 둔 문서를 통째로 버리고 잠시 뒤 도착한 글로 다시 짓는 것이었습니다. 아무도 쓰지 않은 파일이면 돌아오는 글은 이미 있던 그 글이므로 그것은 반대쪽에 아무것도 없는 철거이고, 선택 영역은 철거된 그 노드 안에 삽니다. 계속 일어난 이유는 감시가 내용이 아니라 메타데이터만 바뀐 것까지 변경으로 세고 있었기 때문입니다 — 색인기, 백업, 트리를 훑는 보안 프로그램이 건드린 것도 전부. 두 자리를 다 고쳤습니다.
- 이름 변경 칸에서 ⌥+←·→ 로 단어를 건너뜁니다. 맥의 모든 텍스트 필드가 하는 일인데 파일 트리의 이름 변경 칸만 아무 반응이 없었습니다. 창이 그 키를 가로채는 것이 아니라 웹뷰가 하지 않는 것이어서, 터미널이 같은 증상에서 지나온 길대로 직접 답합니다. 단어의 정의는 글자와 숫자입니다 — 이 칸에 들어오는 것은 파일 이름이고, 「보고서-초안.md」는 「report-draft.md」만큼 흔합니다.
- 이름 바꾸기에서 Esc 를 눌러도 전체 화면이 풀리지 않습니다. 아무도 쓰지 않은 Esc 를 웹뷰가 넘기면 macOS 가 그것을 「전체 화면 나가기」로 읽기 때문에, 창에는 그 기본 동작을 막는 규칙이 이미 있었습니다. 다만 그 규칙이 올라가는 길의 마지막에 서 있어서, 먼저 전파를 끊는 것이 있으면 그 앞에서 끝났습니다. 트리의 이름 바꾸기 상자가 정확히 그것을 합니다 — 그러지 않으면 방금 친 글자 밑에서 트리의 화살표 키가 커서를 옮기기 때문에, 그 상자는 잘못한 것이 없고 창 쪽 규칙이 자기가 약속한 「무조건」을 지키지 못하고 있었습니다. 이제 내려가는 길에서 먼저 답합니다.
- 대화상자의 체크박스가 한 줄을 다 먹지 않습니다. 텍스트 상자를 가로로 채우는 규칙이 그 안의 체크박스까지 잡고 있어서, 새 워크트리 대화상자의 「로컬 파일 가져오기」 칸은 340px 짜리 정사각형이 되고 제 이름은 오른쪽 밖으로 밀려났습니다. 대화상자가 높이 한계에 닿았을 때 버튼 아래 테두리가 깎여 나가던 것도 고쳤습니다 — 아래가 없는 버튼 줄은 「스크롤할 폼이 더 있다」가 아니라 「창에 잘린 대화상자」로 읽힙니다.
- 프로젝트 추가 화면에서 아이콘과 글이 떨어졌습니다. 1.0.10 에 들어간 그 간격은 선언되어 있었지만 죽어 있었습니다. 위쪽의 일반 규칙이 더 높은 명시도를 갖고 있어서, 어느 쪽을 나중에 쓰든 졌기 때문입니다. 되돌려도 코드가 똑같이 읽히는 함정이라 검사를 붙여 두었습니다.
- 기한이 UTC+12 이상에서 하루 늦게 보이던 것을 고쳤습니다. 기한은 그날의 정오 UTC 로 저장되는데, 정오인 이유는 그 순간을 지역 시간으로 읽어도 날짜가 맞게 나오라는 것이었습니다. 그것이 UTC-11 부터 UTC+11 까지만 참입니다. 오클랜드 에서 정오 UTC 는 이미 다음 날 아침이라 모든 기한이 하루 늦게 나왔고, 옆의 카운트다운도 그 틀린 날짜에 맞춰 세었습니다.
터미널
- 찾기가 패널을 다시 마운트한 뒤에도 동작합니다. 터미널 인스턴스는 패널이 다시 마운트되어도 살아남는데, 키 핸들러는 그 인스턴스를 처음 만든 컴포넌트의 것을 그대로 들고 갑니다. 그래서 찾기 상자를 여는 호출이 이미 화면에 없는 컴포넌트를 향했고, 아무것도 그려지지 않고 아무 오류도 나지 않은 채 그 탭의 찾기가 영구히 죽었습니다. 1.0.10 이 더한 것 — 저장된 배치 열기, 칸 접기와 펴기 — 이 정확히 패널을 평범한 이유로 다시 마운트시키는 것들이라 그때부터 눈에 띈 것입니다. 이제 핸들러는 탭 번호만 알리고, 지금 마운트된 패널이 자기 상자를 엽니다.
- ①②③ 가 작게 나오던 것을 고쳤습니다. 1.0.10 에서 잘림을 고치면서 생긴 것이고, 그때의 전제가 틀렸습니다. 이 글자를 한 칸 너비로 가진 폰트가 맥에 있습니다 — SF Mono 입니다. 다만 그 패밀리 이름이 점으로 시작해서 보통의 조회에서 건너뛰어지기 때문에, 전각 CJK 폰트가 대신 그렸고 그것을 칸에 맞춰 누르는 과정에서 가로만 62% 로 줄어 홀쭉해졌습니다. 이제 그 폰트를 이름으로 직접 부릅니다. 누르는 장치는 그런 폰트가 없는 기계를 위한 그물로 남겨 두었습니다.
빌드
-
빌드 파일이 루트에 없는 프로젝트에서도 그래들과 메이븐을 찾습니다.
지금까지 러너를 찾는 자리는 프로젝트 루트 하나여서,
services/api/build.gradle처럼 한 단 아래에 있는 저장소에는 「이 프로젝트가 선언한 빌드가 없습니다」라고 답했습니다. 사실이 아니었고, 기능이 아예 없는 것으로 읽혔습니다. 이제 두 단계까지 내려가 찾습니다. 루트가 빌드를 선언하면 그 아래는 보지 않습니다 — 멀티 프로젝트 그래들 빌드는 루트에settings.gradle이 있고 모듈마다build.gradle이 있는데, 그 모듈들은 그 빌드의 것이고 루트에서:api:test로 이미 닿습니다. 찾기가 예전에 빈손이었을 때만 돌기 때문에, 지금 되는 프로젝트는 아무것도 달라지지 않습니다. 모듈에 래퍼가 없으면 위쪽의gradlew를 찾아 씁니다 — 저장소 하나에 래퍼 하나가 흔한 배치이고, 그것을 못 찾으면 래퍼가 막으려던 버전 차이로 떨어집니다. -
리눅스에서도 터미널의
PATH를 물려받습니다. 창이 도구를 찾는 길은PATH인데, 파일 관리자에서 띄운 앱에 오는 것은 사람이 셸에 적어 둔 그것이 아닙니다. 맥에서는 이미 로그인 셸에게 물어보고 있었고, 리눅스는 「데스크탑 환경이 사람의 환경을 그대로 준다」는 전제로 묻지 않고 있었습니다. 절반만 맞는 말입니다 — 세션 관리자가 넘기는 것에~/.bashrc는 들어 있지 않고, sdkman·nvm·mise 가 줄을 적는 곳이 정확히 그 파일입니다. sdkman 으로 깐 그래들이 안 보이던 이유가 이것입니다. 물어보는 데에 시한도 뒀습니다: 이 물음은 창이 열리기 전에 일어나므로, 답하지 않는 rc 파일 하나가 영영 안 열리는 창이 되어서는 안 됩니다. -
빌드 목록을 읽지 못하면 이유를 말합니다. 읽기가 실패하면 그
오류를 삼키고 있어서, 패널이 로딩 뼈대를 켠 채로 남았습니다. 오류도 아니고 빈
패널도 아닌, 계속 일하는 중처럼 보이는 화면입니다 — 사람이 손쓸 수도, 뭐라
부를 수도 없는 유일한 결과입니다. 이제 코어가 한 말을 그대로 적습니다. 그리고
모듈이 여럿일 때 고르는 칸은 프로그램 이름 대신 빌드 파일의 경로를 보여 줍니다:
한 저장소의 모듈들은 전부 같은
gradlew로 도므로, 그것들을 구별해 주는 것은 경로뿐입니다.
손질
- 폴더를 여는 것이 워크트리를 옮길 때마다 상위 폴더를 통째로 다시 읽던 것을 고쳤습니다. 그동안 프로젝트 목록의 잠금을 쥐고 있어서, 목록을 건드리는 창 안의 다른 모든 것이 그 뒤에 줄을 섰습니다. 읽은 것을 기억하되 「없다」는 기억에서 꺼내지 않습니다 — 방금 터미널에서 클론한 저장소는 그 전에 읽은 목록에 없기 때문입니다.
- 개인정보 처리방침이 앱과 반대로 말하던 것을 고쳤습니다. 요약표는 「자동 업데이트 확인 — 없음」이었고 본문도 확인하지 않는다고 못을 박았는데, 앱은 30분마다 업데이트를 확인합니다. 「없음」을 지우는 대신 무엇이 나가는지를 적었습니다 — 버전 번호와 운영체제·CPU 종류, 그리고 이용자를 가리키는 값은 가지 않는다는 것.
1.0.10 2026-09-15
칸을 접어 손잡이만 남겼다가 다시 펼칠 수 있고, 배치에 이름을 붙여 다른 프로젝트에서도 불러올 수 있습니다. 프로젝트를 주소로 추가할 수 있습니다 — Git URL 에서 복제하거나, 빈 폴더에 저장소를 새로 만듭니다. 레일 카드에서 브랜치를 바로 옮길 수 있고, 브랜치와 커밋에 마지막으로 바뀐 시각이 나옵니다. 클로드에서 /clear 한 뒤 위로 스크롤하면 지운 대화가 그대로 보이던 것은, 설정에 훅 한 줄을 넣으면 해결됩니다. 모노레포에서 파일을 저장해도 포매터가 안 돌던 것도 고쳤습니다.
프로젝트
-
프로젝트를 주소로도 추가합니다. 지금까지 「프로젝트 추가」에는
폴더 선택 창밖에 없었기 때문에, 아직 내려받지 않은 저장소를 열려면 터미널에
다녀와야 했습니다.
git clone을 실행하고, 앱으로 돌아와서 그 폴더를 선택 창으로 다시 찾는 과정이 필요했습니다. 이제 하나의 대화 상자에서 세 가지 방법을 고를 수 있습니다. 이미 있는 폴더를 열거나, Git URL 에서 복제하거나, 빈 폴더에 저장소까지 함께 새로 만드는 방법입니다. 내려받는 동안에는 git 이 보고하는 진행 수치를 그대로 표시하고, 중간에 중단할 수 있으며, 중단하거나 실패한 경우에는 절반만 내려받은 폴더를 앱이 알아서 정리합니다. - 비밀번호를 묻지 않습니다. 이 창 뒤에는 답을 입력받을 터미널이 없기 때문에, 비밀번호를 물어 놓고 기다리면 진행률 표시가 멈춘 상태로 남습니다. 그래서 인증을 묻는 동작 자체를 끄고, git 이 알려 주는 메시지로 즉시 실패하도록 바꿨습니다. ssh 키와 자격 증명 도우미, 주소에 포함된 토큰은 이전과 똑같이 동작합니다.
창
- 칸을 접어 손잡이만 남겼다가 다시 펼칠 수 있습니다. 화면을 둘로 나눈 배치는 책상에 앉아 큰 화면을 쓸 때는 알맞지만 노트북에서는 좁은데, 지금까지 창은 그 선택을 한 번만 하도록 했습니다. 접은 칸은 원래 자리에 그대로 남아 있습니다. 크기와 열려 있는 탭, 그 안에서 실행 중인 터미널까지 유지되고, 옆 칸에 넘겨주는 것은 폭뿐입니다. 접기 버튼은 탭 줄 오른쪽 끝에 고정되어 있고, 버튼의 아이콘은 동작이 아니라 누른 뒤에 창이 갖게 될 모양을 나타냅니다.
- 배치에 이름을 붙여 저장하고, 다른 프로젝트에서 다시 엽니다. 배치는 원래도 워크스페이스마다 저장되고 있었지만 다른 체크아웃으로 가져갈 방법이 없었기 때문에, 새 프로젝트와 새 워크트리는 언제나 기본으로 내장된 네 가지 프리셋 중 하나로 열렸습니다. 이제 현재 창의 배치에 이름을 붙여 저장해 두면, 어느 프로젝트에서든 그 이름을 골라 같은 배치를 사용할 수 있습니다.
- 저장된 배치의 이름을 목록의 그 줄에서 바로 바꿉니다. 지금까지 이름을 고치려면 같은 배치를 새 이름으로 다시 저장한 다음에 예전 항목을 지워야 했고, 그 사이에는 메뉴에 같은 배치가 서로 다른 두 이름으로 나란히 남아 있었습니다. 이름을 확인하는 곳이 목록이므로, 이름을 고치는 곳도 목록으로 옮겼습니다.
- 칸을 얼마나 좁힐 수 있는지가 화면 크기에 따라 달라지지 않습니다. 최소 폭이 한 줄의 20분의 1로 정해져 있어서, 화면이 넓을수록 칸이 유지해야 하는 폭도 함께 커졌습니다. 정작 칸을 좁게 줄여 두고 싶어지는 상황은 화면이 넓을 때입니다. 이제 최소 폭은 화면 크기와 무관한 픽셀 값입니다.
- 글자를 읽을 수 없을 만큼 좁아진 칸은 잘린 채로 보이는 대신 흐리게 가려집니다. 탭 하나와 접기 버튼이 나란히 들어가지 못하는 폭부터는, 그 아래에 그려지는 것이 글자가 아니라 잘린 조각에 가깝습니다. 그래서 반쯤 잘린 글자를 그대로 보여 주는 대신 흐리게 가려 두고, 폭이 다시 넓어지면 원래대로 돌아옵니다.
- 포커스가 없는 그룹의 활성 탭은 한 단계 연하게 표시됩니다. 넷으로 나눈 창에서는 같은 강조색 밑줄이 네 개나 동시에 켜져 있었습니다. 어느 탭을 보여 주고 있는지는 그대로 유지하되, 그 사실은 거기에 입력을 하든 하지 않든 변하지 않기 때문에, 밑줄과 글자의 명도만 낮췄습니다.
- 설정에서 섹션을 바꾸면 본문이 맨 위에서 시작합니다. 본문 영역이 이전 섹션의 스크롤 위치를 기억하고 있었고 섹션 제목이 위쪽에 고정되어 있었기 때문에, 스크롤이 남아 있는 상태가 아니라 그 섹션이 원래 중간부터 시작하는 것처럼 보였습니다. 검색어와 필터를 바꿀 때에도 똑같이 맨 위에서 시작합니다.
- 절전 스위치가 지금 어느 상태인지 알려 줍니다. 하나의 컨트롤이 서로 반대되는 두 가지를 동시에 표시하고 있었습니다. 아이콘은 달과 해로 현재 상태를 나타냈고 글자는 「절전 막기」라는 동작을 나타냈기 때문에, 무엇이 켜져 있는지가 둘 중 어느 쪽을 읽느냐에 따라 달라졌습니다.
터미널
-
클로드에서
/clear를 실행하면 스크롤백도 함께 비울 수 있습니다. 이것은 창의 문제가 아니었습니다. 클로드 코드의 렌더러는 화면에 보이는 줄만 지우고 스크롤백은 건드리지 않는데, 그 바이트가 평범한 화면 다시 그리기와 똑같아서 창이 스스로는 둘을 구별할 수 없습니다. 그래서 에이전트가 대화를 비웠다고 말해 주는 길을 열었습니다 —~/.claude/settings.json의SessionStart에 훅 한 줄을 넣으면, 그 순간 창이 보관하던 기록과 화면을 함께 비웁니다. 대기 알림에 쓰는waiting·done과 같은 계약입니다. 훅이source가clear인 것을 보고$CODEME_AGENT_SIGNAL에cleared한 단어를 쓰면 됩니다. 넣지 않으면 동작은 예전 그대로입니다. 지워진 대화가 앱 안에 통째로 남아 탭을 열 때마다 다시 불러와지던 문제도 이 훅이 함께 해결합니다. - 화면 지우기에 Ctrl+Alt+K 단축키가 생겼습니다. 이 기능은 오른쪽 클릭 메뉴에만 있었는데, 메뉴를 여는 수고가 기능 자체를 실행하는 수고보다 큰 경우였습니다.
- ①②③ 가 온전한 모양으로 표시됩니다. 에이전트가 선택지에 붙이는 번호가 원의 일부만 그려져서 숫자로 읽히지 않았습니다. 글꼴이 없어서 생긴 문제는 아니었습니다. 유니코드가 한 칸 너비로 규정한 이 글자를 맥의 monospace 글꼴이 갖고 있지 않아 대체 글꼴이 자기 너비로 그렸고, 글리프를 미리 칸 크기에 맞춰 만들어 두는 렌더러가 넘치는 부분을 잘라냈습니다. 이제는 글자를 칸 너비에 맞게 축소해서 그립니다.
워크트리
-
카드에서 곧바로 브랜치를 옮깁니다.
⋯메뉴나 오른쪽 클릭으로 실행합니다. 창이 브랜치를 바꿀 수 있는 체크아웃은 지금 열려 있는 하나뿐이었기 때문에, 레일에 있는 다른 워크트리의 브랜치를 옮기려면 그 워크트리를 열고, 브랜치를 전환한 다음, 원래 워크트리로 돌아와야 했습니다. 워크트리를 여러 개 두는 이유가 바로 그런 왕복을 없애는 것입니다.⋯메뉴가 삭제할 수 있는 카드에만 붙어 있던 문제도 함께 고쳤습니다. - 브랜치마다 마지막 커밋 시각이 표시됩니다. 목록은 처음부터 최근 순으로 정렬되어 있었지만 정렬 기준인 그 날짜는 보여 주지 않았습니다. 순서만 있고 날짜가 없으면 읽는 사람은 그 순서를 그대로 믿는 수밖에 없습니다. 브랜치 전환 메뉴와 워크트리를 만들 때 고르는 브랜치 목록 양쪽 모두에 표시됩니다.
- 히스토리의 각 행에 얼마나 시간이 지났는지가 표시됩니다. 시각이 아예 없었고 정확한 날짜는 툴팁에만 있었기 때문에, 「이 커밋이 언제 들어왔는가」를 확인하려면 마흔 줄에 차례로 마우스를 올려 봐야 했습니다. 커밋 상세 화면도 같은 표현으로 맞췄습니다.
Git
- 아직 보내지 않은 커밋을 누르면 그 커밋이 바꾼 파일이 나옵니다. 각 줄에는 sha 와 제목과 작성자 이름만 있었고, 「지금 무엇을 보내려는 것인가」에 답하는 나머지 절반, 그러니까 아무도 외우고 있지 않은 파일 목록은 없었습니다. 파일 목록은 커밋을 펼칠 때 한 번만 읽어서 sha 별로 보관하므로, 목록을 그리는 동안에는 패치를 읽지 않습니다.
손질
-
모노레포에서는 포매터와 린터를 파일이 있는 위치에서 찾습니다.
설정이
apps/admin/.prettierrc에 있고 패키지 설치는 루트로 호이스팅된, 모노레포에서 가장 흔한 구성에서 파일을 저장해도 아무 일이 일어나지 않았습니다. 포매터를 찾는 로직이 루트만 확인하고 「포매터 없음」이라고 판정했기 때문입니다. - 「내 작업」 대시보드에서 「올린 사람별」 구획을 없앴습니다.
1.0.9 2026-09-14
터미널에서 한글이 제대로 입력됩니다. 창이 실행한 셸에 로케일이
지정되어 있지 않아서, 한 글자가 낱자로 흩어지거나 셸이 (arg: 8) 같은
메시지를 출력했습니다. 아무도 작업을 시키지 않은 워크트리가 계속 「작업 중」이라고
표시되던 문제, 같은 알림이 되풀이되던 문제, 맥에서 아무 일도 일어나지 않던 툴팁
예순아홉 곳도 함께 고쳤습니다.
터미널
-
한글이 입력됩니다. Dock 이나 Finder 에서 실행한 앱은 로케일
환경 변수를 물려받지 못합니다. 터미널 앱은 스스로 이 값을 채우지만, 이 경로에는
값을 채워 주는 주체가 없습니다. 그래서 셸이 로케일 없이 실행됐고, 그 상태의 줄
편집기는 한 글자를 이루는 바이트를 각각 다른 키 조합으로 해석합니다. 「글」의
가운데 바이트가
Meta-8로 해석되어(arg: 8)이 뜬 것도, 첫 자음만 남은 것도 모두 같은 원인입니다. 이제는 로케일이 비어 있을 때에만 시스템 설정의 값을 UTF-8 로 채웁니다. 직접 지정해 둔 값이 있으면 그대로 둡니다.
에이전트
- 중단한 턴이 계속 「작업 중」으로 남지 않습니다. 실행을 끊고 나면 에이전트는 작업이 끝났다고 알릴 기회를 얻지 못합니다. Claude Code 는 응답을 마쳤을 때에만 그 신호를 보내고, 사람이 중단했을 때에는 보내지 않기 때문입니다. 그래서 한 번 중단하고 나면 그 탭은 에이전트를 종료할 때까지 작업 중으로 남아 있었습니다. 이제는 Ctrl+C 가 턴을 닫고, 5분 넘게 아무것도 출력하지 않은 턴은 작업 중 표시를 해제합니다.
- 지금 보고 있는 세션은 구석에서 다시 알리지 않습니다. 권한을 물을 때마다 같은 문장의 토스트가 떴는데, 그 터미널이 화면에 떠 있고 읽히는 중이라면 창 한가운데에서 이미 더 자세히 안내하고 있습니다. OS 알림은 그대로 유지됩니다. 그쪽은 창이 다른 창에 가려져 있는지, 사용자가 자리를 비웠는지까지 확인하고 판단하기 때문입니다.
창
- 툴팁이 맥에서 보입니다. 브라우저에 그리기를 맡기는 툴팁은 이 창의 웹뷰에서 표시되지 않는데, 그런 방식으로 작성된 곳이 예순아홉 군데 남아 있었습니다. 맥에서는 모두 아무 일도 일어나지 않는 곳이었습니다. 잘린 파일 경로와 브랜치 이름도 거기에 포함됩니다. 누를 수 없는 컨트롤도 이제 왜 누를 수 없는지 설명합니다.
- 툴팁과 코치마크가 자신이 설명하는 대상을 가리지 않습니다. 창 가장자리에서 밀려나다가 설명 대상 위에 겹쳐지던 문제를, 먼저 어느 쪽에 배치할지 정하고 그다음에는 남은 축으로만 밀어내도록 고쳤습니다.
- 설정의 테마 목록이 스크롤됩니다. 목록을 닫는 이벤트 처리기가 팝업 자신의 스크롤까지 감지하고 있어서, 휠을 한 칸 굴리는 순간 목록이 닫혔습니다. 창의 모든 목록이 같은 상태였는데, 항목이 적어서 스크롤이 생기지 않는 목록들이 이 문제를 드러나지 않게 하고 있었습니다.
- 「파일 트리에서 찾기」가 지금 앞에 있는 파일을 가리킵니다.
리뷰
- 「에이전트 변경」의 기준점을 이 워크트리의 세션만 보고 정합니다. 다른 프로젝트에서 에이전트가 실행 중일 때 이 창을 열면 기준점이 그 순간으로 정해져서, 이미 작성되어 있던 변경이 전부 기준점 이전으로 묻혀 목록에서 사라졌습니다.
- git 이 응답하지 못하는 디렉터리를 「커밋 없음」으로 해석하지 않습니다. 그렇게 해석하면 저장소의 추적 파일 전부가 에이전트가 작성한 것처럼 목록에 올라옵니다. 이제 그런 경우에는 어떤 문제가 생겼는지 표시합니다.
손질
- 피드백의 별점이 코멘트와 함께 저장됩니다. 두 값이 따로 전송됐기 때문에, 코멘트가 저장된 뒤에 별점이 실패하면 아무도 집계하지 않는 별점이 남고 작성자는 처음부터 다시 써야 했습니다. 이제는 두 값이 하나의 질의로 함께 저장됩니다.
1.0.8 2026-09-14
커밋해 두고 아직 올리지 않은 것을 목록으로 볼 수 있고, 브랜치 목록에 동료가 올린 브랜치도 나오고, 「내 작업」에서 프로젝트를 둘 이상 골라 함께 볼 수 있습니다. 맥에서 빨간 버튼은 앱을 종료하지 않고 창만 닫습니다. 한 번 누르고 뗐는데도 계속 선택되던 diff, 잘 안 보이던 터미널 검색 표시, 절전 스위치 문구도 고쳤습니다.
Git
- 커밋했지만 아직 보내지 않은 것이 목록으로 정리됩니다. 변경 목록 아래에 별도의 그룹으로 표시되고, 각 줄에는 제목과 해시와 작성자가 들어갑니다. 지금까지 그 상태를 알려 주는 것은 버튼에 붙은 숫자 하나뿐이었습니다. 커밋하는 순간 변경이 위쪽 목록에서 사라지고, 푸시할 때까지 확인할 것이 남지 않았습니다. 하루 넘게 머무를 수도 있는 상태인데도 그랬습니다.
- 브랜치 목록에 원격에만 있는 브랜치도 나옵니다. 동료가 올린 브랜치에서 작업하려면 창을 떠나 로컬 브랜치를 직접 만들고 돌아와야 했습니다. 이제는 그 자리에서 고르기만 하면 되고, 고르는 순간 추적 브랜치가 만들어집니다. 메뉴를 열 때 원격을 한 번 가져오므로 방금 올라온 브랜치도 보입니다.
- diff 에서 한 번 누르고 뗐는데도 줄이 계속 선택되던 문제를 고쳤습니다. 버튼에서 손을 뗀 순간을 감지하지 못하는 경로가 있었고, 그 뒤로는 포인터가 지나가는 줄마다 선택됐습니다.
내 작업
- 프로젝트를 둘 이상 골라 함께 봅니다. 네 개 중 두 개가 이번 주에 할 일인데, 그 둘을 함께 보려면 필터를 끄고 나머지를 눈으로 건너뛰는 방법밖에 없었습니다. 쓰려면 꺼야 하는 필터였던 셈입니다. 아무것도 고르지 않으면 전체가 표시됩니다.
창
- 맥에서 빨간 버튼은 창만 닫습니다. 앱은 Dock 에 남고, 실행 중이던 에이전트도 계속 동작합니다. 세션을 보관하는 주체가 창이 아니라 앱이기 때문에, 다시 연 창은 닫기 전의 그 창입니다. 앱을 종료하려면 ⌘+Q 를 쓰고, 종료 여부를 묻는 것도 그쪽입니다.
- 앱은 하나만 실행됩니다. 두 번째로 실행하면 이미 열려 있는 창이 앞으로 나옵니다. 창이 둘이면 같은 클로드 세션에 서로 다른 번호가 붙었고, 하나의 워크트리를 두 프로세스가 각자의 파일 감시와 언어 서버로 중복해서 관찰하고 있었습니다.
손질
- 터미널에서 찾은 문자열이 눈에 잘 띕니다. 검색 표시가 선택 영역과 같은 옅은 색이었는데, 그 색은 위치를 이미 알고 있는 넓은 블록에 맞춰 정한 값입니다. 이제는 테마에 정의된 노란색을 쓰고, 그 테마의 배경색에 대해 대비가 충분한지 측정해서 고릅니다.
- 절전 스위치가 누르면 어떻게 되는지를 알려 줍니다. 문구가 「절전 끄기」와 「절전 켜기」로 바뀌고, 어느 쪽이든 적힌 문구가 그 조작의 결과와 일치합니다. 절전을 막는 데 실패하면 실패했다고 알립니다. 전에는 표시만 켜진 채로 조용히 해제됐습니다.
- 리뷰하려고 잠시 펼쳐 본 체크아웃은 프로젝트 목록에 남지 않습니다. PR 을 리뷰용으로 펼치면 임시 폴더에 저장소 하나가 통째로 만들어지는데, 그것을 열면 커밋 해시를 이름으로 삼은 프로젝트가 목록에 자리를 잡았습니다. 임시 폴더가 정리된 뒤에는 읽을 수도 열 수도 없고 직접 지우는 수밖에 없었습니다. 여는 동작은 그대로이고 목록에 기록만 하지 않습니다. 이미 생긴 항목은 다음 실행에서 사라집니다.
-
오른쪽 위 사용량 칩의 주간 표시가
주한 글자가 아니라주간입니다.
1.0.7 2026-09-13
인레이 힌트, 같은 이름 하이라이트, 괄호 안의 서명, 오류 옆의 빠른 수정이 들어왔고, 파이썬에 언어 서버가 처음 연결됐습니다. git 은 헝크 단위가 아니라 줄 단위로 스테이지할 수 있고, 터미널 출력에서 문자열을 검색할 수 있고, 리눅스 AppImage 가 배포에 추가됐습니다. Slack 으로 들어온 요청 일곱 가지도 들어 있습니다 — 그래들과 메이븐을 실행하는 창, 빈 폴더를 한 줄로 묶는 파일 트리, 하위 패키지까지 찾는 테스트 탭 등.
빌드 창
-
그래들과 메이븐을 창 안에서 실행합니다. 왼쪽에는 태스크 목록이,
오른쪽에는 컴파일 오류가 표시됩니다.
build·bootRun·test·clean처럼 자주 쓰는 태스크가 위로 오고, 더블클릭하면 그 태스크를 실행합니다. 터미널을 쓰지 않는 이유는 한 가지입니다. 실패한 빌드가 출력하는 사백 줄 가운데 컴파일 오류는 세 줄뿐이고, 다음 명령이 그 세 줄을 금세 밀어내기 때문입니다. -
오류 한 줄이 해당 파일의 해당 줄로 이동하는 항목이 됩니다.
javac 와 코틀린 컴파일러가 출력하는
파일:줄형식을 읽어 목록으로 만듭니다. 그 밖의 출력은 가공하지 않고 그대로 보여 줍니다. -
래퍼를 우선 사용합니다. 프로젝트에
gradlew·mvnw가 있으면 그것으로 실행하고, 어느 것으로 실행 중인지 창에 표시합니다. 「왜 여기서만 결과가 다른가」에 대한 답이 대개 거기에 있기 때문입니다. 진행률 막대는 완료 비율을 표시하지 않습니다. 그래들이 출력하는 퍼센트는 시작된 태스크의 비율이지 남은 시간이 아니어서, 그 값으로 막대를 그리면 빌드조차 모르는 수치를 창이 지어내는 셈이 됩니다.
파일 트리
-
하위 폴더가 하나뿐인 폴더가 이어지면 한 줄로 묶입니다. 스프링
프로젝트를 열면 트리 위쪽 여섯 줄이 전부 빈 폴더였습니다.
src / main / java / com / mz / service가 여섯 줄과 여섯 단의 들여쓰기를 써서 한 위치를 가리켰습니다. 이제는java/com.mz.service한 줄로 표시됩니다. 자바와 코틀린의 소스 루트 안쪽에서만 점으로 잇습니다. 모든 트리에 점을 쓰면src/components가 패키지처럼 읽히기 때문입니다. 설정에서 끌 수 있습니다. - 지금 보고 있는 파일로 트리가 다시 이동합니다. 트리는 커서가 다른 파일로 옮겨갈 때 한 번 스크롤합니다. 오백 줄 아래 폴더에 이름을 입력하는 동안 트리가 맨 위로 튀지 않게 하려는 규칙입니다. 그런데 창이 같은 파일을 다시 지정할 때에도 이 규칙이 적용되어서, 파일을 읽는 동안 트리를 다른 곳으로 스크롤하고 나면 선택 표시만 남고 화면 밖에 있는 그 행으로 돌아갈 방법이 없었습니다.
- 파일 헤더의 과녁 버튼이 지금 보고 있는 파일 위치로 트리를 이동시킵니다(Ctrl+Alt+E). 「트리가 탭을 따라갈 것인가」는 설정으로 정하지만, 이 버튼은 그 설정이 제공할 수 없는 일회성 동작을 담당합니다. 지금 이 파일이 어디에 있는지만 한 번 확인하는 동작입니다.
- 「상대 경로 복사」가 권한을 거부하는 WebView에서 한 번 더 시도합니다. 전에는 거기서 그대로 오류로 끝났습니다.
테스트
-
하위 패키지의 테스트도 찾습니다. 전에는 워크스페이스 루트만
확인해서,
apps/desktop/package.json에 선언된 vitest 가 아예 보이지 않았습니다. 후보가 하나뿐이면 러너 선택기도 표시되지 않았기 때문에, 무엇을 실행할지 알려 주는 요소가 화면에 하나도 없었습니다. 이제는cargo test와Vitest · apps/desktop이 나란히 표시되고, 각 스위트는 자기 패키지 안에서 실행됩니다. - 실행하기 전에 어떤 테스트가 있는지 확인할 수 있습니다. 「테스트 목록」을 누르면 러너에게 직접 질의하고, 행을 더블클릭하면 그 테스트 하나만 실행합니다. 자동으로 조회하지 않고 버튼으로 둔 이유는 그 질의의 비용이 작지 않기 때문입니다. vitest 는 테스트 파일을 전부 불러오고, cargo 와 go 는 테스트 바이너리를 먼저 컴파일합니다. 창을 열었다는 이유만으로 그런 작업이 일어나지는 않습니다.
워크트리
-
새 워크트리가
.env를 가진 채로 시작합니다. 워크트리는 추적되는 파일만 들어 있는 깨끗한 체크아웃이기 때문에, 앱을 실행하는 데 필요한 로컬 설정이 하나도 없습니다. git 이 의도적으로 무시하는 파일이므로 어떤 git 명령으로도 가져올 수 없고, 그래서 매번 직접 복사해야 했습니다. 워크트리를 만들 때 가져올 파일 목록은 설정에서 지정합니다. -
설정 파일은 복사하고, 이름이
/로 끝나면 디렉터리로 보고 링크합니다. 워크트리마다 포트를 다르게 지정하는 것이 일반적이므로 설정은 복사해야 하고,node_modules를 워크트리마다 몇 기가바이트씩 복제할 수는 없으므로 그쪽은 링크로 처리합니다. 이미 있는 파일은 덮어쓰지 않고, 무엇을 건너뛰었는지 알려 줍니다.
사용량
-
주간 한도가 칩에 바로 표시됩니다. 전에는 세션 잔여량만 보이고
주간 한도는 마우스를 올려야 나오는 카드 안에 있었습니다. 주간 한도는 몇 시간이
아니라 며칠을 막는 값인데, 찾아가야 보이는 수치는 이미 막힌 뒤에야 확인하게 되는
수치입니다. 가장 크게 표시되는 값은 그대로 세션이고, 주간은
W 69%형태로 그 옆에 표시됩니다. 추정값을 뜻하는~와 빨간색 표시 규칙은 주간 한도에도 똑같이 적용됩니다. - Claude 계정을 바꾼 뒤 새로 고치면 새 계정의 한도를 읽습니다. 주기적으로 실행되는 조회는 키체인을 다시 열 수 없어서 이전 계정의 수치를 그대로 유지하고 있었습니다.
탭과 드래그
- 탭을 패널 가장자리에 놓으면 그 방향으로 분할됩니다. 가운데에 놓으면 그 그룹으로 옮깁니다. 이 동작 자체는 원래 있었지만 오른쪽 클릭 메뉴에만 있었습니다. 다른 편집기가 모두 지원하는 끌어다 놓기 방식으로도 실행할 수 있게 했습니다.
- 탭을 어느 위치에 놓게 되는지가 보입니다. 전에는 탭 안쪽에 선을 그렸기 때문에 「이 탭」을 가리키는 것으로 읽혔고, 인접한 두 탭 사이에서는 왼쪽 탭의 오른쪽 선과 오른쪽 탭의 왼쪽 선이 똑같아 보였습니다. 이제는 두 탭 사이의 간격에 막대가 표시됩니다.
- 드래그가 지나가기만 해도 파일이 파랗게 선택되고, 커서 모양이 영역마다 바뀌고, 포커스가 옮겨가던 문제를 고쳤습니다. 탭을 본문 영역에 놓을 수 있게 되면서 처음으로 드래그가 창 한복판을 가로지르게 됐고, 그 과정에서 세 가지 문제가 한꺼번에 드러났습니다.
사이드바
- 한 턴 안의 정적을 「완료」로 판정하던 문제를 고쳤습니다. 에이전트 행이 한 턴을 처리하는 동안 작업 중, 완료, 확인 필요, 작업 중을 차례로 오갔습니다. 세션에는 아무 변화가 없었고 시간만 흘렀을 뿐입니다. 이제 상태 판정은 한 곳에서 한 번만 수행하고, 레일과 탭 표시, 프로젝트 칩, 트레이 메뉴, 메뉴 막대 배지가 모두 그 결과 하나를 읽습니다.
언어 서버
- 파이썬에 언어 서버가 연결됐습니다. 전에는 파이썬 파일에서 정의로 이동하는 기능도, 자동 완성도, 오류 표시도 동작하지 않았습니다. 클라이언트가 지원하지 못하는 기능을 지원한다고 선언해 두었고, pyright 가 그 선언을 믿고 요청했다가 응답을 받지 못한 채 조용히 종료됐기 때문입니다. 구현하지 않은 기능은 선언하지 않는다는 규칙이 그때 생겼습니다.
- 인레이 힌트가 들어왔습니다. 파일에는 적혀 있지 않지만 서버가 알고 있는 정보가 코드 줄 안에 함께 표시됩니다. 추론된 타입과, 인자 앞에 붙는 매개변수 이름이 여기에 해당합니다. 파일에 저장되는 글자가 아니라 서버가 표시해 달라고 요청한 주석입니다.
-
커서를 이름 위에 두면 그 이름이 쓰인 다른 곳이 함께 강조됩니다.
단순한 글자 일치가 아니라 서버가 판단한 결과이므로, 지역 변수
count와 다른 함수의count를 섞지 않습니다. 값을 읽는 곳과 값을 쓰는 곳은 서로 다르게 표시됩니다. - 괄호를 열면 그 함수가 어떤 인자를 받는지 보여 줍니다. 지금 몇 번째 인자를 입력하고 있는지가 굵게 표시되고, 입력에 따라 강조 위치가 함께 옮겨갑니다.
- 오류 옆에 전구 아이콘이 표시됩니다. 서버가 알고 있는 수정 방법을 눌러서 적용할 수 있고, Ctrl+Shift+O 로 파일 안의 심볼을 찾아갈 수 있습니다.
-
이름을 고르면 import 문도 함께 추가됩니다.
HashMa까지 입력하고 고르면 파일 맨 위에use std::collections::HashMap;가 추가됩니다. 커서가 있는 곳과 다른 위치를 편집하는 작업이라, 완성되는 글자에 얹어서 처리할 수 없었던 부분입니다. - 자동 완성이 서버가 지정한 범위 그대로 적용되고, 스니펫인 경우에는 탭으로 이동할 수 있는 입력 위치가 생깁니다. 전에는 커서 옆 단어를 보고 범위를 추측했는데, 식별자에는 맞았지만 구두점이 포함된 경우에는 틀렸습니다.
에디터
- 커서가 지금 어느 심볼 안에 있는지가 파일 이름 옆에 표시되고, 긴 함수 한가운데로 스크롤하면 그 이름이 화면 맨 위에 고정됩니다. 이름을 누르면 해당 심볼로 이동합니다.
- 경로 완성, 태그 짝 맞추기, Vim 키. 따옴표 안에서 파일 경로가 완성되고, 여는 태그를 고치면 닫는 태그가 같이 바뀝니다.
- 오른쪽 클릭 메뉴가 한국어로 표시됩니다. 창은 번역되어 있었는데 에디터가 자기 메뉴를 직접 그리는 부분만 영어로 남아 있었습니다.
- 테스트 옆의 ▶ 가 보입니다. 원래 있었지만 화면에 나타나지 않았습니다. 그 표시가 놓이는 여백의 폭이 0 이어서, 기능은 동작하는데 아무것도 표시되지 않는 상태였습니다.
문제 목록
- 열어 두지 않은 파일의 문제까지 모입니다. 전에는 열어 둔 파일의 문제만 표시했는데, 「지금 어디가 깨져 있는가」에 대한 답으로는 절반에 지나지 않습니다. 문제를 얼마나 보관하고 있는지와 그 상한은 상태바의 메모리 카드에서 확인할 수 있습니다.
Git
-
헝크 단위가 아니라 줄 단위로 스테이지합니다. 줄 번호를 드래그해서
고른 줄만 인덱스에 넣습니다. 「이 파일을 전부 올리되 40행에 남긴
dbg!만 빼고 싶다」는 흔한 요구인데, 그 줄이 속한 헝크에는 보통 올리려던 변경이 네 개 정도 더 들어 있습니다. 인덱스에서 빼는 방향도 마찬가지로 줄 단위로 동작합니다. - 마지막 커밋을 수정합니다. 제목의 오타나 빠뜨린 파일은 그 커밋을 한 번 고치면 되는 일이지, 커밋을 하나 더 쌓을 일이 아닙니다.
- 바뀐 줄 안에서 실제로 달라진 부분만 진하게 표시됩니다. 한 글자만 고친 줄이 통째로 빨간색과 초록색으로 칠해지면, 무엇이 바뀌었는지는 직접 눈으로 찾아야 했습니다.
-
창 밖에서 실행된 git 명령도 패널에 반영됩니다. 아래 터미널에서
git add를 실행하거나 옆 탭의 에이전트가 커밋하면 변경 목록이 따라 갱신됩니다. 전에는 더 이상 유효하지 않은 diff 를 계속 보여 주고, 그 위의 버튼이 그 낡은 내용을 대상으로 동작했습니다.
내 작업
- 선택한 스프린트와 프로젝트가 다음에도 그대로 유지됩니다. 필터는 전에도 있었지만 선택한 값이 저장되지 않아서, 패널을 다시 열면 「전체」로 돌아가고 일부러 걸러 두었던 행이 다시 앞에 나와 있었습니다. 처음 여는 화면은 지금도 전체를 보여 줍니다. 필터를 한 번도 건드리지 않은 사람에게 작업을 숨기지는 않기 때문입니다.
-
「지금 진행 중인 스프린트」가 스프린트 이름들 위에 별도 항목으로
표시됩니다.
Sprint 12를 골라 두면 그 스프린트가 끝나는 금요일까지만 유효하고, 월요일이 되면 존재하지 않는 이름이 되어 목록이 조용히 전체로 돌아갑니다. 이 항목은 그 월요일에도 유효합니다. 특정 이름이 아니라 조건을 저장하기 때문입니다. - 「이 창에 열려 있는 저장소」도 같은 자리에 있습니다. 창이 연 저장소의 리모트를 읽어서 그 저장소의 풀 리퀘스트만 남깁니다. Jira 티켓에는 적용되지 않습니다. 티켓이 속한 프로젝트는 체크아웃 경로만으로 알 수 있는 정보가 아니기 때문에, 이 항목은 프로젝트 이름 목록을 대신하지 않고 그 옆에 함께 놓입니다.
- 그리고 그 선택은 프로젝트마다 따로 저장됩니다. 「내 Jira 프로젝트 중 어느 것인가」는 저장소마다 답이 다르고, 값을 하나만 두면 A 에서 고른 값이 B 에서는 맞지 않습니다. 한 저장소에 속한 워크트리끼리는 같은 선택을 공유합니다. 기능 워크트리와 메인 워크트리를 오가는 것은 프로젝트를 바꾸는 일이 아니기 때문입니다.
터미널
- 터미널 출력에서 문자열을 검색합니다. 줄바꿈되어 두 줄로 표시된 긴 줄도 원래의 한 줄로 이어 붙여서 검색하므로, 패널이 좁다는 이유로 놓치는 결과가 없습니다.
테스트
-
JVM 을 다른 언어와 동등하게 지원합니다. 그래들과 메이븐 테스트를
테스트 탭에서 실행할 수 있고,
@Test옆에 ▶ 가 표시됩니다. - pytest 가 다섯 번째 러너로 추가됐습니다.
- 지금 읽고 있는 테스트를 그 자리에서 실행합니다. 파일을 열어 둔 상태로 이름 옆의 ▶ 를 누르면 그 테스트 하나만 실행됩니다.
리눅스
- AppImage 가 배포에 추가됐습니다. 리눅스에서는 사용자가 내려받는 파일과 업데이터가 설치하는 파일이 동일하기 때문에, 같은 내용이 두 가지 이름으로 함께 올라갑니다.
그 밖에
- 패널이 좁아지면 글자가 한 줄에 하나씩 세로로 늘어서던 문제를 고쳤습니다. 한글은 어느 글자 뒤에서나 줄을 바꿀 수 있어서, 좁은 칸에서는 단어가 아니라 글자 단위로 줄바꿈이 일어났습니다.
- 창이 좁을 때 툴바의 세 항목이 서로 겹쳐 그려지던 문제를 고쳤습니다. 저장소와 브랜치와 리모트가 이제 비율에 맞춰 함께 줄어듭니다.
- 도구가 여러 줄로 출력한 거절 메시지가 한 줄로 뭉개지던 문제를 고쳤습니다. git 의 안내가 단어는 모두 들어 있지만 순서는 의미를 잃은 한 문장이 되곤 했습니다.
- 에이전트 번호가 탭과 알림에도 표시됩니다. 같은 워크트리에서 두 에이전트가 응답을 기다리면 전에는 똑같은 문장이 두 줄로 나왔습니다.
- 이미 열어 본 폴더를 다시 열면 그때의 배치를 그대로 사용합니다. 미리보기는 페이지가 불러오는 파일이 바뀌어도 다시 그립니다.
- 절전 스위치가 현재 상태를 이름으로 쓰던 문제를 고쳤습니다. 꺼져 있을 때 「절전 허용」이라고 적혀 있어서, 누르면 절전을 허용하게 될 것처럼 읽혔지만 실제 동작은 그 반대였습니다. 이제는 켜져 있든 꺼져 있든 「절전 막기」라는 하나의 이름을 쓰고, 해와 달 아이콘으로 지금 어느 상태인지 구분합니다.
- 절전을 막는 프로그램이 종료되면 스위치가 저절로 꺼집니다. 절전을 실제로 막고 있는 주체가 그 프로세스이므로, 프로세스가 사라지면 그 효력도 함께 사라집니다. 전에는 표시만 켜진 채로 남아 있었습니다. 그 프로그램이 아예 없는 리눅스에서는 스위치를 표시하지 않습니다.
1.0.6 2026-09-11
1.0.5 이후로 열 개의 변경이 쌓였습니다. 중단된 머지를 배너가 아니라 파일
목록에서 해결합니다. 회사 네트워크 뒤에서 전부 실패하던 My work 로그인이
정상적으로 동작하고, 터미널의 /clear가 스크롤백까지 지우며, 답을
보내자마자 같은 알림이 다시 뜨던 문제가 해결됐습니다. 에이전트에는 부를 수 있는
번호가 생겼고, 새 버전을 확인하는 주기가 여섯 시간에서 30분으로 줄었습니다.
머지 충돌
- 충돌 파일이 왼쪽 목록 맨 위에 별도 그룹으로 표시됩니다. 전에는 위쪽 배너가 파일 이름을 늘어놓고 3-way 편집기로 가는 유일한 경로를 차지하고 있었고, 바로 아래 목록에는 같은 파일들이 다시 있으면서도 아무 작업도 할 수 없었습니다. 이제는 파일이 있는 그 자리에 「해결」이 있습니다. Return 과 더블클릭도 같은 편집기를 엽니다.
- 충돌 행에는 체크박스가 없습니다. 아직 해결되지 않은 경로를 체크하면 git 이 보관하던 세 개의 스테이지가 하나로 합쳐지는데, 체크를 풀어도 그 스테이지는 복구되지 않았습니다. 실행할 수는 있고 되돌릴 수는 없는 동작이, 되돌릴 수 있어 보이는 컨트롤에 연결되어 있었던 셈입니다. 그 동작은 이제 행 메뉴의 「해결 완료로 표시」라는 이름을 갖습니다.
- 앱 밖에서 머지를 모두 정리하고 왔다면 그룹 제목줄의 「모두 해결 완료로 표시」로 한 번에 처리할 수 있습니다. 행 하나를 표시할 때와 달리 이 동작은 한 번 확인을 요청합니다. 그룹이 존재하는 이유인 해결 작업 자체를 건너뛰는 동작이기 때문입니다.
-
머지가 중단됐다는 사실은 다른 탭에서도 보입니다. 「변경사항」 탭에
!3이 붙습니다. 파일 자체는 수정할 수 있는 곳에 두고, 중단됐다는 사실만 누르면 이동할 수 있는 탭에 표시합니다. - 「머지가 멈춘 파일」 배너가 좁은 칼럼에서 라벨을 한 글자씩 세로로 쌓고 중단 버튼을 오른쪽 바깥으로 밀어내던 문제가 있었습니다. 이미 작업이 막힌 사람이 보게 되는 유일한 배너가 가장 읽기 어려웠던 셈입니다. 그 배너는 이제 없앴습니다.
변경 목록
- 바뀐 파일을 폴더 단위로 묶어서 봅니다. 계층 없이 나열된 목록은 파일이 세 개일 때는 읽히지만 열 개부터는 읽기 어렵습니다. 모든 행이 똑같은 마흔 글자로 시작하고, 정작 다른 부분은 오른쪽 화면 밖에 있기 때문입니다. 하위 폴더가 하나뿐인 폴더는 한 행으로 접습니다. 선택한 보기 방식은 저장됩니다.
- 폴더 행의 체크박스는 그 아래 항목 전부를 한 번에 선택하고, 폴더는 그 아래에서 가장 우선순위가 높은 상태를 표시합니다. 충돌이 하나라도 든 폴더는 충돌 상태로 보입니다.
-
경로의 글자 순서가 뒤집혀 나오던 문제를 고쳤습니다.
.gitignore가gitignore.로,/home/me/app이home/me/app/으로 표시됐습니다. 존재하지 않는 경로가 하필이면 파일을 찾으려고 보는 목록에 그려지고 있었던 것입니다. 커밋 목록, diff 머리글, 리뷰의 변경 파일 목록, 프로젝트 행, 프로젝트 전환기까지 다섯 군데에서 고쳤습니다.
내 작업
-
회사 네트워크 뒤에서 로그인이 됩니다. TLS 를 검사하는 네트워크는
모든 인증서를 자기 CA 로 다시 서명하는데, 그 CA 는 키체인에 설치되어 있을 뿐 앱이
바이너리에 포함해 둔 목록에는 없었습니다. 그래서 Forgejo · GitHub · Bitbucket · Jira 네
소스가 한꺼번에
UnknownIssuer오류로 실패했습니다. 이제는 인증서를 운영체제에 질의합니다. 사내에서 자체 서명한 인증서도 맥이 신뢰하면 앱도 신뢰합니다. - 403 응답을 더 이상 「다시 로그인하세요」로 처리하지 않습니다. 빗버킷에서 403 은 요청 한도를 넘었거나 앞단이 짧은 시간의 연속 요청을 로봇으로 판단한 경우일 수 있는데, 정상적인 토큰을 두고도 로그인 정보를 지우고 있었습니다. 이제는 401 만 토큰 문제로 처리합니다.
- 읽기 요청은 한 번 더 시도합니다. 경로 어딘가에서 연결이 한 번 끊기면 곧바로 실패로 처리하던 것을, 이제는 400ms 와 800ms 를 쉬면서 세 번까지 시도합니다. 쓰기 요청, 그러니까 상태 전이와 댓글과 PR 생성은 재시도하지 않습니다. 읽기를 두 번 보내면 결과가 한 번 보낸 것과 같지만, POST 를 두 번 보내면 PR 이 두 개 생기기 때문입니다.
터미널
-
Claude Code 의
/clear가 스크롤백까지 지웁니다. 지운 뒤에도 위로 스크롤하면 지우기 전 대화가 그대로 남아 있었습니다. 셸의clear는 정상이었고 이 명령만 그랬습니다. 화면을 통째로 다시 그리는 그 출력이 버퍼 하나를 채울 만큼 컸기 때문에, 맨 끝에 붙은 「화면과 스크롤백을 함께 비우라」는 명령이 그 버퍼에서 잘려 나가고 있었습니다.
알림
- 답을 보내자마자 같은 알림이 다시 뜨던 문제를 고쳤습니다. 엔터를 누른 직후에는 대기 상태로 판정한 근거가 아직 하나도 바뀌지 않기 때문에, 세션이 한두 번의 관찰 동안 「답을 보냈다」와 「아직 기다리는 중이다」로 동시에 판정됐습니다. 이제 다음 알림을 보내려면 에이전트가 턴을 다시 가져가는 것을 한 번 관찰해야 합니다.
- 「끝났습니다」가 반복되던 문제도 함께 고쳤습니다. 다음에 무엇이 오는지 잠시 알 수 없는 순간이 종료로 판정됐고, 다음 관찰에서 같은 알림이 또 나올 수 있었습니다. 이제는 두 번 연속으로 같은 판정이 나와야 알리고, 한 번 알린 종료는 그 세션에 무언가를 입력하기 전까지 다시 알리지 않습니다.
- 알림 카드가 420px 로 넓어졌습니다. 워크트리 이름이 조금만 길어도 「…에서 기다리고 있습니다」가 다음 줄로 밀려서, 카드가 옆이 아니라 아래로 길어졌습니다.
에이전트
- 세션마다 부를 수 있는 번호가 생겼습니다. 「세 번째 세션이 묻고 있다」라고 말할 방법이 없었습니다. 사이드바도 메뉴 막대도 상태는 이미 표시하고 있었지만, 그것이 어느 세션인지는 표시하지 못했습니다. 번호는 사이드바 행과 메뉴 막대, 알림 제목 세 곳에 나옵니다. 잠긴 화면에서 읽는 다섯 개의 문장이 전부 같다면 그것은 알림의 역할을 하지 못합니다.
- 번호는 세션이 종료될 때까지 유지됩니다. 에이전트가 빠져나가도 번호를 반납하지 않습니다. 지켜보던 사람에게 그 탭은 여전히 3번이기 때문입니다.
-
사이드바 행의 툴팁에 세션 id 전체가 들어갔습니다.
claude --resume과 버그 리포트에 필요한 값인데, 창에서 그 값을 확인할 수 있는 곳이 없었습니다.
업데이트
- 새 버전을 30분마다 확인합니다. 이전 주기는 여섯 시간이었습니다. 릴리즈는 사람이 만드는 것이라 급할 것이 없다는 판단이었는데, 절반만 맞았습니다. 사람이 막혀 있는 문제를 푸는 릴리즈는 급하고, 여섯 시간은 열어 둔 창이 계속 막혀 있는 시간입니다. 확인 요청 한 번은 최신 버전일 때 본문 없이 0.3초가 걸립니다.
- 이 변경은 다음 릴리즈부터 적용됩니다. 1.0.5 이하를 쓰고 있다면 이 버전을 받기 전까지는 여섯 시간 주기가 그대로 유지됩니다.
1.0.5 2026-09-11
1.0.4 이후로 일곱 개의 변경이 쌓였습니다. 테마가 하나로 합쳐졌고, 밝은 테마에서 읽히지 않던 글자들이 제대로 보입니다. 설정 화면은 이름과 컨트롤을 첫 줄로 올리고 설명을 절반으로 줄였으며, 상태바의 측정값 네 가지에는 눌러서 여는 상세 카드가 붙었습니다. 기다리는 동안 빈 자리를 그리던 열네 군데는 이제 곧 도착할 내용의 모양을 미리 그립니다.
테마
- 화면 밝기와 코드 테마를 하나의 설정으로 합쳤습니다. 둘로 나뉘어 있었기 때문에, 밝은 테마를 골라도 창은 어두운 상태로 남았고 그것을 바꾸는 컨트롤은 그 사실을 전혀 설명하지 않는 다른 행에 있었습니다. 이제는 테마를 고르면 창과 코드가 함께 바뀝니다.
- 「시스템 따라가기」는 밝은 테마를 하나 지정하는 방식으로 바뀌었습니다. 맥이 밝은 모드일 때 무엇을 쓸지 고르지 않으면, 위에서 고른 테마를 그대로 사용합니다. 위 설정이 아무 역할도 하지 않는 상태가 생기지 않도록 하기 위해서입니다.
- 밝은 테마의 터미널이 읽힙니다. 「밝은」 계열 색을 언제나 흰색 쪽으로 올리고 있어서 흰 바탕 위에서는 정확히 반대 결과가 나왔고, bright white 는 흰 바탕에 흰 글씨가 됐습니다. 그래서 에이전트 출력의 절반이 보이지 않았습니다.
-
기본
dark·light테마에서 diff 와 렌더링된 코드 블록이 한 가지 단색으로만 표시되던 문제를 고쳤습니다. 에디터만 자기 색을 알고 있었고, 그 색에서 파생되는 나머지 요소는 아무 값도 전달받지 못했습니다. -
창의 밝은 팔레트를 16색으로 그대로 옮긴
codeme-light테마가 생겼습니다. 쓰던 설정은 자동으로 이전되므로, 직접 열어서 고칠 것은 없습니다.
설정
- 이름과 컨트롤이 첫 줄에 나란히 놓입니다. 전에는 서너 줄짜리 설명을 사이에 두고 행의 양 끝에 떨어져 있었고, 다이얼로그가 실제로 열리는 폭에서는 가운데 열의 너비가 네 단어에 지나지 않았습니다.
- 설명이 한두 문장으로 줄었습니다. 마흔다섯 개를 합쳐 10,787자였고 가장 긴 것이 800자였습니다. 「테마」 하나가 일곱 줄을 차지해서, 그 카드에 든 설정 세 개 중 하나만 화면에 보였습니다. 이제 가장 긴 설명이 209자입니다.
- 오류 메시지가 창에 설정된 언어로 나옵니다. 설정 파일이 잘못됐다는 안내를 방금 받은 사람이 읽는 목록이, 정작 코어가 출력한 영어를 그대로 보여 주고 있었습니다.
상태바
-
측정값을 누르면 상세 카드가 열립니다. 네 가지 모두 실제로는 요약된
수치인데 툴팁은 한 문장뿐이어서,
boot 240ms · paint 610ms · interactive 1300ms같은 내용이 한 줄에 구겨져 들어가거나 아예 표시되지 않았습니다. - 카드 안에서 바로 조작할 수 있습니다. 터미널 카드에는 쓰지 않는 세션을 끝내는 「정리」가, 버퍼 카드에는 상한을 바꾸는 컨트롤이 있습니다. 수치가 올라가는 것을 보고 있는 사람이 취할 수 있는 조치가 다이얼로그 안쪽으로 세 번을 눌러야 닿는 곳에 있었기 때문입니다.
알림
- 한 번 누른 알림이 다시 오지 않습니다. 알림에서 탭을 여는 동작 자체가 「기다리는 중」 표시를 해제해서, 아직 답을 받지 못한 같은 턴이 다시 알림으로 올라왔습니다. 이제는 사람이 실제로 답할 때까지 한 번만 알립니다.
- 알림 카드에 복사 버튼이 붙었습니다. 여기에 담기는 내용은 대개 도구가 출력한 문장이고, 사용자가 그다음에 하는 일은 그 문장을 검색창에 넣거나 다른 사람에게 전달하는 것이기 때문입니다.
기다리는 동안
-
회색
…한 글자만 그리거나 아무것도 그리지 않던 열네 군데가 이제 곧 도착할 내용의 모양을 미리 그립니다. - diff 를 오른쪽에 배치하는 네 패널, 그러니까 변경사항과 git 과 히스토리와 리뷰가 파일을 고를 때마다 오른쪽 절반을 한 줄로 접었다가 다시 채우고 있었습니다. 그 패널들이 존재하는 이유인 바로 그 조작이 화면을 흔들었던 것입니다.
- 새 워크트리 다이얼로그가 눌러도 아무 반응이 없는 것처럼 보이다가 잠시 뒤에 화면을 덮었습니다. 이제는 그 자리에 다이얼로그의 모양이 먼저 표시됩니다.
포트
- 「이 머신의 다른 포트」가 별도 섹션으로 구분됩니다. 위쪽 목록과 구분되지 않은 채로, 같은 모양의 행 열두 개가 끊김 없이 이어졌습니다.
- 그 아래 항목을 프로그램별로 묶습니다. node 네 개와 postgres 하나는 다섯 가지가 아니라 두 가지로 읽는 편이 맞습니다.
- 좁은 패널에서 주소가 버튼 위에 겹쳐 그려지던 문제를 고쳤습니다.
에디터와 파일
- 찾기 위젯의 플레이스홀더가 가운데로 정렬되던 문제, 툴팁이 잘리던 문제, 「파일로 이동」 팔레트를 뚫고 위로 올라오던 문제를 고쳤습니다. 세 증상의 원인이 각각 달랐습니다.
-
열어 둔 파일과 이름만 같은 파일을 지웠을 때 「디스크에서 삭제됨」이
표시되던 문제를 고쳤습니다.
README.md를 열어 둔 채docs/README.md를 지우면, 멀쩡히 남아 있는 쪽이 사라졌다고 표시됐습니다. -
파인더에서 끌어다 놓는 동작이 탭이나 분할을 바꾼 뒤에 조용히 동작하지 않게
되던 문제를 고쳤습니다. 같은 상황에서 나타나던
listeners[eventId].handlerId배너도 함께 사라집니다.
테스트
- 실행 중에 무엇이 실행되고 있는지 보입니다. 러너 이름과 경과 시간, 지금까지 출력된 줄 수가 한 줄에 모이고, 그 아래의 가느다란 막대가 아직 동작 중임을 나타냅니다. 이런 표시가 없으면 아무것도 출력하지 않은 러너와 멈춰 버린 러너를 구분할 수 없습니다.
-
같은 줄이 연속되면 하나로 접습니다. jsdom 스위트가 테스트마다
Not implemented: …를 출력하면 같은 문장이 사백 번 나오는데, 이것은 형식적으로는 출력이지만 읽는 사람에게는 아무 정보도 주지 않습니다.
메뉴 막대
- 글리프의 선을 굵게 바꿨습니다. 창 프레임 모양이 옆에 놓이는 시스템 아이콘들보다 가늘어서 흐릿하게 보였습니다.
- 에이전트가 질문을 시작할 때 아이콘이 작아지던 문제를 고쳤습니다. 이제 상태가 바뀔 때 추가되는 것은 시계 배지 하나뿐입니다.
1.0.4 2026-09-05
1.0.3 이후로 서른네 개의 변경이 쌓였습니다. 창이 확인할 수 없던 마지막 「실행 중인 것」을 위해 포트 패널이 생겼고, 단축키를 설정에서 바꿀 수 있게 됐으며, 업데이트가 더 이상 세션을 중단시키지 않습니다. 터미널은 이 기계의 다른 터미널과 같은 셸로 열리고, 파일 트리와 미리보기와 데이터베이스 패널도 각각 개선됐습니다.
포트
- 열려 있는 포트를 목록으로 확인할 수 있습니다. 이 머신의 포트를 전부 보여 주되 이 프로젝트가 연 포트를 먼저 표시합니다. 컨테이너에는 목록이 있고 에이전트에는 사이드바가 있었는데, 개발 서버만은 그것을 실행한 터미널 탭이 살아 있는 동안에만 확인할 수 있었습니다.
- 그 포트를 회수할 수 있습니다. 종료는 프로세스 그룹 단위로 하고, 프로세스가 실제로 사라질 때까지 기다립니다. node 만 종료하면 npm 이 남아 오류를 출력하고, 다음 실행이 아직 소켓을 점유한 프로세스와 충돌합니다.
- 그 서버도 다시 띄울 수 있습니다. 실행했던 명령을 기억해 두었다가, 되살리기를 누르면 터미널에 그 명령을 입력합니다. 정작 확인하고 싶은 것은 서버의 출력이고, 그 출력이 있어야 할 곳은 터미널이기 때문입니다.
-
기억하는 것은 포트를 점유한 프로세스의 명령줄이 아니라 사람이 실제로 입력한
명령입니다.
npm run dev는 셸과 npm 과 node 로 이어지고 포트를 점유하는 것은 node 이므로, 그 프로세스의 명령줄을 다시 실행하면 사람이 작성한 스크립트가 아니라 그 안의 도구를 직접 실행하게 됩니다.
단축키
- 설정에서 직접 바꿉니다. 기본으로 제공하는 두 키맵은 출발점으로는 좋지만, 맞지 않는 키는 사람마다 다릅니다. 창 관리자가 먼저 가로채는 조합, 오른쪽 Alt 가 없는 키보드, 한 손으로 세 손가락을 써야 하는 조합이 모두 여기에 해당합니다.
-
표기법을 외울 필요가 없습니다. 입력란을 누르고 원하는 키를 그대로
누르면 그 조합이 기록됩니다.
Mod-Shift-]를 직접 입력하는 방식은 아무 동작도 하지 않는 단축키를 만드는 가장 쉬운 방법이었습니다. - 충돌은 저장하기 전에 알려 줍니다. 이미 그 키를 쓰는 명령이 있으면 어떤 명령인지 보여 주고, 저장하면 사용자가 지정한 쪽이 우선합니다. 밀려난 명령의 행에는 어느 명령이 그 키를 가져갔는지가 표시됩니다.
업데이트
- 내려받는 단계와 재시작하는 단계를 분리했습니다. 전에는 버튼 하나가 내려받기와 설치와 재시작까지 한꺼번에 처리해서, 업데이트를 받는 대가가 그 창에서 실행 중이던 작업 전부였습니다. 이제는 내려받는 동안 터미널과 에이전트가 계속 동작합니다.
- 「나중에」가 실제로 유효한 선택이 됩니다. 내려받아 둔 업데이트는 앱을 닫을 때 적용되므로, 「지금 재시작」을 끝내 누르지 않아도 다음에 실행하면 새 버전입니다.
- 업데이트 확인과 피드백 보내기를 앱 메뉴에도 넣었습니다. 메뉴 막대는 끌 수 있고 아예 없는 머신도 있어서, 그런 경우에는 업데이트 확인에 도달할 방법이 전혀 없었습니다.
- 알림 카드가 버전을 표시하고, 이 페이지로 링크를 겁니다.
변경사항
-
수정한 내용을 되돌릴 수 있습니다. 인덱스에 넣고 빼는 경로만 있고
되돌리는 경로는 창 어디에도 없어서, 터미널로 나가
git restore를 실행해야 했습니다. 이제 행 메뉴에 「변경 버리기」가, 머리글에 「변경 모두 버리기」가, 헝크 머리글에 「이 부분 버리기」가 있습니다. - 변경을 버리는 동작은 되돌릴 수 없으므로 먼저 확인을 요청합니다. 무엇이 얼마나 사라지는지 세어서 함께 알려 줍니다. 커밋으로 되찾을 수 있는 것은 추적되는 파일뿐이고, 아직 추적되지 않는 파일은 완전히 사라집니다.
검색
-
정규식 스위치가 생겼습니다. 스위치를 켜지 않으면 동작은 이전과
완전히 같습니다. 아무 안내 없이 입력을 패턴으로 해석하는 검색창은 사용자가 의도하지
않은 문법에 대해 오류를 띄우게 됩니다. 스위치를 켠 뒤에 입력한
(는 사용자가 의도적으로 연 그룹이므로, 그에 대한 메시지는 불필요한 지적이 아니라 필요한 응답입니다. - 스위치를 켜도 창이 멈추지는 않습니다. 입력 길이에 대해 선형 시간으로 동작하는 엔진을 쓰기 때문에, 백트래킹 엔진이었다면 프로젝트 전체를 읽다가 응답을 멈췄을 패턴도 여기에서는 단순히 결과가 없는 패턴으로 끝납니다.
터미널
-
셸이 로그인 셸로 열립니다. 프롬프트가
bash-3.2$로 나오던 것은 눈에 띄는 증상이었을 뿐이고, 실제로 빠져 있던 것은~/.bash_profile과~/.zprofile에 정의된 별칭과 export, 버전 매니저의 shim 이었습니다. 같은 기계의 다른 터미널에는 모두 적용되어 있는 것들입니다. - 한글을 입력하는 도중에 Enter 가 동작하지 않던 문제를 고쳤습니다. 완성되지 않은 조합을 해제해 주는 타이머가 음절을 입력할 때마다 다시 시작돼서, 손을 멈추고 10초를 기다릴 때까지 Enter 입력이 계속 무시됐습니다.
- 숨겨져 있던 탭으로 돌아왔을 때 글자가 두 칸씩 세로로 접히던 문제를 고쳤습니다. 폭이 0인 동안 크기를 계산하면 2컬럼짜리 터미널이 되고, 그 상태가 그대로 유지됐습니다.
- 터미널을 닫을 때 안에서 실행 중이던 작업이 끝나기를 기다립니다. 100ms 뒤에 무조건 종료시켰기 때문에 에이전트는 자기 세션을 정리하던 도중에 끊겼고, 닫은 터미널이 다른 앱에서는 아직 실행 중인 작업으로 남았습니다.
파일 트리
- 워크트리를 오가도 펼쳐 둔 폴더가 그대로 유지됩니다. 전에는 프로젝트나 워크트리를 바꿀 때마다, 조금 전까지 보던 곳으로 되돌아올 때조차 트리가 루트까지 접혔습니다.
-
사라진 폴더를 오류 배너가 아니라 안내 메시지로 알립니다. 에이전트가
rm -rf를 실행했거나 브랜치를 전환하면서 디렉터리가 없어지면, 트리를 건드리지도 않았는데No such file or directory (os error 2)가 떴습니다. 그것도 어느 경로에서 생긴 문제인지 밝히지 않은 채로 떴습니다.
미리보기
- 탭 배경을 네 가지 중에서 고릅니다. 패널 색과 체크무늬, 밝은 배경과 어두운 배경입니다. PNG 는 그리지 않은 부분이 투명이라 탭 배경이 그 자리를 채우고, 그래서 어두운 테마에서 검은색 아이콘은 검은 사각형으로 보였습니다. 체크무늬를 고르면 어디가 투명인지까지 확인할 수 있습니다.
- 열 수 없는 파일에는 Edit 버튼이 표시되지 않습니다. 이미지와 PDF, 바이너리에서는 눌러도 UTF-8 로 읽을 수 없다는 메시지만 돌아왔는데, 결과가 오류 하나뿐인 버튼은 없는 편이 낫습니다. 눌러도 되는 동작처럼 보이게 만들기 때문입니다.
데이터베이스
-
테이블 목록이 파일 트리처럼 그려집니다.
public.users와auth.users를 한 줄씩 나열하는 방식은 디렉터리를 전체 경로로 출력하는 것과 같았습니다. 똑같은 앞부분을 마흔 번 반복하고, 정작 비교해야 할 뒷부분은 줄 끝에 붙습니다. 이제는 접고 펼 수 있고, 화살표 키로 이동할 수 있습니다. - 새로 고침이 눌렸다는 사실을 표시합니다. 목록이 곧바로 돌아오면 아무 일도 일어나지 않은 것처럼 보였습니다.
코드 지능
- 코틀린과 자바에서 호버와 자동 완성이 동작합니다. 구문 강조는 원래도 동작했고, 빠져 있던 것은 서버 목록의 항목 하나였습니다.
- JVM 언어 서버가 기동 중에 끊기지 않습니다. 핸드셰이크가 호버와 같은 10초의 제한 시간을 쓰고 있었는데, 실제로 측정해 보니 캐시가 비어 있을 때 9.72초가 걸렸습니다. 성공과 실패가 거의 반반이었던 셈이고, 실패하면 툴팁 하나가 비는 정도가 아니라 그 언어 전체에 서버가 없는 것으로 처리됐습니다.
창
- 입력란마다 뜨던 macOS 입력 소스 배지를 이 앱에서 끕니다. 파일 필터와 검색 팔레트와 커밋 입력란과 터미널이 모두 입력란이어서 거의 모든 클릭마다 배지가 떴는데, 그 내용은 방금 누른 키로 이미 알 수 있는 것이었습니다. 설정에서 되돌릴 수 있고, 적용은 다음 실행부터입니다.
- 앱 아이콘에 여백을 되돌렸습니다. 그림이 캔버스를 꽉 채우고 있어서 Finder 에서 옆의 다른 앱들보다 크게 그려졌고, 그림자가 그려질 자리도 남지 않았습니다.
- 답하지 않은 턴에 대해 한 번만 알립니다. 알림을 눌러서 확인했는데 같은 턴에 대한 알림이 또 오면, 사용자는 알림을 누르는 것이 무의미하다고 학습하게 됩니다.
- 실패 메시지를 모두 같은 카드로 통일했습니다. 한 군데만 카드였고 나머지 열여섯 군데는 빨간 한 줄이었는데, 「이것을 읽어야 한다」를 두 가지 방식으로 표시하면 그중 하나는 지나쳐도 된다고 가르치는 셈이 됩니다.
-
목록의 행이 패널 너비를 끝까지 채웁니다. 넓은 패널에서 도커 컨테이너
행은 620px 가운데 208px 에서 끝났습니다. 행이
button요소인데, 버튼의width: auto는display값과 무관하게 내용 너비에 맞춰 줄어들기 때문입니다. - 메뉴 막대 아이콘을 IDE 의 관습에 맞추고 크기를 다시 정했습니다. 대기 표시가 같은 크기 안에 들어가므로, 에이전트가 질문을 시작해도 아이콘 크기가 변하지 않습니다.
- 설정의 목록이 클릭을 통과시키던 문제를 고쳤습니다. 목록은 열리고 행에 강조 표시도 되는데 누르면 아무 일도 일어나지 않았습니다. 대화상자가 뒤쪽 요소를 누르지 못하게 막는 방식이 그 목록에까지 적용되어 있었기 때문입니다.
내 작업
- 넓은 창에서 열 하나가 통째로 비어 있던 문제를 고쳤습니다. 3열로 배치했을 때 셋째 칸이 계속 비어 있었고, 화면이 아주 넓을 때는 첫 줄이 전체 폭의 3분의 1도 채우지 못했습니다.
- 한 줄 안의 카드들이 같은 높이로 끝납니다. 아래 모서리가 들쭉날쭉하면 「이 구획은 내용이 적다」로 읽히지 않고 정렬이 어긋난 격자로 읽힙니다.
- 티켓 상세의 설명을 불러오는 동안 곧 표시될 문단의 모양을 미리 그립니다. 「읽는 중…」 한 줄 자리에 열다섯 줄이 들어오면, 그 아래에 있던 내용이 전부 한 화면씩 밀려 내려갔습니다.
1.0.3 2026-08-29
1.0.2 이후로 열다섯 개의 변경이 쌓였습니다. 대부분은 「내 작업」 패널에 대한 것이고, 나머지는 창이 무언가를 알리려다가 제대로 알리지 못하던 부분을 고친 것입니다.
내 작업 — 대시보드
- 세로로 길게 이어지던 일곱 개의 구획이 창 폭에 맞춰 열이 정해지는 카드 격자로 바뀌었습니다. 에디터 옆에 좁게 세워 두고 일곱 화면을 스크롤해야 하는 일이 없어집니다.
- 지금 상태 구획은 큐 전체를 하나의 고리 모양으로 그리고 가운데에 합계를 표시합니다. 그동안은 타일 두 개를 더해야 얻을 수 있던 수치입니다.
- 앞으로 2주 구획은 하루를 한 칸으로 나타냅니다. 기한을 목록으로만 나열하면 「다음 주는 여유가 있는가, 목요일에 다섯 건이 몰려 있는가」에 답할 수 없습니다.
- 어디서 멈춰 있나 구획은 상태와 머문 기간을 교차한 표입니다. 아무도 시작하지 않은 채 잊힌 것은 백로그로 두면 되지만, 누군가 진행 중이라고 해 놓고 멈춰 있는 것은 스탠드업에서 확인해야 할 일입니다.
- 올린 사람별 구획도 있습니다. 큐의 절반은 리뷰 요청이고, 리뷰 요청은 결국 사람에 관한 질문이기 때문입니다.
-
그래프 위에 마우스를 올리면 두 번째 층이 열립니다. 구성과 비율, 해당 티켓 이름을
문장이 아니라 행 단위로 보여 주고, 같은 내용을 모든 요소에
aria-label로도 남깁니다.
내 작업 — 티켓
- 티켓 상세가 지라 화면처럼 두 단으로 바뀌었습니다. 제목과 설명과 대화 같은 글과, 상태와 담당자와 우선순위와 날짜 같은 필드는 읽는 방식이 다르기 때문입니다.
- 댓글 스레드를 앱 안에서 읽고 쓸 수 있습니다. 설명은 두 줄뿐이고 정작 결정 사항은 댓글에 적혀 있는 것이 티켓의 흔한 모습인데, 그동안은 그 두 줄만 보여 주고 있었습니다.
- 제목과 설명과 우선순위와 라벨과 기한을 수정할 수 있고, 변경된 필드만 전송합니다. 화면에 보이는 필드를 통째로 제출하는 방식이라면, 오타 하나를 고치는 일이 그사이에 다른 사람이 수정해 둔 내용까지 되돌려 버립니다.
- 목록에 이슈 타입 표식이 붙습니다. 버그와 스토리와 작업과 에픽과 하위 작업을 구분해 표시하고, 프로젝트에서 직접 만든 타입은 이름을 그대로 두고 중립적인 표식을 씁니다.
- 「이번 스프린트」 토글이 사이클 드롭다운으로 바뀌었습니다. 이제 백로그와 지난 스프린트도 확인할 수 있습니다.
창
- 헤더 아래 메시지가 토스트와 같은 카드로 바뀌었습니다. 빨간 가로줄은 알림처럼 보이는 구석이 전혀 없어서, 방금 누른 조작이 왜 아무 동작도 하지 않았는지 알려 주는 유일한 문구를 그냥 지나치게 만들었습니다.
- 파일 표식을 언어에 맞춰 그립니다. 로고가 있는 언어는 로고로 표시하고, 없는 언어는 글자 타일로 표시합니다.
- 워크스페이스 밖에 있는 파일도 끌어다 놓으면 읽기 전용으로 열립니다.
- 긴 줄이 diff 바깥으로 삐져나오거나 나란히 보기에서 아예 잘리던 문제를 고쳤습니다.
- 한 턴이 끝나지도 않았는데 「확인 필요」 알림이 여러 번 오던 문제를 고쳤습니다.
1.0.2 2026-08-15
1.0.1 이후로 스물세 개의 변경이 쌓였습니다. 앱이 스스로 갱신하는 일이 처음으로 실제로 일어난 빌드이기도 합니다. 검증 키가 앱 안에 포함된 채로 배포되기 때문에 1.0.0 은 이 경로를 이용할 수 없었고, 1.0.1 에서 1.0.2 로 넘어오는 것이 그 첫 구간입니다.
터미널
- 한글을 조합하는 동안 입력줄 뒤에 이전 출력이 겹쳐 보이던 문제를 고쳤습니다.
- Shift+Enter 가 줄바꿈이 아니라 제출로 동작했고, Cmd+←/→ 는 아무 입력도 보내지 않았습니다. 이제 둘 다 터미널이 직접 처리합니다.
- 붙여넣기가 두 번 입력되던 문제를 고쳤습니다.
- 오른쪽 클릭하면 메뉴가 나옵니다. 복사와 모두 선택, 붙여넣기, 화면 지우기, 그룹 분할을 제공합니다.
- 스크롤백 기본값을 1MB 로 올렸습니다. 화면을 계속 다시 그리는 에이전트는 출력 바이트의 대부분을 색상과 커서 이동에 쓰기 때문에, 256KB 는 생각보다 훨씬 빨리 찼습니다.
창이 굳던 자리
- 스크롤백 다시 읽기와 붙여넣기, 리뷰 기준점 잡기처럼 창을 그리는 스레드에서 대기하고 있던 작업을 전부 다른 곳으로 옮겼습니다. 네 칸으로 지정한 배치가 세 칸으로 열리던 문제도 함께 고쳤습니다.
내 작업
- 스프린트가 추가됐습니다. 각 줄에 어느 주기의 작업인지 표시되고, 실제로 진행 중인 주기가 있을 때에만 바에 토글이 생깁니다.
- Bitbucket Cloud 가 다시 표시됩니다. 사용하던 엔드포인트를 Atlassian 이 2025-02-20 에 폐기한 뒤로, 로그인해도 404 응답만 돌아오고 있었습니다.
처음 여는 사람에게
- 처음 세 단계를 창 안에서 그대로 안내합니다. 빈 창을 앞에 두고 무엇부터 눌러야 하는지 스스로 알아내야 하는 상황을 없앴습니다.
손질
- 오른쪽 아래 알림을 다시 그렸고, 설정을 카드 단위로 묶었습니다.
- 다크 테마의 글자 색을 최저 기준이 아니라 목표 대비에 맞춰 정합니다.
- 메뉴 막대에 「업데이트 확인」이 추가됐습니다.
-
기본 알림에서
finished를 제외했습니다. 에이전트가 차례를 넘길 때 이미waiting이 전달되고, 프로세스가 사라지는 것은 한 박자 뒤에 오는 같은 소식이어서 하나의 사건을 두 번 알리고 있었기 때문입니다.
1.0.1 2026-07-18
누구나 실제로 내려받을 수 있는 첫 빌드입니다. 1.0.0 도 만들어졌고 서명과 공증까지 통과했지만, 비공개 저장소에 올라간 파일이라 토큰이 없는 사람에게는 404 응답만 돌아갔습니다.
- 다운로드 주소를 누르면 실제로 파일이 내려옵니다. 설치본은 이제 공개 저장소로 배포됩니다.
- 인앱 업데이터가 이 빌드부터 포함됩니다. 검증 키가 앱 안에 포함된 채로 배포되기 때문에 1.0.0 은 이 경로를 이용할 수 없습니다.
- 아이콘에 배경이 생겼습니다.
- 「파일로 이동」을 열면 파일 목록이 먼저 나옵니다. 아무것도 표시하지 않던 빈 화면은 텍스트 검색 쪽으로 옮겼습니다.
업데이트가 오는 길
앱이 새 버전을 직접 확인합니다. 새 버전이 있으면 창이 배너로 알려 주고, 내려받기도 재시작도 사용자가 그 버튼을 누른 다음에만 일어납니다. 앱이 임의로 내려받아 두거나 임의로 재시작하는 일은 없습니다. 메뉴 막대의 「업데이트 확인」으로 지금 바로 확인할 수도 있습니다.
- 내려받는 것은 서명된 파일 하나입니다. 검증 키는 앱 안에 포함되어 있고, 서명이 일치하지 않으면 설치하지 않습니다.
- 버전 번호는 항상 증가하는 방향으로만 바뀝니다. 잘못 배포된 빌드는 되돌리지 않고, 고쳐서 다음 번호로 내보냅니다.
- 1.0.0 을 쓰고 있다면 이 경로를 이용할 수 없습니다. 다운로드에서 새로 받아 덮어 설치하면 됩니다. 어느 버전에서든 덮어 설치는 언제나 유효한 갱신 방법입니다.
지금 쓰고 있는 버전은 메뉴 막대의 About 에서 확인할 수 있습니다. 그 번호가 이 페이지 맨 위의 번호와 같으면 최신 버전입니다.