Files
obsidian/infra/compute/hermes.md

4.1 KiB

title, updated, tags, type, host_kind, location, provider, status, parent_host, incus_project, tailscale_ip, lan_ip, os, cpu_cores, ram_gb, disk_gb, monthly_cost_usd
title updated tags type host_kind location provider status parent_host incus_project tailscale_ip lan_ip os cpu_cores ram_gb disk_gb monthly_cost_usd
hermes 2026-06-09
infra
incus
nixos
hermes
agent
seoul
container container seoul self-hosted active incus-hp2 default null 10.100.2.77 NixOS 25.11 2 4 20 0

개요

incus-hp2 default 프로젝트의 NixOS incus 컨테이너. NousResearch Hermes Agent(self-improving 자율 AI 에이전트, persistent memory, 멀티채널 게이트웨이)를 호스팅한다. macmini(주 개발기)의 민감 데이터(SSH 키·Vault·nixos-infra)와 분리하기 위해 격리 컨테이너로 운영. NixOS 동류는 zlambda.

인프라

항목
호스트 incus-hp2 (default 프로젝트)
OS NixOS 25.11 (Xantusia), channel 기반
IP 10.100.2.77 (eth0, 10.100.2.0/24)
스펙 2 vCPU / 4GB RAM / 20GB disk
생성 2026-06-09, images:nixos/25.11

Hermes Agent

  • 버전: v0.16.0 (2026.6.5)
  • 설치: /usr/local/lib/hermes-agent, config /root/.hermes/, 런처 /usr/local/bin/hermes
  • 백엔드: OpenAI Codex OAuth (ChatGPT Plus 구독) — API 키 종량제가 아닌 구독 정액제. provider openai-codex, 모델 gpt-5.4
  • 인증 토큰: /root/.hermes/auth.json (device_code OAuth). 구독 계정/시크릿은 컨테이너 로컬, repo·Obsidian에 평문 없음
  • 검증: hermes -z '...' 단발 추론 정상 응답 확인 (2026-06-09)

모델 분리 (메인 vs 보조)

용도 모델 비고
메인 추론 openai-codex/gpt-5.4 (ChatGPT Plus) 복잡한 대화·도구 호출
보조 (auxiliary) kr1 ollama qwen3:4b-instruct-2507-q4_K_M context compression·web_extract

보조를 로컬 ollama로 분리한 이유: ① Plus 5h/주간 한도를 보조 작업이 잠식하지 않음 ② 데이터 주권(보조는 내부 LAN 처리) ③ 비용 0. config.yaml auxiliary.<task>provider: custom + base_url: http://192.168.9.214:11434/v1(LAN 직결, tailscale 우회) + model 지정. ollama는 auth 불필요. ⚠️ 메인 Codex OAuth는 Hermes의 auxiliary 폴백 체인에서 의도적으로 제외됨(OpenAI 비공개 model allow-list) → 보조는 반드시 명시 지정해야 nous/openrouter probe 경고가 안 뜸.

Telegram 게이트웨이

  • 봇: HermesBot (@HermesTest71Bot), 토큰·allowed_users는 Vault secret/apps/hermes
  • .env: TELEGRAM_BOT_TOKEN, TELEGRAM_ALLOWED_USERS(접근 허용 단일 사용자), TELEGRAM_HOME_CHANNEL
  • 서비스: systemd hermes-gateway.service (configuration.nix에 선언, hermes gateway run). systemctl --user는 incus 비대화형 root 환경에서 불가 → system 서비스로 선언. boot 자동시작 + Restart=always + TimeoutStopSec=210(drain 180s 대비)
  • ⚠️ 보안: ALLOWED_USERS 미설정 시 봇 주소만 알면 누구나 터미널 권한 에이전트 조작 가능 → 게이트웨이 시작 전 반드시 잠글 것

NixOS 설정 (정본)

선언적 정본은 Gitea kaffa/nixos-infrahosts/hermes/configuration.nix. 적용 절차:

  1. repo의 hosts/hermes/configuration.nix를 컨테이너 /etc/nixos/configuration.nix로 push
  2. incus exec hp2:hermes -- nixos-rebuild switch

핵심 설정:

  • programs.nix-ld.enable = true — uv가 받는 prebuilt(standalone) Python·Node 바이너리가 NixOS에서 동작하게 함. Hermes 구동의 필수 전제.
  • nix.settings.sandbox = false — incus(비특권) 컨테이너는 user namespace 제약으로 nix 빌드 sandbox 불가
  • environment.extraInit/usr/local/bin을 PATH에 추가 (Hermes 런처 위치)
  • 의존성: git curl cacert nodejs_22 python311 uv ripgrep ffmpeg

⚠️ flake 미통합: nixos-infra flake는 nixpkgs-25.05 핀, hermes는 25.11 타깃이라 현재 channel 기반으로만 빌드. flake 통합(별도 25.11 input + nixosConfigurations.hermes)은 향후 정리 과제.

관련