TrendShift 딥다이브 · 2026-07-02

Council of High Intelligence 딥다이브
— "18명의 위인을 소집해 당신의 어려운 결정을 토론시키는" AI 스킬

Council of High Intelligence(고등지성 위원회)는 아리스토텔레스·소크라테스·파인만·토르발스·카너먼 같은 18명의 사상가 페르소나를 AI 에이전트로 만들어, 하나의 어려운 질문을 여러 라운드에 걸쳐 서로 토론시키고 판결(verdict)을 뽑아 주는 Claude Code / Codex / Gemini CLI용 스킬이다. /council 우리 에이전트 프레임워크를 오픈소스로 공개해야 할까? 한 줄이면, 여러 페르소나가 각자 독립 분석 → 익명 교차검증 → 최종 입장 → 의장(Chairman)의 종합이라는 구조화된 토론을 자동으로 돌린다. 놀라운 점은 이 정교한 시스템이 컴파일된 프로그램이 아니라 100% 셸 스크립트 + 마크다운이라는 것 — 즉 "프롬프트와 에이전트 정의를 얹은 지침 묶음"이다. (저장소: 0xNyk/council-of-high-intelligence · MIT 라이선스 · v1.1.0 · Shell 100% · ★약 978 · TrendShift Weekly 24위)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 하드웨어 / 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

이 저장소가 대체 무엇인가.

핵심 메시지

"혼자 물으면 자신감 있게 틀린 답이 온다. 위원회는 대신 '구조화된 불일치'를 준다." — 어려운 결정을 18명의 서로 다른 지성이 라운드제로 논쟁하고, 별개의 의장이 판결로 정리해 준다.

LLM에게 어려운 질문을 던지면 대개 매끄럽고, 구조적이고, 확신에 찬 — 그리고 틀린 답이 돌아온다. 하나의 모델은 하나의 추론 경로를 "자신감"으로 포장할 뿐이기 때문이다. Council은 이 문제를 정면으로 공격한다. 소크라테스가 전제를 부수고, 파인만이 밑바닥부터 다시 쌓고, 카너먼이 "네 사고 자체가 첫 번째 오류"라고 지적하도록, 일부러 충돌하는 관점들을 붙여 토론시킨다.

비유하면: 당신 = CEO, Council = 이사회(board). 자문 한 명에게 묻는 것과, 서로 다른 지적 전통을 가진 이사 3~18명을 소집해 서로의 주장을 반박하게 하고 그 결과를 종합받는 것의 차이다.

README의 한 문장 자기소개는 이렇다: "18 AI personas deliberate your hardest decisions across multiple LLM providers. One command: /council." 여기서 핵심 단어는 "deliberate(숙의하다)""multiple LLM providers(여러 LLM 공급자)"다. 이 스킬은 그냥 여러 프롬프트를 이어 붙인 게 아니라, 서로 다른 회사의 모델(Claude·GPT·Gemini·로컬 Ollama)을 섞어 "진짜로 다른 사고"를 만들어 내려 한다.

용어
Deliberation (숙의 · 熟議)
단순한 "회의"가 아니라 정해진 절차에 따라 여러 입장을 충분히 검토하고 반박한 뒤 결론에 이르는 과정을 뜻한다. 배심원단이 평결에 이르는 과정, 헌법재판관들이 판결을 내리는 과정이 대표적이다. Council은 이 절차를 소프트웨어로 옮겼다 — 라운드 순서, 발언 분량 제한, 반대 의견 의무화까지 전부 규칙으로 정해 두고 AI들에게 지키게 한다.

Council이 지원하는 토론 방식은 세 가지다: Full Mode(3라운드 정식 심의 — 독립 분석 → 교차검증 → 최종 결정), Quick Mode(2라운드 빠른 분석, 교차검증 생략), Duo Mode(폴라리티 페어 2명의 변증법적 대결). 그리고 결과물은 언제나 "Council Verdict(위원회 판결)"라는 구조화된 마크다운 문서 — 합의된 결론뿐 아니라 미해결 질문·소수 의견·반증 조건까지 담는다.

2왜 주목받는가

"LLM 위원회(llm-council)" 패턴의 유행 · 논문으로 뒷받침한 동조 편향 방지 · "모르는 것을 먼저 말하는" 판결 철학 · 멀티 프로바이더 다양성.

Council이 TrendShift 상위권에 오른 배경에는 2026년 상반기의 두 흐름이 겹친다. 하나는 "Claude Skills 생태계"의 폭발(Daily/Weekly 상위 목록에 #AI skills·#AI agent 토픽이 도배됨), 다른 하나는 Andrej Karpathy가 공개해 화제가 된 "llm-council" — 여러 모델을 패널로 앉히고 별도 의장 모델이 종합하게 하는 패턴이다. Council은 이 아이디어를 "역사 속 위인 18명의 인격"이라는 친근한 껍데기에 담아 대중화했다.

단순 멀티에이전트와 무엇이 다른가

방식한계Council의 차별점
단일 LLM 프롬프트한 모델의 확신에 찬 추측 하나3~18개 독립 분석을 서로 반박시킴
"전문가 5명인 척" 롤플레이같은 모델이 목소리만 바꿈(코스튬)폴라리티 페어를 다른 회사 모델에 분산 → 진짜 다른 추론
단순 다수결 멀티에이전트서로 동의하며 groupthink에 빠짐반대 의견 할당량·익명화·반동조 지시로 강제 이견
Karpathy llm-council연구용 스크립트(직접 코딩)한 줄 /council로 쓰는 설치형 스킬 + 판결 템플릿
핵심 차별점 ① — "동조하지 마라"를 논문으로 설계했다
Round 2 익명화 + 반동조 지시

여러 AI가 토론하면 나중에 말하는 쪽이 앞사람 눈치를 보며 동의해 버리는 "동조 편향"이 생긴다. Council은 2라운드(교차검증)에서 발언자 이름을 가려 Member A·B·C로 익명화하고, "네가 1라운드에서 옳았다면 방어하라. 여러 명이 반대한다는 이유만으로 입장을 바꾸지 마라 — 바꾸려면 반드시 구체적 결함을 지목하라"고 지시한다. 저장소는 이 설계의 근거로 실제 논문(Choi et al., arXiv:2510.07517, ICLR 2026 / Free-MAD, arXiv:2509.11035)을 주석으로 인용한다. 프롬프트 엔지니어링을 "감"이 아니라 "증거"로 하는 태도다.

실전에서 반가운 철학 — "모르는 것을 먼저 말하는" 판결
Verdict가 Unresolved Questions로 시작한다

대부분의 AI 답변은 "결론부터 자신 있게" 말한다. Council의 판결 템플릿은 정반대다 — 가장 먼저 "위원회가 답하지 못한 것(Unresolved Questions)"을 적고, 이어서 Kill Criteria(이 결정을 뒤집을 관찰 가능한 조건), Concrete Next Step("검토한다/탐색한다" 같은 말 금지 — 산출물을 내는 동사만), Minority Report(소수 의견)를 담는다. "합의처럼 들리는 것"보다 "무엇을 모르는지"가 더 중요하다는 설계 철학이다.

기대치 조정 — 별 978개지만 신생 · 비용 · 문서 불일치
"멋진 아이디어"와 "성숙한 도구" 사이

이 저장소는 커밋 약 30개, v1.1.0의 초기 프로젝트다. 주의할 현실이 셋 있다. ⑴ 비용: Full 모드는 18명 × 3라운드 = 수십 번의 LLM 호출이라 토큰(=돈)이 폭발할 수 있다. ⑵ 라이선스 표기 불일치: LICENSE 파일은 MIT인데 README 배지·설명은 CC0(퍼블릭 도메인)라고 적혀 있다 — 실제 파일 기준으론 MIT. ⑶ 문서 버그: README와 표는 "18명"인데, SKILL.mdclassic 프로필 설명엔 "All 11 members"라는 옛 흔적이 남아 있다(11명 → 18명으로 늘던 시절의 잔재). 쓰기 전에 알아 두면 좋은 티끌들이다.

3기술 스택 전체 지도

"프로그램"이 아니라 "지침 묶음" — (A) 조율자를 조종하는 마크다운 두뇌, (B) 18개 페르소나 정의, (C) 프로바이더를 감지·호출하는 셸 배관.

Council을 이해하는 열쇠는 "실행되는 코드가 거의 없다"는 걸 받아들이는 것이다. GitHub이 알려 주는 언어 비율은 Shell 100%. 나머지는 전부 마크다운(.md)과 YAML이다. 즉 이 저장소의 알맹이는 알고리즘이 아니라 "AI에게 내리는 지시문"이다.

구성요소기술 / 형식역할
조율자 두뇌Markdown (SKILL.md, 887줄)토론 전체를 지휘하는 "코디네이터 프롬프트". STEP 0~8 절차·라우팅·판결 템플릿이 전부 여기 있다
페르소나 정의Markdown + YAML frontmatter (agents/council-*.md × 18)각 위인의 정체성·분석법·출력 형식 + 폴라리티·트라이어드·프로바이더 친화도 메타데이터
설치기Bash (install.sh, 340줄)18개 에이전트와 스킬을 ~/.claude·~/.codex·~/.gemini에 복사. dry-run·경로 커스터마이즈 지원
프로바이더 감지Bash (scripts/detect-providers.sh)codex·gemini·ollama·cursor-agent 바이너리와 NVIDIA_API_KEY를 탐지해 JSON으로 출력
라우팅 설정YAML (configs/*.yaml)프로바이더별 모델 등급(high/mid) 기본값, 의장 기본값, 좌석별 모델 수동 매핑 예제
타 CLI 이식본SKILL.codex.md · SKILL.gemini.mdCodex/Gemini CLI용으로 다시 쓴 조율자 지침(같은 프로토콜, 다른 실행 방식)
검증 도구Bash (scripts/council-simulation-checklist.sh)설치가 제대로 됐는지 시뮬레이션 점검
CIGitHub Actions (shellcheck + markdownlint)셸·마크다운 린트, 태그 푸시 시 tarball 릴리스 + CHANGELOG 릴리스노트 자동화
한눈에

"코드가 일하는" 게 아니라 "AI가 지시서를 읽고 일한다". 이 저장소는 오케스트라 지휘자의 악보에 가깝다. 악보(SKILL.md) 자체는 소리를 내지 않지만, 그걸 읽는 연주자(Claude·GPT·Gemini)가 정확히 언제·어떻게 연주할지를 마디 단위로 지정한다. 셸 스크립트는 "어떤 연주자가 와 있는지 점검하고 무대에 세우는" 무대감독 역할일 뿐이다.

6가지 실행 경로(exec_method) — "누가 이 좌석을 연주하나"

Council의 진짜 기술적 야심은 "한 회사 모델에 갇히지 않는" 멀티 프로바이더 추상화에 있다. 각 위원(좌석)은 감지된 공급자에 따라 여섯 가지 방식 중 하나로 호출된다.

exec_method공급자호출 방식
subagentAnthropic (Claude)Claude Code 서브에이전트로 직접 소환(항상 사용 가능)
codex_execOpenAIcodex exec -c model=... "프롬프트" 셸 실행, 60초 제한
gemini_cliGooglegemini -m ... -p "프롬프트" 셸 실행
ollama_run로컬(Ollama)ollama run ... — 로컬 모델이라 120초로 여유
cursor_cliCursor(집계기)cursor-agent -p --mode ask 읽기전용 실행. GPT·Claude·Gemini·Grok을 한 바이너리로
openai_compatible_apiNVIDIA NIM 등curl/chat/completions 직접 호출. Together·Fireworks·vLLM도 같은 경로

주목할 점은 어떤 공급자도 없으면(=Claude만 있으면) 그냥 Claude 서브에이전트로만 돌아간다는 것이다. 외부 CLI가 하나도 깔려 있지 않아도 기능이 죽지 않는다. 이것이 "있으면 더 좋고, 없어도 동작하는" 우아한 설계다 — 4번 섹션에서 이 폴백(fallback) 메커니즘을 자세히 본다.

4아키텍처 심화 분석

조율자와 의장의 분리 · 블라인드-퍼스트 1라운드 · 익명화된 2라운드 · 강제 스캔(반대 할당량·참신성 게이트) · 1.5× 도메인 가중 좌석 · 2/3 가중 합의.

4-1. 전체 파이프라인 — 질문에서 판결까지 (Full 모드 9단계)

Full 모드의 코디네이터는 SKILL.md에 적힌 STEP 0~8을 순서대로, 절대 건너뛰지 않고 실행한다. 핵심은 "토론하는 위원"과 "종합하는 의장"이 서로 다른 역할·다른 모델이라는 점이다.

[사용자] /council --triad strategy 프레임워크를 오픈소스로 공개할까? │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 코디네이터 (Coordinator) — SKILL.md 지침대로 지휘만 함 │ │ │ │ STEP 0 패널 선정 + 도메인 가중 좌석(1.5×) 미리 잠금 │ │ STEP 1 프로바이더 감지 → 라우팅 (polarity 분리·spread) │ │ STEP 1.5 문제 재진술 게이트 (각자 질문을 다시 정의) │ │ STEP 1.7 의장(Chairman) 선정 — 패널에 없는 최고등급 모델 │ │ STEP 2 Round 1: 독립 분석 ── 병렬·블라인드(남 답 안 봄) │ │ STEP 3 Round 2: 교차검증 ── 익명화(Member A/B/C) + 반동조 │ │ STEP 4 강제 스캔: 반대할당량·참신성·70%합의·반복금지 │ │ STEP 5 Round 3: 최종 결정 ── 각자 STANCE: 한 줄 방출 │ │ STEP 6 가중 집계 → 2/3 넘으면 합의, 아니면 사용자에 escalate │ └───────────────┬─────────────────────────────────────────────┘ │ 전체 토론 기록 (이름 복원됨) ▼ ┌─────────────────────────────────────────────────────────────┐ │ STEP 7 의장이 판결 종합 (토론엔 불참 — 감사자 역할) │ │ → Council Verdict: 미해결질문·반증조건·다음행동·소수의견 │ │ STEP 8 세션 메타데이터 부착 (schema_version:1) │ └─────────────────────────────────────────────────────────────┘
용어
Coordinator vs Chairman (조율자 vs 의장)
조율자는 토론을 "진행"만 한다 — 누굴 부를지 정하고, 라운드를 돌리고, 규칙 위반을 잡는다. 스스로 의견을 내지 않는다. 의장은 마지막에 딱 한 번, 전체 토론을 읽고 판결로 종합하는 별도 역할이다. 결정적으로 의장은 토론에 참여한 위원이면 안 된다(자기가 낸 의견을 자기가 감사하면 안 되니까). 가능하면 패널에 없는 회사의 모델을 의장으로 앉힌다. 이 "심의자 ≠ 종합자" 분리가 Karpathy llm-council·Perplexity Model Council 패턴의 핵심이다.

4-2. Round 1 — "블라인드 퍼스트": 남의 답을 보기 전에 혼자 생각하라

1라운드는 모든 위원을 병렬로, 서로의 답을 못 본 상태(blind-first)에서 독립 분석시킨다. 이유는 명확하다 — 처음부터 남의 답을 보여 주면 첫 발언자에게 끌려가는 앵커링이 생긴다. 각자 400단어 안에서 자기 렌즈로만 분석하고, "다른 사람이 뭐라 할지 예상하지 말라"는 지시를 받는다.

그 앞에 STEP 1.5 문제 재진술 게이트가 있다. 분석 전에 모든 위원이 질문을 자기 말로 다시 정의하게 한다. 만약 3명이 질문을 서로 다르게 이해했다면? 그 질문 자체가 잘못된 것이라는 신호다. "틀린 질문에 라운드를 낭비하기 전에" 걸러 내는 장치다.

4-3. Round 2 — 익명화 교차검증: 이 저장소의 백미

2라운드에서 위원들은 서로의 1라운드 답을 보고 반박한다. 그런데 누가 쓴 답인지 이름을 가린다. 코디네이터는 답변 머리말을 Member A, Member B…로 바꾸고, 본문의 "As Socrates, I…" 같은 자기 정체 노출까지 지운다.

왜 이름을 가리나 — 사회적 신호 차단
"소크라테스가 말했으니 맞겠지"를 막는다

이름이 보이면 사람도 AI도 권위·다수라는 사회적 신호에 휩쓸린다. 익명화하면 오직 논증의 질로만 판단하게 된다. 여기에 반동조 지시(anti-conformity directive)가 더해진다: "여러 명이 동의한다고, 합의가 형성된다고 입장을 바꾸지 마라. 바꾸려면 네 이전 논증의 어떤 결함 때문인지 이름을 대라. 결함을 짚지 못하면 바꾸지 마라." 이 두 장치의 근거로 실제 학술 논문을 인용한다는 점이 이 프로젝트의 진지함을 보여 준다.

# Round 2 프롬프트의 핵심 지시 (요약)
Identity is masked. 아래 분석들은 Member A, B, C… 로 표시된다.
그중 하나는 네 1라운드 답이다(익명 처리됨). 누가 썼는지 맞히려 하지 말고,
오직 논증의 질로만 평가하라. 실명을 부르지 말고 라벨을 써라.

Anti-conformity. 네 1라운드 입장이 옳았다면 방어하라.
동료가 반대한다는 이유만으로 바꾸지 마라. 바꾸려면 구체적 결함을 지목하라 —
결함을 이름 대지 못하면, 바꾸지 말아야 한다.

라운드가 끝나면 코디네이터는 라벨↔실명 매핑을 복원한다. 토론 기록은 두 벌로 보관된다 — 위원들이 본 "익명본"과, 의장이 감사할 "실명 복원본". 정직한 감사(audit)를 위한 설계다.

4-4. STEP 4 — 강제 스캔: "동의만 하는 회의"를 기계로 막는다

멀티에이전트의 최대 실패 모드는 groupthink(집단사고 — 다들 사이좋게 동의하다 틀림)다. Council은 2라운드 출력에 네 가지 검사를 한 번에 돌린다.

검사발동 조건 → 대응
반대 할당량
(Dissent quota)
겹치지 않는 반론이 2명 미만 → "다수 입장의 가장 강한 반박을 150단어로 대라"고 되돌려 보냄
참신성 게이트
(Novelty gate)
1라운드를 앵무새처럼 반복 → "특정 위원의 도전에 직접 답하라. 무엇이 바뀌나?"
합의 점검
(Agreement check)
70% 넘게 조기 동의 → 가장 이견 낼 만한 2명에게 "합의가 틀렸다고 가정하라"는 반사실 프롬프트
반복 금지
(Anti-recursion)
소크라테스가 답 나온 질문을 또 물음 → "hemlock(독배) 규칙"으로 50단어 입장 강제. 한 쌍이 2번 넘게 주고받으면 컷
비유

토론 심판이 규칙을 기계적으로 집행하는 것과 같다. "지금 다들 너무 빨리 동의했으니, 두 분은 반대편을 대변해 보세요", "소크라테스님, 방금 그 질문은 이미 답이 나왔으니 이제 입장을 밝히세요" — 사회자가 직접 개입해 토론이 편하게 흐르는 걸 막는다. 편한 합의보다 불편한 이견이 결정의 질을 높인다는 믿음이다.

4-5. 도메인 가중 좌석(1.5×) — "표를 보기 전에" 잠근다

최종 집계에서 모든 위원은 1표(가중치 1.0)를 갖지만, 문제와 가장 직결된 전문가 1명은 1.5배를 받는다. 예: 아키텍처 질문이면 형식체계 담당 Ada가 1.5×. 그런데 핵심은 이 가중 좌석을 STEP 0(패널 선정)에서, 즉 아무 의견도 나오기 전에 미리 정해 못박는다는 것이다.

배울 점 — "심판이 결과를 못 흔들게" 하는 순서 설계
투표 뒤에 가중치를 정하면 조율자가 결과를 조작할 수 있다

만약 표를 다 본 뒤에 "누구에게 1.5배를 줄까"를 정한다면, 코디네이터는 원하는 결론이 이기도록 좌석을 고를 수 있다. 그래서 Council은 좌석을 먼저 잠근다. 이건 소프트웨어 설계에서 "결정 순서 자체가 공정성을 만든다"는 좋은 사례다 — 규칙을 언제 확정하느냐가 규칙 내용만큼 중요하다. (v1.1 이후 changelog에 "이전엔 tie-break 시점에 골랐는데 그게 nudge를 허용해서 앞당겼다"고 명시돼 있다.)

4-6. STANCE 라인 + 2/3 가중 합의 — "분위기"가 아니라 "표"로 센다

마지막 라운드에서 각 위원은 산문 뒤에 기계가 읽을 수 있는 한 줄을 반드시 붙인다:

STANCE: 오픈소스 공개 | CONFIDENCE: high | DEALBREAKER: no

코디네이터는 이 라인만 모아 같은 뜻의 라벨을 하나로 정규화(monorepo/single repo → monorepo)한 뒤 가중 집계한다. 합의 기준은 명확한 수식이다: 어떤 옵션의 가중합 ≥ (2/3) × 전체 가중합. 넘으면 그 옵션이 판결, 아무 옵션도 못 넘으면 억지 합의를 만들지 않고 "합의 없음 — 사용자가 결정"으로 넘긴다. DEALBREAKER: yes(상대 옵션이 적극적으로 해롭다)를 낸 소수는 져도 소수 의견(Minority Report)에 남는다.

4-7. 멀티 프로바이더 라우팅 + 폴백

프로바이더가 2개 이상 감지되면 라우팅 알고리즘이 순서대로 적용된다: ⑴ 폴라리티 페어 분리(하드 제약 — 소크라테스와 파인만은 반드시 다른 회사 모델에 배치해 "같은 편향"을 피함), ⑵ 프로바이더 고르게 분산, ⑶ 프론트matter의 provider_affinity로 선호 조정, ⑷ opus급 위원은 각 공급자의 high 등급, sonnet급은 mid 등급 모델. 그리고 어떤 외부 호출이 실패/타임아웃하면 [FALLBACK] 로그를 남기고 그 위원을 Claude 서브에이전트로 재실행한다 — 이후 라운드도 폴백 공급자를 계속 쓴다. 자격증명은 api_key_env가 가리키는 환경변수에서 실행 시점에만 읽고, 로그·기록엔 절대 남기지 않는다.

5디렉토리 구조 해부

알맹이는 딱 세 곳 — SKILL.md(두뇌), agents/(18개 인격), scripts/+configs/(배관).

council-of-high-intelligence/ (저장소 루트) ├── SKILL.md (887줄) ★★★ 조율자 두뇌 — 토론 프로토콜 전체 ├── SKILL.codex.md (243줄) ← Codex CLI용 이식본 ├── SKILL.gemini.md ← Gemini CLI용 이식본 ├── install.sh (340줄) ★ 설치기 (claude/codex/gemini 대상) │ ├── agents/ ★★★ 18개 위원 페르소나 (각 .md) │ ├── council-aristotle.md 분류·구조 (opus) │ ├── council-socrates.md 전제 파괴 (opus) │ ├── council-feynman.md 1원리 디버깅 (sonnet) │ ├── council-torvalds.md 실용 엔지니어링 (sonnet) │ ├── council-kahneman.md 인지 편향 (opus) │ ├── council-karpathy.md · council-sutskever.md ML·AI안전 │ └── … (총 18개: munger·taleb·rams·meadows·machiavelli 등) │ ├── scripts/ │ ├── detect-providers.sh ★ 공급자 감지 → JSON 출력 │ └── council-simulation-checklist.sh 설치 검증 │ ├── configs/ │ ├── auto-route-defaults.yaml 공급자별 모델 등급 + 의장 기본값 │ ├── provider-model-slots.example.yaml 좌석 수동 매핑 예제 │ ├── provider-model-slots.nim.example.yaml NVIDIA NIM용 │ └── provider-model-slots.cursor.example.yaml Cursor용 │ ├── demos/ session-pack.md · verdict-template.md (판결 예시) ├── configs/CLAUDE.md · CHANGELOG.md · CONTRIBUTING.md ├── .github/workflows/ lint.yml · release.yml shellcheck+markdownlint └── LICENSE (MIT) · assets/header.jpeg

핵심 파일 3종만 기억하자

① SKILL.md — 토론 규칙집 그 자체

887줄짜리 이 파일이 제품의 90%다. STEP 0~8 절차, 6가지 실행 경로별 호출 명령, 강제 스캔 규칙, 그리고 Full/Quick/Duo 세 모드의 판결 템플릿이 전부 여기 있다. 코드가 아니라 "이런 순서로, 이런 제약을 지켜 토론을 진행하라"는 자연어 프로그램이다. LLM 시대의 소프트웨어가 어떻게 생겼는지 보여 주는 표본.

② agents/council-*.md — 18개의 "인격 카드"

각 파일은 YAML frontmatter(메타데이터) + 마크다운 본문 구조다. frontmatter엔 model(opus/sonnet), polarity_pairs(누구와 짝인가), triads(어떤 도메인에 소집), provider_affinity(선호 공급자)가 담기고, 본문엔 Identity(정체성)·Grounding Protocol(자기검열 규칙)·Analytical Method·Output Format이 있다. 예를 들어 파인만 카드엔 "'당연히…'라고 말하려는 자신을 잡아라. 비유는 분석당 최대 2개" 같은 캐릭터별 제약이 박혀 있다.

③ scripts/detect-providers.sh — "누가 와 있나" 점검기

codex·gemini·ollama·cursor-agent 바이너리가 있는지 command -v로 확인하고, NVIDIA_API_KEYnvapi-로 시작하는 진짜 키인지까지 검사해 구조화된 JSON을 뱉는다. macOS엔 timeout이 없어서 perl로 타임아웃을 직접 구현한 디테일이 인상적 — "의존성 없이 이식성 챙기기"의 교본이다.

6학습 포인트 (기술별)

이 작은 저장소에 멀티에이전트 설계·프롬프트 엔지니어링·프로바이더 추상화·인지과학·셸 패키징이 압축돼 있다.

① 멀티에이전트 심의 설계 — groupthink를 "메커니즘"으로 막기

여러 AI를 그냥 모아 놓으면 서로 동의하다 끝난다. Council은 블라인드 1라운드 → 익명 2라운드 → 반대 할당량 → 반사실 프롬프트라는 구체적 장치로 이견을 강제 생산한다. 실습 아이디어: 3개 서브에이전트에게 같은 질문을 주되, 하나는 "동의만", 하나는 "무조건 반대", 하나는 "중재"로 역할을 나눠 결과 차이를 관찰해 보자.

② 프롬프트 엔지니어링 — "출력 형식 계약"과 페르소나 카드

각 에이전트 파일의 Output Format 섹션은 단순 요청이 아니라 Claude와 맺는 계약이다. "Round 2에선 이 4개 헤더로, 300단어 이내로, 반드시 2명을 지목해"처럼 구조·분량·행동을 못박는다. 실습: 여러분만의 페르소나 카드(예: "냉정한 QA 엔지니어")를 frontmatter+Identity+Output Format 구조로 써 보자.

③ 구조화된 출력 → 결정론적 집계

LLM의 산문에서 "결론"을 추출하는 건 불안정하다. Council은 STANCE: … | CONFIDENCE: … | DEALBREAKER: …라는 기계 파싱 가능한 한 줄을 강제해, 판결을 "분위기"가 아니라 셈할 수 있는 표로 만든다. 실습: 자유서술 답변 끝에 SCORE: 1-5 라인을 붙이게 하고, 그 라인만 정규식으로 뽑아 평균 내는 스크립트를 짜 보자.

④ LLM 프로바이더 추상화 — 한 회사에 갇히지 않기

exec_method라는 개념으로 subagent·codex·gemini·ollama·cursor·OpenAI호환을 같은 인터페이스로 다룬다. 특히 OpenAI 호환 /chat/completions는 NIM·Together·Fireworks·vLLM을 전부 커버하는 "만능 어댑터"다. 실습: curl로 OpenAI 호환 엔드포인트를 직접 호출하고, 응답 JSON을 jq -r '.choices[0].message.content'로 뽑아 보자.

⑤ 안전한 자격증명 처리

API 키를 코드·로그·기록에 절대 인라인하지 않는다. 좌석 설정엔 값이 아니라 api_key_env(환경변수 이름)만 두고, 실행 순간에 ${!api_key_env}로 해석한다. 키가 없으면 그 좌석만 폴백. 실습: 여러분 스크립트에서 하드코딩된 토큰을 찾아 환경변수 참조로 바꾸고, 로그에 키가 안 찍히는지 grep으로 점검하자.

⑥ 셸 패키징의 견고함 — install.sh 뜯어보기

set -euo pipefail, shopt -s nullglob(빈 glob 안전), --dry-run 미리보기, 인자 검증, 대상별(claude/codex/gemini) 분기까지 — "남이 실행할 스크립트"를 어떻게 방어적으로 짜는지의 교본이다. 실습: 여러분의 설치 스크립트에 --dry-run과 인자 유효성 검사를 추가해 보자.

⑦ 인지과학을 소프트웨어로 — 편향·반증·kill criteria

카너먼(편향), 멍거(역발상 "무엇이 실패를 보장하나"), 탈레브(꼬리 위험) 같은 실제 의사결정 이론이 페르소나로 구현돼 있고, 판결은 Kill Criteria(이 결정을 뒤집을 관찰 조건)를 요구한다. 실습: 여러분의 최근 결정 하나에 대해 "이게 틀렸다는 걸 알려면 무엇을 언제까지 관찰해야 하나"를 한 문장으로 써 보자 — 놀랍도록 어렵다.

7하드웨어 / 시스템 요구사항

하드웨어 부담은 0 — 무거운 건 "토큰 비용"이지 계산이 아니다.

목적필요한 것
기본 사용 (Claude만)Claude Code CLI + 서브에이전트 지원(기본 켜짐). git clone./install.sh 한 번. 외부 CLI 없이 Claude 단독으로도 완전 동작
멀티 프로바이더 (선택)원하는 것만: @openai/codex(npm), Gemini CLI, Ollama(로컬), cursor-agent, 또는 NVIDIA_API_KEY(NIM 무료 티어 1,000크레딧). 감지되면 자동 라우팅
설치 도구bash. macOS는 timeout 없어도 됨(perl로 대체). 로컬 모델 쓸 때만 Ollama가 GPU/RAM 소모
진짜 비용 — 토큰Full 18명 × 3라운드 = 수십 회 LLM 호출. opus 좌석이 많으면 비쌈. Quick(2라운드)·Duo(2명)·triad(3명)로 규모를 줄이는 게 실전 팁
한 문장 요약

GPU도 대용량 RAM도 필요 없다(로컬 Ollama를 쓸 때만 예외). 진짜 자원은 API 토큰=돈이다. "18명 총회"는 중요한 결정에만 아껴 쓰고, 평소엔 3명짜리 triad나 2명짜리 duo로 소집하는 게 현명하다. 비유하면 이사회 전체를 매번 소집하지 않고, 사안에 맞는 소위원회를 부르는 것.

8직접 해볼 수 있는 실습 과제

난이도별 5개 — 사용자에서 시작해 "나만의 심의 시스템" 설계자까지.

과제 1 ★☆☆☆☆ 입문

첫 council 소집 (--quick으로 저렴하게)

git clone./install.sh. Claude Code에서 /council --quick 이 프로젝트에 Redis 캐시를 넣어야 할까?를 실행한다. 나오는 Quick Verdict에서 Recommended Action·Kill Criteria·Vote Tally가 어떻게 채워지는지 관찰. 그다음 --duo로 같은 질문을 다시 던져 결과 형식이 어떻게 달라지는지 비교해 보자.

과제 2 ★★☆☆☆ 초급

폴라리티 페어의 힘 느끼기

/council --duo --members torvalds,ada 이 추상화 계층은 그만한 가치가 있나?를 실행한다. 토르발스(일단 출시) vs Ada(형식적 순수성)가 어떻게 정반대 렌즈로 같은 문제를 보는지 읽어 보자. 그런 다음 agents/council-torvalds.mdcouncil-ada.md를 열어, 그 성격 차이가 Identity·Grounding Protocol에 어떻게 코딩돼 있는지 대조한다.

과제 3 ★★★☆☆ 중급

19번째 위원 만들기

agents/council-feynman.md를 복제해 나만의 페르소나를 만든다(예: council-jobs — "사용자 경험 원리주의"). frontmatter에 model·polarity_pairs·triads·provider_affinity를 채우고, Identity/Analytical Method/Output Format을 작성. install.sh 재실행 후 /council --members jobs,torvalds,ada …로 소집해 내가 만든 인격이 토론에 실제로 참여하는지 확인한다.

과제 4 ★★★★☆ 고급

detect-providers.sh 읽고 새 공급자 추가

scripts/detect-providers.sh를 정독해 JSON을 손으로 조립하는 방식perl 타임아웃 트릭을 이해한다. 그다음 가상의 공급자(예: 로컬 llama.cpp 서버)를 감지하는 블록을 추가하고, auto-route-defaults.yaml에 등급 매핑을 넣어 본다. 스크립트 출력이 여전히 유효한 JSON인지 jq .로 검증하자.

과제 5 ★★★★★ 심화

익명화·반동조를 내 멀티에이전트에 이식

Council의 가장 값진 아이디어(Round 2 익명화 + 반동조 지시 + 반대 할당량)를 뽑아, 여러분의 다른 멀티에이전트 워크플로에 적용해 본다. 3개 에이전트가 코드리뷰를 하되, 2라운드에서 서로의 리뷰를 Reviewer A/B/C로 익명화하고 "동의하려면 구체적 근거를 대라"를 강제. 익명화 유무에 따라 합의율이 달라지는지 측정하면 훌륭한 미니 실험이 된다.

9관련 기술 심화 학습 로드맵

"프롬프트 한 줄"에서 "멀티에이전트 시스템 설계"까지 5주 계획.

주차주제할 일
1주스킬·서브에이전트 기초Claude Code 스킬(SKILL.md)과 서브에이전트 개념 익히기. Council의 agents/*.md 한 개를 정독하고 구조 파악. 나만의 단일 스킬 작성
2주멀티에이전트 패턴llm-council·debate·mixture-of-agents 패턴 학습. 블라인드-퍼스트·익명화·반사실 프롬프트가 왜 groupthink를 막는지 이해. 관련 논문(arXiv:2510.07517 등) 초록 읽기
3주프로바이더 추상화 · CLIOpenAI 호환 /chat/completions 규격, codex exec/gemini -p/ollama run 헤드리스 실행. curl+jq로 여러 공급자를 같은 인터페이스로 부르기
4주의사결정 이론카너먼(빠른/느린 생각), 멍거의 역발상, 탈레브의 반취약성. "kill criteria·반증 가능성"을 실제 결정에 적용. 인지 편향 카탈로그 훑기
5주직접 미니 council 구현Python이나 bash로 3에이전트 심의 루프를 처음부터 구현: 병렬 1라운드 → 익명 2라운드 → STANCE 집계 → 의장 종합. Council의 SKILL.md를 사양서로 삼기

10핵심 키워드 사전

이 프로젝트를 읽을 때 걸리는 용어들.

용어
Deliberation / Verdict (숙의 / 판결)
숙의는 정해진 절차로 여러 입장을 검토·반박한 뒤 결론에 이르는 과정, 판결은 그 결과물 문서다. Council의 Verdict는 합의뿐 아니라 미해결 질문·반증 조건·소수 의견까지 담는다.
용어
Coordinator / Chairman (조율자 / 의장)
조율자는 토론을 진행만 하는 사회자(의견 없음), 의장은 마지막에 전체를 읽고 판결로 종합하는 별도 역할. 의장은 토론 참여 위원이면 안 된다(자기 감사 방지).
용어
Blind-first (블라인드 퍼스트)
1라운드에서 각 위원이 서로의 답을 못 본 채 독립적으로 분석하는 것. 첫 발언자에게 끌려가는 앵커링을 막는다.
용어
Anonymization (익명화)
2라운드에서 발언자 이름을 Member A/B/C로 가리는 것. 권위·다수라는 사회적 신호를 차단해 "논증의 질"로만 판단하게 한다. 실제 논문 근거로 채택.
용어
Anti-conformity directive (반동조 지시)
"여러 명이 반대해도 이유 없이 입장을 바꾸지 말고, 바꾸려면 네 이전 논증의 구체적 결함을 지목하라"는 지시. 동조 편향으로 옳은 입장이 무너지는 걸 막는다.
용어
Polarity pair (폴라리티 페어)
일부러 반대 성향으로 짝지은 두 위원(예: 소크라테스↔파인만 = 위에서 부수기↔밑에서 쌓기). 라우팅 시 반드시 서로 다른 공급자에 배치해 "같은 편향"을 피한다.
용어
Dissent quota / Novelty gate (반대 할당량 / 참신성 게이트)
2라운드 강제 스캔의 일부. 반론이 2명 미만이면 반대를 강제하고, 1라운드를 그대로 반복하면 되돌려 보낸다. groupthink 방지 장치.
용어
Domain-weight seat (도메인 가중 좌석)
문제와 가장 직결된 위원 1명에게 주는 1.5배 표. 조작을 막기 위해 투표 전(STEP 0)에 미리 잠근다.
용어
STANCE line / 2/3 consensus (스탠스 라인 / 2/3 합의)
각 위원이 마지막에 붙이는 기계 파싱용 한 줄(STANCE|CONFIDENCE|DEALBREAKER). 가중합이 전체의 2/3를 넘어야 합의, 못 넘으면 억지로 만들지 않고 사용자에게 넘긴다.
용어
exec_method (실행 경로)
위원 좌석을 실제로 어떻게 호출하는지 지정하는 값. subagent(Claude)·codex_exec·gemini_cli·ollama_run·cursor_cli·openai_compatible_api 6종. 공급자를 같은 인터페이스로 추상화한다.
용어
Kill Criteria (반증/기각 조건)
"이 결정이 틀렸음을 알려면 무엇을 언제까지 관찰해야 하나"를 명시한 판결 항목. 위원회를 다시 소집하지 않고도 확인 가능한, 측정 가능한 조건이어야 한다.
용어
Groupthink / Mode collapse (집단사고 / 모드 붕괴)
여러 에이전트가 서로 동의하며 다양성을 잃는 실패(집단사고), 그리고 한 모델이 늘 비슷한 답만 내는 실패(모드 붕괴). Council의 모든 강제 장치가 겨냥하는 표적.

11참고 링크

원본을 직접 확인하고 싶을 때.