사내에 LLM 에이전트 도입을 검토하면서 Nous Research의 Hermes Agent를 공부하고, 개인 맥북에어(M4칩, 16GB)에 완전 로컬(외부 API 0) 로 직접 세팅해본 기록. 개념 정리 + 설치 과정 + 실제로 밟은 지뢰들을 Q&A로 다 정리함.
0. 결론부터
- Hermes는 모델과 에이전트 두 가지를 가리킴. 이번 실험의 검토 대상은 에이전트.
- 맥북에어 16GB로 로컬 구동 자체는 성공함. 단, 속도·품질 대표성은 없음 → 단지 기능 확인용.
- 로컬로 붙일 때는 ① 툴콜 파서 ② 64K 컨텍스트 ③ thinking 지원 모델 선택 세 가지 체크 필요.
- 실사용 성능은 PoC 때 제대로 된 GPU + 27~35B 모델에서 봐야 함.
1. Hermes, 에르메스???
"Hermes"는 Nous Research에서 나온 건데 두 가지를 동시에 가리킴.
- Hermes 모델 (LLM) — Llama 3.1 파인튜닝 오픈소스 모델 시리즈. 최신은 Hermes 4. 강한 통제력·함수 호출·구조화 출력이 특징.
- Hermes Agent (에이전트 프레임워크) — 2026년 2월 출시, MIT 라이선스 오픈소스 자율 에이전트. 스킬을 스스로 만들고 개선하며 세션을 넘어 컨텍스트를 축적하는 학습 루프가 핵심.
내가 실험해본 건 에이전트 쪽.
⚠️ 함정 : 코딩 어시스턴트라도 Hermes 4 모델 자체는 Hermes Agent에 권장되지 않음. Nous가 "에이전트엔 agentic 모델을 쓰라"고 명시함.
2. Hermes Agent, 뭐가 특별한가
- 학습 루프 — 작업을 끝내면 재사용 스킬(Markdown)을 자동 생성하고, 쓰면서 개선함.
- 모델 agnostic — OpenAI 호환 엔드포인트면 다붙음. 로컬 모델로 완전 오프라인 운영 가능 → 데이터 반출 없이 돌릴 수 있음(사내망엔 이게 제일 큰 장점).
- MCP 연동 — 내부 API·DB·티켓팅을 native 툴 작성 없이 붙임(아래 3-2 참고).
- 서브에이전트 / execute_code / cron — 격리된 자식 에이전트, 파이썬으로 툴 묶기, 자연어 스케줄링.
3. 중요한 개념 두 개
3-1. 툴콜 파서(tool-call parser)란??
오랜만에 LLM쪽 공부하면서 제일 헷갈렸던 부분이다. LLM은 툴을 직접 실행하지 않음. 텍스트를 뱉을 뿐임.
에이전트가 명령을 실행할 때 모델은 실제로 명령을 돌리는 게 아니라 이런 텍스트를 출력함:
<tool_call>
{"name": "run_command", "arguments": {"cmd": "ls -la"}}
</tool_call>
이건 그냥 글자여서 누군가 이 글자를 읽고 "run_command 툴을 부르려는 거구나" 하고 알아채서 실제 실행해줘야 함. 이 역할을 하는 게 툴콜 파서.
비유하면 모델은 메모지에 요청을 적어 건네는 직원이고, 파서는 그 메모지를 읽어주는 사람임. 모델마다 글씨체(포맷)가 달라서 "이 포맷을 읽을 줄 아는 파서"를 지정해야 함. Hermes/Qwen 계열의 <tool_call> 포맷을 읽는 파서 이름이 hermes.
- Ollama — 모델 포맷 자동 감지 → 파서 자동. (맥에선 이 덕에 신경 안 써도 됨)
- vLLM — 기본이 "안 읽음". 플래그를 줘야 함:
vllm serve <model> --enable-auto-tool-choice --tool-call-parser hermes
플래그를 안 주면 <tool_call>...이 대화 텍스트로 취급돼서 화면에 글자만 찍히고 아무것도 실행 안 됨.
3-2. MCP와 "native 툴"의 차이
에이전트가 뭔가를 하려면 그 기능이 툴(tool) 로 등록돼 있어야 함. 사내 시스템(티켓팅 API, 사내 DB)은 기본 툴에 없으니 붙이는 방법이 두 가지.
- native 툴 = Hermes 소스에 툴을 코드로 직접 짜 넣는 것. 함수 정의·인증·스키마·에러 처리를 프레임워크에 박아야 함. → 프레임워크 버전 오르면 다시 맞춰야 할 수 있음.
- MCP 서버 = 표준 프로토콜. 사내 시스템을 MCP 서버로 감싸서 연결만 하면 그 기능들이 자동으로 툴 목록에 뜸. Hermes 코드는 안 건드림.
비유하면 native 툴은 직접 납땜, MCP는 표준 콘센트에 꽂기. 제품이 바뀌어도 다시 꽂으면 됨. 재사용성(다른 툴에도 그대로 붙음)·유지보수·버전 안정성 측면에서 MCP가 유리. 단 MCP 서버는 보안상 권한 스코프를 좁게 잡아야 함.
4. Goal 기능
/goal은 한 줄 목표를 던지면 재프롬프트 없이 달성까지 반복하는 기능. OpenAI Codex CLI의 /goal에서 온 "Ralph loop" 방식.
- 목표 입력 →
goal_judge보조 모델이 한 줄을 완전한 "계약"으로 확장(검증법·제약·범위·중단조건). - 목표 달성 / 사용자 중단 / 턴 예산 소진까지 프롬프트를 되먹여 작업 지속.
- 매 턴 판사(judge)가 계속/종료 판단.
↻ Continuing (2/20)→✓ Goal achieved.
목표가 모호하면 판정도 모호해짐 → 완료 정의 / 증명 방법 / 건드리면 안 되는 것 / 범위 / 중단 시점을 명시하는 게 핵심.
5. 맥북에어 16GB 로컬 세팅
삽질 다 걷어내고 정리한 최종 순서는 다음과 같다.
# 1. Ollama 설치
brew install ollama
# 2. 컨텍스트 64K 환경변수 등록 후 백그라운드 서비스로 실행 (권장)
launchctl setenv OLLAMA_CONTEXT_LENGTH 64000
brew services start ollama
# 3. thinking 지원 + 가벼운 모델 받기 (16GB엔 4B가 현실적)
ollama pull qwen3:4b
# 4. Hermes 설치
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
source ~/.zshrc
# 5. 셋업 — Full setup 선택 → provider는 custom/Ollama로
hermes setup
Hermes 설정 파일(~/.hermes/config.yaml) 핵심 블록:
model:
default: qwen3:4b
provider: custom
base_url: http://127.0.0.1:11434/v1
context_length: 65536
ollama_num_ctx: 65536 # ← Ollama에게 64K로 로드하라는 지시. 이게 빠지면 안 됨
generation:
temperature: 0.3
context:
auto_compact: true
이후 hermes 실행 → "이 디렉토리 파일 목록 뽑아줘" → ls 결과가 실제로 나오면 툴콜 실행까지 정상.
6. 시행착오 로그 (Q&A)
❓ 하니 권한 에러
증상: /opt/homebrew is not writable
원인: Homebrew 폴더 소유권이 내 계정이 아님(맥 업데이트나 과거 sudo 사용 흔적).
해결:
sudo chown -R $(whoami) /opt/homebrew
한 번 고치면 이후 다른 패키지 설치에도 안 걸림.
❓ 하니
원인: brew가 이미 Ollama를 백그라운드 서비스로 띄워놔서 11434 포트 충돌. 에러가 아니라 "이미 돌고 있음" 신호임.
해결(권장): 직접 serve 하지 말고 서비스로 관리 →
brew services stop ollama
launchctl setenv OLLAMA_CONTEXT_LENGTH 64000
brew services start ollama
교훈: 직접 ollama serve로 띄우면 그 터미널을 계속 잡아먹어서 다른 창을 또 열어야 함. 백그라운드 서비스 방식이 터미널 하나로 끝나서 편함.
❓ 셋업 첫 화면에서 뭘 골라야 함? (Quick vs Full)
함정: 기본 선택 Quick Setup은 Nous Portal(클라우드) 로 붙음 → 로컬 목적과 안 맞음.
해결: 방향키로 Full setup 선택 → provider를 직접 지정.
❓ provider 잘못 골랐는데 ESC가 안 먹음
해결: Ctrl + C로 마법사 강제 종료. 그래도 멈춰있으면 창을 닫고(Cmd + W) 새 창에서 재시작. 이미 셋업이 끝났으면 전체 재설치 없이 hermes model로 provider/모델만 다시 잡으면 됨.
❓
진단: ls ~/.hermes/bin 했더니 uv, uvx만 있고 hermes가 없음 → 설치가 중간에 끊긴 것.
해결: 설치 스크립트를 다시 끝까지 실행.
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
source ~/.zshrc
❓ provider 목록에 "Ollama Cloud"만 뜸
원인: Hermes가 로컬 Ollama 데몬을 감지 못 함(서버 안 떠 있거나 모델이 없을 때). Cloud는 우리가 원하는 로컬이 아님.
해결: 로컬 서버·모델 확인 후, 그래도 안 뜨면 custom / OpenAI-compatible로 직접 입력.
Base URL: http://127.0.0.1:11434/v1
Model: qwen3:4b
API Key: 아무 더미값 (예: ollama)
로컬 Ollama가 OpenAI 호환이라 이렇게 꽂아도 똑같이 작동함.
❓ 실행하니 (HTTP 400)
의미: 연결은 성공(엔드포인트·provider 정상). 근데 Hermes가 thinking(추론)을 켜서 요청했는데 Llama 3.1은 thinking 미지원 모델이라 서버가 거절.
해결: thinking 지원하는 모델로 교체 → Qwen3 계열. (Qwen3는 추론 모드 + 툴콜 둘 다 됨)
ollama pull qwen3:8b # 나중에 4b로 다시 내림
❓ 안 쓰는 llama3.1은 지우는 게 나음?
맞음. thinking 미스매치로 어차피 못 쓰고, 16GB엔 5GB짜리 잉여 모델이 부담. 단, 새 모델 정상 확인 후 삭제.
ollama rm llama3.1:8b
ollama list # 지워졌는지 확인
❓ 리스트에 qwen3가 안 뜸
원인: provider가 custom이라 Hermes가 Ollama 모델을 자동으로 못 긁어옴.
해결: 목록 기다리지 말고 config의 default에 모델명 직접 입력(ollama list에 찍힌 이름 그대로).
❓
원인: Qwen3는 큰 컨텍스트를 지원하는데 Ollama가 40,960으로 줄여 로드해서 Hermes가 거절.
해결: config에 ollama_num_ctx: 65536 를 추가(이게 핵심). context_length만 넣으면 안 되고, Ollama에게 실제로 64K로 로드하라는 지시가 필요함. 그리고 모델을 한 번 내려서 새로 로드:
ollama stop qwen3:8b
hermes
안 되면 Modelfile로 아예 구워버리기:
printf 'FROM qwen3:8b\nPARAMETER num_ctx 65536\n' > /tmp/q.Modelfile
ollama create qwen3-64k -f /tmp/q.Modelfile
❓ 통과는 했는데 응답이 3분 27초… 너무 느림
진단: 설정 문제 아님. 16GB + 64K + 8B thinking 모델이 하드웨어 한계에 부딪힌 것. 통합 메모리라 스왑 걸리면 급격히 느려짐.
완화책:
- 다른 앱 다 끄기(통합 메모리 확보)
- thinking 끄기
- 모델을
qwen3:4b로 내리기 ← 체감 개선 제일 큼
❓ 가 안 먹음
Hermes가 슬래시 명령을 모델로 안 넘기는 듯. config에서 끄거나(thinking: false, 필드명은 버전마다 다름), 그냥 4B로 내리는 게 더 효과적. thinking만 병목이 아니라서.
❓ qwen3:4b로 바꿔도 기능은 정상?
정상. 툴콜·파일조작·멀티스텝·스킬생성은 모델 크기가 아니라 툴콜 지원 여부에 달림. 4B도 Qwen3라 다 됨. 차이는 기능 여부가 아니라 품질(복잡한 다단계 추론·스킬 정교함이 8B보다 약함). 기능 확인 목적엔 충분.
→ 실제로 4B로 바꾸니 정상 동작 확인함. ✅
❓ 스킬 파일 생성되게 하려면 뭘 시킴?
단순 질문 말고 여러 스텝을 엮어 뭔가 만드는 작업이 잘 트리거됨. 예: "폴더 만들고 → 파이썬 스크립트 작성 → 실행해서 결과 보여줘". 이후 확인:
ls ~/.hermes/skills
cat ~/.hermes/skills/*.md
"생성되긴 하는데 내용이 부실" vs "쓸 만함"이 로컬 4B의 실제 한계를 보여줌.
❓ 그 작업 시켰더니
원인: 4B가 여러 스텝을 처리하는 시간이 Hermes 요청 대기 한도를 넘음.
해결 두 가지:
- 작업 쪼개기(권장) — "폴더 만들어줘" → "스크립트 써줘" → "실행해줘" 한 스텝씩. 각 요청이 짧아져서 안 걸리고, 스킬도 단계별로 생성될 수 있음.
- 타임아웃 늘리기 — config
model:에request_timeout: 600(필드명timeout일 수도).
❓ Hermes 끄는 법
- 대화 화면에서 나가기:
/exit또는Ctrl + C(Ollama는 계속 돎) - 완전 정리:
ollama stop qwen3:4b→brew services stop ollama
7. 그래서 뭘 배웠나
- 맥북에어 16GB에서 완전 로컬 Hermes Agent 구동은 됨. 툴콜 실행·응답까지 확인.
- 로컬 세팅의 3대 관문은 툴콜 파서 · 64K 컨텍스트 · thinking 지원 모델. 이걸 미리 알면 삽질 시간이 확 줄어듦.
- 16GB 팬리스 에어는 "기능 확인 장비"지 "성능 판단 장비"가 아님. 응답 3분, 멀티스텝 타임아웃이 그 증거. 이건 처음부터 예상함 결론이고, 워크플로우·기능이 우리한테 맞는지 감만 잡으면 로컬 테스트의 목적은 달성임.
- 실사용 속도·품질과 스킬 자동생성 품질은 PoC 때 vLLM + 27~35B를 제대로 된 GPU에 올려서 봐야 함.
8. 보안은 별도로 챙길 것 (요약)
에이전트는 내 컴퓨터에서 실제 명령을 실행하는 프로그램이라 도입 심사에선 보안이 핵심. 공개 CVE(메시징 게이트웨이·WebSocket 등)도 빠르게 나오지만, 진짜 리스크는 아키텍처에 있음 — 스킬 마켓플레이스 공급망, 메모리 인젝션, MCP 신뢰 경계. 표준 EDR로는 안 보임(서명된 파이썬이 HTTPS 치는 걸로만 보임).
개인 맥 테스트 최소 수칙: 최신 버전 고정 · 메시징 게이트웨이 끄고 CLI만 · 웹 대시보드 노출 금지 · YOLO 모드 금지, 승인모드 유지 · 커뮤니티 스킬 설치 금지 · 더미 폴더에서만, 사내 데이터·실 자격증명 없이. 회사 관리 기기(MDM)라면 설치 전 인포섹 확인 필수.

댓글