2026-09-16

장애 보고서 형식으로 쓴 tars 회고

tars는 Go 바이너리 하나로 도는 로컬 AI 에이전트 런타임이다. 2026-08-29에 저장소를 보관 처리했다가 2026-09-08에 다시 열었다. 저장소를 다시 열기까지의 과정과 보관 전 몇 달을 장애 보고서 형식으로 정리했다.

영향을 받은 사용자가 나 하나뿐이었다는 점이 가장 큰 문제였다.

요약

tars는 기능을 빠르게 늘렸지만 거의 쓰지 않았다. 2월부터 5월까지 브라우저 콘솔, 서브 에이전트, 메모리, 워치독, 야간 회고, cron, Telegram, 플러그인, 지식 베이스를 붙였고, 5월에만 태그를 208개 찍었다. 6월에는 쓰지 않게 됐고 7월에는 커밋이 없었다.

linetta에서 tars의 일부가 필요해 저장소를 다시 열었다.

영향

  • 커밋 약 1,000개와 태그 336개 대부분은 나를 포함해 아무도 매일 쓰지 않는 기능에 들어갔다.
  • 작업이 멈춘 뒤에도 두 달 동안 공개 README는 활발한 프로젝트처럼 보였다.
  • tars에 의존하는 프로젝트는 linetta 하나였다. linetta는 5월 말부터 tars의 LLM 계층을 쓰고 있었다. 보관 처리 몇 시간 전에 linetta에서 LLM 계층을 걷어 냈지만, 09-02에 다시 tars 클라이언트를 붙이면서 더 이상 고쳐지지 않는 라이브러리에 도로 묶였다.

타임라인

날짜는 모두 2026년이다.

날짜일
02-13첫 커밋. 2월 말까지 커밋 288개
02-19시작 일주일 만에 대화형 클라이언트를 3단 터미널 UI로 다시 씀. 4월에 제거
04-26지식 베이스, 내장 플러그인 시스템, vault, 브라우저 엔드포인트를 하루에 모두 제거
05-01하루에 태그 58개(v0.31.45~v0.31.102). v0.31은 패치 릴리스 180개로 끝남
05커밋 268개, 태그 208개. 가장 많이 작업한 달
05-25linetta가 tars/pkg/llm을 가져다 쓰기 시작
06-02pkg/llm이 “임베딩해서 쓰는 쪽을 위해” 모델 fetcher를 공개. linetta가 tars의 모델 목록을 쓰기 시작
06-23v0.34.3. 공백 전 마지막 릴리스
07커밋 0개
08-03v0.35.0
08-24콘솔을 채팅과 관측 기능으로 좁힘. 매일 쓰는 것보다 훨씬 넓은 화면을 유지하는 비용이 문제였다. 나머지 페이지는 지우지 않고 내비에서만 숨김
08-28공개 pkg/ API를 CI에서 검사하고 안정성 정책을 붙임
08-29linetta에서 LLM 프로바이더 계층을 걷어 내고, 몇 시간 뒤 저장소를 보관 처리. 안내문은 “로드맵이 아니라 만든 것의 기록으로 읽어 달라”
09-02linetta가 프로바이더 설정을 tars 클라이언트로 변환해 쓰기 시작
09-08linetta 버그를 tars에 올리려다 저장소가 읽기 전용인 것을 보고 보관 안내를 내림. v0.36.0에서 ChatGPT Codex 모델 경로 문제를 고치고 09-09 v0.37.1에서 마무리

채팅, 승인, 로그, 펄스, 설정 다섯 항목으로 좁힌 2026년 8월 말의 tars 콘솔

근본 원인

첫째, 만든 사람이 매일 쓰는 사용자가 아니었다. 실제로 하던 작업이 아니라 상상한 작업 흐름에 맞춰 만들었다. 하루 중 콘솔을 열 일이 없어서 어떤 기능이 중요한지 판단할 근거가 없었다. 기능마다 그럴듯해 보였고, 그 결과 쓰임새가 정해지기 전에 Telegram 페어링 같은 기능부터 붙었다.

둘째, 필요한 기능은 다른 도구가 이미 채웠다. 봄 동안 범용 코딩 에이전트와 다른 오픈소스 에이전트 런타임이 계속 좋아졌고, 내가 실제로 필요로 한 일은 그쪽에서 이미 됐다. tars가 무엇을 더 잘해야 하는지 정하지 않았다.

기여 요인

태그 수를 진척으로 착각했다. 한 달에 태그 208개를 찍으니 일이 잘되는 것처럼 느껴졌다. 태그는 명령 한 줄이면 찍히고, 누가 그 버전을 실제로 썼는지는 알려 주지 않는다.

한 가지 흐름을 완성하기 전에 기능을 넓혔다. Pulse, Reflection, cron, 메모리 검토, 서브 에이전트, 채널은 하나씩 보면 이유가 있었다. 한데 모아 놓으니 전체를 파악하기도 어려웠고 실제로 쓰기는 더 어려웠다. 4월에 기능을 걷어 낸 판단은 맞았지만 한 번으로 끝났다.

멈출 시점을 알려 주는 장치가 없었다. 저장소에서 실제 사용 여부를 확인할 방법이 없었다. 6월과 7월의 공백이 그 신호였는데 두 달 늦게 알아챘다.

잘된 점

  • LLM 계층은 쓸 만했다. 프로바이더 클라이언트와 모델 목록을 linetta가 라이브러리로 가져다 썼다.
  • 보관 전 마지막 한 달은 필요한 일을 했다. 콘솔을 좁히고, 패키지를 pkg/로 옮기고, 공개 API를 검사해서 다른 프로그램이 의존할 수 있게 만들었다.
  • 보관 안내는 사실대로 썼다. 마지막 릴리스, 그 뒤 main에 더 들어간 것, 앞으로 하지 않을 것을 적었다.

바꾼 것

tars를 다시 연 이유는 linetta가 제대로 동작하려면 tars가 필요했기 때문이다. linetta에서 모델 목록 새로고침 버그를 찾아 tars에 이슈를 올리려는데 저장소가 읽기 전용이었고, 10분 뒤 보관 안내를 내렸다. 재시작 후 첫 수정은 그 문제였고, 이틀 동안 릴리스 세 개로 나갔다.

앞으로는 이렇게 한다.

  • 라이브러리를 먼저 챙긴다. pkg/llm과 다른 공개 패키지가 제품이고, 무엇을 고칠지는 linetta의 필요로 정한다.
  • 콘솔은 좁게 둔다. 채팅과 관측 기능만 둔다. 숨긴 페이지는 URL로 자주 찾게 될 때 다시 연다.
  • 태그는 커밋할 때가 아니라 사용자에게 무언가 배포할 때 찍는다.

2026-10-08 덧붙임: 콘솔을 좁게 두는 결정은 일주일 뒤에 뒤집었다. 이유와 바뀐 콘솔은 tars 콘솔 디자인에서 AI 느낌 빼기에 정리했다.

처음 시작할 때 정할 것

내일 아침 tars를 열 이유 하나를 정하고 그것부터 만든다. 그 이유를 말할 수 없으면 아직 도구를 만드는 단계가 아니다.

같은 작업대에서 나온 이웃 도구입니다.