tars에 턴 체크포인트와 Changes 패널 추가
tars는 브라우저 콘솔이 있는 로컬 AI 에이전트 런타임이다. 2026-09-27에 변경 리뷰 루프의 첫 부분을 main에 머지해서 채팅 턴이 어떤 파일을 바꿨는지 대화를 떠나지 않고 볼 수 있게 됐다.
가장 까다로운 건 claude-code-cli였다. 도구 호출이 Claude Code CLI 프로세스 안에서 돌기 때문에 tars는 edit_file이나 write_file 이벤트를 보지 못한다. 그래서 어느 provider에서나 통하는 방법으로 턴마다 세션 폴더를 스냅숏으로 남기기로 했다. 이 경로와 그 위의 읽기 전용 화면을 PR 다섯 개(#990~#994)로 나눠 넣었다.
섀도 체크포인트
tars는 채팅 턴 전후로 작업 폴더 루트를 워크스페이스 아래의 섀도 저장소에 기록하고 ref를 refs/tars/checkpoints/<session>/<turn>/{start,end}에 둔다. 사용자의 .git에는 index, stash, HEAD, objects, hooks 어느 것도 쓰지 않는다. 필터와 줄바꿈 변환을 꺼서 스냅숏에는 디스크에 있는 바이트가 그대로 담긴다.
파일을 고친 턴은 스트림에 checkpoint 이벤트를 보낸다. diff는 이번 턴, 지금까지의 세션, 이번 턴 시작 이후의 세 범위로 볼 수 있고 세션마다 최근 50턴을 보관한다. 파일이 2만 개쯤 되거나 512MiB를 넘는 폴더, 16MiB를 넘는 파일은 건너뛰는데, 이때 채팅을 멈추지 않고 건너뛴 이유를 턴에 남긴다. 세션의 cwd가 tars 워크스페이스 자체일 때는 대화 기록과 로그가 턴마다 바뀌어서 체크포인트를 남기지 않는다.
콘솔
파일을 바꾼 턴에는 마지막 메시지 아래에 카드가 붙는다. 접으면 3 files +6 −2 한 줄이고 펼치면 파일별 diff가 나온다. Open in Changes를 누르면 그 턴의 도크 패널로 간다. Changes 패널은 레일의 ±나 명령 팔레트에서 열고, 최근 턴부터 나열해서 이번 턴과 지금까지의 세션을 오가며 볼 수 있다. diff는 Git Inspector와 같은 DiffView로 unified나 split 형태로 보여 준다.
리뷰 루프에 필요했던 CLI 수정
claude-code-cli 버그 두 개가 리뷰 루프를 막고 있었다. 채팅 턴이 upstream 세션을 저장하지 않아서 두 번째 턴이 --resume으로 이어지지 못했는데, 이제는 저장한다. CLI도 세션의 cwd에서 실행하게 바꿔 프로젝트의 CLAUDE.md, 설정, MCP 구성이 적용되고 체크포인트가 그 편집을 볼 수 있게 했다. 한 번만 부르는 호출은 그대로 --no-session-persistence를 쓴다.
남은 것
되돌리기와 hunk 댓글은 아직 #969에 열려 있다. 새 태그는 없고 최신 릴리스는 v0.37.1이다. 체크포인트와 Changes 작업은 main에 있다. tars.marvin-42.com에서 빌드를 설치하거나 github.com/devlikebear/tars에서 소스를 받는다.
2026-10-02 덧붙임: 되돌리기는 v0.38.0에 들어갔다. 이후 작업은 tars에 데스크톱 앱과 포커스 모드 추가에 정리했다.