2026-10-26

tars 포커스 템플릿을 TARS Hub로 나누기

tars 포커스 모드는 계획, 구현, 리뷰, PR 같은 단계를 포커스 템플릿(focus-templates 폴더의 YAML 파일)에 적어 두고 그 순서대로 작업을 돌린다. 스킬, 플러그인, MCP 서버는 이미 TARS Hub(레지스트리 tars-skills)에서 찾아 설치할 수 있었는데 포커스 템플릿만 각자 워크스페이스에 손으로 만들어 넣어야 해서, 템플릿도 허브에서 같은 방식으로 나누기로 했다. 10월 25일에 레지스트리 쪽에 focus_templates 항목과 첫 템플릿 두 개(hotfix, pc_maintenance)를 넣고, tars 본체에 설치기를 붙였다. v0.66.0 릴리스 직후에 main에 머지돼서 아직 릴리스된 버전에는 들어 있지 않다.

템플릿을 허브에서 찾아 설치하기

CLI에는 tars template 명령(별칭 focus-template)을 새로 두고, 스킬 명령과 같은 모양으로 search, info, install, list, update, uninstall을 붙였다. main을 빌드해서 빈 워크스페이스에 실제 레지스트리로 돌려 본 결과다.

$ tars template search
  [email protected] (focus-template, development, hotfix)
    한두 가지 버그 수정이나 간단한 기능 추가를 빠르게 처리하기 위한 축약형 템플릿
  [email protected] (focus-template, system, maintenance, security)
    디스크 용량, 불필요한 프로세스, 보안 점검을 포함한 PC 점검 및 정리 파이프라인

2 focus template(s) found.

$ tars template install hotfix --workspace-dir /tmp/tws/ws
Installed focus template "hotfix" to /tmp/tws/ws/focus-templates

$ tars template list --workspace-dir /tmp/tws/ws
  [email protected]  (tars-hub)  focus-templates/hotfix.yaml

1 focus template(s) installed.

설치한 hotfix.yaml은 문제 파악, 빠른 수정, PR 생성, 머지 네 단계로 된 짧은 템플릿이다. 레지스트리의 템플릿 파일은 sha256으로 확인하고, 설치기는 포커스 화면이 템플릿을 읽을 때 쓰는 검사(focuspipeline.ParseTemplate)를 그대로 거쳐서 저장한다. 검사 규칙을 따로 만들지 않고 포커스 화면이 쓰던 읽기 함수에서 이 부분을 꺼내 함께 쓰게 했다.

내 템플릿은 덮어쓰지 않기

허브 템플릿과 같은 id의 템플릿을 이미 손으로 만들어 둔 경우에는 덮어쓰지 않는다. 허브가 설치하지 않은 같은 id의 템플릿이 있으면 설치를 거절하고 이름을 바꾸거나 지우라고 알려 주게 했다. hotfix.yaml의 이름만 바꿔 미리 넣어 둔 워크스페이스에서 설치하면 이렇게 멈춘다.

$ tars template install hotfix --workspace-dir /tmp/tws/ws2
Error: install focus template "hotfix": a local focus template "hotfix" already exists (focus-templates/hotfix.yaml); rename or delete it before installing it from the hub

설치한 파일의 sha256은 skillhub.json에 남겨 두고, 업데이트할 때 그 사이에 사용자가 고친 템플릿은 건너뛴다. 포커스 화면에서 허브 템플릿을 지우면 설치 목록에서도 빠진다. 콘솔에서는 확장 기능 → 허브 탭에 포커스 템플릿 구역이 생겼고, 포커스 템플릿 화면은 허브에서 온 템플릿에 표시를 달고 허브 탭으로 가는 링크를 둔다. 내가 만든 템플릿은 공유 버튼을 누르면 tars-skills에 PR로 올리는 순서(scripts/registry.py add-focus-template)를 보여 준다.

확장 기능 설치 경로 점검하기

템플릿 설치기를 붙이면서 확장 기능 전체를 실제 레지스트리로 CLI 설치를 해 보고 코드도 처음부터 끝까지 읽어 봤는데, 가장 먼저 걸린 문제는 꺼 둔 MCP 서버가 계속 돈다는 점이었다. 알고 보니 비활성 목록을 MCP 런타임이 서버를 모두 띄우고 도구 목록을 만든 뒤에 적용하고 있어서, 꺼 둔 서버가 그대로 실행되고 그 도구도 채팅에 남아 있었다. 꺼 둔 플러그인도 자기 스킬과 MCP 서버를 계속 내놓고 있었다. 비활성 목록을 먼저 읽고, 플러그인 로더가 꺼진 플러그인을 빼고, MCP 서버는 띄우기 전에 거르도록 순서를 바꿨다. 꺼 둔 스킬이나 MCP 서버가 확장 기능 화면에서 아예 사라져서 다시 켤 수 없던 것도 “꺼짐 — 로드 안 함”으로 남겨 두게 했다.

그 밖에 고친 것은 대부분 실패를 숨기던 곳이다. 콘솔에서 동시에 설치하면 skillhub.json의 행이 서로 지워질 수 있어서 잠금을 걸고 원자적으로 쓰게 했고, “모두 업데이트”는 첫 실패에서 멈추거나 MCP 서버를 빼먹던 것을 종류마다 끝까지 돌고 결과를 따로 돌려주게 했다. skillhub.json이 깨졌을 때 설치된 게 없다고 답하던 것, 허브에 닿지 못했을 때 목록만 조용히 짧아지던 것도 오류로 드러나게 바꿨다. 비대화형 셸에서는 --yes 없이 TARS Hub 스킬조차 설치할 수 없어서 에이전트나 스크립트가 log-watcher를 못 깔던 것도 외부 허브 설치에만 확인을 받도록 고쳤다.

점검하면서 찾았지만 리뷰하기 쉽게 PR을 나누려고 미뤄 둔 다섯 가지는 바로 다음 PR에서 따로 고쳤다. openclaw 스킬 중 폴더 이름과 문서 이름이 다른 것이 설치·업데이트에서 404가 나던 문제, 허브 탭에서 외부 허브 스킬을 열어도 TARS Hub에서만 내용을 읽던 문제, 외부 허브 스킬이 업데이트할 때마다 다시 설치되던 문제, 허브 스킬이 워크스페이스 스킬처럼 편집·삭제 버튼을 달고 나오던 문제, 실행 중인 서버가 tars mcp install로 새로 깐 MCP 서버를 알아채지 못하던 문제다. 외부 허브 스킬의 원본이 바뀌었을 때는 처음 설치할 때처럼 확인할 사람이 있어야 한다고 봐서, 업데이트가 직접 쓰지 않고 알리기만 하기로 했다.

확인한 것과 남은 것

PR에는 템플릿 설치·업데이트·삭제·충돌 테스트와 꺼 둔 MCP 서버·플러그인이 실행되지 않는지 보는 테스트(옛 코드에서는 실패)를 넣었고, 콘솔 단위 테스트와 e2e를 돌렸다. 한국어 워크스페이스를 띄워 브라우저에서 허브 표시, 공유 패널, 꺼 둔 스킬을 다시 켜는 흐름도 직접 눌러 봤다. 위 CLI 출력은 이 글을 쓰면서 main을 빌드해 임시 워크스페이스에서 다시 돌린 것이다. 레지스트리의 템플릿은 아직 두 개뿐이고, 이 기능은 10월 26일 기준으로 아직 릴리스 전이다.

같은 날 포커스 새 작업 화면의 목표 입력칸도 한 줄 입력에서 여러 줄 입력으로 바꿨다(v0.66.0). Enter는 줄바꿈, ⌘/Ctrl+Enter는 작업 시작이다.

이번 글에서 다룬 PR

  • tars #1306 포커스 템플릿 TARS Hub 지원과 확장 기능 점검
  • tars #1307 점검에서 미뤄 둔 허브 후속 수정
  • tars #1305 포커스 목표 여러 줄 입력
  • tars-skills #8 레지스트리에 focus_templates 추가

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