Loading...

PR 스킬 묶음 · tstack

PR을 만들고 'council'이라고만 하면, 서로 다른 회사의 AI 셋이 만족할 때까지 에이전트가 알아서 고쳐요

Claude Code나 Codex에서 PR을 만든 뒤 'council'이라고 부르면, 회사가 다른 AI 셋이 코드를 읽기만 하면서 10점 만점으로 점수를 매겨요. 내 에이전트는 지적을 고쳐 다시 검토를 받고, 라운드마다 받은 점수는 PR 설명에 표로 남아요. council은 Theo가 공개한 PR 스킬 묶음 tstack에 들어 있어요. 공개 이틀 만에 다른 개발자들이 자기 저장소에서 써서 병합까지 간 PR을 모아 봤어요. PR에 tstack이라는 이름은 없지만, 남은 점수표 형식으로 알아볼 수 있어요.

2026.10.26·사례 3

T3 Code 화면. 'Consult council to make sure this is safe. Merge it once they're happy.'라는 요청 아래 'Council: PR #31 safety (Opus) / (Muse) / (Sol) Running' 세 줄이 돌고, 에이전트가 셋이 모두 안전하다고 해야 병합하겠다고 답한 장면
Theo가 council을 처음 알린 X 글에 붙인 화면이에요. 출처: Theo Browne X

10월 23일, 구독자 57만 명의 개발 유튜버이자 T3 Code와 T3 Chat을 만든 회사의 CEO인 Theo Browne이 X에 글을 올렸어요. "I wrote a \"council\" skill that makes my agent argue with Opus 5.5, Muse Wonder Full and GPT-6.1 Sol before it is allowed to merge"(병합하기 전에 내 에이전트가 Opus 5.5, Muse Wonder Full, GPT-6.1 Sol과 먼저 다투게 만드는 council 스킬을 썼다). 10월 26일까지 조회 18만 회, 북마크 1,714개가 붙었어요. 답글에는 "Give me the council skill please"(그 스킬 주세요)와 "Have you released this council skill publicly?"(공개했나요?)가 달렸어요.

다음 날 Theo는 자기가 매일 쓰는 스킬을 tstack이라는 저장소로 공개했어요. 저장소의 별은 10월 25일 38개에서 26일 103개로 늘었어요. 그리고 공개 이틀 만에, 다른 개발자들이 자기 저장소에서 council을 돌려 병합까지 간 PR이 나왔어요.

tstack에는 PR 스킬이 9개 들어 있어요. council 말고도 CI와 리뷰 봇을 거치는 PR을 지켜보며 진짜 지적만 고치는 babysit, 사람이 병합할 수 있는 상태에서 멈추는 full stop, 아무도 지켜보지 않아도 병합까지 끌고 가는 full send가 있고, 스킬끼리 서로 불러 써요. Claude Code와 Codex에서 돌아가요.

council은 회사가 다른 AI 셋을 위원으로 앉혀요. 위원은 코드를 읽기만 하면서 10점 만점으로 점수를 매기고, 고치는 일은 내 에이전트가 맡아 셋이 만족할 때까지 다시 검토를 받아요. 검토가 거듭되는 동안 PR이 커지지 않게 막는 일도 에이전트가 하고, 라운드마다 받은 점수는 PR 설명에 표로 남아요.

Reference 01Bitwarden 보관함 백업 도구 vault-mirror를 만드는 Nikita Maximilian Grimm · GitHub

백업 도구의 오류 안내가, 무엇을 확인하고 어떤 옵션을 넘길지까지 알려 주게 바뀌었어요

PR에 tstack이라는 이름은 적혀 있지 않지만, 남은 점수표 형식이 10월 25일 tstack council에 들어온 것과 같아요. 이 PR이 고친 것은 설정이나 복구 중에 오류가 났을 때 터미널에 뜨는 안내예요. 백업 폴더가 없을 때 뜨던 오류는 이렇게 바뀌었어요.

전: error: opening backups/run.lock for recovery; copy BACKUPS_DIR to a writable directory or retain run.lock when copying backups: No such file or directory (os error 2)
후: error: no backup directory at backups; check BACKUPS_DIR or pass --env-file vault-mirror.env: No such file or directory (os error 2)

이제는 백업 폴더가 없다는 사실과 함께, 확인할 설정(BACKUPS_DIR)과 넘길 옵션(--env-file)을 바로 알려 줘요. 경고와 오류는 따로 나가게 바꿨고, 도움말은 낱말 단위로 줄을 바꾸게 고쳤어요.

위원은 Claude Opus 5.5와 GPT 6.1 Sol로 시작했고, 4라운드부터 GPT 6 Astra가 들어왔어요. 기본값인 '회사가 다른 셋'과 달리 GPT가 둘인 구성이에요. Opus의 점수는 8 → 9.5 → 10으로 올랐다가 5라운드에 8.5로 내려갔어요. Nikita가 그때 검토 범위를 터미널 화면의 품질과 문서까지 넓혔기 때문이에요. 7라운드에서 세 위원이 모든 항목에 10점을 줬어요.

반복은 약 59분 만에 끝났어요(정해 둔 한도는 150분이었어요). 위원은 읽기만 했고, 지적을 확인하고 고친 것은 리드 에이전트였어요. 테스트 256개가 실제로 돌았고, CI 23개를 통과해 10월 26일 병합됐어요.

터미널 화면 전후 비교. 위 'BEFORE Hard wrapping; no corrective action'에서는 알림 실패 경고가 줄 끝에서 잘리고, 아래 'AFTER Clear continuation and next action'에서는 'Check NOTIFY_SUCCESS_URL and the notification service.'까지 정돈돼 이어짐
알림 실패 경고예요. 전에는 줄 끝에서 잘렸고, 지금은 'Check NOTIFY_SUCCESS_URL and the notification service.'(알림 주소와 알림 서비스를 확인하세요)라는 다음 할 일까지 붙어요. PR에 붙은 그림은 터미널 출력을 다시 그린 것이에요.
도움말 화면 전후 비교. 'Safety explanations split at the edge'에서는 옵션 설명이 단어 중간에서 끊기고, 'Whole words and aligned continuations'에서는 낱말 단위로 줄이 바뀌고 이어지는 줄이 맞춰짐
도움말의 옵션 설명이에요. 단어 중간에서 끊기던 줄이 이제 낱말 단위로 바뀌고, 이어지는 줄도 맞춰져요.

Reference 02Hermes 에이전트용 iPhone 앱 hermex를 만드는 Uzair Ansar · GitHub

업데이트 뒤 멈춘 iPhone 앱 대화창을, 세 회사 AI의 다섯 라운드 검토를 거쳐 에이전트가 고쳐 냈어요

hermex는 Hermes 에이전트와 대화하는 iPhone 앱이에요. 호스트 쪽 hermes-agent가 0.22.3으로 올라간 뒤로, 호스트가 Bot Chat을 새것으로 바꾸면 앱 대화창이 "The conversation identity changed. Check this bot in Desktop."(대화 식별자가 바뀌었다. 데스크톱에서 이 봇을 확인하라)에서 멈췄어요. 이 PR로 앱은 새 Bot Chat을 따라가고, 바뀌었다는 안내를 보여 줘요.

위원은 Claude Opus 5.5, GPT-6.1 Sol, Gemini 4 Argon으로 세 회사의 모델이 모두 위원이 됐어요. 다섯 라운드 동안 Opus는 8 → 9, GPT Sol은 6 → 8, Gemini는 6.5 → 10으로 점수를 올렸어요.

점수 밖의 검증도 붙었어요. 지정한 테스트 234개가 모두 통과했고, 문자열 카탈로그의 키 2,489개를 모두 확인했어요. iPhone 17용 빌드를 실제 Hermes 호스트에 붙여 원래 되던 경로가 그대로 되는지도 봤어요. CI 6개를 통과해 10월 26일 병합됐어요.

Reference 03제작사 공식 시연 · tstack을 만든 Theo Browne이 자기 회사 제품 T3 Code에 올린 PR

코드를 쓰기 전부터 AI 셋에게 무엇을 줄일지 묻자, 스레드를 열 때 받는 데이터가 85% 줄었어요

Theo는 자기 회사 제품 T3 Code의 PR에서 코드를 쓰기 전부터 council을 불렀어요. 원문은 이 단계를 'round 0'이라고 적었고, 무엇을 줄일지를 이때 council이 정했어요. council은 스레드 본문 데이터가 스레드를 열 때 받는 양의 1~8%라고 보고, 접힌 줄을 나중에 불러오는 방식은 프로토콜을 늘릴 만큼 값어치가 없다고 판단했어요.

Theo가 밝힌 측정으로는, 실제 데이터 사본(스레드 325개)에서 스레드 7개를 열 때 받은 데이터가 합계 8,528KB에서 1,296KB로 85% 줄었어요. 하위 스레드가 71개 달린 스레드 하나는 3,046KB에서 293KB가 됐어요. 위원 셋(Claude Opus 5.5, Muse Wonder Full, GPT-6.1 Sol)의 점수는 4라운드 동안 7~8점에서 9~9.5점으로 올랐고, PR은 10월 25일 병합됐어요.

맨 위 화면은 Theo가 다른 PR(#31)에서 council을 부른 장면이에요. 요청 한 줄에 위원 셋이 동시에 검토를 시작하고, 에이전트는 셋이 모두 안전하다고 할 때만 병합하겠다고 답해요.

Theo가 맨 위 화면에서 보낸 요청

Consult council to make sure this is safe. Merge it once they're happy.

병합은 직접 하려면 마지막 문장을 빼요.

사람들의 반응

좋았다는 반응

  • “Declined as scope creep after the bar was met: recolouring Python's annotation `:` / `->` cyan to match TS.”

    기준을 넘긴 뒤에는 범위가 커지는 일이라 거절함: Python 타입 표기의 `:` / `->`를 TS에 맞춰 청록색으로 바꾸는 것.

    자기 VS Code 테마를 council 디자인 검토 4라운드로 고친 PR 본문에 남은 문장이에요.

    Abraham Prince · GitHubgithub.com
  • “Why not adding gemini with no weight in the decision just to make fun of his decision 😂”

    Gemini도 결정에는 반영하지 않고 넣어서, 그 판단을 보고 웃자는 건 어때요 😂

    Theo가 "I hate how much I like this idea."(이 아이디어가 이렇게 마음에 드는 게 싫다)라고 답하고, 자기 council에 점수를 세지 않는 손님 위원으로 Gemini를 넣었어요. 이 손님 자리는 공개된 tstack에는 없어요.

    Jonathan Delaire · Xx.com
  • “一个 AI code review 小习惯:别只让一个模型审。”

    AI 코드 리뷰 작은 습관 하나: 모델 하나에게만 검토시키지 말 것.

    Theo의 council을 소개하며 쓴 글이에요.

    zZ · Xx.com

아쉬웠다는 반응

  • “Scores are subjective overall quality within scope; they do not replace verification.”

    점수는 범위 안의 전반적인 품질을 주관적으로 매긴 것이고, 검증을 대신하지 않는다.

    council 7라운드 뒤 병합한 자기 PR에 적은 말이에요.

    Nikita Maximilian Grimm · GitHubgithub.com
  • “Claude Opus and Gemini were satisfied by round 5. GPT Sol's last two findings were left out of scope, each a multi-step edge chain”

    Claude Opus와 Gemini는 5라운드에서 만족했다. GPT Sol이 마지막에 짚은 두 가지는 범위 밖으로 남겼다. 둘 다 여러 단계를 거쳐야 생기는 경계 상황이다.

    GPT Sol은 8점에서 멈췄고, PR은 그대로 병합됐어요.

    Uzair Ansar · GitHubgithub.com
  • “Gemini Pro was not reached: its provider is disabled in T3 Code, and the council does not substitute seats.”

    Gemini Pro에는 닿지 못했다. T3 Code에서 그 회사 연결이 꺼져 있었고, council은 빈자리를 다른 모델로 채우지 않는다.

    그래서 4라운드 내내 위원이 둘뿐이었어요.

    Abraham Prince · GitHubgithub.com
  • “In your council skill, do reviewers see each other's findings, or review independently first? For multi-model reviews, we're interested in whether sequential critique catches more real bugs or just amplifies the first plausible false positive.”

    council 스킬에서 위원들은 서로의 지적을 보나요, 아니면 먼저 따로 검토하나요? 여러 모델 검토에서 차례로 비판하게 하면 진짜 버그를 더 잡는지, 아니면 처음 나온 그럴듯한 오탐을 키우기만 하는지 궁금해요.

    Nex41 · Xx.com

시작하는 법

Claude Code나 Codex에 아래 요청을 붙여 넣으면 돼요. GitHub CLI(gh)에 로그인돼 있어야 하고, 위원 셋을 모두 부르려면 다른 회사 모델을 불러 쓸 수 있는 환경(T3 Code나 각 회사 API)이 있어야 해요.

  1. 시작 요청

    https://www.working-ref.com/reference/tstack-council-2026-10 글을 읽고, https://github.com/t3dotgg/tstack 의 스킬을 이 환경에 설치해 줘. gh 로그인이 돼 있는지, council 위원으로 부를 수 있는 모델이 무엇인지 먼저 확인해서 알려 줘. 그다음 내 저장소에서 council로 해 볼 만한 일 세 가지를 제안해 줘. 내가 하나 고르면 바로 시작하고, 고를 게 없으면 지금 브랜치의 변경으로 PR을 만들어 council 검토부터 받아 줘. 병합은 내가 할 테니 병합 직전에서 멈춰 줘.

이 레퍼런스 공유하기

매주 1회 · 무료

이 레퍼런스가 도움이 되셨나요?

매주 쏟아지는 AI 소식 중 BEST
딱 3개만, 메일함에 꽂아 드릴게요

Work Smarter with AI

420명이 매주 받아보고 있어요

구독 완료 다음 호부터 메일함에서 만나요.