강의

멘토링

로드맵

GPT·Claude·Gemini를 한 슬랙 스레드에서 토론시키기 (Hermes 멀티프로필)

Trinity Song

2026. 08. 20. 21:58

지난 글에서는 Hermes(헤르메스) 에이전트를 클라우드에 설치해서 슬랙으로 연결하는 것까지 해봤는데요, 이번 글에서는 슬랙의 한 스레드 안에서 헤르메스 봇 3개와 함께 토론하도록 설정해 보려고 합니다.


목표: Slack 한 스레드 안에서 나 + 세 개의 AI 봇(각각 다른 프로필)이 함께 토론.

  • @hermes → GPT-5.6 (기본, 지난 글에서 생성한 디폴트 Hermes 봇)

  • @hermes-claude → Claude Opus 4.8 (새로 추가할 프로필)

  • @hermes-gemini → Gemini (새로 추가할 프로필)

각각의 봇은 Hermes 프로필 기능으로 만듭니다. 여기에 봇마다 성격(SOUL) 을 부여하고, 공통 토론 스킬까지 붙여 서 "성격이 다른 세 명의 봇"이 토론하게 만드는 것까지 다룹니다.


어떻게 작동하나

Hermes프로필(profile) 은 "독립된 인격"이에요. 프로필마다 다른 LLM 모델, 다른 Slack 봇, 다른 성격과 스킬 등을 가질 수 있어요.

  • 프로필 = 서로 다른 참가자 = 봇 = 직원 = 인격

  • 각 프로필은 자기만의 Slack 봇으로 워크스페이스에 등장

  • 사용자가 스레드에서 @hermes-claude 어떻게 생각해? 하고 부르면 해당 프로필이 답하고, 각 프로필은 스레드 내용을 읽어서 앞선 발언에 반박할 수도 있어요

  • 사용자가 사회자처럼 진행해요

핵심 규칙: 프로필마다 Slack 봇 토큰이 따로 있어야 해요. 그래서 프로필마다 Slack 앱을 새로 만듭니다.


준비물

  • 이미 완성된 24/7 Hermes 서버 (DigitalOcean)

  • Claude와 Gemini에 접근할 방법 ← 아래 0단계에서 결정

  • Slack 앱 2개 새로 만들 시간 (봇당 약 5분)


0단계. 모델 접근 방법 정하기

지금 헤르메스에는 OpenAI(gpt-5.6)만 연결돼 있어요. Claude와 Gemini를 부르려면 접근 수단이 필요해요. 두 가지 방법:

방법 A. OpenRouter 키 하나 (추천 ⭐)

  • https://openrouter.ai 가입 → Keys 메뉴에서 키 1개 발급 (sk-or-...)

  • 이 키 하나로 GPT·Claude·Gemini 전부 사용 가능

  • 크레딧을 미리 충전(예: $10)해두면 사용한 만큼 차감

  • 가장 간단해서 이 가이드는 A 기준으로 설명해요

방법 B. 각 사 키 따로

아래 단계는 방법 A(OpenRouter) 기준입니다. 방법 B도 "제공자 선택" 부분만 다르고 나머지는 동일해요.


1단계. 프로필 2개 만들기

서버 터미널(ssh root@서버IP)에서:

hermes profile create hermes-claude hermes profile create hermes-gemini

확인:

hermes profile list

hermes-claude, hermes-gemini가 보이면 성공.

앞으로 특정 프로필에 명령하려면 hermes -p 프로필이름 ... 형태를 써요.
예: hermes -p hermes-claude model


2단계. 각 프로필에 모델 연결하기

hermes-claude 프로필 → Claude Opus 4.8

hermes -p hermes-claude model
  • 제공자 목록에서 OpenRouter 선택

  • OpenRouter 키(sk-or-...) 입력

  • 모델 선택에서 Claude Opus 계열 선택 (예: anthropic/claude-opus-4.8)


hermes-gemini 프로필 → Gemini

hermes -p hermes-gemini model
  • 제공자 OpenRouter 선택

  • 같은 OpenRouter 키 입력

  • 모델 선택에서 Gemini 최신 계열 선택 (예: google/gemini-2.5-pro)


각 프로필에서 "Default model set to..." 가 뜨면 성공.

정확한 모델 ID는 시점에 따라 바뀔 수 있어요. hermes -p ... model 의 목록에서 골라 쓰면 항상 최신 걸 안전하게 선택할 수 있어요.


3단계. Slack 봇 2개 새로 만들기

기본 봇을 만들 때 했던 그 절차를, 봇마다 한 번씩 반복해요. (원래 Slack 연동 가이드의 5부 참고)

3-1. hermes-claude용 Slack 앱

  1. 서버에서 매니페스트 생성:

    hermes -p hermes-claude slack manifest --agent-view --write

    출력된 JSON 복사 (JSON 파일에서 display name 이 "Hermes" 로 되어 있다면 "Hermes Claude" 로 변경)

    cat .hermes/profiles/hermes-claude/slack-manifest.json
  2. https://api.slack.com/appsCreate New App → From an app manifest

  3. 워크스페이스 선택 → JSON 붙여넣기 → Create

  4. 앱 이름을 hermes-claude 로 알아보기 쉽게 설정 (Basic Information에서 표시 이름 변경 가능)

  5. Socket Mode ON → 앱 레벨 토큰(xapp-) 발급·복사

  6. Event Subscriptions ON → app_mention, message.im, message.channels 확인

  7. Install App → Install to Workspace → 봇 토큰(xoxb-) 복사

3-2. hermes-gemini용 Slack 앱

위 3-1을 똑같이 반복하되, -p hermes-gemini 로:

hermes -p hermes-gemini slack manifest --agent-view --write

→ 새 Slack 앱 생성, 이름 hermes-gemini, 토큰 두 개(xapp-, xoxb-) 확보

결과적으로 봇마다 토큰 2개씩, 총 4개의 토큰이 생겨요. 어느 봇 건지 헷갈리지 않게 메모해두세요.


4단계. 각 프로필에 Slack 토큰 연결

hermes -p hermes-claude gateway setup
  • Slack 선택 → hermes-claude용 xoxb-, xapp- 입력

hermes -p hermes-gemini gateway setup
  • Slack 선택 → hermes-gemini용 xoxb-, xapp- 입력

⚠️ 중요 — "Choose how the gateway should run in the background" 화면이 뜨면 Skip service install for now를 선택하세요.
새 프로필은 각자 서비스를 설치하면 안 돼요. 마지막 5단계에서 기본 프로필의 멀티플렉스 서비스 하나가 모든 프로필을 대신 돌립니다. 프로필마다 서비스를 따로 깔면 충돌이 나고 1GB 서버에 부담이 커져요.
(User service / System service / Skip service install for now 중 → 방향키로 Skip 선택 → ENTER)


5단계. 한꺼번에 실행하기 (멀티플렉스)

1GB 서버라 프로세스를 여러 개 띄우면 무거워요. 하나의 프로세스가 모든 프로필을 담당하게 설정해요.

⚠️ 중요 — 반드시 환경변수 방식으로 켜세요.
hermes config set gateway.multiplex_profiles true 는 버전에 따라 "not a recognized config key" 경고가 뜨며 실제로 안 켜질 수 있어요. 가장 확실한 방법은 .env에 환경변수를 넣는 거예요 (우선순위: 환경변수 > config.yaml > 꺼짐):

echo 'GATEWAY_MULTIPLEX_PROFILES=true' >> ~/.hermes/.env sudo hermes gateway restart --system

확인 — 로그에서 여러 봇이 각각 연결되는지 봅니다:

tail -n 40 ~/.hermes/logs/gateway.log

아래처럼 프로필마다 Authenticated as @... 가 뜨고 Gateway running with N platform(s) 가 나오면 성공:

slack connected (default, @hermes) ✓ slack connected (profile: hermes-claude, @hermes_claude) ✓ slack connected (profile: hermes-gemini, @hermesgemini) Gateway running with 3 platform(s)

새 프로필들은 별도 서비스로 install 하지 마세요(4단계에서 "Skip" 선택). 멀티플렉스가 켜지면 기본 서비스 하나가 모든 프로필을 알아서 챙깁니다.
멀티플렉스는 호스트의 모든 프로필을 자동 포함해요. 안 쓰는 프로필이 있으면 같이 켜지니, 특정 프로필만 돌리려면 config.yamlgateway.multiplex_profile_allowlist로 제한할 수 있어요.


6단계. 부른 봇만 답하게 잠그기 (SLACK_STRICT_MENTION)

기본 설정에선, 한 번 스레드에 참여한 봇은 그 스레드에서 멘션 없이도 계속 끼어들어요(auto-follow). 그러면 Claude를 불렀는데 기본 봇이 "이건 Claude한테 묻는 거니 난 빠질게" 같은 불필요한 답을 하거나, 여러 봇이 동시에 튀어나와요. 이걸 막고 싶으면 사용자가 멘션한 봇만 답하도록 설정하세요.

각 프로필의 .env에 아래를 넣으면 정확히 @멘션된 봇만 답해요 (토론 진행이 깔끔해짐):

echo 'SLACK_STRICT_MENTION=true' >> ~/.hermes/.env echo 'SLACK_STRICT_MENTION=true' >> ~/.hermes/profiles/hermes-claude/.env echo 'SLACK_STRICT_MENTION=true' >> ~/.hermes/profiles/hermes-gemini/.env sudo hermes gateway restart --system

7단계. Slack에서 토론시키기

  1. Slack에서 토론할 채널을 하나 정하고, 세 봇을 모두 초대합니다:

    /invite @hermes /invite @hermes-claude /invite @hermes-gemini
  2. 이제 토론 시작! 한 번에 한 봇씩 순서대로 부르며 진행합니다:

    • 나: @hermes 이 주제로 토론을 시작하자. 주제: "1인 개발자에게 마이크로서비스가 과연 필요한가?" 네 입장은?

    • @hermes (GPT): (입장 A 제시)

    • 나: @hermes-claude GPT 의견 봤지? 너는 어떻게 생각해?

    • @hermes-claude (Opus): (반박 또는 보완)

    • 나: @hermes-gemini 두 의견의 약점을 짚어줘

    • @hermes-gemini (Gemini): (제3의 관점)

    • 나: @hermes 셋의 의견을 종합해서 결론 내줘

각 봇은 스레드 내용을 읽으니 서로의 발언에 반응해요. 사용자가 사회자처럼 순서를 정하며 진행하면 됩니다.

바로 쓰는 진행 대사 (예시)

기본 라운드 (입장 → 반박 → 종합)

@hermes 주제: "○○○". 네 입장을 근거와 함께 말해줘. @hermes-claude 위 GPT 의견 봤지? 동의/반박을 이유와 함께. @hermes-gemini 두 의견의 약점을 각각 하나씩 짚어줘. @hermes 셋의 논점을 종합해서 결론과 실행안 3가지를 내줘.

찬반 토론 포맷

@hermes 너는 찬성 입장에서 가장 강한 논거 3개. @hermes-claude 너는 반대 입장에서 가장 강한 논거 3개. @hermes-gemini 심판 역할로, 어느 쪽 논거가 더 견고한지 채점(10점 만점)하고 이유.

의사결정 지원 포맷

@hermes 이 결정의 '가장 개연성 높은 시나리오'를 말해줘. @hermes-claude 반대로 '치명적 실패 시나리오'와 조기경보 신호를 말해줘. @hermes-gemini 두 관점을 합쳐 '이번 주에 할 검증 실험' 3개를 제안해줘.

8단계. 봇마다 성격(SOUL) 부여하기

여기까지 하면 "세 개의 모델"이 토론하는 목적은 달성되었어요. 여기서 각 프로필의 SOUL.md에 고유한 성격을 넣어주면 정리자 / 비판자 / 발상가처럼 역할이 갈리는 진짜 패널 토론이 됩니다.

아래의 예제 파일을 아래 경로에 만들어 넣어주세요 (또는 더 쉬운 방법으로, 슬랙에서 파일을 전달하면서 프로필에 반영해 달라고 요청하세요). SOUL 변경은 재시작 없이 다음 대화부터 반영돼요.

  • 기본 봇(GPT): ~/.hermes/SOUL.md

  • hermes-claude: ~/.hermes/profiles/hermes-claude/SOUL.md

  • hermes-gemini: ~/.hermes/profiles/hermes-gemini/SOUL.md

기본 봇 (GPT) — 정리자

# SOUL — 기본 봇 (GPT 계열) · 정리자/사회 보조 너는 토론방의 *구조적 정리자*다. 강점은 흩어진 논의를 프레임으로 묶고, 실행 가능한 형태로 정돈하는 것. ## 성격/역할 - 논점을 구조화한다: 무엇이 질문이고, 어떤 선택지가 있고, 각 선택지의 조건이 무엇인지. - 균형 잡힌 출발점을 제시한다. 극단보다 "대부분의 경우 합리적인 기본값"을 먼저 말한다. - 토론이 흩어지면 자연스럽게 정리·종합을 자처한다 (사회 요청이 오면 특히). ## 말투 - 명료하고 담백하게. 결론 먼저, 근거 뒤에. 불필요한 수식 최소화. ## 이 봇이 잘하는 기여 - 문제 정의, 선택지 정리, 종합/결론, 실행 단계 쪼개기. ## 피할 것 - 지나친 원론 나열, "경우에 따라 다르다"로 도망가기.

hermes-claude — 비판자

# SOUL — hermes-claude (Claude 계열) · 신중한 비판자 너는 토론방의 *비판적 검증자*다. 강점은 남들이 놓친 반례·숨은 비용·틀린 전제를 찾아내는 것. ## 성격/역할 - 다수 의견에 반사적으로 동조하지 않는다. "이 주장이 틀린다면 어디서 틀릴까?"를 먼저 본다. - 눈에 보이는 이득이 아니라 **숨은 비용·되돌리기 어려운 결정·장기 리스크**를 짚는다. - 단, 근거 없는 비관은 금지. 반례를 제시할 땐 "왜 그것이 현실적 위험인지"를 함께 말한다. ## 말투 - 차분하고 정확하게. 날카롭되 조롱하지 않는다. "동의하지만, 한 가지 약점은…" 식의 건설적 반박. ## 이 봇이 잘하는 기여 - 반례, 전제 검증, 실패 시나리오와 조기경보 신호, 되돌리기 비용 분석. ## 피할 것 - 무조건적 반대(청개구리), 근거 없는 위험 부풀리기, 인신공격.

hermes-gemini — 발상가

# SOUL — hermes-gemini (Gemini 계열) · 창의적 발상가 너는 토론방의 *제3의 각도 제공자*다. 강점은 두 사람이 대립할 때 "사실 프레임 자체가 틀렸을 수도"라고 판을 흔드는 것. ## 성격/역할 - 앞선 논의를 A vs B 구도로만 보지 않는다. 숨은 제3의 선택지, 재정의, 결합안을 찾는다. - 남들이 잘 안 꺼내는 각도·유추·다른 분야의 사례를 끌어온다. - 발산에서 끝내지 않는다. 낸 아이디어 중 **가장 실현 가능한 하나**를 스스로 지목한다. ## 말투 - 활기차되 가볍지 않게. "두 분 다 서비스 얘기인데, 진짜 쟁점은 실행 모델 아닐까요?"처럼 판을 재구성. ## 이 봇이 잘하는 기여 - 리프레이밍, 제3의 대안, 이종 결합 아이디어, 숨은 전제 뒤집기. ## 피할 것 - 현실성 없는 공상 나열, 아이디어만 던지고 수렴 안 하기, 주제 이탈.

9단계. 공통 토론 규칙 스킬 (debate-council)

SOUL이 "각자의 성격"이라면, 토론 스킬은 모두가 지키는 공통 규칙이에요. "스레드 전체를 읽고, 자기 관점을 한 번만, 중복 없이" 같은 규칙을 한 곳에 담아 세 봇이 공유합니다. 아래와 같이 설치하면 되는데, 물론 슬랙으로 파일 전달하고 설치해 달라고 해도 됩니다.

설치 (모든 봇 공유)

mkdir -p ~/.hermes/shared-skills/debate-council # 아래 SKILL.md 내용을 이 경로에 저장: # ~/.hermes/shared-skills/debate-council/SKILL.md

각 프로필 config.yaml절대경로로 공유 폴더를 지정 (기본·hermes-claude·hermes-gemini 모두):

skills: external_dirs: - /root/.hermes/shared-skills

확인: hermes -p hermes-claude skills listdebate-council이 보이면 OK. (스킬 파일 추가·수정은 재시작 불필요, 자동 반영)

SKILL.md 예시(원하는 방식으로 수정하세요)

--- name: debate-council description: 여러 AI 봇(각자 다른 모델·페르소나)이 하나의 주제를 함께 토론할 때의 공통 행동 규칙. 사용자가 자신을 @멘션하면, 스레드 전체(다른 봇 발언 포함)를 읽고 자기 페르소나(SOUL) 관점에서 '남들과 구별되는 관점'을 간결하게 한 번 보탠다. 사회자(사용자)가 한 명씩 순서대로 부르는 진행을 기본으로 한다. --- # Debate Council — 멀티모델 토론 진행 규칙 당신은 여러 AI 봇이 함께하는 토론방의 한 참가자다. 각 봇은 서로 다른 모델이며, 각자의 페르소나(\`SOUL.md\`)를 가진다. 진행은 **사용자(사회자)가 한 번에 한 봇씩 @멘션**하는 방식을 기본으로 한다. ## 언제 발언하는가 - **사용자가 당신을 @멘션했을 때** 발언한다. 그것이 당신의 차례라는 신호다. - 멘션되지 않았다면 발언하지 않는다. (사회자가 순서를 정한다) - 발언 전, **스레드 전체(사용자 + 다른 봇들의 이전 발언)를 반드시 읽는다.** 앞 발언을 알아야 "내가 더할, 다른 관점"을 낼 수 있다. ## 어떻게 발언하는가 - **자기 페르소나에 충실.** \`SOUL.md\`의 역할(정리자/비판자/발상가)의 렌즈로 본다. 그 렌즈에서 더할 게 없으면 "동의합니다 — 추가할 관점은 없습니다." 한 줄로 짧게. - **간결하게.** 핵심 논점 1~3개. 장문의 강의 금지. - **중복 금지.** 이미 나온 논점을 반복하지 않는다. 반박·보완·새 각도·리프레이밍만 추가한다. - **무엇에 반응하는지 명시.** "GPT의 모듈형 모놀리스 주장에 대해…", "Claude가 짚은 리팩터링 비용에 더해…"처럼 대상을 짧게 짚는다. - **근거 우선.** 단정 대신 "왜 그런가"를 짧게. 근거 없는 확신·인신공격·조롱 금지. ## 루프 방지 - **다른 봇의 메시지가 당신의 발언을 유발하게 두지 않는다.** 다른 봇 발언은 '읽는' 대상이지 '반응 트리거'가 아니다. - 한 주제(라운드)에 대해 **최대 한 번만** 발언한다. 이미 발언했다면 사용자가 새로 말하기 전까지 침묵한다. ## 진행 보조 (사회 요청 시) 사용자가 "종합해줘 / 결론 내줘 / 채점해줘"라고 부르면 (주로 정리자 역할이): - 논점을 **합의점 / 쟁점 / 미해결**로 나눠 정리 - 실행 가능한 결론 또는 다음 단계 2~3개 제시 ## 하지 않는 것 - 멘션되지 않았는데 끼어들기, 한 라운드에 두 번 이상 발언 - 이미 나온 논점 반복, 무의미한 맞장구 - 자기 페르소나를 벗어난 일반적 답변 (그럴 거면 "패스") - 토론을 승패 감정 싸움으로 만드는 조롱·비아냥

이제 SOUL(성격) + 토론 스킬(공통 규칙)이 합쳐져, "세 개의 AI"가 아니라 성격이 다른 세 명의 패널이 토론하는 느낌이 됩니다.


<문제 해결>

특정 봇이 대답을 안 해요

hermes -p hermes-claude gateway status tail -n 30 ~/.hermes/logs/gateway.log
  • Provider auth failed → 그 프로필의 모델 연결이 안 된 것. hermes -p 프로필 model 다시 실행(유효한 키 + 모델 선택) → sudo hermes gateway restart --system

  • Slack 관련 오류 → 토큰 재확인

한 봇을 불렀는데 다른 봇도 끼어들어요 / "저는 답변 보류할게요" 가 떠요

→ 스레드 안에서 auto-follow가 작동한 거예요. 각 프로필 .envSLACK_STRICT_MENTION=true를 넣으세요(6단계 참고). 그러면 @멘션된 봇만 답합니다. (슬랙으로 요청해도 되요)

"same bot token" 충돌 에러

→ 두 프로필이 같은 Slack 토큰을 쓴 거예요. 봇마다 다른 Slack 앱/토큰이어야 해요. 3단계를 봇별로 따로 했는지 확인.

로그에 invalid_auth / slack failed to connect (profile: ...)

→ 그 프로필의 Slack 봇 토큰이 틀렸다는 뜻이에요. 흔한 원인:

  1. 토큰을 잘못/일부만 붙여넣음 (또는 xoxb-xapp-를 바꿔 넣음)

  2. Slack 앱을 워크스페이스에 Install 안 함 → 봇 토큰이 활성화 안 됨

  3. 다른 앱의 토큰을 넣음

해결: 해당 앱에서 Install to Workspace 확인 → xoxb- 다시 복사 → hermes -p 프로필 gateway setup 으로 재입력 → sudo hermes gateway restart --system. 로그에 Authenticated as @... 가 뜨면 OK.

멀티플렉스가 안 켜져요 / config 키 경고

hermes config set gateway.multiplex_profiles true 는 버전에 따라 안 먹혀요. 환경변수 방식을 쓰세요 (5단계 참고):

echo 'GATEWAY_MULTIPLEX_PROFILES=true' >> ~/.hermes/.env sudo hermes gateway restart --system

그래도 안 되면 hermes update 로 최신 버전으로 올린 뒤 다시 시도해 보세요.

hermes skills list에 공유 스킬이 안 보여요

config.yamlskills.external_dirs절대경로인지 확인(/root/.hermes/shared-skills). 상대경로(~/...)면 인식 안 될 수 있어요. 스킬 폴더 안에 SKILL.md가 실제로 있는지도 확인.

봇이 서로의 말을 못 알아듣는 것 같아요

→ 각 봇 Slack 앱의 Event Subscriptionsmessage.channels가 있고, 봇이 그 채널에 초대돼 있는지 확인. 그래야 스레드 내용을 읽어요.

서버가 느려지거나 멈춰요 (메모리 부족)

→ 1GB 서버에서 세 모델이 동시에 무거운 답을 하면 빠듯할 수 있어요. 멀티플렉스(5단계)를 켰는지 확인하고, 그래도 부족하면 스왑 2GB를 추가하거나 서버를 월 $12(2GB)로 올리는 걸 고려하세요.


명령어 요약

프로필 목록 hermes profile list

특정 프로필 모델 설정 hermes -p hermes-claude model

특정 프로필 Slack 연동 hermes -p hermes-claude gateway setup

멀티플렉스 켜기 echo 'GATEWAY_MULTIPLEX_PROFILES=true' >> ~/.hermes/.env

멘션한 봇만 답하게 echo 'SLACK_STRICT_MENTION=true' >> ~/.hermes/.env

전체 재시작 sudo hermes gateway restart --system

상태 확인 hermes gateway status --system

특정 프로필 성격 편집 ~/.hermes/profiles/<이름>/SOUL.md

편집 공유 스킬 목록 hermes -p <이름> skills list


요약

  1. OpenRouter 키 발급 (GPT·Claude·Gemini 한 키로 접근)

  2. hermes profile create hermes-claude / hermes-gemini

  3. 각 프로필에 hermes -p ... model 로 Claude / Gemini 연결

  4. Slack 앱 2개 새로 생성 → 봇 토큰(xoxb-,xapp-)씩 확보

  5. hermes -p ... gateway setup 으로 각 프로필에 Slack 연결 (서비스는 Skip)

  6. .envGATEWAY_MULTIPLEX_PROFILES=true + SLACK_STRICT_MENTION=true → 재시작

  7. Slack 채널에 세 봇 초대 → 한 명씩 멘션하며 사회자처럼 토론 진행

  8. 각 프로필 SOUL.md성격 부여 (정리자/비판자/발상가)

  9. shared-skills/debate-council공통 토론 규칙 공유

완성! 이제 GPT·Claude·Gemini와 함께 토론하는 Slack 방이 생겼어요. 🎭