8. 메시징 게이트웨이 연결하기
노트북을 닫아도 Hermes가 계속 일하게 만들고 싶다면, 이제부터가 진짜 재미있는 구간이다. 메시징 게이트웨이는 Hermes를 Telegram, Discord, Slack 같은 메신저에 붙여 주는 다리다. 한마디로 말해, CLI에만 있던 에이전트를 "항상 연락 가능한 비서"로 바꾸는 장치다.1
이 장에서는 게이트웨이가 어떻게 동작하는지, Telegram·Discord·Slack을 어떻게 연결하는지, 홈 채널은 왜 중요한지, 그리고 권한과 서비스 실행 방식을 어떻게 잡아야 안전하고 편한지 차근차근 살펴보겠다.

게이트웨이는 정확히 무엇인가
Hermes의 메시징 게이트웨이는 하나의 백그라운드 프로세스로 여러 플랫폼을 동시에 연결한다. Telegram에서 메시지를 받고, Discord에서도 응답하고, Slack에도 알림을 보내는 일을 각각 따로 돌리는 것이 아니라, 게이트웨이 하나가 전부 맡는 구조다. 이 프로세스는 플랫폼별 메시지를 받아 내부 형식으로 바꾸고, 채팅별 세션에 연결한 다음, Hermes 에이전트에게 넘겨 답변을 다시 원래 플랫폼으로 돌려보낸다. 게다가 이 과정 속에서 예약 작업용 cron도 함께 돌고, 음성 메시지 처리도 담당한다.1
여기서 중요한 포인트는 "메신저가 달라도 Hermes는 같은 집에서 산다"는 점이다. 대화 기록 자체는 채팅방마다 별도로 관리되지만, 같은 Hermes 홈 디렉터리를 쓰는 한 메모리, 스킬, 설정, 모델 선택은 공통으로 이어진다. 그래서 Telegram에서는 운영 보고를 받고, Discord에서는 팀과 협업하고, Slack에서는 알림만 받는 식으로 역할을 나눠도 한 에이전트를 중심으로 운영할 수 있다.1
먼저 정할 세 가지
게이트웨이를 연결하기 전에 세 가지만 먼저 정하면 뒤가 훨씬 편하다. 어디에서 Hermes를 계속 켜 둘지, 누가 봇과 대화할 수 있을지, 그리고 어떤 채팅방을 기본 알림 창구로 쓸지다.
첫째는 실행 위치다. 개인 노트북에서 테스트만 할 거라면 포그라운드 실행으로도 충분하다. 하지만 스마트폰에서 언제든 부르고 싶다면, 로그아웃해도 꺼지지 않는 리눅스 서버나 VPS가 훨씬 잘 맞는다. 게이트웨이는 본질적으로 "항상 켜져 있는 연락 창구"이기 때문이다.1
둘째는 접근 권한이다. Hermes는 터미널과 파일 도구를 쓸 수 있으므로, 메신저에 붙이는 순간 그냥 귀여운 챗봇이 아니라 꽤 강한 원격 작업자에 가까워진다. 공식 문서가 허용 목록이나 DM 페어링을 기본 보안 수단으로 권장하는 이유가 여기에 있다.1
셋째는 홈 채널이다. 홈 채널은 Hermes가 예약 결과, 상태 알림, 백그라운드 작업 완료 메시지를 우선 보내는 대표 채팅방이라고 생각하면 된다. 처음에는 비워 두고 시작해도 되지만, 실사용에 들어가면 반드시 하나 정해 두는 편이 좋다. 나중에 "분명 자동화는 돌았는데 결과가 어디로 갔지?" 같은 소소한 미스터리를 줄여 준다.1
가장 쉬운 시작: 설정 마법사 사용하기
가장 편한 방법은 설정 마법사를 쓰는 것이다.
hermes gateway setup이 명령은 연결 가능한 플랫폼을 보여 주고, 이미 설정된 항목이 있는지도 알려 주며, 필요한 토큰과 시크릿을 순서대로 묻는다. 설정이 끝나면 게이트웨이를 바로 시작하거나 재시작할지도 안내해 준다.1
게이트웨이 관련 기본 명령은 아래 정도만 먼저 기억해 두면 된다.
hermes gateway # 포그라운드 실행
hermes gateway setup # 메시징 플랫폼 설정
hermes gateway install # 서비스 등록
hermes gateway start # 서비스 시작
hermes gateway stop # 서비스 중지
hermes gateway status # 상태 확인처음에는 hermes gateway로 포그라운드 실행해 로그를 눈으로 보면서 테스트하고, 동작이 확인되면 install과 start로 서비스화하는 흐름이 가장 무난하다.1
Telegram 연결하기
Telegram은 가장 빠르게 성공 경험을 만들기 좋은 플랫폼이다. 봇 생성 절차가 비교적 단순하고, 개인용 원격 비서처럼 쓰기에도 잘 맞는다.2
연결 흐름은 이렇다.
Telegram에서
@BotFather를 열고/newbot으로 봇을 만든다.발급받은 Bot Token을 복사한다.
본인 Telegram User ID를 확인한다. 보통
@userinfobot같은 봇으로 쉽게 확인할 수 있다.2서버에서
hermes gateway setup을 실행해 Telegram을 선택하고, 토큰과 허용 사용자 정보를 입력한다.게이트웨이를 실행한 뒤, 봇에게
/new를 보내 반응을 확인한다.
수동 설정을 선호한다면 환경 변수 방식으로 허용 사용자를 제한할 수도 있다.
TELEGRAM_ALLOWED_USERS=123456789,987654321Telegram에서 제일 먼저 해 둘 만한 명령은 /sethome이다. 이 명령을 현재 채팅방에서 실행하면 그 대화방이 홈 채널이 된다. 이후 예약 작업 결과나 각종 알림이 어디로 갈지 정하기 쉬워진다.1
실무적으로는 Telegram을 "개인 운영 콘솔"처럼 쓰는 경우가 많다. 출근길 지하철에서 서버 상태를 물어보고, 점심시간에 /background로 점검을 맡기고, 저녁에 결과만 확인하는 식이다. 노트북을 꺼둔 상태에서도 흐름이 끊기지 않는다는 점이 특히 강력하다.
Discord 연결하기
Discord는 개인용 DM 도구로도 좋지만, 팀 서버 안에서 운영 보조 봇처럼 쓰기에도 좋다. 다만 Telegram보다 초반 설정이 조금 더 많다.
먼저 Discord Developer Portal에서 애플리케이션과 봇을 만들어야 한다. 그리고 아주 중요한 설정이 두 가지 있다. Message Content Intent와 Server Members Intent다. 특히 Message Content Intent가 꺼져 있으면 봇이 온라인으로 보이는데도 메시지 내용을 읽지 못해서, 겉보기에는 "살아 있는데 대답을 안 하는" 상태가 된다.3
기본 흐름은 다음과 같다.
Discord Developer Portal에서 새 애플리케이션을 만든다.
Bot 탭에서 봇을 생성하고 토큰을 발급받는다.
Message Content Intent와Server Members Intent를 켠다.3View Channels,Send Messages,Read Message History,Attach Files,Send Messages in Threads같은 권한으로 서버에 초대한다.3hermes gateway setup에서 Discord를 선택하고 봇 토큰과 허용 사용자 정보를 넣는다.게이트웨이를 시작한 뒤 DM 또는 서버 채널에서 테스트한다.
Discord에서 기억해 둘 행동 규칙도 있다. DM에서는 봇이 모든 메시지에 응답하지만, 서버 채널에서는 기본적으로 봇을 멘션했을 때만 답한다. 만약 특정 채널을 "Hermes 질문방"처럼 쓰고 싶다면 멘션 없이 응답하는 free-response 채널로 따로 설정할 수 있다.3
이 기본 규칙은 꽤 합리적이다. 공개 서버에서 봇이 아무 대화에나 끼어들면 금세 산만해지기 때문이다. 처음 운영할 때는 "DM은 자유, 서버 채널은 멘션 필수"로 두고, 익숙해지면 일부 채널만 예외를 주는 식이 안정적이다.
또 하나 좋은 점은 스레드 분리다. Discord 스레드마다 세션을 나눌 수 있어서, 채널 하나를 통째로 어지럽히지 않고 작업별로 대화를 분기하기 쉽다.3
Slack 연결하기
Slack은 팀 업무 흐름 속에 Hermes를 자연스럽게 넣기 좋다. 팀 채널에서 멘션으로 호출하고, 완료 보고를 홈 채널로 보내고, 파일이나 링크도 함께 주고받을 수 있다. 다만 Slack은 토큰이 둘이라는 점을 처음에 자주 헷갈린다.
보통 필요한 것은 xoxb-로 시작하는 Bot Token과 xapp-로 시작하는 App Token이다. Bot Token은 실제 메시지 송수신 권한에, App Token은 Socket Mode 연결에 쓰인다.4
설정 순서는 대체로 아래와 같다.
Slack API 페이지에서 새 앱을 만든다.
chat:write,app_mentions:read,channels:history,groups:history,im:history,im:read,im:write,users:read,files:write같은 Bot Token Scope를 추가한다.4Socket Mode를 켜고
connections:write권한의 App Token을 만든다.4앱을 워크스페이스에 설치해 Bot User OAuth Token을 발급받는다.
hermes gateway setup에서 Slack을 선택하고 두 토큰을 입력한다.Slack 채널에서
/invite @봇이름으로 봇을 채널에 초대한 뒤 테스트한다.4
Slack에서 홈 채널 개념은 특히 유용하다. 운영 알림 전용 채널 하나를 정해 두면, 팀 대화방은 깔끔하게 유지하면서 Hermes의 작업 결과만 한곳에 모을 수 있다. 예를 들어 #hermes-reports를 홈 채널로 잡아 두면, 점검 결과·배포 요약·백그라운드 작업 완료 메시지를 그 채널로 일관되게 받는 식이다.4
홈 채널은 왜 중요한가
처음 연결할 때는 "일단 대화만 되면 됐지" 싶지만, 실제 운영에서는 홈 채널이 생각보다 중요하다. Hermes는 단순히 질문에 답만 하는 도구가 아니라, 백그라운드 작업 결과와 예약 작업 결과를 전달하는 시스템이기도 하기 때문이다.1
홈 채널이 있으면 좋은 점은 분명하다. 결과 메시지가 흩어지지 않고, 자동화가 어느 창으로 돌아오는지 예측 가능하며, 나중에 점검 기록을 찾기도 쉽다. 개인 사용자는 Telegram DM 하나를 홈 채널로 두는 경우가 많고, 팀 사용자는 Slack이나 Discord의 전용 채널을 홈 채널로 두는 경우가 많다.
가장 쉬운 설정 방법은 실제로 결과를 받고 싶은 채팅방에 들어가서 아래 명령을 보내는 것이다.
/sethome이렇게 해 두면 다음 장에서 다룰 cron 자동화와도 자연스럽게 이어진다. 쉽게 말해 홈 채널은 "Hermes의 우편함 주소"다.
권한과 보안 설정하기
메신저에 Hermes를 붙일 때 가장 먼저 가져야 할 마음가짐은 이것이다. "이 봇은 대화형 장난감이 아니라, 경우에 따라 셸까지 닿는 운영 엔드포인트다." 그래서 권한 설계는 편의보다 안전이 먼저다.1
공식 문서 기준으로 가장 권장되는 방식은 허용 목록이다. 플랫폼별로 허용 사용자 ID를 직접 적어 두면 그 사용자만 봇과 대화할 수 있다.1
DISCORD_ALLOWED_USERS=123456789012345678
SLACK_ALLOWED_USERS=U01234567,U07654321
TELEGRAM_ALLOWED_USERS=123456789만약 사용자 ID를 일일이 넣기 귀찮다면 DM 페어링 방식을 쓸 수도 있다. 이 방식에서는 처음 DM을 보낸 미승인 사용자에게 1회용 페어링 코드가 보이고, 관리자가 CLI에서 승인하면 접근이 열린다.1
hermes pairing approve telegram XKGH5N7P
hermes pairing list
hermes pairing revoke telegram 123456789반대로 GATEWAY_ALLOW_ALL_USERS=true 같은 전체 허용 모드는 공개 봇에서 사실상 금지 카드에 가깝다. 누군가 장난으로 위험한 명령을 유도할 수도 있고, 의도치 않은 파일 접근이나 비용 발생으로 이어질 수 있기 때문이다.1
메시징 환경에서는 위험한 작업 승인 흐름도 알아 두면 좋다. Hermes가 위험한 명령을 실행하려고 할 때는 메신저 안에서 /approve나 /deny로 결정할 수 있다. 즉, 폰에서 보고 "이건 실행해도 된다"라고 허락하는 식이다.1
한 가지 현실적인 제한도 있다. 메시징 게이트웨이에서는 상호작용형 터미널이 없기 때문에 sudo 비밀번호 입력을 기대하는 작업은 잘 맞지 않는다. 관리자 권한 작업은 CLI에서 처리하거나, 필요한 경우 제한적인 passwordless sudo 구성을 따로 고민하는 편이 낫다.5
서비스로 항상 켜 두기
테스트가 끝났다면 게이트웨이는 서비스로 돌리는 편이 좋다. 그래야 로그아웃하거나 터미널 창을 닫아도 Hermes가 계속 응답한다.1
리눅스에서는 두 가지 운영 방식이 있다. 노트북이나 개발 머신에는 사용자 서비스가 잘 맞고, VPS나 헤드리스 서버에는 시스템 서비스가 더 잘 맞는다. 사용자 서비스는 현재 사용자 계정 기준으로 돌아가고, 시스템 서비스는 부팅 시 자동 복구에 더 강하다.1
기본 흐름은 아래와 같다.
hermes gateway install
hermes gateway start
hermes gateway status로그는 systemd 환경에서 이렇게 보는 경우가 많다.
journalctl --user -u hermes-gateway -f사용자 서비스인데 로그아웃 후에도 계속 돌리고 싶다면 loginctl enable-linger가 필요할 수 있다.
sudo loginctl enable-linger $USERVPS처럼 아예 부팅 시 자동으로 살아나야 하는 서버라면 시스템 서비스 방식이 더 명확하다.
sudo hermes gateway install --system
sudo hermes gateway start --system
sudo hermes gateway status --system공식 문서는 사용자 서비스와 시스템 서비스를 동시에 깔아 두는 구성을 권장하지 않는다. 둘 다 있으면 start, stop, status의 대상이 헷갈릴 수 있기 때문이다.1
macOS에서는 launchd 기반으로 설치되고, 명령은 비슷하게 install 후 start 흐름으로 간다.1
메신저 안에서 알아 두면 좋은 명령
게이트웨이를 붙인 뒤에는 CLI에서 쓰던 감각을 꽤 많이 그대로 가져올 수 있다. 다음 명령들은 특히 자주 쓰인다.1
/new
/reset
/model
/status
/sethome
/approve
/deny
/background <프롬프트>
/stop여기서 /background는 꽤 강력하다. 예를 들어 텔레그램에서 "서버 전체 점검하고 이상 있으면 알려줘"를 백그라운드로 던져 두면, 현재 채팅은 계속 쓸 수 있고 결과는 끝났을 때 같은 채널로 돌아온다.1
즉, 메시징 게이트웨이는 단순히 "메신저에서 채팅하기"가 아니라, 비동기 작업 창구 역할도 함께 한다.
자주 막히는 지점
실제로 많이 겪는 문제는 의외로 단순하다.
첫째, 봇은 온라인인데 응답이 없다. Discord라면 거의 항상 Intent 설정부터 의심해 볼 만하다. 특히 Message Content Intent가 빠지면 봇이 글자를 못 읽는다.3
둘째, 토큰은 넣었는데 채널에서 아무 반응이 없다. Slack이라면 채널에 봇을 초대하지 않았거나, 필요한 scope가 빠졌을 가능성이 높다. app_mentions:read나 channels:history 계열이 없으면 채널 대화를 제대로 받지 못한다.4
셋째, 메시지는 오는데 특정 사람만 안 된다. 이 경우는 대부분 허용 목록이나 페어링 상태 문제다. 게이트웨이는 기본적으로 안전 쪽으로 기울어져 있어서, 허용되지 않은 사용자는 막는 것이 정상 동작이다.1
넷째, 위험 명령 승인이나 관리자 작업이 자꾸 꼬인다. 이 경우는 메시징 게이트웨이가 인터랙티브 셸이 아니라는 점을 기억하면 이해가 쉬워진다. 위험 작업은 /approve 흐름으로 처리하고, 진짜 시스템 관리성 작업은 CLI 쪽이 더 편하다.15
정리
메시징 게이트웨이를 붙이면 Hermes는 더 이상 "내가 터미널을 열 때만 존재하는 도구"가 아니다. Telegram에서는 개인 비서처럼, Discord에서는 협업 봇처럼, Slack에서는 운영 알림 허브처럼 움직인다. 그리고 이 모든 연결을 한 프로세스가 관리한다는 점이 핵심이다.1
처음에는 Telegram 하나만 붙여도 충분하다. 거기서 홈 채널과 권한 정책을 익힌 뒤, Discord나 Slack으로 넓혀 가면 된다. 중요한 것은 메신저를 많이 붙이는 것이 아니라, 어떤 채널을 어디에 쓰고, 누가 접근하고, 결과가 어디로 돌아오게 할지를 의식적으로 설계하는 것이다.
다음 장에서는 이 게이트웨이를 발판으로, Hermes에게 반복 업무를 맡기는 방법을 본격적으로 다룬다. 이제부터는 "대화하는 에이전트"를 넘어서 "스스로 정시에 움직이는 에이전트"의 세계로 들어간다.
참고
1Messaging Gateway Hermes Agent
2에르메스 에이전트 Hermes Agent 설치부터 Telegram 연동까지 5단계 완벽 가이드
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.