cs 맥북에어 M4 RAM 16GB에서 Hermes Agent 로컬로 사용해보기 (1)
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/LLM

맥북에어 M4 RAM 16GB에서 Hermes Agent 로컬로 사용해보기 (1)

by 시몬쯔 2026. 7. 10.
728x90
반응형

 

사내에 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" 방식.

  1. 목표 입력 → goal_judge 보조 모델이 한 줄을 완전한 "계약"으로 확장(검증법·제약·범위·중단조건).
  2. 목표 달성 / 사용자 중단 / 턴 예산 소진까지 프롬프트를 되먹여 작업 지속.
  3. 매 턴 판사(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:4bbrew 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)라면 설치 전 인포섹 확인 필수.


728x90
반응형

댓글