홈 서버에 Hermes Agent 올려봤다 — 삽질 기록

요약: Ubuntu 미니PC에 AI 에이전트를 상시 실행 서비스로 올리는 게 이렇게 간단할 줄 몰랐다. 그리고 이렇게 삽질할 줄도 몰랐다.


왜 Hermes Agent였나

AI 에이전트 툴을 한 번 제대로 써보고 싶다는 생각은 오래 전부터 있었다. 조건은 하나였다. 에이전트는 서버에서 돌고, 나는 맥북에서 앱으로 붙는 구조. SSH 열고 터미널 띄우는 게 아니라, 앱 켜면 바로 연결되는 리모트 환경.

코딩할 때 잠깐 켜는 도구가 아니라, 서버에서 상시 돌면서 슬랙으로 명령 받고 결과 뱉는 구조도 함께 원했다.

후보는 여러 개였는데 최종적으로 둘을 비교했다.

  • OpenClaw — GitHub 스타 수가 어마어마하고 생태계가 넓다. 심지어 Hermes에는 hermes claw migrate라는 마이그레이션 명령이 있을 정도로 인지도 있는 도구다. 근데 코드베이스가 거대하고, 내가 필요한 건 그 1%도 안 될 것 같았다.
  • Hermes Agent — Nous Research 작. 세션 간 메모리 지속, 자가 스킬 생성, 멀티 메시징 플랫폼 지원. MIT 라이선스, 데이터는 내 머신에만.

결국 Hermes를 선택한 이유는 세 가지였다.

첫째, 맥북 전용 데스크탑 앱이 있고 리모트 서버에 붙는 구조를 공식 지원한다. Tailscale IP만 입력하면 앱에서 바로 연결된다.

둘째, Slack 연동이 네이티브로 된다.

셋째, LLM 프로바이더를 고정하지 않는다 — OpenRouter, Nous Portal, Anthropic, 자체 엔드포인트까지 hermes model 한 줄로 전환 가능하다.


내 서버 환경

집에서 운영 중인 Ubuntu 미니PC(duncan-ubuntu, Intel N100, RAM 16GB)에 올렸다. 이미 Ghost CMS, n8n이 각자 전용 유저로 격리돼서 돌고 있는 구조라, Hermes도 똑같은 패턴으로 붙이기로 했다.

접근은 Tailscale로 한다. 포트 직접 열지 않아도 된다.


설치 자체는 진짜 쉬웠다

# hermes 전용 유저 생성
sudo useradd -m -s /bin/bash hermes

# hermes 계정으로 전환
sudo su - hermes

# 설치
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

끝이다. 진짜로. 설치 스크립트가 Python 3.11 가상환경, Node.js, 의존성 전부 알아서 세팅해준다. 2분도 안 걸렸다.

설치 후 LLM 프로바이더와 Slack 연동 설정은 두 가지 방법 중 하나로 한다.

# 방법 1: 대화형 세팅 마법사 (초심자 친화적)
hermes setup

# 방법 2: .env 직접 편집
nano ~/.hermes/.env

나는 .env를 직접 편집했다. 프로바이더 API 키와 Slack 봇 토큰을 여기에 넣으면 된다.


삽질 포인트 1: Slack missing_scope 오류

Slack 연동 설정하고 테스트 메시지 보냈더니 바로 에러가 떴다.

slack_sdk.errors.SlackApiError: missing_scope

원인은 Slack Bot Token 스코프 설정 누락이었다. 처음에 기본 권한만 주고 넘어갔는데, 채널/그룹 목록을 읽으려면 추가 스코프가 필요했다.

Slack App 설정 → OAuth & Permissions 에서 아래 스코프를 추가하고 Bot Token 재발급 후 ~/.hermes/.env 업데이트.

channels:read
groups:read
mpim:read
im:read

이거 하나 때문에 30분 썼다. 에러 메시지는 명확했는데 어디서 추가하는지 처음엔 헷갈렸다.


삽질 포인트 2: gateway vs dashboard 개념 혼동

처음엔 서비스가 하나인 줄 알았다. 근데 구조를 보니 둘이었다.

서비스

역할

없으면?

hermes-gateway

Slack/Telegram 등 연동, 실제 에이전트 루프

메시징 명령 안 먹힘

hermes-dashboard

맥북 데스크탑 앱 연결용 웹소켓 백엔드

앱 접속 불가, Slack은 정상

Slack만 쓸 거면 gateway만 올려도 된다. 나는 맥북 데스크탑 앱도 쓰고 싶어서 둘 다 systemd로 등록했다.

# /etc/systemd/system/hermes-gateway.service
[Unit]
Description=Hermes Agent Gateway
After=network-online.target
Wants=network-online.target

[Service]
User=hermes
Group=hermes
ExecStart=/home/hermes/.hermes/hermes-agent/venv/bin/python -m hermes_cli.main gateway run
WorkingDirectory=/home/hermes/.hermes
EnvironmentFile=/home/hermes/.hermes/.env
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/hermes-dashboard.service
[Unit]
Description=Hermes Agent Dashboard
After=network.target hermes-gateway.service

[Service]
User=hermes
EnvironmentFile=/home/hermes/.hermes/.env
ExecStart=/home/hermes/.local/bin/hermes dashboard --host 100.x.x.x
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

--host에는 Tailscale IP를 넣는다. systemctl enable 해두면 서버 재부팅 후 자동 실행된다.

한 가지 더 — gateway 서비스의 ExecStart는 반드시 venv 절대경로로 써야 한다. hermes gateway처럼 CLI 명령만 쓰면 PATH 해석이 꼬이는 경우가 있었다.


맥북 앱 연결

데스크탑 앱에서 Gateway 설정에 Tailscale IP와 대시보드 포트(기본 9119)를 입력하면 끝.

VPN(Tailscale) 없이 외부 포트 열 필요 없다는 게 제일 마음에 드는 부분이다. 보안 신경 쓸 게 크게 줄었다.


모니터링은 Betterstack으로

서버에 이미 Betterstack Heartbeat 크론이 돌고 있어서, Hermes gateway용 항목을 하나 추가했다.

# crontab에 추가 (hermes 계정)
*/5 * * * * systemctl is-active --quiet hermes-gateway && curl -s https://uptime.betterstack.com/api/v1/heartbeat/[TOKEN] > /dev/null

systemctl is-active --quiet 조건을 걸어서, 서비스가 죽어 있으면 핑을 안 보내게 했다. Betterstack이 핑 끊기면 알람 날려주는 구조.


써보니 어떤가

솔직히 말하면 아직 업무에 깊게 붙이진 못했다. 설치하고 Slack 연동되는 걸 확인하는 것까지가 이번 라운드였다.

다만 구조를 보면서 느낀 건, 이게 단순한 챗봇 래퍼가 아니라는 점이다. 세션이 끊겨도 프로젝트 맥락을 기억하고, 문제 해결 패턴을 스킬로 저장한다. 이미 내 서버에서 돌면서 스스로 스킬을 쌓아가고 있다. 지금 n8n으로 돌리는 자동화 파이프라인들을 점진적으로 이쪽으로 옮기거나 연계하는 방향을 고민 중이다.

아직 검증이 더 필요하지만, 일단 인프라 세팅 허들은 생각보다 낮았다는 건 확실히 말할 수 있다.


정리

  • 설치: curl 한 줄, 체감 난이도 낮음. 인스톨러가 venv·Node까지 알아서 처리
  • 인증: LLM 프로바이더 API 키 방식 (.env 또는 hermes setup 마법사)
  • 삽질 구간: Slack 스코프 설정, gateway/dashboard 역할 구분, systemd ExecStart 경로
  • 운영 구조: systemd 서비스 + Tailscale + Betterstack 조합
  • 현재 상태: 세팅 완료, 실사용 검증 중

다음엔 실제로 업무 자동화에 붙여본 결과를 써볼 예정이다.


설치 환경: Ubuntu 24.04, Hermes Agent (Nous Research), Slack Socket Mode

Posts