virtual-insanity
← 리포트 목록

migration_blueprint

2026-04-14 hermes

Hermes 완전 전환 Blueprint (OpenClaw → Hermes)

작성일: 2026-04-14 KST
범위: 설계 문서만 작성. 코드/크론/LaunchAgent 수정 없음.
판단 기준: ~/.openclaw/workspace/docs/system-baseline.md, ~/.openclaw/workspace/memory/system-baseline/latest.json, 실제 파일/LOC/로그 확인.

0. 결론

Hermes는 현재 LLM 게이트웨이·에이전트 런타임·단일 cron 실행기의 핵심 부품을 갖고 있지만, OpenClaw가 맡고 있는 운영 상태 저장소, bus_commands 기반 멀티 에이전트 라우팅, 웹앱/대시보드, 메모리 보호, 157개 활성 cron의 산출물 계약은 아직 Hermes에 1:1 대응물이 없다.

따라서 “완전 전환”은 즉시 스위치오버가 아니라 아래 순서가 안전하다.

  1. Hermes Gateway/API를 안정성 게이트로 확정
  2. cron을 카테고리별 shadow/dual-run으로 소량 이전
  3. bus_commands 호환 task-queue 플러그인 개발 후 워커 1개씩 이전
  4. 웹앱은 OpenClaw 잔존 또는 Hermes supervision만 먼저 적용
  5. orchestrator/heartbeat는 마지막에 이전

하루 안전 상한은 일반 cron 5개 이하, LLM/상태변경 cron 1개 이하, 웹앱·orchestrator 전환 0개로 둔다.

1. 확인한 근거

항목 확인값 근거
OpenClaw cron 총수 295 /Users/ron/.openclaw/cron/jobs.json
OpenClaw enabled cron 157 같은 파일. 사용자 배경의 “150개”보다 현재 파일 기준 7개 많음
enabled cron payload agentTurn 135 / systemEvent 19 / script 1 / shell 1 / command 1 jobs.json 파싱
Hermes cron 총수 1 /Users/ron/.hermes/cron/jobs.json
Hermes enabled cron 1 vault-analyst-feedback, last_status=ok
Hermes Gateway PID state PID 45753, gateway_state=running /Users/ron/.hermes/gateway.pid, gateway_state.json
Hermes 18789 listener Python 45753 ... 127.0.0.1:18789 (LISTEN) lsof -nP -iTCP:18789 -sTCP:LISTEN
Hermes API routes /health, /v1/health, /v1/models, /v1/chat/completions /Users/ron/.hermes/hermes-agent/gateway/platforms/api_server.py
Hermes API probe caveat 현재 curl http://127.0.0.1:18789/...는 000/connect refused를 반환 같은 시점 lsof는 LISTEN. cutover 전 반드시 별도 health gate 필요
Hermes recent gateway logs 12:56~13:04 /v1/chat/completions, /v1/health, /v1/models 200 기록 존재. 일부 Copilot 403, Telegram network warning 존재 /Users/ron/.hermes/logs/gateway.log, gateway.error.log
Webapp listener PID 17518 / 8080은 배경 정보 및 기존 확인 기준. 현재 전환 설계에서는 수정 안 함 run_webapp.py, LaunchAgent 존재 확인
OpenClaw baseline OpenClaw=운영 backbone, Hermes=runtime layer로 명시 docs/system-baseline.md
Baseline snapshot cron total 295 / enabled 157 / bus_commands 14 / ops_todos 694 memory/system-baseline/latest.json

주의: ps는 현재 sandbox에서 operation not permitted로 제한되어 PID command-line 재확인은 lsof, pid/state 파일, LaunchAgent plist로 대체했다.


2. Phase 1 — 현황 매핑 Inventory

2.1 OpenClaw 컴포넌트 전수 목록

컴포넌트 실제 파일/경로 LOC 현재 역할 운영 상태/근거
agent_queue_worker × 8 /Users/ron/.openclaw/workspace/scripts/agent_queue_worker.py 3404 ops_multiagent.db.bus_commands polling, atomic claim, target_agent별 실행 LaunchAgents 8개: codex, cowork, analyst-fundamental, guardian, analyst-macro, analyst-pm, ron, analyst-technical
agent_queue_worker_event /Users/ron/.openclaw/workspace/scripts/agent_queue_worker_event.py 120 큐 워커 이벤트 보조 파일 존재
orchestrator_loop /Users/ron/.openclaw/workspace/scripts/orchestrator.py 2552 heartbeat 흡수, bus_commands 상태 감시, escalation, prewarming trigger, archive com.openclaw.orchestrator-loop.plist 존재
cowork_daemon /Users/ron/.openclaw/workspace/scripts/cowork_daemon.py 580 long-running task executor, loop polling com.openclaw.cowork-daemon.plist 존재
webapp entry /Users/ron/.openclaw/workspace/scripts/pipeline/run_webapp.py 47 Flask/Werkzeug webapp bootstrap com.openclaw.sihwang-webapp.plist, localhost:8080
webapp core /Users/ron/.openclaw/workspace/scripts/pipeline/sihwang_webapp.py 5122 virtual-insanity.net / 8080 앱 본체 OpenClaw pipeline 영역
ops dashboard /Users/ron/.openclaw/workspace/scripts/server.py 7859 3344 운영 dashboard, queue/status front com.openclaw.ops-dashboard.plist 존재
webapp data loaders /Users/ron/.openclaw/workspace/scripts/pipeline/webapp/data_loaders.py 1674 memory/reports JSON 로딩 계약 webapp 데이터 계약의 핵심
cron jobs /Users/ron/.openclaw/cron/jobs.json 10003 295개 정의, 157개 enabled 활성 157, agentTurn 135
pipeline scripts /Users/ron/.openclaw/workspace/scripts/pipeline/*.py 218 files 도메인/리포트/데이터 파이프라인 전환 대상 대부분
shared utilities /Users/ron/.openclaw/workspace/scripts/shared/*.py 49 files LLM, telegram, db, cycle base 등 공통 모듈 스크립트 실행 계약에 포함
LLM shared /Users/ron/.openclaw/workspace/scripts/shared/llm.py 744 OpenClaw LLM 라우팅, Hermes gateway proxy 사용 시작 수정 금지, 읽기 확인만
cycle base /Users/ron/.openclaw/workspace/scripts/shared/cycle_base.py 857 lazy import 적용된 cycle 공통 베이스 수정 금지, 읽기 확인만
telegram shared /Users/ron/.openclaw/workspace/scripts/shared/telegram.py 851 기존 Telegram 발송 계약 Hermes delivery로 대체 가능하나 채널 불변 필요
db shared /Users/ron/.openclaw/workspace/scripts/shared/db.py 125 OpenClaw DB helper bus_commands 호환성 필요
memory guardian /Users/ron/.openclaw/workspace/scripts/monitoring/memory_guardian.py 1109 16GB RAM 보호, 메모리 압박 대응 ai.openclaw.memory-guardian.plist 존재
pipeline self-healer /Users/ron/.openclaw/workspace/scripts/pipeline/pipeline_self_healer.py 126 파이프라인 회복/점검 도구 Hermes 이전 시 위험도 중
ops DB /Users/ron/.openclaw/data/ops_multiagent.db DB bus_commands, ops_todos, ops_agent_events, KPI, missions 등 sqlite3 .tables로 확인

Webapp blueprint 파일 목록

Blueprint LOC
webapp/blueprints/admin.py 1170
analyst.py 124
company_research.py 79
graphify.py 29
hypothesis.py 351
market.py 2753
media.py 60
ops.py 1421
sector_compass.py 379
sector_data.py 5698
sector_news.py 1200
sector_valuechain.py 1196
showcase.py 20
showcase_curate.py 848
vault.py 954
verdict.py 335
watchlist.py 252
__init__.py 0

2.2 Hermes 컴포넌트 전수 목록

컴포넌트 실제 파일/경로 LOC 현재 역할 상태/근거
Hermes CLI main /Users/ron/.hermes/hermes-agent/hermes_cli/main.py 5199 Hermes CLI entrypoint LaunchAgent가 python -m hermes_cli.main gateway run --replace 실행
Hermes CLI gateway cmd /Users/ron/.hermes/hermes-agent/hermes_cli/gateway.py 2064 gateway command/status/setup 파일 존재
Hermes gateway runtime /Users/ron/.hermes/hermes-agent/gateway/run.py 6345 gateway platform runtime, Telegram/API adapter wiring 파일 존재, logs에서 실행 흔적
API server adapter /Users/ron/.hermes/hermes-agent/gateway/platforms/api_server.py 1355 OpenAI-compatible /v1/chat/completions, /v1/models, /health code route 확인
cron scheduler /Users/ron/.hermes/hermes-agent/cron/scheduler.py 606 Hermes cron loop/execution OpenClaw cron 대체 후보
cron jobs model /Users/ron/.hermes/hermes-agent/cron/jobs.py 746 ~/.hermes/cron/jobs.json 관리 현재 enabled 1개
cron tools /Users/ron/.hermes/hermes-agent/tools/cronjob_tools.py 458 agent tool로 cron 등록/관리 OpenClaw cron 이전 도구 후보
plugin system /Users/ron/.hermes/hermes-agent/hermes_cli/plugins.py 561 plugin discovery/management gap 보완 방식 후보
plugin CLI /Users/ron/.hermes/hermes-agent/hermes_cli/plugins_cmd.py 598 plugin command gap 보완 방식 후보
tools registry /Users/ron/.hermes/hermes-agent/tools/registry.py 275 agent tools registry task-queue/monitoring tool 연결 지점
send message tool /Users/ron/.hermes/hermes-agent/tools/send_message_tool.py 906 Telegram/Discord 등 메시지 발송 tool OpenClaw telegram 일부 대체 가능
code execution tool /Users/ron/.hermes/hermes-agent/tools/code_execution_tool.py 815 코드 실행 도구 파이프라인 실행 보조 후보
terminal tool /Users/ron/.hermes/hermes-agent/tools/terminal_tool.py 1463 shell/terminal 실행 OpenClaw script 실행 wrapping 후보
batch runner /Users/ron/.hermes/hermes-agent/batch_runner.py 1285 batch task execution cowork_daemon 대체 후보
run_agent /Users/ron/.hermes/hermes-agent/run_agent.py 8794 Hermes agent runner worker/cowork 대체 후보
smart model routing /Users/ron/.hermes/hermes-agent/agent/smart_model_routing.py 194 model routing OpenClaw LLM chain과 통합 후보
Hermes state /Users/ron/.hermes/hermes-agent/hermes_state.py 1277 Hermes state persistence OpenClaw ops DB와 동등하지 않음
Hermes cron file /Users/ron/.hermes/cron/jobs.json 36 현재 cron 정의 enabled 1개, vault-analyst-feedback
Hermes gateway LaunchAgent /Users/ron/Library/LaunchAgents/ai.hermes.gateway.plist 45 Hermes gateway auto-run KeepAlive, logs under ~/.hermes/logs/
Hermes config /Users/ron/.hermes/config.yaml 확인됨 model/provider, toolsets, MCP vault roots, terminal allowlist vault roots: ~/knowledge, ~/knowledge-agent

2.3 OpenClaw → Hermes 대응 매핑

OpenClaw Hermes 대응 상태 마이그레이션 복잡도 근거/판단
agent_queue_worker.py × 8 신규 Hermes task-queue plugin + run_agent.py/tools registry 부분 Hermes는 agent runner/tools는 있으나 OpenClaw bus_commands claim/target_agent/status 계약은 없음. DB 호환 layer 필요
ops_multiagent.db.bus_commands Hermes state/response_store + 신규 compatibility adapter 대응 없음 Hermes state DB는 OpenClaw bus schema와 동등하지 않음. dashboard가 bus_commands를 읽음
orchestrator heartbeat/escalation Hermes cron scheduler + 신규 orchestrator plugin 부분/대응 없음 orchestrator.py가 heartbeat, escalation, prewarming, archive를 한 파일에 흡수. 단순 cron 대체 불가
cowork_daemon.py batch_runner.py, run_agent.py, terminal/code tools 부분 중~고 long-running polling/작업 지속성·중복 방지 semantics 확인 필요
OpenClaw 157 enabled cron Hermes cron/jobs.py, cron/scheduler.py, cronjob_tools.py 부분 중~고 Hermes cron은 1개만 운영 중. OpenClaw는 agentTurn 중심 135개라 단순 script cron보다 복잡
pipeline scripts 218개 Hermes terminal/code execution tool로 wrapper 실행 부분 파일 실행은 가능하나 PYTHONPATH/env/output path/Telegram side effect 계약 확인 필요
shared/llm.py Hermes API server /v1/chat/completions 부분 로그상 200 기록 있으나 현재 probe connect refused 관찰. health gate 필요. 파일 수정 금지
shared/telegram.py send_message_tool.py, gateway Telegram adapter 부분 @RONforMAC_Bot/채널 설정 불변. duplicate delivery 방지 필요
memory_guardian.py 신규 Hermes memory-guardian plugin 또는 OpenClaw 잔존 대응 없음 커널 패닉/16GB RAM 보호 목적상 전환 말기까지 OpenClaw 잔존 필요
pipeline_self_healer.py Hermes cron + plugin 부분 jobs.json 또는 상태를 자동 수정할 수 있어 shadow 기간 필요
webapp sihwang_webapp.py Hermes 직접 대응 없음. OpenClaw 잔존 또는 Hermes supervisor plugin 대응 없음 HTTP Flask 앱/blueprint/data_loaders 계약이 큼. 런타임 이전보다 데이터 계약 안정화가 먼저
ops dashboard server.py Hermes plugin/status UI 없음 대응 없음 queue/admin/status dashboard는 OpenClaw 고유 기능
data_loaders.py + memory JSON Hermes cron outputs + compatibility symlink/adapter 부분 webapp이 기존 memory/, reports/ 경로를 읽음. 출력 위치 변경 시 화면 깨짐
cycle_base.py 스크립트 내부 공통 모듈 유지 유지 Hermes 전환 대상보다 script dependency. lazy import 상태 유지 필요
OpenClaw LaunchAgents Hermes LaunchAgent + plugin scheduler 부분 Hermes gateway 하나는 존재. workers/orchestrator/webapp은 아직 OpenClaw LaunchAgent 의존

3. Phase 2 — 갭 분석

현재 OpenClaw 기능 Hermes 현재 상태 선택지 권고
멀티 에이전트 라우팅 target_agent, all, claimed/done/failed, priority, result_note agent runner는 있으나 bus_commands 호환 없음 (a) 플러그인 개발 / (b) Hermes core 확장 (a) 먼저. ops_multiagent.db를 그대로 읽는 compatibility plugin
queue lease/atomic claim stale claimed 복구, atomic update, worker별 poll interval 확인된 직접 대응 없음 (a) 플러그인 필수. 없으면 중복 실행/유실 위험
dashboard와 queue 상태 3344 server, ops DB, notification log, todos Hermes status는 별도 (c) OpenClaw 잔존 dashboard는 Phase C 이후까지 유지
webapp virtual-insanity.net, 18 blueprints, memory JSON loaders 직접 대응 없음 (c) 잔존 / (a) supervisor plugin 잔존. Hermes는 데이터 생산만 shadow 이전
157 enabled cron schema agentTurn/systemEvent/script/shell/command 혼재 Hermes cron 1개 (a) migration adapter / (b) scheduler 확장 adapter 우선. agentTurn은 별도 mapping 필요
output path contract webapp/panels가 memory/, reports/를 직접 읽음 Hermes output dir는 ~/.hermes/cron/output/... (a) compatibility writer / (c) 잔존 shadow output 비교 후 기존 경로 유지 또는 symlink/adapter 설계
Telegram delivery OpenClaw shared telegram + bot/channel Hermes gateway Telegram adapter 있음. 최근 network warning 있음 (c) 초기 잔존 / (a) delivery adapter delivery 중복 방지를 위해 dual-run 중 Hermes deliver=local 또는 muted
RAM 보호 memory guardian, staged boot philosophy Hermes 자체 memory cap/guardian 확인 안 됨 (a) plugin / (c) 잔존 전환 전 기간 OpenClaw memory guardian 유지
LLM provider health OpenClaw shared LLM이 Hermes gateway로 우회 가능 로그상 200/403 혼재, current curl caveat (b) health endpoint 확정 모든 이전 phase의 선행 게이트
LaunchAgent/staged boot OpenClaw 여러 daemon 자동 시작 Hermes gateway LaunchAgent만 명확 (b) Hermes supervisor 확장 / (c) 잔존 worker/orchestrator 전환 전까지 OpenClaw 유지
self-healing pipeline_self_healer, orchestrator escalation Hermes direct 없음 (a) plugin 자동 수정 기능은 마지막에 이전. 먼저 read-only monitor

4. Phase 3 — 마이그레이션 단계 설계

Phase 0 — 전환 준비 게이트

예상 시간: 0.5~1일
목표: Hermes가 이전을 받을 수 있는지 “운영 관문”을 통과시킨다.

필수 조건:

  1. lsof에서 18789 LISTEN 확인
  2. /health, /v1/health, /v1/models가 2회 연속 200
  3. 실제 /v1/chat/completions smoke가 1회 성공
  4. Copilot 403 또는 Telegram network warning이 이전 대상 cron에 영향을 주지 않는지 분리
  5. ~/.hermes/cron/jobs.json 백업 후 read-only inventory 생성
  6. OpenClaw jobs.json, ops_multiagent.db, memory/, reports/ baseline snapshot 생성

현재 관찰된 차단점:

  • lsof와 state 파일은 Hermes gateway running/listening을 보여주지만, 같은 조사 중 curl 127.0.0.1:18789는 connect refused를 반환했다.
  • gateway log에는 13:01~13:04 API 200 기록이 있다.
  • 따라서 “Hermes API 가동 성공”은 cutover 조건으로 재검증해야 하며, 문서상으로는 아직 완전 안정 판정이 아니다.

Rollback:

  • Phase 0은 설정 변경 없음. 실패 시 이전 보류만 한다.

Phase A — 저위험 cron/script 이전

예상 시간: 1~2주
대상: 순수 데이터 생성 cron, side effect가 파일 출력에 가까운 작업.
복잡도: 중

진행 순서:

  1. OpenClaw enabled 157개를 카테고리별로 묶는다.
  2. 배치당 3~5개만 Hermes shadow cron으로 등록한다.
  3. Hermes output은 처음에는 ~/.hermes/cron/output/<job-id>/ 또는 memory/hermes-shadow/<job-id>/에 둔다.
  4. OpenClaw 기존 cron은 유지한다.
  5. 최소 2회 schedule cycle 또는 24시간 dual-run으로 output 비교한다.
  6. 비교 통과 후에만 OpenClaw 쪽 disabled를 검토한다. 이 문서 단계에서는 disable 금지.

권장 카테고리 순서:

  1. 에너지/원자재: oil, gas, copper, metal, energy, commodity, 석유/에너지
  2. 반도체: semi, silicon, 반도체
  3. 애널리스트: analyst, research, report, 애널리스트
  4. 석유화학/조선/바이오/매크로/기업 순
  5. 볼트/원자화, 시스템 cron은 가장 뒤

Smoke test:

  • script path exists
  • import/PYTHONPATH 확인
  • dry-run 또는 deliver=local
  • output file 생성 여부
  • output size > 0
  • JSON이면 parse 성공
  • webapp data loader가 기존 output 경로를 계속 찾는지 확인

Rollback trigger:

  • Hermes API 2회 연속 health 실패
  • output 누락 또는 size 0
  • OpenClaw output과 schema mismatch
  • Telegram 중복 발송 1회라도 발생
  • 24h 이상 stale 재발
  • memory pressure로 guardian warning 발생

Phase B — 워커/에이전트 이전

예상 시간: 1~2주
대상: agent_queue_worker 8개 중 1개씩.
복잡도: 고

필수 설계:

  • Hermes task-queue plugin을 만들어 ops_multiagent.db.bus_commands를 그대로 읽는다.
  • status='queued', target_agent in (<agent>, 'all'), priority, created_at 정렬, claim 조건을 OpenClaw와 동일하게 맞춘다.
  • Hermes worker가 처리한 결과도 기존 dashboard가 읽을 수 있게 result_note, completed_at, status를 같은 DB에 기록한다.
  • claimed timeout/stale command 복구 정책을 명시한다.
  • worker identity는 기존 agent명과 동일하게 둔다: codex, cowork, analyst-fundamental, guardian, analyst-macro, analyst-pm, ron, analyst-technical.

이전 순서:

  1. read-only queue mirror: Hermes가 큐를 읽기만 하고 처리하지 않음
  2. one-shot shadow claim simulation: claim SQL만 dry-run
  3. codex 또는 ron 하나만 low-priority command에서 실제 처리
  4. 24시간 오류율 비교
  5. analyst 계열 1개씩 확장
  6. guardian은 memory/self-heal 연동 때문에 후순위

Rollback:

  • 해당 Hermes worker 중지
  • OpenClaw LaunchAgent worker를 그대로 유지했으면 즉시 기존 worker가 처리 지속
  • Hermes가 claim한 command는 timeout 복구 쿼리 또는 수동 status reset 필요. 이 reset은 별도 승인 후 수행

Phase C — 웹앱 이전 또는 잔존 결정

예상 시간: 1~3주
복잡도: 고

권고: 초기에는 OpenClaw 잔존.

이유:

  • sihwang_webapp.py 5122 LOC + server.py 7859 LOC + blueprint 18개 + data loader 1674 LOC로 표면적이 큼.
  • 웹앱은 단순 실행기가 아니라 기존 memory/, reports/, ops DB, sector data를 직접 읽는 통합 UI다.
  • Hermes에는 현재 HTTP webapp 대응물이 확인되지 않았다.

가능한 경로:

  1. OpenClaw 잔존: Hermes가 데이터 생산만 담당하고 webapp은 기존 경로를 읽음
  2. Hermes supervisor: webapp 프로세스는 그대로 두되 Hermes가 health/read-only monitor만 함
  3. 완전 이전: Hermes plugin/service로 Flask app 실행까지 흡수. 마지막 선택지

Rollback:

  • Phase C 이전 동안 OpenClaw com.openclaw.sihwang-webapp.plist 유지
  • 새 Hermes web supervision은 read-only alert부터 시작

Phase D — orchestrator/heartbeat 이전

예상 시간: 1~2주
복잡도: 고

권고: 마지막 단계.

이유:

  • orchestrator.py는 heartbeat, error escalation, ETF prewarming, bus_commands archive, reactive feedback loop가 결합되어 있다.
  • worker와 cron 이전 전에는 orchestrator가 기존 OpenClaw 상태를 계속 관리해야 한다.

전환 설계:

  1. Hermes read-only orchestrator monitor 작성
  2. OpenClaw orchestrator와 Hermes monitor의 경보 결과 비교
  3. archive 같은 쓰기 기능은 별도 승인된 feature flag 뒤로 분리
  4. trigger 기능을 Hermes cron/systemEvent로 하나씩 이전
  5. 마지막에 OpenClaw orchestrator loop 중지 검토

Rollback:

  • OpenClaw orchestrator-loop LaunchAgent 유지
  • Hermes orchestrator는 쓰기 기능이 켜지기 전까지 disable만 하면 됨

5. Phase 4 — 점진 이전 전략

5.1 배치 원칙

  • 한 번에 150+/157개를 옮기지 않는다.
  • 하루 최대 이전량: 일반 cron 5개 이하.
  • LLM-heavy, Telegram delivery, DB write, vault write job은 하루 1개 이하.
  • system/guardian/self-healer/orchestrator 계열은 cron 이전 안정화 후 별도 날짜에만 진행한다.
  • 각 batch는 shadow → dual-run → compare → cutover candidate의 4단계를 통과해야 한다.

5.2 권장 배치 순서

배치 카테고리 개수 상한 이유 특별 주의
1 에너지/원자재 3~5 파일 산출물 검증이 비교적 명확 webapp panel이 기존 output을 읽는지 확인
2 반도체 2~4 cycle_base lazy import 영향 검증에 적합 pykrx/FDR import 재발 감시
3 애널리스트 2~3 LLM routing 검증 Hermes API/Copilot 403 fallback 확인 필수
4 석유화학/조선/바이오 3~5 산업별 리포트 산출물 비교 가능 데이터 공급원 오류와 런타임 오류 분리
5 매크로/기업/재무 2~4 일정/시장 데이터 의존성 큼 외부 API rate limit 확인
6 볼트/원자화 1~2 ~/knowledge 불변 규칙 때문에 위험 shadow는 ~/knowledge-agent만 사용
7 시스템/guardian/self-heal 1 잘못 옮기면 전체 운영에 영향 마지막까지 OpenClaw 잔존 권장

5.3 Dual-run 비교 기준

각 cron마다 다음을 기록한다.

항목 통과 기준
실행 상태 OpenClaw와 Hermes 모두 success 또는 Hermes가 예상 가능한 benign warning만 발생
산출 파일 Hermes shadow output 생성, size > 0
포맷 JSON parse 또는 Markdown heading 최소 1개
freshness mtime가 schedule window 내
schema 주요 키/섹션이 OpenClaw output과 일치
side effect Telegram/DB/vault 쓰기 중복 없음
resource memory guardian warning 없음

5.4 구체 리스크 시나리오

  1. 배치 3 애널리스트 이전 중 기존 webapp이 새 출력 위치를 못 찾음
  2. 원인: Hermes output이 ~/.hermes/cron/output에만 생성되고 OpenClaw memory/ 경로 미갱신.
  3. 대응: shadow output 비교 후 기존 경로 writer/symlink adapter가 준비되기 전 cutover 금지.

  4. LLM route는 HTTP 200이지만 provider 내부가 Copilot 403을 반환

  5. 원인: gateway가 응답 envelope는 만들지만 provider 권한 문제를 포함.
  6. 대응: smoke test는 “HTTP 200”이 아니라 실제 응답 내용과 error field 확인.

  7. Telegram 중복 발송

  8. 원인: OpenClaw와 Hermes dual-run이 둘 다 delivery 수행.
  9. 대응: dual-run 중 Hermes는 deliver=local/muted. Telegram cutover는 별도 승인.

  10. queue command 이중 claim

  11. 원인: OpenClaw worker와 Hermes worker가 같은 queued row를 처리.
  12. 대응: Phase B 전용 compatibility claim SQL + agent 단위 한정 + low-priority 테스트.

  13. 메모리 압박 재발

  14. 원인: Hermes agent sessions와 기존 OpenClaw workers가 dual-run 중 동시에 LLM/브라우저/데이터 라이브러리 사용.
  15. 대응: 하루 5개 cap, memory guardian 유지, high-RSS job은 1개씩만.

  16. vault 구조 오염

  17. 원인: Hermes cron이 ~/knowledge에 직접 shadow output 기록.
  18. 대응: dual-run 산출물은 ~/knowledge-agent 또는 Hermes output에만 기록. ~/knowledge는 cutover 승인 전 read-only.

  19. self-healer가 전환 중 jobs.json을 자동 수정

  20. 원인: OpenClaw/Hermes self-heal 양쪽이 같은 stale을 고치려 함.
  21. 대응: self-heal 계열은 read-only monitor로 먼저 이전. 쓰기 기능은 마지막.

6. Phase 5 — 불변 규칙

  1. 해리 볼트 ~/knowledge/ 구조 유지
  2. 전환 중 shadow, 초안, 비교 결과는 ~/knowledge-agent/에 둔다.
  3. ~/knowledge/ 직접 쓰기는 별도 승인 전 금지.

  4. Telegram 봇/채널 불변

  5. @RONforMAC_Bot 관련 token/channel/chat 설정 변경 금지.
  6. dual-run 동안 Hermes delivery는 기본 muted/local.

  7. Memory guardian 철학 유지

  8. 16GB RAM 보호가 전환보다 우선이다.
  9. Hermes에 동등한 memory cap/guardian이 생기기 전 OpenClaw memory_guardian.py는 잔존.

  10. 하루 이전 상한

  11. 일반 cron: 최대 5개
  12. LLM-heavy 또는 DB/vault/Telegram side effect job: 최대 1개
  13. worker: 최대 1개 agent/day
  14. webapp/orchestrator/system self-heal: Phase C/D 전까지 0개/day

  15. Cutover 전제

  16. 2회 연속 dual-run 통과
  17. rollback 경로 존재
  18. output path 계약 검증
  19. duplicate side effect 없음
  20. Hermes API health stable

7. 즉시 다음 액션

코드 수정 없이 다음 순서로 별도 실행하면 된다.

  1. Hermes Gateway health probe를 독립 환경에서 재확인한다. 현재 lsofcurl 결과가 충돌하므로 이 문제가 가장 먼저다.
  2. OpenClaw enabled 157개 cron을 카테고리별 CSV/Markdown inventory로 고정한다.
  3. 에너지/원자재 3개를 첫 shadow 후보로 고른다.
  4. Hermes cron migration adapter 설계를 별도 문서화한다. 핵심은 “기존 output 경로를 깨지 않는 것”이다.
  5. worker 이전은 bus_commands compatibility plugin이 생기기 전까지 시작하지 않는다.

8. 승인 기준

Hermes 완전 전환은 아래가 모두 만족될 때만 “완료 후보”로 본다.

  • OpenClaw enabled cron의 90% 이상이 Hermes에서 2회 이상 dual-run 통과
  • webapp 주요 패널이 기존과 같은 데이터를 렌더링
  • bus_commands 처리량/실패율이 OpenClaw worker 대비 악화되지 않음
  • Telegram 중복 발송 0건
  • memory guardian warning 증가 없음
  • orchestrator/heartbeat 쓰기 기능을 Hermes가 동일하게 수행하고 rollback 가능
  • OpenClaw 잔존 컴포넌트 목록이 5개 이하이고 모두 의도적 잔존으로 문서화