얼마 전 GitHub 트렌딩에서 Hermes Agent라는 저장소를 발견했다. Nous Research라는 이름은 파인튜닝 커뮤니티에서 꽤 오래 들어왔던 곳이라 눈길이 갔다. 훑어보니 단순한 챗봇 래퍼가 아니라 “작업을 마치고 나서 스스로 스킬을 문서화한다”는 구조가 흥미로웠다. 맥미니 M4 8GB에 직접 올려봤다.
Nous Research와 Hermes 모델 계보
Nous Research는 오픈소스 AI 연구소다. 기업 규모는 크지 않지만 Hermes 파인튜닝 시리즈로 커뮤니티에서 이름을 알렸다. Tool calling, 함수 호출, 구조화된 출력에 특화된 파인튜닝이 주력이고, Atropos(RL 프레임워크), DisTrO(분산 학습) 같은 연구도 함께 진행한다.
Hermes Agent는 2026년 2월에 오픈소스로 공개됐다. 이름에서 알 수 있듯 Hermes 모델 계보 위에서 동작하는 자율 에이전트 프레임워크다. Telegram, Discord, Slack, WhatsApp 같은 메시징 플랫폼에 연결해 두면, 메시지를 받아 계획을 세우고, 웹 검색·코드 실행·파일 관리 등을 수행한다. 단순 작업 실행기와 다른 점은 **닫힌 학습 루프(closed learning loop)**다 — 복잡한 작업을 끝내고 나면 에이전트가 그 과정에서 발견한 절차, 함정, 검증 단계를 스킬 문서로 정리한다. 다음에 비슷한 작업이 오면 처음부터 추론하지 않고 저장된 스킬을 불러와 시작한다.
핵심 아키텍처
닫힌 학습 루프 (Closed Learning Loop)
일반 에이전트는 선형 구조다.
Task → Plan → Execute → Result → [끝]Hermes는 폐루프 구조다.
Task → Plan → Execute → Result
↓
Evaluate
↓
Write/Update Skill
↓
Store in Memory
↓
Next similar Task → [스킬 재사용]실행 결과가 다음 실행의 입력이 된다. 루프가 닫혀 있다는 표현이 정확하다.
자율 스킬 생성
복잡한 작업(tool call 5회 이상)이 완료되면 에이전트가 스스로 스킬 문서를 작성한다. 문서에는 태스크를 어떻게 분해했는지, 어떤 순서로 도구를 호출했는지, 어디서 실패했고 어떻게 우회했는지, 검증 단계는 무엇인지가 담긴다. 다음에 유사 작업이 들어오면 이 문서를 먼저 로드해 처음부터 탐색하지 않는다.
스킬 자기 개선
스킬은 한 번 쓰고 끝이 아니다. 사용할 때마다 결과를 비교해 업데이트한다.
기존 스킬 실행
↓
결과 비교 (신규 접근법 vs 기존 절차)
↓
신규 접근법이 더 나은가?
├── Yes → 스킬 문서 갱신
└── No → 기존 유지, 실패 케이스 주석 추가예를 들어 처음엔 뉴스 API를 직접 호출하는 방식으로 스킬이 만들어졌다가, 나중에 캐싱 방법이 발견되면 스킬이 캐싱 버전으로 교체된다.
계층형 메모리 스택
메모리는 네 계층으로 분리된다.
| 계층 | 내용 | 형태 |
|---|---|---|
| 영구 노트 | 에이전트가 curate한 핵심 사실 | Markdown |
| 세션 히스토리 | 전체 대화 기록 | SQLite + FTS5 전문 검색 |
| 사용자 모델 | 선호·패턴·결정 이력 | Honcho DB |
| 프로시저 메모리 | 스킬 라이브러리 | Markdown 디렉토리 |
핫/콜드 계층 분리 덕분에 매 턴마다 전체 기억을 컨텍스트에 욱여넣지 않고 관련된 것만 선택적으로 로드한다. 8GB 환경에서도 토큰 낭비가 줄어드는 이유다.
Honcho 변증법 사용자 모델링
단순히 “사용자가 이런 말 했음”을 기록하는 게 아니라, 대화를 통해 사용자 모델을 능동적으로 검증한다. 에이전트가 내부적으로 “이 사람은 이런 패턴을 선호할 것”이라는 가정을 세우고, 이후 결과에 대한 피드백을 받으면 맞으면 강화하고 틀리면 수정한다. 세션이 쌓일수록 “이 사람이 왜 이런 질문을 하는가”를 더 잘 예측하게 된다.
Nous Search
Hermes Agent의 검색 백엔드는 일반 웹 검색이 아니라 Nous Research가 자체 개발한 Nous Search를 사용한다. 일반 검색 결과보다 AI/기술 도메인에 특화된 결과를 반환하고, 에이전트 파이프라인에서 쓰기 좋은 구조화된 포맷으로 응답이 온다. API 키가 있으면 연동하고, 없으면 DuckDuckGo fallback으로 동작한다.
맥미니 M4 8GB에서 설치
내 환경은 맥미니 M4 기본형이다.
모델: Mac mini (Late 2024)
칩: Apple M4 (10-core CPU, 10-core GPU)
메모리: 8GB 통합 메모리
저장장치: 256GB SSD
OS: macOS Sequoia 15.4Ollama 공식 연동 활용
Hermes Agent는 Ollama 공식 통합 문서를 통해 공식 연동을 지원한다. 별도로 저장소를 클론하거나 가상환경을 직접 세팅하지 않고 인스톨 스크립트 한 줄로 시작할 수 있다.
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash설치가 끝나면 설정 마법사가 자동으로 실행된다. “More providers…” → “Custom endpoint”를 선택하고 Ollama 주소를 입력한다.
Provider: Custom endpoint
API Base URL: http://127.0.0.1:11434/v1
API Key: (공란)API 키 없이 로컬 모델에 바로 연결된다. Ollama가 실행 중이면 연결 가능한 모델 목록을 자동으로 감지해 보여준다.
수동으로 설치하는 경우 Python 3.11이 필요하다. pyenv로 버전을 맞추는 게 안전하다.
pyenv install 3.11.9
pyenv local 3.11.9
git clone https://github.com/NousResearch/hermes-agent
cd hermes-agent
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt설치 중 aiohttp, honcho-ai, duckduckgo-search 같은 패키지들이 줄줄이 딸려온다. 전체 설치 시간은 약 2분 정도였다.
모델 선택: 8GB 안에서 최대한
8GB 통합 메모리에서 LLM을 돌리면 OS와 에이전트 프로세스 오버헤드를 빼면 실질적으로 모델에 쓸 수 있는 메모리는 5~6GB 수준이다. Hermes Agent는 OpenAI 호환 엔드포인트를 쓰면 모델을 자유롭게 선택할 수 있다.
Ollama 공식 문서의 권장 모델은 gemma4(~16GB)와 qwen3.5(~11GB)인데, 둘 다 8GB에서는 동작하지 않는다.
| 모델 | 필요 메모리 | 8GB M4 적합 여부 |
|---|---|---|
| gemma4 | ~16GB | 불가 |
| qwen3.5 | ~11GB | 불가 |
| hermes3:8b-llama3.1-q4_K_M | ~4.9GB | 가능 |
| qwen2.5:7b-instruct-q4_K_M | ~4.7GB | 가능 |
8GB 환경에서는 아래 두 가지가 현실적인 선택지다.
ollama pull hermes3:8b-llama3.1-q4_K_M # 약 4.9GB, Hermes 계보 tool-calling 최적화
ollama pull qwen2.5:7b-instruct-q4_K_M # 약 4.7GB, 안정적인 대안처음엔 hermes3:8b를 시도했다. 같은 Hermes 계보라 도구 호출 포맷 호환성이 좋을 것 같았다.
ollama serve &서버가 뜨면 에이전트 설정 파일을 만든다.
cp .env.example .env.env를 열어 핵심 항목들을 채운다.
# 로컬 Ollama 엔드포인트
OPENAI_BASE_URL=http://localhost:11434/v1
OPENAI_API_KEY=ollama
MODEL_NAME=hermes3:8b-llama3.1-q4_K_M
# Telegram 봇 (선택)
TELEGRAM_BOT_TOKEN=your_bot_token_here
# Nous Search (없으면 DuckDuckGo fallback)
# NOUS_SEARCH_API_KEY=
# 메모리 저장 경로
MEMORY_PATH=./memory설정이 끝나면 에이전트를 실행한다.
python main.py처음 실행하면 memory/ 디렉토리가 생성되고 SQLite DB가 초기화된다.
[INFO] Initializing Hermes Agent...
[INFO] Memory backend: SQLite (./memory/agent.db)
[INFO] Skill store: ./memory/skills/
[INFO] Model: hermes3:8b-llama3.1-q4_K_M via http://localhost:11434/v1
[INFO] No Telegram token found. Running in CLI mode.
[INFO] Ready.CLI 모드로 바로 테스트할 수 있다.
>>> 최근 Llama 4 관련 뉴스를 찾아서 요약해줘
[TOOL] web_search("Llama 4 release 2026")
[TOOL] web_search("Llama 4 benchmark results")
[RESULT] 검색 완료 (DuckDuckGo fallback)
Llama 4는 Meta가 2026년 초에 공개한 모델로...
(요약 내용)
[SKILL] 작업 유형 'news_summary'에 대한 스킬 문서를 작성합니다.
[SKILL] ./memory/skills/news_summary_001.md 저장 완료처음 실행에서 바로 스킬 문서가 생성되는 걸 확인했다. memory/skills/ 폴더를 열어보면 Markdown 파일이 저장돼 있다.
# Skill: news_summary
## 개요
특정 주제의 최신 뉴스를 검색하고 구조화된 요약을 작성하는 절차
## 절차
1. 주제 키워드 추출
2. "{주제} release {year}" 형식의 검색 쿼리 생성
3. 검색 결과 상위 5개 파싱
4. 날짜 순 정렬 후 최신 3~5개 선택
5. 출처 링크 포함한 요약 작성
## 주의사항
- DuckDuckGo는 최근 24시간 내 결과가 부정확할 수 있음
- 날짜 확인 필수
## 검증
- 날짜가 현재 기준으로 최근인지 확인
- 출처가 신뢰할 수 있는 도메인인지 확인에이전트가 직접 작성한 문서다. 사람이 쓴 것처럼 자연스럽지는 않지만, 다음에 같은 유형의 작업이 들어오면 이 문서를 참고해 시작점을 높인다.
두 번째 실행: 스킬 재사용 확인
같은 세션에서 비슷한 요청을 다시 넣어봤다.
>>> Claude 4 관련 최근 소식 정리해줘
[SKILL] 'news_summary' 스킬 발견. 절차를 참고합니다.
[TOOL] web_search("Claude 4 release 2026")
[TOOL] web_search("Claude 4 benchmark 2026")
...도구 호출 순서가 첫 번째와 달라졌다. 스킬 문서에 적힌 절차를 따라 쿼리 패턴도 비슷해졌다. 완전히 새로운 추론을 하는 것보다 응답 시간이 체감상 빨랐다.
메모리 상태 확인
에이전트 내장 명령으로 현재 상태를 볼 수 있다.
>>> /memory status
[메모리 상태]
영구 노트: 3개
세션 히스토리: 14개 항목
스킬 문서: 2개
DB 크기: 0.2MB>>> /skills list
[저장된 스킬]
1. news_summary_001.md — 뉴스 요약 절차
2. code_review_001.md — 코드 리뷰 체크리스트아직 두 번밖에 안 썼는데 이미 두 개의 스킬이 쌓였다. 오래 쓸수록 에이전트가 점점 자신의 노하우를 축적해 간다는 느낌이 든다.
8GB 메모리 환경의 한계
솔직히 말하면 8GB에서 로컬 LLM으로 에이전트를 돌리는 건 타협이 많다. hermes3:8b는 도구 호출 포맷을 잘 따르고 스킬 문서도 나름 잘 작성하지만, 복잡한 멀티스텝 추론에서는 자주 길을 잃는다. 도구를 두 번, 세 번 연달아 써야 하는 작업에서 중간에 계획을 잊어버리는 경우가 있었다.
해결책은 두 가지다.
첫 번째는 클라우드 API를 붙이는 것이다. .env의 OPENAI_BASE_URL을 실제 OpenAI나 Anthropic 엔드포인트로 바꾸면 된다.
OPENAI_BASE_URL=https://api.anthropic.com/v1
OPENAI_API_KEY=sk-ant-...
MODEL_NAME=claude-haiku-4-5-20251001Claude Haiku는 속도와 비용 균형이 좋아서 에이전트처럼 도구 호출이 많은 용도에 잘 맞는다. 로컬에서는 메모리·스킬을 관리하고, 추론은 클라우드에 맡기는 하이브리드 구성이다.
두 번째는 모델을 더 작게 줄이는 것이다. Qwen 2.5 7B는 4.7GB라 macOS 시스템 영역과 에이전트 프로세스까지 합쳐도 8GB 안에 들어간다. hermes3:8b보다 도구 호출 품질이 조금 떨어지지만 안정적으로 돌아간다.
OpenClaw와 뭐가 다른가
지난번에 OpenClaw를 맥미니에 세팅하고 써봤는데, 비교해보면 지향점이 꽤 다르다.
| 항목 | Hermes Agent | OpenClaw |
|---|---|---|
| 핵심 콘셉트 | 자기 개선하는 에이전트 | 로컬 LLM 추론 엔진 |
| 학습 루프 | 자율 스킬 생성·재사용 | 없음 (매 작업 fresh start) |
| 플랫폼 연결 | Telegram, Discord, Slack 등 | 없음 (API 서버) |
| 메모리 | 계층형 (영구/세션/스킬) | 없음 |
| 보안 | 프롬프트 인젝션 스캐닝 내장 | 해당 없음 |
| 성숙도 | 초기 (2026.02~) | 안정적 |
OpenClaw는 “어떤 모델이든 빠르게 로컬에서 서빙”에 집중한다. API 서버를 띄우고 다른 도구들과 연결하는 인프라 역할이다. Hermes Agent는 그 위에 앉아서 실제로 작업을 수행하고 기억을 쌓는 에이전트 레이어다. 둘은 경쟁 관계라기보다 보완 관계에 가깝다 — OpenClaw로 모델을 서빙하고, Hermes Agent를 그 위에 얹는 구성이 가능하다.
생태계 면에서는 OpenClaw가 ClawHub(44,000+ 스킬)를 갖고 있어 훨씬 성숙하다. Hermes Agent의 agentskills.io는 아직 초기라 공유 스킬 수가 적다. 반면 Hermes Agent는 에이전트가 스스로 스킬을 만들기 때문에 공유 생태계 의존도가 낮다는 특징이 있다.
마치며
Hermes Agent에서 인상 깊었던 건 “에이전트가 자신의 경험을 문서화한다”는 발상이다. 사람도 반복 작업을 하다 보면 자기만의 체크리스트를 만들게 되는데, 에이전트에 그걸 자동화한 셈이다. 오래 쓸수록 점점 내 작업 패턴에 최적화된다는 기대가 생긴다.
8GB 맥미니에서는 로컬 모델만으로는 아직 한계가 있다. 에이전트 프레임워크 자체는 훌륭한데, 작은 모델이 복잡한 멀티스텝 계획을 따라가지 못하는 경우가 있어서 클라우드 API를 붙이는 게 현실적이다. 메모리와 스킬은 로컬에 쌓이니 프라이버시 걱정 없이 하이브리드로 쓸 수 있다.
OpenClaw와 비교하면 성숙도는 아직 떨어지지만, “작업할수록 나아지는 에이전트”라는 방향성 자체가 흥미롭다. Nous Research가 오픈소스 생태계에서 꾸준히 임팩트를 내온 곳이기도 해서 앞으로의 발전이 기대된다. 당장 일상 업무에 쓰기에는 좀 더 다듬어져야 할 것 같지만, 지켜볼 만한 프로젝트다.