virtual-insanity
← 리포트 목록

Hermes 마이그레이션 자동화 도구 + 첫 batch 실제 이전

2026-04-14 hermes [hermes, cron, migration, shell-job]

Hermes 마이그레이션 자동화 도구 + 첫 batch 실제 이전

결론

첫 batch 5개를 모두 실제 이전했다.

  • Hermes shell-job: 5개 enabled/scheduled
  • OpenClaw 원본 cron: 5개 enabled=false 비활성화, 삭제 없음
  • dual-run strict 검증: 각 3회 통과, diff 0
  • Hermes gateway: 재기동 후 API/cron scheduler healthy

변경 파일

경로 변경
/Users/ron/.hermes/hermes-agent/cron/scheduler.py shell-job 실행 경로 반영 확인 + 성공 응답이 stdout/stderr를 함께 반환하도록 보정
/Users/ron/.openclaw/workspace/scripts/hermes_migration_verify.py Hermes direct 실행 시 시스템 Python 대신 Hermes venv Python 사용
/Users/ron/.openclaw/workspace/scripts/hermes_migration_batch_tool.py batch 자동 변환·등록·3회 검증·성공 시 OpenClaw 비활성화 도구 신규 작성
/Users/ron/.hermes/cron/jobs.json 5개 shell-job enabled/scheduled
/Users/ron/.openclaw/cron/jobs.json 5개 원본 cron enabled=false 비활성화

금지 파일 shared/llm.py는 수정하지 않았다. OpenClaw cron 삭제도 하지 않았다.

백업

주요 백업:

  • /Users/ron/.openclaw/cron/jobs.json.bak-first-real-batch-20260414143615-20260414143615
  • /Users/ron/.hermes/cron/jobs.json.bak-first-real-batch-20260414143615-20260414143615
  • /Users/ron/.openclaw/workspace/scripts/hermes_migration_verify.py.bak-venv-20260414143407
  • /Users/ron/.hermes/hermes-agent/cron/scheduler.py.bak-shelljob-20260414143128

이전 결과

OpenClaw cron Hermes job schedule dual-run diff 최종 조치
source-registry-updater ocA-src-reg 5 9 * * 1-5 3/3 PASS 0 OpenClaw 비활성화, Hermes 활성화
data-quality-monitor ocA-data-quality 15 7 * * * 3/3 PASS 0 OpenClaw 비활성화, Hermes 활성화
vault-control-sync ocA-vault-control 0 4 * * * 3/3 PASS 0 OpenClaw 비활성화, Hermes 활성화
hypothesis-feedback ocA-hyp-feedback 10 22 * * * 3/3 PASS 0 OpenClaw 비활성화, Hermes 활성화
log-rotator hm-log-rotator-safe 5 4 * * * 3/3 PASS 0 OpenClaw 비활성화, Hermes 활성화

참고: 사용자 후보명은 log-rotator-safe였지만 실제 OpenClaw ID는 log-rotator였다. Hermes ID를 hm-log-rotator-safe로 만들었다.

검증 증거

자동화 도구 실행 결과:

  • 전체 batch 요약: /Users/ron/.openclaw/workspace/verification/hermes-first-real-batch/summary-rerun2.json
  • vault-control 재검증 요약: /Users/ron/.openclaw/workspace/verification/hermes-first-real-batch/summary-vault-control-rerun.json

각 job별 verifier report는 아래 폴더에 저장됐다.

  • /Users/ron/.openclaw/workspace/verification/hermes-first-real-batch/ocA-src-reg/
  • /Users/ron/.openclaw/workspace/verification/hermes-first-real-batch/ocA-data-quality/
  • /Users/ron/.openclaw/workspace/verification/hermes-first-real-batch/ocA-vault-control/
  • /Users/ron/.openclaw/workspace/verification/hermes-first-real-batch/ocA-hyp-feedback/
  • /Users/ron/.openclaw/workspace/verification/hermes-first-real-batch/hm-log-rotator-safe/

최종 상태 확인:

Hermes:
ocA-src-reg          enabled=True  state=scheduled  next=2026-04-15T09:05:00+09:00  last=ok
ocA-data-quality     enabled=True  state=scheduled  next=2026-04-15T07:15:00+09:00  last=ok
ocA-vault-control    enabled=True  state=scheduled  next=2026-04-15T04:00:00+09:00  last=ok
ocA-hyp-feedback     enabled=True  state=scheduled  next=2026-04-14T22:10:00+09:00  last=ok
hm-log-rotator-safe  enabled=True  state=scheduled  next=2026-04-15T04:05:00+09:00  last=ok

OpenClaw:
source-registry-updater  enabled=False
data-quality-monitor     enabled=False
vault-control-sync       enabled=False
hypothesis-feedback      enabled=False
log-rotator              enabled=False

Hermes gateway 확인:

HTTP API: 127.0.0.1:18789 healthy
Scheduler: tick healthy
Gateway is running — cron jobs will fire automatically
active job(s): 7
next run: 2026-04-14T22:10:00+09:00

중간 이슈와 처리

  1. 첫 실행에서 verifier가 시스템 Python으로 Hermes를 import해 실패했다.
  2. 원인: Hermes 코드가 Python 3.11 문법을 쓰는데 시스템 Python이 맞지 않았다.
  3. 조치: verifier direct 실행을 Hermes venv Python으로 변경.

  4. shell-job 기본값이 성공 응답을 [SILENT]로 숨겨 strict diff가 실패했다.

  5. 원인: 검증 harness는 Hermes response와 OpenClaw stdout/stderr를 비교한다.
  6. 조치: 이전 대상 shell-job은 silent=false로 등록하고, shell-job 성공 응답에 stdout/stderr를 함께 담게 보정.

  7. log-rotator 첫 실패 검증 과정에서 OpenClaw 쪽 실제 log rotation이 먼저 실행됐다.

  8. 이후 재검증에서는 양쪽 모두 No rotation needed로 3회 통과.
  9. 삭제는 script 정책 범위 안의 오래된 rotation cleanup만 수행됐고, cron 삭제는 없음.

자동화 도구 사용법

전체 batch 실행:

python3 /Users/ron/.openclaw/workspace/scripts/hermes_migration_batch_tool.py --cycles 3

특정 1개만 재검증:

python3 /Users/ron/.openclaw/workspace/scripts/hermes_migration_batch_tool.py --cycles 3 --only vault-control-sync

동작:

  1. OpenClaw/Hermes jobs.json 백업
  2. OpenClaw payload.command를 Hermes shell-job으로 변환
  3. Hermes job enabled=true 등록
  4. hermes_migration_verify.py로 strict dual-run 3회
  5. 3회 모두 통과하면 OpenClaw enabled=false
  6. 실패하면 Hermes job paused, OpenClaw 유지

남은 리스크

  • gateway 재기동 중 일시적으로 18789 API가 내려갔다가 hermes gateway start로 복구했다.
  • log-rotator는 검증 중 실제 로그 회전을 수행했다. 현재는 정상 상태지만, 다음부터는 dry-run 없는 정리성 작업을 dual-run할 때 파일 변화량을 먼저 따로 산정하는 가드가 필요하다.
  • shell-job은 이제 LLM을 우회하므로 prompt-wrap 때의 임의 명령 실행 문제는 제거됐다. 다만 command allowlist 정책은 아직 batch tool 수준에 머물고 Hermes 전역 정책으로 완전히 굳힌 것은 아니다.

자체평가

  • 정확성: 4.8/5 — 5개 모두 3회 strict diff 통과 후 실제 이전 완료
  • 완성도: 4.7/5 — 자동화 도구와 harness 보정 포함
  • 검증: 4.8/5 — py_compile, JSON validate, verifier report, gateway health 확인
  • 최소 변경: 4.5/5 — shell-job 응답 보정을 위해 Hermes scheduler를 건드렸지만 목적 범위 내

종합: 4.7/5