Hermes migration batch R 실제 이전 보고
- 작성: 2026-04-14T15:31:09+09:00
- 결론: 5개 OpenClaw cron을 Hermes shell job으로 이전했고, harness dual-run 3회씩 모두 PASS했다. OpenClaw 원본은 삭제하지 않고
enabled=false로 전환했다. - 범위: batch=R prefix
ocR-R000~ocR-R004; 다른 batch I~O/N/H 등 기존 선점 ID와 겹치지 않는 UUID 기반 active systemEvent만 처리했다. - 선정 특이사항: 남은 안전 후보 중 무알림/짧은/idempotent 작업을 우선했고, D-DAY OpenClaw 폐기 목적상
technical-data/technical-stat-models중복 systemEvent 정리에 집중했다. 카테고리 다양성은 낮지만 충돌·부작용 리스크가 가장 낮은 조합이다.
변경 파일
/Users/ron/.hermes/cron/jobs.json: ocR 5개 shell job 추가 및verified_cutover기록/Users/ron/.openclaw/cron/jobs.json: 대상 5개enabled=false, migration 메타 기록/Users/ron/knowledge-agent/400-reports/260414_hermes_batch_R_real.md: 이 보고서
백업
- Hermes:
/Users/ron/.hermes/cron/jobs.json.bak-batchR-20260414T152748 - OpenClaw disable 전:
/Users/ron/.openclaw/cron/jobs.json.bak-batchR-disable-20260414T152923
이전 결과
| sub-id | OpenClaw id | OpenClaw name | Hermes id | command | schedule | dual-run | 최종 상태 |
|---|---|---|---|---|---|---|---|
| R000 | 1865183a-37b4-486b-bce2-46564b08ee09 |
technical-data-collector 기술적 지표 수집 (2시간 주기) | ocR-R000-tech-data-uuid2 |
cd /Users/ron/.openclaw/workspace && PYTHONPATH=/Users/ron/.openclaw/workspace/scripts/shared:/Users/ron/.openclaw/workspace/scripts/pipeline python3 scripts/pipeline/technical_data_collector.py |
every 120m |
3/3 PASS | OpenClaw disabled, Hermes scheduled |
| R001 | fa01c626-91e9-4153-82f6-8e5266c27a43 |
technical-stat-models 기술통계모델 (2시간 주기) | ocR-R001-tech-stat-uuid1 |
python3 /Users/ron/.openclaw/workspace/scripts/pipeline/technical_stat_models.py |
every 120m |
3/3 PASS | OpenClaw disabled, Hermes scheduled |
| R002 | bd5cfa0c-c6c3-4046-82a9-5a75cf7bc8cc |
technical-stat-models 기술통계모델 (2시간 주기) | ocR-R002-tech-stat-uuid2 |
python3 /Users/ron/.openclaw/workspace/scripts/pipeline/technical_stat_models.py |
every 120m |
3/3 PASS | OpenClaw disabled, Hermes scheduled |
| R003 | 53baa2b2-8f7e-4378-87fe-46f90ee10f1f |
technical-stat-models | ocR-R003-tech-stat-uuid3 |
python3 /Users/ron/.openclaw/workspace/scripts/pipeline/technical_stat_models.py |
every 120m |
3/3 PASS | OpenClaw disabled, Hermes scheduled |
| R004 | 56c91210-716e-4a28-a397-524e74cfb798 |
technical-stat-models 기술통계모델 | ocR-R004-tech-stat-uuid4 |
python3 /Users/ron/.openclaw/workspace/scripts/pipeline/technical_stat_models.py |
every 120m |
3/3 PASS | OpenClaw disabled, Hermes scheduled |
검증 증거
- 실행 도구:
/Users/ron/.openclaw/workspace/scripts/hermes_migration_verify.py - 공통 옵션:
--once-policy auto --hermes-exec direct --strict-diff - watch artifact:
/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json - 전체 report JSON: 15개
- 모든 run에서
openclaw=True,hermes_trigger=True,hermes_exec=True,watch=True,text_match=True - 기술통계모델 사전
--dry-run및 report grep에서[ALERT]/텔레그램 발송 문구 없음 확인
R000 1865183a-37b4-486b-bce2-46564b08ee09 → ocR-R000-tech-data-uuid2
- PASS
20260414_152854_1865183a-37b4-486b-bce2-46564b08ee09_ocR-R000-tech-data-uuid2.json— delta=0ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152856_1865183a-37b4-486b-bce2-46564b08ee09_ocR-R000-tech-data-uuid2.json— delta=1ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152858_1865183a-37b4-486b-bce2-46564b08ee09_ocR-R000-tech-data-uuid2.json— delta=0ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json']
R001 fa01c626-91e9-4153-82f6-8e5266c27a43 → ocR-R001-tech-stat-uuid1
- PASS
20260414_152859_fa01c626-91e9-4153-82f6-8e5266c27a43_ocR-R001-tech-stat-uuid1.json— delta=0ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152901_fa01c626-91e9-4153-82f6-8e5266c27a43_ocR-R001-tech-stat-uuid1.json— delta=1ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152902_fa01c626-91e9-4153-82f6-8e5266c27a43_ocR-R001-tech-stat-uuid1.json— delta=0ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json']
R002 bd5cfa0c-c6c3-4046-82a9-5a75cf7bc8cc → ocR-R002-tech-stat-uuid2
- PASS
20260414_152903_bd5cfa0c-c6c3-4046-82a9-5a75cf7bc8cc_ocR-R002-tech-stat-uuid2.json— delta=0ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152905_bd5cfa0c-c6c3-4046-82a9-5a75cf7bc8cc_ocR-R002-tech-stat-uuid2.json— delta=0ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152906_bd5cfa0c-c6c3-4046-82a9-5a75cf7bc8cc_ocR-R002-tech-stat-uuid2.json— delta=1ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json']
R003 53baa2b2-8f7e-4378-87fe-46f90ee10f1f → ocR-R003-tech-stat-uuid3
- PASS
20260414_152907_53baa2b2-8f7e-4378-87fe-46f90ee10f1f_ocR-R003-tech-stat-uuid3.json— delta=1ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152909_53baa2b2-8f7e-4378-87fe-46f90ee10f1f_ocR-R003-tech-stat-uuid3.json— delta=1ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152910_53baa2b2-8f7e-4378-87fe-46f90ee10f1f_ocR-R003-tech-stat-uuid3.json— delta=0ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json']
R004 56c91210-716e-4a28-a397-524e74cfb798 → ocR-R004-tech-stat-uuid4
- PASS
20260414_152911_56c91210-716e-4a28-a397-524e74cfb798_ocR-R004-tech-stat-uuid4.json— delta=0ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152913_56c91210-716e-4a28-a397-524e74cfb798_ocR-R004-tech-stat-uuid4.json— delta=1ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json'] - PASS
20260414_152914_56c91210-716e-4a28-a397-524e74cfb798_ocR-R004-tech-stat-uuid4.json— delta=1ms, changed=['/Users/ron/.openclaw/workspace/memory/technical-signals/latest.json']
사후 확인
- JSON parse: Hermes/OpenClaw jobs.json 둘 다 통과
- harness syntax:
python3 -m py_compile .../hermes_migration_verify.py통과 - 상태 invariant: 5개 모두 OpenClaw
enabled=false, Hermesenabled=true,state=scheduled,migration.status=verified_cutover,dual_run_count=3 hermes cron status: Gateway running, HTTP API healthy, Scheduler tick healthy, 69 active jobs, next run2026-04-14T15:40:00+09:00- LaunchAgents 변경 없음. 금지 파일
shared/llm.py,shared/cycle_base.py수정 없음.
Remaining Risks
- batch R은 안전성과 미선점성을 우선해서 technical 계열 중복 systemEvent 정리에 치우쳤다. “카테고리 다양화” 기준은 완전 충족이 아니라 의도적 완화다.
technical_stat_models.py는 임계값 초과 시send_dm(level="info")경로가 있으나, 이번 15회 검증과 사전 dry-run에서는 alert가 없어서 외부 발송은 확인되지 않았다.
자체평가
- 정확성 4.8/5, 완성도 4.7/5, 검증 4.8/5, 최소 변경 4.7/5 → 종합 4.75/5