포스트

Hermes Agent 실전 가이드: 설치부터 Docker 운영까지

Hermes Agent 실전 가이드: 설치부터 Docker 운영까지

Nous Research 공식 문서를 바탕으로 작성한 Hermes Agent 설치, CLI 사용법, Docker 배포 완전 해설입니다.
처음 설치하는 사용자부터 팀·서버 운영자까지 모두를 대상으로 합니다.


목차

  1. 빠른 시작 가이드 (Quickstart)
  2. 설치 (Installation)
  3. CLI 인터페이스 완전 해설
  4. Docker로 운영하기

1. 빠른 시작 가이드 (Quickstart)

1-1. 이 가이드가 필요한 사람

빠른 시작 가이드는 다음과 같은 상황에 있는 사람을 위해 작성되어 있습니다.

  • 처음 설치하고 최단 경로로 작동하는 환경을 원하는 사용자
  • 프로바이더를 전환하면서 설정 실수로 시간을 낭비하고 싶지 않은 사용자
  • 팀용 봇이나 상시 동작 워크플로우를 구성하려는 사용자
  • “설치는 됐는데 아무것도 안 된다”는 상황에서 벗어나고 싶은 사용자

1-2. 목표별 최단 경로

목표첫 번째 할 일그 다음 할 일
내 기기에서 Hermes를 일단 작동시키고 싶다hermes setup 실행실제 채팅으로 응답 확인
사용할 프로바이더를 이미 알고 있다hermes model 실행설정 저장 후 채팅 시작
봇 또는 상시 동작 환경을 원한다CLI 작동 확인 후 hermes gateway setupTelegram, Discord, Slack 등 연결
로컬 또는 자체 호스팅 모델을 쓰고 싶다hermes model → 커스텀 엔드포인트 설정엔드포인트, 모델명, 컨텍스트 길이 검증
멀티 프로바이더 폴백을 쓰고 싶다hermes model 먼저기본 채팅이 작동한 후에만 라우팅·폴백 추가

핵심 원칙: Hermes가 정상적인 채팅 한 번을 완료하지 못한다면 기능을 더 추가하지 마세요. 먼저 깨끗하게 대화 한 번이 성공해야 합니다. 그 다음에 게이트웨이, 크론, 스킬, 음성, 라우팅을 하나씩 추가합니다.


1-3. 1단계: Hermes Agent 설치

방법 A — pip (가장 간단)

1
2
pip install hermes-agent
hermes postinstall     # 선택: Node.js, 브라우저, ripgrep, ffmpeg 설치 + 설정 실행

PyPI 릴리즈는 tagged 버전(메이저/마이너 릴리즈)을 추적합니다. main 브랜치의 최신 커밋을 원한다면 방법 B를 사용하세요.

방법 B — git 인스톨러 (main 브랜치 추적)

1
2
# Linux / macOS / WSL2 / Android (Termux)
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

설치 완료 후 셸을 다시 로드합니다.

1
source ~/.bashrc   # 또는 source ~/.zshrc

1-4. 2단계: 프로바이더 선택

설정 중 가장 중요한 단계입니다. hermes model 명령으로 대화형으로 선택할 수 있습니다.

1
hermes model

가장 쉬운 경로: Nous Portal

Nous Portal 구독 하나로 300개 이상의 모델과 Tool Gateway(웹 검색, 이미지 생성, TTS, 클라우드 브라우저)를 모두 사용할 수 있습니다. 신규 설치라면 다음 한 줄로 로그인, 프로바이더 설정, Tool Gateway 활성화를 한꺼번에 처리합니다.

1
hermes setup --portal

주요 프로바이더 목록

프로바이더설명설정 방법
Nous Portal구독 기반, 설정 불필요hermes model에서 OAuth 로그인
OpenAI CodexChatGPT OAuth, Codex 모델 사용hermes model에서 device code 인증
AnthropicClaude 모델 직접 연결 — Max 플랜 + 추가 크레딧(OAuth) 또는 API 키(종량제)hermes model → OAuth 로그인, 또는 Anthropic API 키
OpenRouter여러 프로바이더 라우팅API 키 입력
DeepSeekDeepSeek API 직접 접근DEEPSEEK_API_KEY 환경변수 설정
GitHub CopilotGitHub Copilot 구독 (GPT-5.x, Claude, Gemini 등)hermes model에서 OAuth 또는 토큰 설정
AWS BedrockClaude, Nova, Llama, DeepSeek via Converse APIIAM 역할 또는 aws configure
Hugging Face20개 이상 오픈 모델 (Qwen, DeepSeek, Kimi 등)HF_TOKEN 환경변수 설정
Custom EndpointvLLM, SGLang, Ollama, OpenAI 호환 APIbase URL + API 키 설정
Alibaba CloudQwen 모델 (DashScope)DASHSCOPE_API_KEY 설정
NVIDIA NIMNemotron 모델NVIDIA_API_KEY 설정
Kimi / MoonshotMoonshot 코딩 및 채팅 모델KIMI_API_KEY 설정

최소 컨텍스트 요구사항: Hermes Agent는 최소 64,000 토큰 컨텍스트를 지원하는 모델을 요구합니다. 더 작은 컨텍스트 윈도우를 가진 모델은 시작 시 거부됩니다. 로컬 모델을 사용한다면 컨텍스트 크기를 최소 64K로 설정하세요 (llama.cpp: --ctx-size 65536, Ollama: -c 65536).

설정 저장 방식

Hermes는 시크릿과 일반 설정을 분리해서 저장합니다.

  • 시크릿과 토큰 → ~/.hermes/.env
  • 일반 설정 → ~/.hermes/config.yaml

CLI를 통해 설정하면 올바른 파일에 자동으로 저장됩니다.

1
2
3
hermes config set model anthropic/claude-opus-4.6
hermes config set terminal.backend docker
hermes config set OPENROUTER_API_KEY sk-or-...

1-5. 3단계: 첫 번째 채팅 실행

1
2
hermes            # 클래식 CLI
hermes --tui      # 모던 TUI (권장)

시작하면 현재 모델, 사용 가능한 도구, 설치된 스킬을 보여주는 웰컴 배너가 표시됩니다. 검증하기 쉬운 구체적인 프롬프트로 테스트합니다.

1
2
이 저장소를 5개 항목으로 요약하고 메인 진입점이 무엇인지 알려줘.
현재 디렉토리를 확인하고 메인 프로젝트 파일이 무엇인지 알려줘.

성공 기준

  • 배너에 선택한 모델/프로바이더가 표시됨
  • 오류 없이 응답이 돌아옴
  • 필요 시 도구(터미널, 파일 읽기, 웹 검색)를 사용할 수 있음
  • 두 번 이상 연속 대화가 정상적으로 진행됨

1-6. 4단계: 세션 저장 확인

1
2
hermes --continue    # 가장 최근 세션 재개
hermes -c            # 단축형

이전 세션으로 돌아올 수 있어야 합니다. 안 된다면 같은 프로파일에 있는지, 세션이 실제로 저장됐는지 확인합니다. 여러 설정이나 여러 기기를 다룰 때 이 기능이 중요합니다.


1-7. 5단계: 주요 기능 체험

터미널 사용

1
디스크 사용량을 알려줘. 가장 큰 디렉토리 상위 5개를 보여줘.

에이전트가 터미널 명령을 대신 실행하고 결과를 보여줍니다.

슬래시 명령어

/를 입력하면 자동완성 드롭다운이 표시됩니다.

명령어설명
/help사용 가능한 모든 명령어 표시
/tools현재 사용 가능한 도구 목록
/model대화형으로 모델 전환
/personality pirate성격 변경 체험
/save대화 저장

1-8. 자주 발생하는 문제와 해결법

증상가능한 원인해결 방법
Hermes는 열리지만 빈 응답 또는 오류 발생프로바이더 인증 또는 모델 선택 문제hermes model 다시 실행하여 프로바이더·모델·인증 확인
커스텀 엔드포인트가 “작동”하지만 응답이 이상함잘못된 base URL, 모델명, 또는 OpenAI 비호환 API별도 클라이언트로 엔드포인트를 먼저 검증
게이트웨이가 시작됐지만 메시지를 받지 못함봇 토큰, 허용 목록, 플랫폼 설정 미완료hermes gateway setup 재실행 및 hermes gateway status 확인
hermes --continue로 이전 세션을 찾지 못함프로파일이 다르거나 세션이 저장 안 됨hermes sessions list로 세션 확인, 올바른 프로파일 여부 체크
hermes doctor가 설정 문제 감지설정 값 누락 또는 오래된 값설정 수정 후 기본 채팅 재테스트

복구 순서

무언가 잘못됐을 때 이 순서대로 실행하면 대부분 해결됩니다.

1
2
3
4
5
6
hermes doctor
hermes model
hermes setup
hermes sessions list
hermes --continue
hermes gateway status

2. 설치 (Installation)

2-1. 플랫폼별 설치 방법

Linux / macOS / WSL2

1
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

Windows (네이티브, PowerShell) — 얼리 베타

주의: 네이티브 Windows 지원은 얼리 베타 단계입니다. 공통 경로는 작동하지만 POSIX 인스톨러만큼 광범위하게 테스트되지 않았습니다. Windows에서 가장 안정적인 방법은 WSL2 내에서 위의 Linux 명령을 실행하는 것입니다.

1
iex (irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1)

Windows 인스톨러가 처리하는 항목들입니다.

  • uv (빠른 Python 패키지 매니저)
  • Python 3.11
  • Node.js 22
  • PortableGit (자체 포함 Git-for-Windows 배포본 — bash.exe와 POSIX 툴체인 포함)
  • 코드 클론 위치: %LOCALAPPDATA%\hermes\hermes-agent
  • 가상 환경 생성 및 hermes를 User PATH에 추가

설치 완료 후 새 PowerShell 창을 열어야 PATH가 적용됩니다.

Git 처리 방식에 대해 알아두면 좋은 사항이 있습니다. 시스템에 git이 이미 있으면 기존 것을 사용하고, 없으면 PortableGit(~50MB)을 %LOCALAPPDATA%\hermes\git에 다운로드합니다. 관리자 권한 없이도 설치 가능하며 기존 시스템 Git에 영향을 주지 않습니다.

Android / Termux

1
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

인스톨러가 Termux 환경을 자동 감지해 Android 전용 설치 흐름으로 전환합니다. Termux pkg로 시스템 의존성을 설치하고, 브라우저/WhatsApp 부트스트랩은 기본적으로 건너뜁니다.


2-2. 설치 레이아웃

설치 방식에 따라 파일이 저장되는 위치가 다릅니다.

인스톨러코드 위치hermes 바이너리데이터 디렉토리
pip installPython site-packages~/.local/bin/hermes~/.hermes/
일반 사용자 (git 인스톨러)~/.hermes/hermes-agent/~/.local/bin/hermes (심링크)~/.hermes/
루트 모드 (sudo curl … \| sudo bash)/usr/local/lib/hermes-agent//usr/local/bin/hermes/root/.hermes/

루트 모드 FHS 레이아웃은 공유 머신 배포에 적합합니다. 한 번의 시스템 설치로 모든 사용자가 Hermes를 사용할 수 있고, 각 사용자의 설정은 각자의 ~/.hermes/에 저장됩니다.


2-3. Windows 기능 지원 범위 (얼리 베타)

기능지원 여부
CLI (hermes chat, setup, gateway 등)네이티브 지원
게이트웨이 (Telegram, Discord, Slack 등)네이티브, PowerShell 백그라운드 프로세스로 실행
크론 스케줄러네이티브 지원
브라우저 도구 (Playwright/Chromium)네이티브 지원
MCP 서버 (stdio 및 HTTP)네이티브 지원
대시보드 /chat 터미널 탭WSL2 전용 (POSIX PTY 필요)

대시보드의 세션·잡·메트릭 부분은 네이티브로 작동하지만, 내장 PTY 터미널 탭만 WSL2가 필요합니다.


2-4. 인스톨러가 자동으로 처리하는 것들

인스톨러 한 번 실행으로 다음이 모두 자동 처리됩니다.

  • Python 3.11 설치 (uv를 통해, sudo 불필요)
  • Node.js v22 (브라우저 자동화 및 WhatsApp 브릿지용)
  • ripgrep (빠른 파일 검색)
  • ffmpeg (TTS용 오디오 형식 변환)
  • 가상 환경 생성
  • 전역 hermes 명령어 설정
  • LLM 프로바이더 설정

Git만 미리 설치되어 있으면 나머지는 모두 인스톨러가 알아서 처리합니다.


2-5. sudo 없는 설치 / 시스템 서비스 사용자 설치

권한이 없는 전용 사용자(예: hermes systemd 서비스 계정)로 실행하는 방법입니다. 유일하게 루트가 필요한 것은 Playwright의 --with-deps 단계로, Chromium이 사용하는 공유 라이브러리를 apt로 설치합니다.

권장 방법 (Debian/Ubuntu)

1단계: 관리자 권한으로 한 번만 실행합니다.

1
sudo npx playwright install-deps chromium

2단계: 권한 없는 서비스 사용자로 일반 인스톨러를 실행합니다. 인스톨러가 sudo 없음을 감지하고 --with-deps 없이 Chromium을 사용자 로컬 Playwright 캐시에 설치합니다.

1
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

브라우저 자동화가 필요 없다면 --skip-browser 플래그로 Playwright 단계를 완전히 건너뛸 수 있습니다.

1
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash -s -- --skip-browser

2-6. 문제 해결

문제해결 방법
hermes: command not found셸 재로드 (source ~/.bashrc) 또는 PATH 확인
API 키 미설정hermes model 실행하거나 hermes config set OPENROUTER_API_KEY your_key
업데이트 후 설정 누락hermes config checkhermes config migrate

더 자세한 진단은 hermes doctor 명령을 실행하면 무엇이 빠졌고 어떻게 고치면 되는지 알려줍니다.


3. CLI 인터페이스 완전 해설

3-1. CLI 실행 방법

기본 사용법부터 다양한 옵션까지 알아봅니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 인터랙티브 세션 시작 (기본)
hermes

# 단일 쿼리 모드 (비인터랙티브)
hermes chat -q "Hello"

# 특정 모델 지정
hermes chat --model "anthropic/claude-sonnet-4"

# 특정 프로바이더 지정
hermes chat --provider nous        # Nous Portal 사용
hermes chat --provider openrouter  # OpenRouter 강제

# 특정 툴셋 지정
hermes chat --toolsets "web,terminal,skills"

# 하나 이상의 스킬을 미리 로드하고 시작
hermes -s hermes-agent-dev,github-auth
hermes chat -s github-pr-workflow -q "draft PR 열어줘"

# 이전 세션 재개
hermes --continue             # 가장 최근 CLI 세션 재개 (-c)
hermes --resume <session_id>  # ID로 특정 세션 재개 (-r)

# 상세 모드 (디버그 출력)
hermes chat --verbose

# 격리된 git worktree (여러 에이전트 병렬 실행)
hermes -w                        # worktree에서 인터랙티브 모드
hermes -w -q "이슈 #123 고쳐줘"  # worktree에서 단일 쿼리

3-2. 인터페이스 구성

Hermes CLI는 두 가지 터미널 인터페이스를 제공합니다. 클래식 prompt_toolkit CLI와 모달 오버레이, 마우스 선택, 논블로킹 입력을 갖춘 최신 TUI가 있습니다. 두 인터페이스는 동일한 세션, 슬래시 명령어, 설정을 공유합니다.

웰컴 배너에는 현재 모델, 터미널 백엔드, 작업 디렉토리, 사용 가능한 도구, 설치된 스킬이 한눈에 표시됩니다.


3-3. 상태 바 (Status Bar)

입력 영역 위에 실시간으로 업데이트되는 상태 바가 표시됩니다.

1
 ⚕ claude-sonnet-4-20250514 │ 12.4K/200K │ [██████░░░░] 6% │ $0.06 │ 15m
요소설명
모델명현재 모델 (26자 초과 시 잘림)
토큰 수사용된 컨텍스트 토큰 / 최대 컨텍스트 윈도우
컨텍스트 바색상으로 구분된 시각적 채움 표시
비용예상 세션 비용
🗜️ N컨텍스트 압축 횟수 — 세션이 자동 압축된 횟수
▶ N활성 백그라운드 작업 수
경과 시간세션 시작 후 지난 시간
⚠ YOLOYOLO 모드 경고 — 자동 승인 모드가 켜진 경우 표시

컨텍스트 색상 코드

색상임계값의미
녹색50% 미만여유 충분
노란색50–80%점점 채워짐
주황색80–95%한계에 접근 중
빨간색95% 이상거의 가득 참 — /compress 고려

상세 비용 내역(입력/출력 토큰별)을 보려면 /usage를 입력합니다.


3-4. 키 바인딩

동작
Enter메시지 전송
Alt+Enter, Ctrl+J, Shift+Enter새 줄 (멀티라인 입력)
Alt+V클립보드에서 이미지 붙여넣기
Ctrl+V텍스트 붙여넣기 및 클립보드 이미지 첨부
Ctrl+B음성 모드에서 녹음 시작/중지
Ctrl+G현재 입력 버퍼를 $EDITOR에서 편집 (저장 후 종료하면 전송)
Ctrl+X Ctrl+E외부 편집기 단축키 (이맥스 스타일, Ctrl+G와 동일 동작)
Ctrl+C에이전트 중단 (2초 내 두 번 누르면 강제 종료)
Ctrl+D종료
Ctrl+ZHermes를 백그라운드로 전환 (Unix만 해당). fg로 복귀
Tab자동 제안(고스트 텍스트) 수락 또는 슬래시 명령어 자동완성

멀티라인 붙여넣기 미리보기: 여러 줄을 붙여넣으면 전체를 스크롤에 쏟아붓는 대신 간결한 한 줄 미리보기([pasted: 47 lines, 1,842 chars — press Enter to send])를 표시합니다.

Shift+Enter 호환성: 대부분의 터미널은 기본적으로 Enter와 Shift+Enter를 동일하게 전송합니다. Kitty keyboard protocol을 지원하는 터미널(Kitty, foot, WezTerm, Ghostty)에서만 구분됩니다. 모든 터미널에서 Alt+EnterCtrl+J는 항상 작동합니다.


3-5. 슬래시 명령어

/를 입력하면 자동완성 드롭다운이 표시됩니다. 명령어는 대소문자를 구분하지 않습니다(/HELP/help는 동일).

명령어설명
/help명령어 도움말 표시
/model현재 모델 표시 또는 변경
/tools현재 사용 가능한 도구 목록
/skills browse스킬 허브 및 공식 선택적 스킬 탐색
/background <prompt>별도 백그라운드 세션에서 프롬프트 실행
/skin활성 CLI 스킨 표시 또는 변경
/voice onCLI 음성 모드 활성화 (녹음: Ctrl+B)
/voice ttsHermes 응답의 음성 재생 토글
/reasoning high추론 노력 증가
/title My Session현재 세션 이름 지정
/status세션 정보 표시 (모델/프로파일/토큰/경과 시간 및 최근 활동 요약)
/sessions인터랙티브 세션 선택기 열기
/compress컨텍스트 수동 압축
/busy queue에이전트 작동 중 입력 처리 방식 변경
/yolo자동 승인 모드 토글

설치된 스킬은 자동으로 슬래시 명령어가 됩니다.

1
2
3
/gif-search funny cats
/axolotl help me fine-tune Llama 3 on my dataset
/github-pr-workflow create a PR for the auth refactor

3-6. 빠른 명령어 (Quick Commands)

LLM을 호출하지 않고 셸 명령어를 즉시 실행하는 커스텀 명령어를 정의할 수 있습니다. CLI와 메시징 플랫폼 모두에서 동작합니다.

1
2
3
4
5
6
7
8
9
10
11
# ~/.hermes/config.yaml
quick_commands:
  status:
    type: exec
    command: systemctl status hermes-agent
  gpu:
    type: exec
    command: nvidia-smi --query-gpu=utilization.gpu,memory.used --format=csv,noheader
  restart:
    type: alias
    target: /gateway restart

이후 채팅에서 /status, /gpu, /restart를 입력하면 즉시 실행됩니다.


3-7. 성격(Personality) 설정

에이전트의 어조를 바꾸는 미리 정의된 성격을 설정할 수 있습니다.

1
2
3
/personality pirate
/personality kawaii
/personality concise

내장 성격: helpful, concise, technical, creative, teacher, kawaii, catgirl, pirate, shakespeare, surfer, noir, uwu, philosopher, hype

~/.hermes/config.yaml에서 커스텀 성격을 정의할 수도 있습니다.

1
2
3
4
personalities:
  helpful: "You are a helpful, friendly AI assistant."
  kawaii: "You are a kawaii assistant! Use cute expressions..."
  pirate: "Arrr! Ye be talkin' to Captain Hermes..."

3-8. 에이전트 중단 방법

에이전트가 너무 오래 걸릴 때 중단하는 방법은 두 가지입니다.

  • 에이전트가 작동 중인 동안 새 메시지를 입력하고 Enter를 누르면 현재 작업을 중단하고 새 지시로 전환합니다.
  • Ctrl+C를 눌러도 현재 작업을 중단합니다 (2초 내 두 번 누르면 강제 종료).

진행 중인 터미널 명령은 즉시 종료됩니다 (SIGTERM 후 1초 뒤 SIGKILL).

Busy Input Mode

에이전트가 작동 중일 때 Enter를 누르면 어떻게 동작할지 설정할 수 있습니다.

모드동작
interrupt (기본값)현재 작업을 중단하고 즉시 처리
queue메시지를 조용히 대기열에 넣고 에이전트가 끝난 후 다음 차례로 전송
steer다음 도구 호출 후 현재 실행에 메시지를 주입 — 중단 없이 방향 전환
1
2
3
# ~/.hermes/config.yaml
display:
  busy_input_mode: "steer"

CLI 내에서도 변경 가능합니다.

1
2
3
/busy queue
/busy steer
/busy interrupt

3-9. 도구 진행 상황 표시

에이전트가 작동 중일 때 CLI는 애니메이션 피드백을 보여줍니다.

생각 중 애니메이션:

1
2
3
  ◜ (。•́︿•̀。) pondering... (1.2s)
  ◠ (⊙_⊙) contemplating... (2.4s)
  ✧٩(ˊᗜˋ*)و✧ got it! (3.1s)

도구 실행 피드:

1
2
3
  ┊ 💻 terminal `ls -la` (0.3s)
  ┊ 🔍 web_search (1.2s)
  ┊ 📄 web_extract (2.1s)

/verbose로 표시 모드를 순환할 수 있습니다: offnewallverbose


3-10. 세션 관리

세션 재개

세션을 종료하면 재개 명령이 출력됩니다.

1
2
3
4
5
6
Resume this session with:
  hermes --resume 20260225_143052_a1b2c3

Session:    20260225_143052_a1b2c3
Duration:   12m 34s
Messages:   28 (5 user, 18 tool calls)

재개 방법은 여러 가지입니다.

1
2
3
4
5
hermes --continue                          # 가장 최근 CLI 세션 재개
hermes -c                                  # 단축형
hermes -c "my project"                     # 이름으로 세션 재개 (계보 내 최신)
hermes --resume 20260225_143052_a1b2c3     # ID로 특정 세션 재개
hermes --resume "refactoring auth"         # 제목으로 재개

재개하면 모든 이전 메시지, 도구 호출, 응답이 SQLite에서 복원되어 마치 그 자리를 떠난 적 없는 것처럼 에이전트가 전체 히스토리를 볼 수 있습니다.

세션 저장소

CLI 세션은 ~/.hermes/state.db SQLite 데이터베이스에 저장됩니다. 데이터베이스는 세션 메타데이터, 메시지 히스토리, 압축/재개 전반의 계보(lineage), 전문 검색 인덱스를 유지합니다.


3-11. 컨텍스트 압축

대화가 길어지면 컨텍스트 한계에 접근할 때 자동으로 중간 턴들이 요약됩니다.

1
2
3
4
5
6
7
8
9
# ~/.hermes/config.yaml
compression:
  enabled: true
  threshold: 0.50    # 컨텍스트 한계의 50%에서 압축

auxiliary:
  compression:
    model: ""  # 비워두면 기본 채팅 모델 사용. 또는 저렴한 빠른 모델 지정 가능
               # 예: "google/gemini-3-flash-preview"

압축이 실행되면 처음 3개 턴과 마지막 20개 턴은 항상 보존하고, 중간 턴들이 요약됩니다.


3-12. 백그라운드 세션

현재 CLI를 계속 사용하면서 별도 백그라운드 세션에서 프롬프트를 실행할 수 있습니다.

1
/background /var/log의 로그를 분석하고 오늘의 오류를 요약해줘

즉시 확인 메시지와 함께 프롬프트가 돌아옵니다.

1
2
🔄 Background task #1 started: "Analyze the logs in /var/log and summarize..."
   Task ID: bg_143022_a1b2c3

백그라운드 에이전트는 현재 세션 히스토리를 모르는 완전히 독립된 세션으로 실행됩니다. 현재 세션의 모델, 프로바이더, 툴셋, 추론 설정은 상속받습니다. 여러 백그라운드 작업을 동시에 실행할 수 있으며, 각각 번호가 붙은 ID를 받습니다.

작업이 완료되면 결과가 터미널에 패널로 표시됩니다.

1
2
3
4
5
6
╭─ ⚕ Hermes (background #1) ──────────────────────────────────╮
│ 오늘 syslog에서 3개의 오류를 찾았습니다:                     │
│ 1. 03:22에 OOM killer 실행 — nginx 프로세스 종료             │
│ 2. 07:15에 /dev/sda1 디스크 I/O 오류                        │
│ 3. 14:30에 192.168.1.50으로부터 SSH 로그인 시도 실패         │
╰──────────────────────────────────────────────────────────────╯

4. Docker로 운영하기

4-1. Docker와 Hermes의 두 가지 관계

Docker는 Hermes와 두 가지 방식으로 교차합니다.

  1. Hermes를 Docker 안에서 실행 — 에이전트 자체가 컨테이너 안에서 동작합니다 (이 섹션의 주요 내용).
  2. Docker를 터미널 백엔드로 사용 — 에이전트는 호스트에서 실행하지만, 모든 터미널 명령을 단일한 영구 Docker 샌드박스 컨테이너 안에서 실행합니다.

이 섹션은 방법 1에 집중합니다.


4-2. 빠른 시작

처음이라면 대화형으로 컨테이너를 실행해 설정 마법사를 완료합니다.

1
2
3
4
mkdir -p ~/.hermes
docker run -it --rm \
  -v ~/.hermes:/opt/data \
  nousresearch/hermes-agent setup

이 명령으로 설정 마법사가 실행되어 API 키를 물어보고 ~/.hermes/.env에 저장합니다. 이 과정은 최초 한 번만 필요합니다.


4-3. 게이트웨이 모드로 실행

설정이 완료된 후 백그라운드에서 영구 게이트웨이로 실행합니다.

1
2
3
4
5
6
docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  nousresearch/hermes-agent gateway run

포트 8642는 게이트웨이의 OpenAI 호환 API 서버와 헬스 엔드포인트를 노출합니다. 텔레그램, 디스코드 같은 채팅 플랫폼만 사용한다면 포트 노출은 선택 사항입니다. 대시보드나 외부 도구에서 게이트웨이에 접근하려면 필요합니다.

API 서버를 외부에 노출하려면 추가 환경 변수가 필요합니다.

1
2
3
4
5
6
7
8
9
10
docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  -e API_SERVER_ENABLED=true \
  -e API_SERVER_HOST=0.0.0.0 \
  -e API_SERVER_KEY="$(openssl rand -hex 32)" \
  -e API_SERVER_CORS_ORIGINS='*' \
  nousresearch/hermes-agent gateway run

보안 경고: 인터넷에 연결된 기기에서 포트를 여는 것은 보안 위험입니다. 위험을 충분히 이해한 경우에만 하세요.


4-4. 대시보드 실행

내장 웹 대시보드는 게이트웨이와 같은 컨테이너 안에서 선택적 사이드 프로세스로 실행됩니다. HERMES_DASHBOARD=1을 설정하면 컨테이너 루프백(127.0.0.1)에서 대시보드가 실행됩니다.

1
2
3
4
5
6
7
docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  -e HERMES_DASHBOARD=1 \
  nousresearch/hermes-agent gateway run

대시보드 관련 환경 변수 목록입니다.

환경 변수설명기본값
HERMES_DASHBOARD1로 설정 시 대시보드를 메인 명령과 함께 실행미설정 (대시보드 미시작)
HERMES_DASHBOARD_HOST대시보드 HTTP 서버 바인드 주소127.0.0.1
HERMES_DASHBOARD_PORT대시보드 HTTP 서버 포트9119
HERMES_DASHBOARD_TUI1로 설정 시 브라우저 내 Chat 탭 노출미설정

기본적으로 대시보드는 루프백에 머물러 인증되지 않은 웹 서페이스가 네트워크에 노출되지 않습니다.


4-5. 인터랙티브 CLI 채팅

1
2
3
docker run -it --rm \
  -v ~/.hermes:/opt/data \
  nousresearch/hermes-agent

이미 실행 중인 컨테이너에 터미널을 연 경우에는 다음으로 직접 실행합니다.

1
/opt/hermes/.venv/bin/hermes

4-6. 영구 볼륨 구성

/opt/data 볼륨은 모든 Hermes 상태의 단일 진실의 원천(source of truth)입니다. 호스트의 ~/.hermes/ 디렉토리에 매핑됩니다.

경로내용
.envAPI 키와 시크릿
config.yamlHermes 전체 설정
SOUL.md에이전트 성격/정체성
sessions/대화 기록
memories/영구 메모리 저장소
skills/설치된 스킬
cron/예약 작업 정의
hooks/이벤트 훅
logs/런타임 로그
skins/커스텀 CLI 스킨

경고: 같은 데이터 디렉토리에 두 개의 Hermes 게이트웨이 컨테이너를 동시에 실행하지 마세요. 세션 파일과 메모리 저장소는 동시 쓰기를 지원하지 않습니다.


4-7. 멀티 프로파일 운영

Docker 환경에서는 Hermes 내장 멀티 프로파일 기능보다 프로파일당 컨테이너 하나를 권장합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 업무 프로파일
docker run -d \
  --name hermes-work \
  --restart unless-stopped \
  -v ~/.hermes-work:/opt/data \
  -p 8642:8642 \
  nousresearch/hermes-agent gateway run

# 개인 프로파일
docker run -d \
  --name hermes-personal \
  --restart unless-stopped \
  -v ~/.hermes-personal:/opt/data \
  -p 8643:8642 \
  nousresearch/hermes-agent gateway run

컨테이너 분리의 이점은 이렇습니다. 각 컨테이너는 자체 파일 시스템, 프로세스 테이블, 리소스 한계를 가져 완전한 격리가 이루어집니다. 한 프로파일의 충돌이나 폭주 세션이 다른 프로파일에 영향을 주지 않습니다. 각 에이전트를 독립적으로 업그레이드·재시작·일시 중지·롤백할 수 있습니다.

Docker Compose로 멀티 프로파일 구성:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
services:
  hermes-work:
    image: nousresearch/hermes-agent:latest
    container_name: hermes-work
    restart: unless-stopped
    command: gateway run
    ports:
      - "8642:8642"
    volumes:
      - ~/.hermes-work:/opt/data

  hermes-personal:
    image: nousresearch/hermes-agent:latest
    container_name: hermes-personal
    restart: unless-stopped
    command: gateway run
    ports:
      - "8643:8642"
    volumes:
      - ~/.hermes-personal:/opt/data

4-8. Docker Compose 전체 예시

게이트웨이와 대시보드를 함께 실행하는 완전한 구성입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
services:
  hermes:
    image: nousresearch/hermes-agent:latest
    container_name: hermes
    restart: unless-stopped
    command: gateway run
    ports:
      - "8642:8642"   # 게이트웨이 API
      - "9119:9119"   # 대시보드 (HERMES_DASHBOARD=1일 때만)
    volumes:
      - ~/.hermes:/opt/data
    environment:
      - HERMES_DASHBOARD=1
      # 아래 주석 해제로 .env 파일 대신 환경 변수로 API 키 전달 가능:
      # - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      # - OPENAI_API_KEY=${OPENAI_API_KEY}
      # - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
    deploy:
      resources:
        limits:
          memory: 4G
          cpus: "2.0"

실행 및 로그 확인:

1
2
docker compose up -d
docker compose logs -f

대시보드 출력은 [dashboard] 접두사로 구분됩니다.


4-9. 리소스 권장 사양

리소스최소권장
메모리1 GB2–4 GB
CPU1 코어2 코어
디스크 (데이터 볼륨)500 MB2+ GB (세션/스킬이 쌓일수록 증가)

브라우저 자동화(Playwright/Chromium)가 가장 메모리를 많이 사용합니다. 브라우저 도구가 필요 없다면 1 GB면 충분합니다.

1
2
3
4
5
6
docker run -d \
  --name hermes \
  --restart unless-stopped \
  --memory=4g --cpus=2 \
  -v ~/.hermes:/opt/data \
  nousresearch/hermes-agent gateway run

4-10. 로컬 추론 서버(vLLM, Ollama 등) 연결

Hermes Docker와 추론 서버를 함께 사용할 때 네트워킹에 주의가 필요합니다.

Docker Compose 방식 (권장)

두 서비스를 같은 Docker 네트워크에 놓는 것이 가장 안정적입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
services:
  vllm:
    image: vllm/vllm-openai:latest
    container_name: vllm
    command: >
      --model Qwen/Qwen2.5-7B-Instruct
      --served-model-name my-model
      --host 0.0.0.0
      --port 8000
    ports:
      - "8000:8000"
    networks:
      - hermes-net

  hermes:
    image: nousresearch/hermes-agent:latest
    container_name: hermes
    restart: unless-stopped
    command: gateway run
    volumes:
      - ~/.hermes:/opt/data
    networks:
      - hermes-net

networks:
  hermes-net:
    driver: bridge

~/.hermes/config.yaml에서 컨테이너 이름을 호스트명으로 사용합니다.

1
2
3
4
5
model:
  provider: custom
  model: my-model
  base_url: http://vllm:8000/v1
  api_key: "none"

localhost127.0.0.1이 아니라 컨테이너 이름(vllm)을 호스트명으로 사용합니다. base_url 끝에 슬래시(/)를 붙이지 마세요.

Standalone Docker run 방식

추론 서버가 호스트에서 실행 중이라면 플랫폼별로 다르게 설정합니다.

  • macOS / Windows: host.docker.internal 사용
  • Linux: --network host 옵션 사용

연결 확인

1
docker exec hermes curl -s http://vllm:8000/v1/models

JSON 응답이 돌아오면 정상입니다.


4-11. Docker 이미지 구성

공식 이미지는 debian:13.4 기반이며 다음이 포함되어 있습니다.

  • Python 3 및 모든 Hermes 의존성 (uv pip install -e ".[all]")
  • Node.js + npm (브라우저 자동화 및 WhatsApp 브릿지)
  • Playwright + Chromium
  • ripgrep, ffmpeg, git, tini
  • docker-cli — 컨테이너 안에서 호스트의 Docker 데몬을 제어할 수 있음 (/var/run/docker.sock 마운트 필요)
  • openssh-client — 컨테이너화된 설치에서 SSH 터미널 백엔드 활성화
  • WhatsApp 브릿지

엔트리포인트(docker/entrypoint.sh)는 최초 실행 시 데이터 볼륨을 초기화합니다. 디렉토리 구조 생성, .env.example.env 복사, 기본 config.yamlSOUL.md 복사, 번들 스킬 동기화 등을 처리하고, HERMES_DASHBOARD=1이면 대시보드를 백그라운드 사이드 프로세스로 실행한 뒤 hermes를 시작합니다.


4-12. 업그레이드

1
2
3
4
5
6
7
docker pull nousresearch/hermes-agent:latest
docker rm -f hermes
docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  nousresearch/hermes-agent gateway run

또는 Docker Compose를 사용하는 경우:

1
2
docker compose pull
docker compose up -d

데이터 디렉토리는 그대로 유지됩니다.


4-13. Docker 문제 해결

문제원인 및 해결 방법
컨테이너가 즉시 종료됨docker logs hermes로 확인. 주로 .env 파일 없음/잘못됨 또는 포트 충돌
“Permission denied” 오류컨테이너가 UID 10000의 non-root hermes 사용자로 실행됨. chmod -R 755 ~/.hermes 실행
브라우저 도구가 작동 안 함Playwright는 공유 메모리가 필요함. --shm-size=1g 추가
게이트웨이가 네트워크 오류 후 재연결 안 됨docker restart hermes로 컨테이너 재시작. --restart unless-stopped 플래그가 대부분의 일시적 오류를 처리함

컨테이너 상태 확인

1
2
3
docker logs --tail 50 hermes          # 최근 로그
docker run -it --rm nousresearch/hermes-agent:latest version  # 버전 확인
docker stats hermes                    # 리소스 사용량

빠른 참조 명령어

명령어설명
hermes채팅 시작
hermes --tui모던 TUI로 채팅 시작
hermes modelLLM 프로바이더 및 모델 선택
hermes tools플랫폼별 활성화 도구 설정
hermes setup전체 설정 마법사
hermes doctor문제 진단
hermes update최신 버전으로 업데이트
hermes gateway메시징 게이트웨이 시작
hermes --continue마지막 세션 재개
hermes sessions list세션 목록 보기

작성일: 2026년 5월 24일
참고: Nous Research 공식 Hermes Agent 문서 (hermes-agent.nousresearch.com) — Quickstart, Installation, CLI Interface, Docker

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.