
목표: Slack 한 스레드 안에서 나 + 세 개의 AI 봇(각각 다른 모델)이 함께 토론하기.
@hermes → GPT-5.6 (기본, 이미 있음)
@hermes-claude → Claude Opus 4.8 (새로 추가)
@hermes-gemini → Gemini Flash (새로 추가)
커스텀 코드 없이 Hermes 프로필 기능만으로 만듭니다.
Hermes의 프로필(profile) 은 "독립된 직원"이에요. 프로필마다 다른 모델, 다른 Slack 봇, 다른 기억을 가질 수 있어요.
프로필 = 서로 다른 참가자/직원
각 프로필은 자기만의 Slack 봇으로 워크스페이스에 등장
사용자가 스레드에서 @hermes-claude 어떻게 생각해? 하고 부르면 그 모델이 답하고, 각 봇은 스레드 내용을 읽어서 앞선 발언에 반박할 수 있어요
사용자가 사회자처럼 진행
핵심 규칙: 프로필마다 Slack 봇 토큰이 따로 있어야 해요. 그래서 봇마다 Slack 앱을 새로 만듭니다.
이미 완성된 24/7 Hermes 서버 (DigitalOcean) : 설치 방법은 지난 블로그 글을 참고하세요
Claude와 Gemini에 접근할 방법 ← 아래 0단계에서 결정
Slack 앱 2개 새로 만들 시간 (봇당 약 5분)
지금 서버는 OpenAI(gpt-5.6)만 연결돼 있어요. Claude와 Gemini를 부르려면 접근 수단이 필요해요. 두 가지 방법:
https://openrouter.ai 가입 → Keys 메뉴에서 키 1개 발급 (sk-or-...)
이 키 하나로 GPT·Claude·Gemini 전부 사용 가능
크레딧을 미리 충전(예: $10)해두면 사용한 만큼 차감
가장 간단해서 이 가이드는 A 기준으로 설명해요
Claude용: https://console.anthropic.com 에서 Anthropic API 키
Gemini용: https://aistudio.google.com 에서 Google AI 키
프로필마다 해당 키를 넣음 (더 번거롭지만 각 사 직접 과금)
아래 단계는 방법 A(OpenRouter) 기준입니다. 방법 B도 "제공자 선택" 부분만 다르고 나머지는 동일해요.
서버 터미널(ssh root@서버IP)에서:
hermes profile create hermes-claude hermes profile create hermes-gemini확인:
hermes profile listhermes-claude, hermes-gemini가 보이면 성공.
앞으로 특정 프로필에 명령하려면 hermes -p 프로필이름 ... 형태를 써요.
예: hermes -p hermes-claude model
제공자 목록에서 OpenRouter 선택
OpenRouter 키(sk-or-...) 입력
모델 선택에서 Claude Opus 계열 선택 (예: anthropic/claude-opus-4.8)
제공자 OpenRouter 선택
같은 OpenRouter 키 입력
모델 선택에서 Gemini 최신 계열 선택 (예: google/gemini-2.5-pro)
각 프로필에서 "Default model set to..." 가 뜨면 성공.
정확한 모델 ID는 시점에 따라 바뀔 수 있어요. hermes -p ... model 의 목록에서 골라 쓰면 항상 최신 걸 안전하게 선택할 수 있어요.
기본 봇을 만들 때 했던 그 절차를, 봇마다 한 번씩 반복해요. (이전 포스팅 Slack 연동 가이드의 5부 참고)
서버에서 매니페스트 생성:
hermes -p hermes-claude slack manifest --agent-view --write출력된 JSON 복사
https://api.slack.com/apps → Create New App → From an app manifest
워크스페이스 선택 → JSON 붙여넣기 → Create
앱 이름을 hermes-claude 로 알아보기 쉽게 설정 (Basic Information에서 표시 이름 변경 가능)
Socket Mode ON → 앱 레벨 토큰(xapp-) 발급·복사
Event Subscriptions ON → app_mention, message.channels 등 확인
Install App → Install to Workspace → 봇 토큰(xoxb-) 복사
위 3-1을 똑같이 반복하되, -p hermes-gemini 로:
hermes -p hermes-gemini slack manifest --agent-view --write 출력된 JSON 복사: cat .hermes/profiles/hermes-gemini/slack-manifest.json * 참고: 출력된 slack-manifest.json 에서 Display Name 과 Bot Name 을 "Hermes" 에서 "Hermes-Gemini"로 바꿔주세요.→ 새 Slack 앱 생성, 이름 hermes-gemini, 토큰 두 개(xapp-, xoxb-) 확보
결과적으로 봇마다 토큰 2개씩, 총 4개의 토큰이 생겨요. 어느 봇 건지 헷갈리지 않게 메모해두세요.
Slack 선택 → hermes-claude용 xoxb-, xapp- 입력
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)
1GB 서버라 프로세스를 여러 개 띄우면 무거워요. 하나의 프로세스가 모든 프로필을 담당하게 설정해요.
⚠️ 중요 — 반드시 환경변수 방식으로 켜세요.
hermes config set gateway.multiplex_profiles true 는 버전에 따라 "not a recognized config key" 경고가 뜨며 실제로 안 켜질 수 있어요. 가장 확실한 방법은 .env에 환경변수를 넣는 거예요 (우선순위: 환경변수 > config.yaml > 꺼짐):
확인 — 로그에서 여러 봇이 각각 연결되는지 봅니다:
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.yaml의 gateway.multiplex_profile_allowlist로 제한할 수 있어요.
Slack에서 토론할 채널을 하나 정하고, 세 봇을 모두 초대:
/invite @hermes /invite @hermes-claude /invite @hermes-gemini이제 토론 시작! 예시 흐름:
나: @hermes 이 주제로 토론을 시작하자. 주제: "1인 개발자에게 마이크로서비스가 과연 필요한가?" 네 입장은?
@hermes (GPT): (입장 A 제시)
나: @hermes-claude GPT 의견 봤지? 너는 어떻게 생각해?
@hermes-claude (Opus): (반박 또는 보완)
나: @hermes-gemini 두 의견의 약점을 짚어줘
@hermes-gemini (Gemini): (제3의 관점)
나: @hermes 셋의 의견을 종합해서 결론 내줘
각 봇은 스레드/채널 내용을 읽으니 서로의 발언에 반응해요. 사용자가 사회자처럼 순서를 정하며 진행하면 됩니다.
팁: 각 프로필의 성격을 SOUL.md로 다르게 줄 수 있어요. 예를 들어 hermes-claude는 "신중한 비판자", hermes-gemini는 "창의적 발상가"처럼. 서버에서 ~/.hermes/profiles/hermes-claude/SOUL.md 를 편집하면 돼요.
기본 설정에선, 한 번 스레드에 참여한 봇은 그 스레드에서 멘션 없이도 계속 끼어들어요(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봇 이름이 다 "Hermes~"로 시작하면 Slack 멘션 자동완성이 헷갈려요. 각 Slack 앱의 Basic Information / App Home에서 표시 이름을 GPT / Claude / Gemini 처럼 구분되게 바꾸면, @Claude 어때? 로 원하는 봇만 정확히 부를 수 있어요.
Provider auth failed → 그 프로필의 모델 연결이 안 된 것. hermes -p 프로필 model 다시 실행(유효한 키 + 모델 선택) → sudo hermes gateway restart --system
Slack 관련 오류 → 토큰 재확인
→ 스레드 안에서 auto-follow가 작동한 거예요. 각 프로필 .env에 SLACK_STRICT_MENTION=true를 넣으세요(위 "부른 봇만 답하게 잠그기" 참고). 그러면 @멘션된 봇만 답합니다.
→ 두 프로필이 같은 Slack 토큰을 쓴 거예요. 봇마다 다른 Slack 앱/토큰이어야 해요. 3단계를 봇별로 따로 했는지 확인.
→ 그 프로필의 Slack 봇 토큰이 틀렸다는 뜻이에요. 흔한 원인:
토큰을 잘못/일부만 붙여넣음 (또는 xoxb-와 xapp-를 바꿔 넣음)
Slack 앱을 워크스페이스에 Install 안 함 → 봇 토큰이 활성화 안 됨
다른 앱의 토큰을 넣음
해결: 해당 앱에서 Install to Workspace 확인 → xoxb- 다시 복사 → hermes -p 프로필 gateway setup 으로 재입력 → sudo hermes gateway restart --system. 로그에 Authenticated as @... 가 뜨면 OK.
→ 각 봇 Slack 앱의 Event Subscriptions에 message.channels가 있고, 봇이 그 채널에 초대돼 있는지 확인. 그래야 스레드 내용을 읽어요.
→ 1GB 서버에서 세 모델이 동시에 무거운 답을 하면 빠듯할 수 있어요. 멀티플렉스(5단계)를 켰는지 확인하고, 그래도 부족하면 서버를 월 $12(2GB)로 올리는 걸 고려하세요. (DigitalOcean에서 Resize)
OpenRouter 키 발급 (GPT·Claude·Gemini 한 키로 접근)
hermes profile create hermes-claude / hermes-gemini
각 프로필에 hermes -p ... model 로 Claude / Gemini 연결
Slack 앱 2개 새로 생성 → 봇 토큰(xoxb-,xapp-)씩 확보
hermes -p ... gateway setup 으로 각 프로필에 Slack 연결
.env에 GATEWAY_MULTIPLEX_PROFILES=true 추가 + 재시작 → 세 봇 동시 가동
Slack 채널에 세 봇 초대 → 사회자처럼 토론 진행
완성! 이제 GPT·Claude·Gemini와 함께 토론하는 Slack 방이 생겼어요. 🎭