tars Windows 설치와 macOS 데스크톱 앱 조작 도구 추가
지난 글까지는 tars를 macOS에서 Homebrew로만 설치할 수 있었다. 10월 3~4일에 v0.44.0부터 v0.46.0까지 릴리스하면서 Windows 설치 경로와 데스크톱 앱을 조작하는 도구를 넣었다. 그사이 tars로 tars 코드를 정리하다 보니 긴 턴이 중간에 멈추는 문제가 드러나서 그것도 고쳤다.
Windows 설치와 tars update
전에는 릴리스에 macOS용 서버 압축 파일만 있었고 install.sh는 Darwin이 아니면 바로 끝나서 Windows에서 쓰려면 소스에서 빌드해야 했다. #1105에서 tars_<버전>_windows_amd64.zip을 릴리스에 넣었고, v0.45.8부터 받을 수 있다.
irm https://raw.githubusercontent.com/devlikebear/tars/main/install.ps1 | iex
install.ps1은 관리자 권한 없이 %LOCALAPPDATA%\Programs\TARS에 설치하고 checksums.txt로 파일을 검증한 뒤 사용자 PATH에 폴더를 추가한다. -Desktop을 붙이면 데스크톱 앱을 같은 폴더에 함께 설치하고, -StartAtLogin을 붙이면 로그인할 때 앱을 창 없이 띄운다. 릴리스 워크플로는 windows-latest에서 Windows PowerShell 5.1로 이 스크립트를 실제로 돌려 보고, 실패하면 릴리스를 올리지 않는다.
업데이트는 tars update로 한다. 최신 릴리스에서 내 플랫폼에 맞는 압축 파일을 받아 체크섬을 확인하고, 실행 중인 파일을 .old로 옮긴 다음 새 파일을 넣는다. Windows는 실행 중인 파일을 덮어쓸 수는 없지만 이름은 바꿀 수 있어서 이 순서를 택했다. 교체가 끝나면 서버를 다시 띄우고 새 버전으로 응답하는지 확인한다. Homebrew로 설치했다면 brew upgrade를 쓰라고 안내하고 멈춘다.
Windows 데스크톱 앱은 6시간마다 업데이트를 확인한다. 진행 중인 턴이나 기다리는 승인이 있으면 재시작했을 때 그 턴이 끊겨서 서버를 재시작하지 않고 15분 뒤에 다시 시도한다.
데스크톱 앱을 조작하는 computer_use
v0.45.0(#1114)에서 computer_use 도구를 넣었다. 모델은 목표를 한 번 말하고, 그다음은 루프가 맡는다. 루프는 cua-driver(오픈소스 Cua 프로젝트의 데스크톱 조작 드라이버)로 창의 접근성 트리(앱이 운영체제에 알려 주는 버튼·글자 같은 화면 요소 목록)를 읽고, 다음에 누를 요소를 System One 서버에 물어서 실행한다. System One 서버는 문장을 만들지 않고 보기 중 하나를 확률로 고르는 판단 모델 서버로, 호스팅되는 TypeSafe Jev나 로컬 Kev-0.8B를 쓴다. 루프 안에서는 LLM을 부르지 않는다.
도구 목록이 늘지 않게 기본값은 꺼 두었고 tools.computer_use.enabled를 켜야 등록된다. 위험도가 높은 도구로 분류해서 세션 권한 모드를 따르고, Ask 모드에서는 승인을 묻고 Plan 모드에서는 거절한다. 조작하는 창의 화면 글자는 System One 서버로 가는데, 사용자가 고르지 않은 서버로 화면 내용을 보내지 않으려고 서버 주소에는 기본값을 두지 않았다. 입력값과 보안 필드 값은 보내지 않는다.
실제 cua-driver 0.32.0과 로컬 Kev-0.8B 모델로 계산기 앱을 돌려 보고 버그 두 개를 찾았다. 드라이버가 호출마다 세션을 따로 만들어서 클릭이 전부 거절됐고, 계산기 표시창처럼 읽기만 하는 글자를 루프가 못 봐서 결과가 바뀌어도 변화 없음으로 판단했다. v0.45.1(#1115)에서 세션을 하나로 묶고 화면 글자를 읽게 했고, v0.45.2(#1116)에서 쉬다가 끝난 세션을 다시 여는 처리를 넣었다. 지금은 클릭이 들어가지만 작은 모델의 확신도가 기본 기준보다 낮아서 목표를 끝까지 마친 실행은 아직 없고, 이 도구는 지금 macOS에서만 동작한다. Windows·Linux 검증과 콘솔에서 실행 기록 보기는 computer_use 설계 이슈 #973에서 후속 작업으로 남겼다.
도구 라운드 20번에서 멈추던 긴 턴
tars 세션 몇 개에 오래된 코드 정리를 맡겼는데, 모두 도구 라운드 20번 근처에서 “도구를 실행할 수 없다”며 멈췄다. 하나는 빌드가 깨진 채로 멈췄다. 알고 보니 한 턴에 도구를 돌리는 라운드 수의 기본 상한이 20이었다.
v0.46.0(#1125)에서 이 기본 상한을 200으로 올리고, 대신 도구 호출이 8번 연달아 실패하면 그 턴의 도구 사용을 끝내게 했다. 성공이 한 번 끼면 다시 센다. 멈출 때는 모델에게 어떤 제한에 걸렸고 이번 턴에만 도구가 꺼진다고 알려서, 장애 보고 대신 “여기까지 했고 이게 남았다”로 답하게 했다.
같은 정리 작업에서 v0.45.9(#1122)도 나왔다. /goal --auto <설명>처럼 목표를 정할 때 권한 모드를 같이 승인하면 목표가 끝날 때까지 그 모드로 돌고, 끝나면 원래 모드로 돌아간다. 기본으로 꺼져 있던 원격 워커, A2A, 실행 플레인은 #1124에서 지웠다. 파일 122개, 약 19,700줄이고 대부분을 tars 세션이 별도 worktree에서 처리했다.
그 밖의 변경
- 첫 실행 설정에서 이미 설치하고 로그인한 Claude Code와 Codex를 찾아서 provider와 모델을 채운다(v0.44.0, #1106).
- 가격표에 없는 모델의 사용량을
$0이 아니라 “no price”로 표시한다. 지금 쓰는 Codex 모델 대부분이 여기에 해당했다(v0.45.5~v0.45.7).
macOS는 brew upgrade devlikebear/tap/tars, Windows는 위 스크립트나 tars update로 올린다. 설치 안내는 tars.marvin-42.com에, 소스는 github.com/devlikebear/tars에 있다.