작성일: 2026-10-07
기준 자료: Hermes Agent 공식 문서(GitHub NousResearch/hermes-agent의 website/docs/, 커밋 a50406d, 2026-10-07). 같은 날 이 맥에 설치된 버전(Hermes Agent v0.21.5, upstream a50406d9)과 같은 커밋이다. Hermes는 업데이트가 매우 잦으므로, 몇 달 뒤 읽는다면 명령어와 기본값을 문서에서 다시 확인한다.
목표: Claude Code와 Codex를 이미 매일 쓰는 사람이 “Hermes에서는 이걸 어떻게 하지?”를 바로 찾을 수 있게 하기. 특히 SOUL.md가 CLAUDE.md와 어떻게 다르게 돌아가는지, 여러 에이전트를 어떻게 편하게 굴리는지, 대시보드에서 무엇을 볼 수 있는지, 프로젝트 기능이 있는지를 정리한다.
Git worktree가 낯설면 Git 입문을, 컨테이너 샌드박스가 낯설면 Docker 입문을 먼저 읽는 편이 좋다.
한 줄로 먼저
Hermes Agent는 Nous Research가 만든 오픈소스 개인 에이전트다. 터미널 코딩 에이전트(Claude Code·Codex와 같은 계열)에 “항상 켜져 있는 비서” 기능을 붙인 것이라고 보면 된다.
Claude Code와 가장 크게 다른 점은 세 가지다.
상주한다.hermes gateway라는 백그라운드 프로세스가 계속 돌면서 Telegram·Slack 메시지를 받고, cron 작업을 실행하고, kanban 카드를 일꾼 에이전트에게 나눠 준다.
스스로 배운다. 대화 중에 알게 된 사실을 MEMORY.md·USER.md에 직접 적고, 반복되는 작업 절차를 skill로 직접 만든다. 공식 문서는 이것을 “built-in learning loop”라고 부른다.
모델에 묶여 있지 않다. Anthropic, OpenAI Codex(ChatGPT 구독), OpenRouter, Nous Portal, 로컬 모델 등을 hermes model로 고른다.
┌────────── 사람이 들어오는 문 ──────────┐ 터미널(hermes, hermes --tui) Desktop 앱 웹 대시보드 Telegram/Slack/... └──────────────┬──────────────────────────┘ ▼ Hermes 에이전트 (profile 단위) SOUL.md · MEMORY.md · USER.md · skills · config.yaml │ ┌─────────────┬───────┴───────┬──────────────┐ ▼ ▼ ▼ ▼ delegate_task cron 작업 kanban 일꾼 /loop·/goal (세션 안 하위 (매번 새 세션) (profile별 OS (지금 세션 안에서 에이전트) 프로세스) 반복)
0. 파일 지도: ~/.hermes 안에 무엇이 있나
Hermes의 모든 상태는 기본적으로 ~/.hermes/ 아래에 있다. Claude Code의 ~/.claude/에 해당한다.
경로
역할
Claude Code에서 비슷한 것
~/.hermes/config.yaml
모든 설정
~/.claude/settings.json
~/.hermes/.env
API 키, 봇 토큰
환경 변수
~/.hermes/SOUL.md
에이전트 정체성(말투·성격)
output style + 전역 CLAUDE.md의 말투 부분
~/.hermes/memories/MEMORY.md, USER.md
에이전트가 직접 쓰는 기억
auto-memory MEMORY.md
~/.hermes/skills/
skill 모음
~/.claude/skills/
~/.hermes/state.db
모든 세션 기록(SQLite, 전문 검색 가능)
~/.claude/projects/*.jsonl
~/.hermes/cron/jobs.json
예약 작업
(Claude Code는 세션 안 cron만 있음)
~/.hermes/kanban.db
kanban 보드
없음
~/.hermes/profiles/<이름>/
다른 profile의 홈 전체
없음(가장 가까운 것은 별도 config dir)
profile을 만들면 위 구조 전체가 ~/.hermes/profiles/<이름>/ 아래에 한 벌 더 생긴다. 출처: user-guide/which-file-does-what.md, user-guide/profiles.md.
1. 설치와 첫 실행
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash # macOS/Linux/WSL2hermes setup # 대화형 설정 마법사hermes model # 모델·제공자 고르기hermes # 클래식 CLIhermes --tui # 새 TUI (문서가 "recommended"라고 표시)hermes desktop # Desktop 앱 (macOS는 Apple Silicon만 지원)hermes doctor # 문제 진단
코드는 ~/.hermes/hermes-agent/, 실행 파일은 ~/.local/bin/hermes, 데이터는 ~/.hermes/에 들어간다.
Anthropic은 API 키 또는 “Max plan + extra usage credits(OAuth)“로 붙는다. OpenAI Codex는 ChatGPT·Codex 구독으로 hermes model에서 device code 인증을 한다.
Claude Code·Codex 로그인을 빌려 쓴다. Hermes는 ~/.codex/auth.json과 Claude Code 자격 증명을 가져다 쓸 수 있다(auth.adopt_external_logins, 기본 true). refresh token이 한 번 쓰면 바뀌는 방식이라 원래 CLI와 충돌할 수 있다. 충돌이 보이면 auth.adopt_external_logins: false로 끈다.
SOUL.md는 “누구인가”(말투·성격·태도), AGENTS.md·CLAUDE.md는 “이 저장소에서 어떻게 일하나”(규칙·경로·명령어) 를 담는다. 공식 가이드도 저장소 규칙·경로·포트 같은 것은 SOUL.md가 아니라 AGENTS.md에 넣으라고 한다.
SOUL.md는 전역 하나(profile마다 하나) 뿐이다. 프로젝트 폴더에 SOUL.md를 두어도 읽지 않는다.
프로젝트 파일은 한 종류만 읽는다. AGENTS.md가 있으면 CLAUDE.md는 무시된다. Claude Code처럼 여러 파일이 합쳐지지 않는다.
2-2. 시스템 프롬프트 조립 순서
Hermes는 시스템 프롬프트를 세 층으로 쌓고, 통째로 캐시한다. 그래서 어느 파일을 고쳐도 새 세션부터 반영된다.
[stable 층] 1. 정체성: SOUL.md (없거나 비어 있으면 내장 기본 문구) 2. 도구·모델 안내, 코딩 작업 지침, 플랫폼 힌트[context 층] 3. 프로젝트 파일 (.hermes.md / AGENTS.md / CLAUDE.md / .cursorrules 중 하나) 4. git 작업 공간 스냅샷[volatile 층] 5. skill 목록(index) 6. MEMORY.md 스냅샷, USER.md 스냅샷 7. 외부 메모리 제공자 블록(Honcho 등, 켰을 때만) 8. 시각·세션·모델·cwd 줄
출처: developer-guide/prompt-assembly.md. 같은 문서 안의 예시와 personality.md는 이 순서를 조금 다르게 그린다. 위의 층 구분이 가장 자세한 설명이다.
2-3. SOUL.md
위치: ~/.hermes/SOUL.md(profile을 쓰면 ~/.hermes/profiles/<이름>/SOUL.md). 작업 폴더는 절대 찾아보지 않는다.
시스템 프롬프트의 1번 자리에 들어가며, 내장 정체성 문구(“You are Hermes Agent, built by Nous Research…“)를 통째로 대체한다. 감싸는 문구도 붙지 않는다.
파일이 없으면 Hermes가 기본 SOUL.md를 한 번 만들어 주고, 이미 있으면 절대 덮어쓰지 않는다.
길이 제한: context_file_max_chars를 따로 정하지 않으면 모델의 컨텍스트 크기에 비례해 정해진다(최소 20,000자, 최대 500,000자). 넘치면 앞 70%와 뒤 20%만 남기고 가운데를 자른다.
보안 검사: 내가 쓴 SOUL.md에서 프롬프트 주입 같은 패턴이 걸리면 경고만 하고 그대로 읽는다. 프로젝트 파일(AGENTS.md 등)에서 걸리면 [BLOCKED: ...]로 막는다.
하위 에이전트(delegate_task)는 SOUL.md를 받지 않고 내장 정체성으로 시작한다.
.hermes.md: Hermes 전용, 가장 높은 우선순위. cwd에서 git 루트까지 위로 올라가며 찾는다.
AGENTS.override.md: 같은 폴더의 AGENTS.md를 대신 읽는다. git에 올리지 않는 개인용 덮어쓰기 용도다.
git 저장소 안이면 git 루트부터 cwd까지 AGENTS.md를 사슬로 이어 읽는다(깊은 쪽이 나중에 와서 우선). git 밖이면 cwd만 본다.
작업 중에 도구가 하위 폴더를 건드리면, 그 폴더의 AGENTS.md·CLAUDE.md를 찾아 도구 결과 뒤에 붙인다(파일당 32,000자 제한). 시스템 프롬프트 캐시를 깨지 않으려는 설계다.
사용자 전역 CLAUDE.md(~/.claude/CLAUDE.md)에 해당하는 “전역 규칙 파일”은 문서에 없다.
이 vault에 적용하면: vault 루트에는 AGENTS.md와 CLAUDE.md가 둘 다 있다. 따라서 Hermes는 AGENTS.md만 읽고 CLAUDE.md는 읽지 않는다. vault는 git 저장소가 아니므로 cwd의 파일만 본다. 또 파일 하나를 읽는 데 context_file_read_timeout(기본 5초)보다 오래 걸리면 경고와 함께 건너뛴다. 문서가 iCloud Drive를 그 예로 직접 든다. CLAUDE.md에만 있는 규칙(교양 노트 Reading-Status, paper 13키 계약 등)을 Hermes도 지키게 하려면 그 내용을 AGENTS.md에도 넣거나 .hermes.md를 따로 만들어야 한다.
직접 만들기: config.yaml의 agent.personalities.<이름>: "프롬프트 문장". 내장 이름을 다시 쓰면 덮어쓴다.
해제: /personality none.
메신저 채팅 안에서도 된다.
platform_hints.<플랫폼>: 터미널·Telegram 등 화면별 서식 힌트(예: “터미널이니 Markdown 쓰지 마라”). append/replace를 고를 수 있다.
agent.reasoning_effort(none부터 ultra까지)와 /reasoning show|hide: 생각 깊이와 표시 여부.
agent.text_verbosity: 답변 길이. OpenAI Responses API 모델에서만 동작한다.
skin(/skin, display.skin): CLI의 겉모양만 바꾼다(배너 색, 스피너, 라벨). 모델 행동에는 영향이 없다고 문서가 명시한다.
지금 쓰는 Claude Code output style(결론 먼저, 짧은 문장, 한국어)을 Hermes로 옮기려면, 그 본문을 ~/.hermes/SOUL.md에 넣는 것이 가장 가깝다. 메신저용 말투를 따로 두고 싶으면 agent.personalities에 하나 더 만들어 /personality로 바꾼다.
profile 하나 = Bot 하나다. 새로운 개념이 아니라 profile을 이름·역할·아바타가 있는 “동료”처럼 보여 주는 UI다.
Desktop 앱에 내장돼 있고 기본으로 켜져 있다. 왼쪽 사이드바의 Bots 탭에서 보인다. 끄려면 Capabilities → Plugins → Bots.
핵심 개념:
Bot Chat: Bot마다 하나 있는 영구 대화. 이 안에서 /new·/reset을 치면 /compact로 바뀐다.
Routines: Bot에 붙은 반복 작업. 실체는 [bot:<이름>] ... 이름의 평범한 cron 작업이다.
그룹 채팅: Bot 2–6개가 한 방에서 토론한다. 메시지 하나에 최대 3라운드, 10개 메시지까지. Bot이 @user로 나를 부르면 “needs you” 표시가 뜬다.
Bot끼리 메시지: 아무 채팅에서 @researcher 이거 봐 줘라고 하면 그 Bot이 message_agent 도구로 자기 말로 전달한다. 받는 Bot은 다음에 실행될 때 읽는다.
터미널과 1:1로 대응한다.
hermes -p <bot> chat # 그 Bot과 대화ls ~/.hermes/profiles/<bot>/ # 그 Bot의 파일·skill·메모리hermes cron list # Routines 보기
로컬 Bot은 각자 백엔드 프로세스를 띄운다. 동시에 살려 두는 수는 Settings → Advanced → Warm Bot Backends(기본 3개, 각 약 60MB)다.
Desktop 없이 터미널만 쓰면 message_agent가 나타나지 않는다. 손으로 hermes -p <bot> chat -c "Bot Chat" --create-if-missing을 하고, profile의 profile.yaml에 ui_meta: { hermes-bots: {} }를 넣어야 한다.
Bot Screen(Bot마다 가상 데스크톱)은 Linux gateway 호스트 전용이다. macOS에서는 제공되지 않는다.
hermes gateway는 하나의 백그라운드 프로세스로, 설정한 모든 메신저에 연결하고, 세션을 관리하고, cron과 kanban 디스패처도 함께 돌린다.
지원: Telegram, Discord, Slack, WhatsApp, Signal, SMS, Email, Matrix, Mattermost, Microsoft Teams, Google Chat, LINE, iMessage(BlueBubbles·Photon), IRC 등 약 30개, 그리고 Webhook과 OpenAI 호환 API 서버.
hermes gateway setup # 대화형 마법사hermes gateway # 앞에서 실행hermes gateway install # macOS: launchd 등록 (~/Library/LaunchAgents/ai.hermes.gateway.plist)hermes gateway start | stop | status | restarttail -f ~/.hermes/logs/gateway.log
hermes gateway를 실행하고, 봇과의 채팅에서 /sethome을 쳐서 cron 결과가 올 “홈 채널”로 정한다.
대시보드·Desktop의 Messaging → Telegram에 있는 Create with QR을 쓰면 위 과정을 자동으로 해 준다.
보안 모델
기본은 전원 거부다. allowlist(TELEGRAM_ALLOWED_USERS 등)에 있거나 DM pairing(hermes pairing approve telegram <코드>)을 거친 사람만 쓸 수 있다.
GATEWAY_ALLOW_ALL_USERS=true는 에이전트가 터미널을 쓸 수 있으므로 문서가 권하지 않는다.
위험한 명령은 승인을 받는다. approvals.mode가 smart(기본: 보조 LLM이 위험도 판단), manual(항상 묻기), off(= --yolo) 중 하나다. 채팅에서는 yes/no나 /approve·/deny로 답한다. 300초 안에 답이 없으면 거부로 처리한다.
rm -rf / 같은 하드라인 차단 목록과 내가 적은 approvals.deny(예: "git push --force*")는 yolo에서도 막힌다.
Docker·Modal 같은 컨테이너 터미널 백엔드에서는 승인 검사를 건너뛴다. 컨테이너가 경계라고 보기 때문이다.
채팅 안 세션
메신저 대화는 시간이 지나도 저절로 초기화되지 않는다./new나 /reset을 쳐야 새 대화가 된다.
그룹에서는 기본적으로 사람마다 세션이 따로다(group_sessions_per_user: true).
gateway가 돌고 있어야 실행된다. gateway가 60초마다 확인해서, 때가 된 작업마다 새 에이전트 세션을 띄운다. 그냥 CLI 대화를 열어 둔 것으로는 실행되지 않는다. Desktop 앱은 자체 타이머가 있어서 gateway 없이도 로컬 profile의 cron을 돌린다.
맥이 꺼져 있던 동안 놓친 반복 작업은 켜진 뒤 한 번만 따라잡는다(cron.catch_up_missed).
# 만들기 (셋 다 같은 결과)/cron add "every 2h" "Check server status" # 채팅에서hermes cron create "every 2h" "Check server status" # 터미널에서"매일 아침 9시에 HN AI 뉴스 요약해서 Telegram으로 보내 줘" # 그냥 말로# 관리hermes cron list | status | runs <id> | doctorhermes cron pause|resume|run|remove <id 또는 이름>hermes cron edit <id> --schedule "every 4h" --skill arxivhermes pause / hermes resume # 전체 비상 정지
일정 형식: in 30m(한 번), every 2h(간격), weekdays at 9am(자연어), 0 9 * * 1-5(cron 식). 자연어 일정은 cron.md에는 지원한다고 나오고 automate-with-cron.md에는 지원하지 않는다고 나온다. cron 식이 가장 안전하다.
결과 전달: --deliver telegram, telegram:<chat_id>, slack, discord:#채널, local(파일로만 저장), all 등. 에이전트의 마지막 답이 자동으로 전달된다.
답 전체가 [SILENT]이면 전달하지 않는다. “새 논문 없으면 [SILENT]만 답해” 같은 프롬프트에 쓴다.
작업 옵션:
--skill <이름>: skill을 붙인다.
--workdir <절대경로>: 그 폴더의 AGENTS.md·CLAUDE.md를 읽고 그 폴더에서 작업한다.
--model, --provider, --pin: 작업마다 모델을 고정한다. 고정한 작업은 fallback 제공자로 넘어가지 않고 실패한다.
--reasoning-effort: 작업마다 생각 깊이.
--continuity: 지난번 결과를 넣어 줘서 중복을 피하게 한다.
context_from: 다른 작업의 최근 결과를 앞에 붙여 “수집 → 선별 → 전달” 파이프라인을 만든다.
토큰을 안 쓰는 방법 두 가지:
--no-agent --script <파일>: LLM 없이 스크립트만 돌리고 stdout을 그대로 보낸다. 출력이 비면 조용히 넘어간다.
--script <파일>(agent 모드): 스크립트 출력의 마지막 줄이 {"wakeAgent": false}이면 그 회차는 LLM을 부르지 않는다.
스크립트는 반드시 ~/.hermes/scripts/ 안에 있어야 한다. Hermes 자체 Python에는 내 패키지가 없으므로 --interpreter ~/venvs/x/bin/python으로 내 가상환경을 지정한다.
/loop 5m 학습 로그 확인하고 끝났으면 LOOP_COMPLETE라고 답해 --times 60/loop status | pause | resume | stop/goal tests/ 아래 실패하는 테스트를 모두 고쳐라/goal gate add scripts/run_tests.sh # 이 명령이 exit 0이어야 판정 모델에게 넘어감/goal status | pause | resume | clear/heartbeat every 10m 배포 상태 확인하고 의미 있는 변화만 보고해/heartbeat status | pause | resume | clear
/loop는 Claude Code의 /loop와 같은 개념이다. 간격을 빼면 1분에서 시작해 답이 안 바뀌면 15분까지 늘린다. 세션당 하나, 기본 최대 100회(loops.max_ticks).
/goal은 “Ralph loop”, Codex CLI의 /goal과 같은 개념이다. 판정 모델이 매 턴 done/continue/blocked/wait를 판단한다. 기본 예산은 20턴(goals.max_turns). 판정은 auxiliary.goal_judge로 싼 모델에 맡길 수 있다. 판정 모델이 에러를 내면 “continue”로 처리하므로 턴 예산이 마지막 안전장치다.
shell hooks는 Claude Code hooks와 거의 같다. config.yaml의 hooks: 아래에 pre_tool_call 등을 적고, 스크립트가 exit code 2를 내면 도구 호출을 막는다(Claude Code·Cursor 호환). 처음 쓸 때 승인을 묻고 ~/.hermes/shell-hooks-allowlist.json에 기록한다. gateway·cron처럼 터미널이 없는 실행에서는 hooks_auto_accept: true 등을 켜지 않으면 새 hook이 조용히 등록되지 않는다.
webhook: POST http://host:8644/webhooks/<route>로 GitHub 이벤트 등을 받아 에이전트를 돌린다. hermes webhook subscribe ...로 추가한다. 공개 URL로 열면 payload를 통한 프롬프트 주입 위험이 있다.
Kanban은 모든 profile이 함께 쓰는 작업 보드다. 카드 하나가 작업 하나이고, 카드를 맡은 profile이 별도 OS 프로세스로 떠서 그 일을 한다. 문서는 이것을 “깨지기 쉬운 세션 안 subagent 무리”의 대안이라고 소개한다.
저장: ~/.hermes/kanban.db(SQLite). 보드를 더 만들면 ~/.hermes/kanban/boards/<slug>/kanban.db.
카드 상태: triage → todo → ready → running → (review) → done, 그리고 blocked, archived.
카드 담당자(assignee)는 profile 이름이다. 디스패처가 hermes -p <담당자> chat -q <프롬프트>를 띄우므로, 일꾼은 그 profile의 모델·SOUL.md·skill·메모리·.env를 그대로 쓴다.
디스패처는 gateway 안에서 60초마다 돈다. gateway가 꺼져 있으면 ready 카드가 그냥 쌓여 있다.
부모-자식 연결(link): 부모가 모두 done이 되면 자식이 ready로 올라간다. 자식은 부모의 결과 요약을 보고 시작한다.
일꾼은 셸 명령이 아니라 kanban_* 도구로 보드를 다룬다: kanban_show, kanban_heartbeat, kanban_complete, kanban_block, kanban_request_review, kanban_comment 등. 이 사용법은 시스템 프롬프트에 자동으로 들어가므로 따로 설치할 것이 없다.
단일 호스트 전용이다. 두 컴퓨터가 보드 하나를 공유하는 것은 지원하지 않는다.
7-2. 사람이 끼어드는 방법
triage: 대충 적은 아이디어를 넣는 칸. 기본 설정(kanban.auto_decompose: true)이면 디스패처가 profile 설명을 읽고 자동으로 쪼개서 적임자에게 자식 카드를 나눠 준다. 그래서 profile 설명을 잘 써 두는 것이 중요하다(hermes profile create --description "...").
일꾼이 막히면 kanban_block으로 멈추고 사람을 부른다. 사람은 댓글을 달고 풀어 준다.
Hermes에서 “여러 에이전트”는 네 층으로 나뉜다. 상황에 맞는 층을 고르는 것이 핵심이다.
층
무엇
오래 가나
사람 개입
언제
delegate_task
세션 안에서 하위 에이전트를 띄움
아니오(/stop·재시작 시 사라짐)
안 됨
짧은 병렬 조사, 새 눈으로 리뷰
profile
역할별로 완전히 분리된 에이전트
예
됨
연구용·코딩용·메신저용 분리
kanban
profile들에게 카드를 배분하는 큐
예(DB에 기록)
됨
여러 시간짜리, 여러 단계, 재시도 필요
Bot mode 그룹
profile 여러 개가 한 방에서 토론
예
됨
의견 비교, 브레인스토밍
8-1. profile
profile은 완전히 별개의 Hermes 홈이다. config.yaml, .env, SOUL.md, 메모리, 세션, skill, cron이 모두 따로다. 그래서 profile마다 모델과 말투를 다르게 줄 수 있다.
hermes profile create researcher --description "논문과 문서를 읽고 결과를 정리한다."hermes profile create coder --clone # 현재 설정·SOUL·skill·메모리 복사hermes profile list | use <이름> | show <이름> | delete <이름>researcher chat # = hermes -p researcher chat (별칭 자동 생성)
주의: profile은 샌드박스가 아니다. 파일 접근을 막지 않는다. 또 HOME을 바꾸지 않으므로 Claude Code·Codex·gh 로그인을 모든 profile이 공유한다. profile마다 따로 쓰려면 terminal.home_mode: profile.
한 profile을 두 에이전트가 동시에 쓰면 안 된다. 서로의 메모리 쓰기가 섞인다.
gateway는 호스트 하나가 모든 profile을 맡는 방식(multiplex)이 기본이다.
8-2. delegate_task (subagent)
기본 동시 10개(delegation.max_concurrent_children). Features Overview 페이지에는 아직 “3개”라고 남아 있지만, 상세 문서와 설정 예시는 10이다.
자식은 빈 대화에서 시작하고, 넘겨준 goal과 context, 그리고 프로젝트 파일(AGENTS.md 등)만 본다. 최종 요약만 부모에게 돌아온다.
모델은 전역 하나만 지정한다(delegation.model). 작업마다 모델을 바꾸려면 kanban 카드의 --model을 쓴다.
자식은 memory, clarify(사용자에게 질문), delegate_task를 못 쓴다. 기본 깊이는 1단계(delegation.max_spawn_depth: 1).
delegation.worktree_isolation: true면 자식마다 git worktree를 따로 준다.
TUI의 /agents(또는 Ctrl+T)에서 자식 트리와 비용을 보고, x로 하나를, X로 그 아래 전체를 멈춘다.
8-3. Claude Code·Codex를 Hermes에서 부리기
kanban 일꾼으로 바로 등록하는 기능은 아직 없다. worker lanes 문서는 Claude Code·Codex CLI lane이 “not yet a paved path”라고 적는다.
대신 기본 포함된 claude-code, codex skill로 Hermes가 터미널에서 직접 부린다.
Claude Code: claude -p '...' --allowedTools 'Read,Edit' --max-turns 10(print 모드), 또는 tmux 안의 대화형 TUI. 병렬이면 작업마다 tmux 세션 하나.
Codex: codex exec '<작업>'(git 저장소 필요, --sandbox workspace-write). 병렬이면 git worktree를 여러 개 만들고 각각 백그라운드로 실행.
gateway(서비스)에서 돌릴 때 Codex workspace-write 샌드박스가 bubblewrap 에러로 실패할 수 있다고 skill 문서가 경고한다.
Codex app-server runtime(/codex-runtime codex_app_server)은 다른 개념이다. Codex를 일꾼으로 쓰는 게 아니라, OpenAI 모델의 턴 실행 자체를 Codex 런타임에 맡긴다. ChatGPT 구독 인증과 Codex 샌드박스를 쓰는 대신 delegate_task, memory, session_search, todo가 빠진다. 베타다.
Mixture of Agents(/moa)는 여러 모델이 한 에이전트에게 조언하는 방식이다. 여러 에이전트가 나눠 일하는 것과는 다르다.
8-4. 추천 구성 (문서에 있는 기능만으로)
# 1) 역할별 profile + 설명 (triage 자동 분해가 이 설명을 읽는다)hermes profile create planner --description "목표를 카드로 쪼갠다. 직접 구현하지 않는다."hermes profile create coder --description "git worktree에서 코드를 고친다."hermes profile create researcher --description "논문·문서를 읽고 결과를 정리한다."hermes profile create reviewer --description "diff와 PR을 검토한다."# 2) 비싼 모델은 planner, 싼 모델은 일꾼 (각 profile의 config.yaml 또는 hermes -p <이름> model)# 3) planner에게 kanban 도구hermes -p planner tools enable kanban# 4) 프로젝트별 보드, 동시 실행 제한hermes kanban boards create thesis --name "Thesis" --switch# config.yaml: kanban: { max_in_progress: 3 }# 5) gateway 하나 (디스패처 + cron + 메신저)hermes gateway install# 6) 일 넣기 → 대시보드에서 보기 → 막히면 댓글로 풀기hermes kanban create "..." --triagehermes dashboard
coder 카드가 Claude Code나 Codex를 쓰게 하려면, 카드에 --skill claude-code(또는 codex)와 --workspace worktree를 붙이고 본문에 claude -p ... --max-turns N을 쓰라고 적는다. 이 조합은 문서의 부품을 이어 붙인 것이고, 공식 레시피는 아니다.
add-folder로 폴더·저장소를 추가하고, set-primary로 주 폴더를 정하고, use로 활성 프로젝트를 고른다.
bind-board로 kanban 보드를 묶으면, 카드에 일정한 worktree·branch 규칙이 붙고 주 폴더가 보드의 기본 작업 폴더가 된다.
상태는 profile마다 따로다. 정확한 인자 문법(create <이름> 등)은 문서에 나오지 않으니 hermes project --help로 확인한다.
Desktop 프로젝트 사이드바: Group by → Projects로 바꾸면 프로젝트마다 최근 세션 3개를 보여 주고, Show all N sessions로 펼친다.
프로젝트 목록은 세 곳에서 온다: hermes project로 만든 프로젝트, 내가 Hermes 세션을 연 git 저장소, 홈 디렉터리 자동 스캔으로 찾은 git 저장소.
스캔 범위 설정(config.yaml 또는 Settings → Workspace):
desktop: repo_scan_enabled: true # false면 스캔 중지 repo_scan_roots: [] # 비우면 홈 전체를 일정 깊이까지 repo_scan_exclude_paths: []
프로젝트에서 New worktree(Cmd+Shift+B)를 누르면 새 branch의 worktree가 만들어지고, 프로젝트 아래 별도 lane으로 보인다. 리뷰 창(Cmd+G)에서 stage·commit·push·Create PR까지 한다.
시작 폴더는 hermes desktop --cwd <경로>로 정한다.
웹 대시보드 Chat의 작업 폴더 선택기: 같은 프로젝트·저장소 목록에 Other path… 가 붙어 있다. 휴대폰에서 원격으로 특정 폴더에 새 대화를 열 때 쓴다.
터미널에서 폴더별 이어가기:
hermes --resume latest --in ./my-project # 이 폴더의 마지막 세션hermes sessions list --workspace my-project # 폴더(git 루트 또는 cwd) 기준 필터hermes -c # 같은 터미널 창의 마지막 세션hermes -c "세션 이름"
세션을 이어가면 원래 작업 폴더로 돌아간다(↪ restored workspace dir: …). 원하지 않으면 --no-restore-cwd.
Claude Code·Codex와 다른 점
세션은 profile마다 하나의 state.db 에 모두 들어간다. 프로젝트는 그 위에 얹은 묶음 보기다. Claude Code처럼 프로젝트 폴더별로 기록 파일이 나뉘지 않는다.
메모리(MEMORY.md)도 프로젝트가 아니라 profile 단위다. 프로젝트마다 기억을 완전히 나누고 싶으면 profile을 프로젝트별로 만드는 방법밖에 없다.
Desktop UI에서 “폴더를 골라 프로젝트로 열기” 버튼이 있는지는 문서에 나오지 않는다. 문서에 있는 방법은 hermes project, 자동 스캔, 세션을 연 폴더다.
터미널(CLI·TUI)에는 사이드바가 없다. 프로젝트 사이드바는 Desktop 전용이다.
다른 에이전트의 세션 가져오기
hermes sessions import --from claude # ~/.claude/projects/ 읽기 (원본은 건드리지 않음)hermes sessions import --from codexhermes --resume @claude # 최근 Claude Code 세션을 Hermes에서 이어가기
사용자·어시스턴트 대화만 넘어온다. 도구 실행은 [ran tool: …] 한 줄로 줄고, 시스템 프롬프트·추론·도구 원본 출력은 빠진다.
되돌리기(체크포인트)
기본은 꺼져 있다.hermes chat --checkpoints 또는 checkpoints: {enabled: true}로 켠다. 켜지 않으면 /rollback으로 되돌릴 것이 없다.
파일 쓰기·패치·위험한 터미널 명령 직전에 별도 shadow git 저장소(~/.hermes/checkpoints/store/)에 스냅샷을 찍는다. 프로젝트의 진짜 .git은 건드리지 않는다.
hermes cron create "0 8 * * *" \ "Search arXiv for the 5 most notable papers from the past 24 hours on 'LLM agents' and 'mechanistic interpretability'. For each: title, authors, arXiv URL, 2-sentence contribution. Under 400 words. If none, respond with only [SILENT]." \ --skill arxiv --name "arXiv digest" --deliver telegram --continuityhermes cron run "arXiv digest" # 바로 한 번 시험
전제: gateway가 돌고 있고, .env에 TELEGRAM_BOT_TOKEN과 홈 채널이 있고, arxiv skill이 설치돼 있다(hermes skills list로 확인. 기본 포함 여부는 문서에서 분명하지 않다).
B. 밤마다 vault lint, 문제 있을 때만 알림
~/.hermes/scripts/vault-check.sh에 vault의 python3 Public/_tools/lint.py를 돌리는 스크립트를 쓴다. 문제가 없으면 마지막 줄에 {"wakeAgent": false}를 출력한다.
모두 Hermes Agent 공식 문서다. 본문 괄호 안의 경로는 GitHub NousResearch/hermes-agent 저장소 website/docs/ 기준이며, 웹 문서는 https://hermes-agent.nousresearch.com/docs/ 뒤에 확장자 없이 같은 경로를 붙이면 된다. 확인일 2026-10-07, 커밋 a50406d.