Hermes Batch A 실제 마이그레이션 보고서 (2026-04-14)
상태: 완료 — batch A forced run 후 안전 가드 발동, Hermes 전부 paused rollback
0. 범위
- batch: A
- 대상 5개: source-registry-updater, quant-signal-generator, data-quality-monitor, vault-control-sync, hypothesis-feedback
- 금지 준수: LaunchAgent 변경 없음, 코드 수정 없음, 5개 초과 없음, 삭제 없음
1. 백업 및 disabled job 추가
- Hermes backup:
/Users/ron/.hermes/cron/jobs.json.bak-batchA-20260414T135911 - OpenClaw backup:
/Users/ron/.openclaw/cron/jobs.json.bak-batchA-20260414T135911 - 첫 시도 이슈: system
python3가 Hermes 코드의Path | None문법을 지원하지 않아 import 실패. jobs.json은 변경 전이었다. - 처리: 수동 schema 작성으로 batch A 5개를
enabled=false,state=paused,deliver=local,provider=ollama,model=qwen2.5:3b로 추가.
2. 첫 실행 로그
2.1 provider 보정
첫 ocA-src-reg 실행은 Hermes runtime provider가 provider=ollama를 직접 해석하지 못해 OpenRouter로 떨어졌고, command가 실행되지 않았다. 출력 파일도 없었다.
조치: batch A 5개 job을 provider=custom, base_url=http://localhost:11434/v1, model=qwen2.5:3b로 보정. ocA-src-reg는 재시도를 위해 paused/error로 되돌림.
2.2 수동 tick 한계 및 gateway scheduler 재시도
hermes cron tick를 Codex sandbox 안에서 실행하면 OpenAI-compatible HTTP 호출이 Connection error로 실패했다. 이는 gateway 프로세스가 아니라 현재 Codex 실행 환경의 네트워크 제한으로 판단된다. 따라서 hermes cron run <id>만 호출하고, 실제 실행은 이미 떠 있는 Hermes gateway scheduler가 처리하는지 확인하는 방식으로 재시도한다.
2.3 즉시 rollback
Gateway scheduler 재시도에서 source_registry_updater.py 자체는 실행되어 registry 파일이 생성되었지만, 이후 LLM이 스크립트 stdout을 다시 shell 명령처럼 실행하려는 오동작을 보였다. 이는 prompt-wrap 패턴이 현재 Hermes AIAgent/qwen2.5 조합에서 안전하게 고정되지 않았다는 뜻이다.
안전 가드에 따라 batch A Hermes job 5개 전부 enabled=false, state=paused로 rollback했다. OpenClaw cron은 그대로 enabled 유지.
3. 최종 상태
| cron | Hermes 상태 | OpenClaw 상태 | 첫 실행/diff | 최종 판정 |
|---|---|---|---|---|
| source-registry-updater | paused | enabled | 대상 명령은 실행되어 registry.json 생성됨. 그러나 LLM이 stdout을 추가 shell 명령으로 오인하고 pip install requests, python manage.py runserver 등 의도 밖 명령을 시도. Hermes output은 error. |
rollback |
| quant-signal-generator | paused | enabled | 실행 전. batch 공통 prompt-wrap 안전성 실패로 진행 중단. | rollback |
| data-quality-monitor | paused | enabled | 실행 전. batch 공통 prompt-wrap 안전성 실패로 진행 중단. | rollback |
| vault-control-sync | paused | enabled | 실행 전. batch 공통 prompt-wrap 안전성 실패로 진행 중단. | rollback |
| hypothesis-feedback | paused | enabled | 실행 전. batch 공통 prompt-wrap 안전성 실패로 진행 중단. | rollback |
4. 산출물/증거
- Hermes job 5개는 실제 추가되었으나 모두
enabled=false,state=paused로 rollback됨. - OpenClaw cron 5개는 모두 기존
enabled=true유지. ocA-src-regHermes output:/Users/ron/.hermes/cron/output/ocA-src-reg/2026-04-14_14-01-17.md/Users/ron/.hermes/cron/output/ocA-src-reg/2026-04-14_14-03-25.md- source registry output exists:
/Users/ron/.openclaw/workspace/memory/source-registry/registry.json= True, size=65165, mtime=2026-04-14 14:05:10 - Hermes jobs sha256:
ea5f966182bef2ae03b4aa7e9884293bf456ac1c4f530c3c554dd727598dae17 - OpenClaw jobs sha256:
dfdb65fe2bb573c662490fc13e6002d08ac8b1c9431b42ee7e5eff04951e99e8
Hermes batch A job 상태
| id | enabled | state | last_status | next_run_at |
|---|---|---|---|---|
| ocA-src-reg | False | paused | error | None |
| ocA-quant-sig | False | paused | None | None |
| ocA-data-quality | False | paused | None | None |
| ocA-vault-control | False | paused | None | None |
| ocA-hyp-feedback | False | paused | None | None |
OpenClaw batch A 상태
| id | enabled | state |
|---|---|---|
| source-registry-updater | True | {'lastRunAtMs': 1775793176545, 'lastRunStatus': 'ok', 'lastStatus': 'ok', 'lastDurationMs': 6222, 'lastDeliveryStatus': 'not-delivered', 'consecutiveErrors': 0, 'nextRunAtMs': 1776038700000, 'lastDelivered': False} |
| quant-signal-generator | True | {'nextRunAtMs': 1776033900000, 'lastRunAtMs': 1775791071806, 'lastRunStatus': 'ok', 'lastStatus': 'ok', 'lastDurationMs': 23554, 'lastDeliveryStatus': 'not-delivered', 'consecutiveErrors': 0, 'lastDelivered': False} |
| data-quality-monitor | True | {'nextRunAtMs': 1776032100000, 'lastRunAtMs': 1775945700973, 'lastRunStatus': 'ok', 'lastStatus': 'ok', 'lastDurationMs': 30617, 'lastDeliveryStatus': 'not-delivered', 'consecutiveErrors': 0, 'lastDelivered': False} |
| vault-control-sync | True | {'lastRunAtMs': 1775934000068, 'lastRunStatus': 'ok', 'lastStatus': 'ok', 'lastDurationMs': 16654, 'lastDeliveryStatus': 'not-delivered', 'consecutiveErrors': 0, 'nextRunAtMs': 1776020400000, 'lastDelivered': False} |
| hypothesis-feedback | True | {'consecutiveErrors': 0, 'lastDelivered': False, 'lastDeliveryStatus': 'not-delivered', 'nextRunAtMs': 1775999400000, 'lastRunAtMs': 1775913000067, 'lastRunStatus': 'ok', 'lastStatus': 'ok', 'lastDurationMs': 36905} |
5. 판단
이번 batch A는 “실제로 옮기기”를 시도했다. jobs.json 백업 후 Hermes에 5개를 추가했고, 첫 job을 forced run했다. 그러나 prompt-wrap이 현재 Hermes AIAgent/qwen2.5 실행에서 명령 1회로 고정되지 않아 안전 가드가 발동했다.
최종 소유권 이관은 0개다. 이것은 보수적 중단이 아니라, 실제 첫 실행에서 의도 밖 command 실행이 관찰되어 rollback한 결과다.
다음 수정 없이는 같은 방식으로 나머지 batch를 진행하면 안 된다. 필요한 보강은 Hermes cron에 command 타입/direct shell executor를 추가하거나, prompt-wrap job에 max_tool_calls=1/terminal command allow-single-shot 같은 런타임 가드를 거는 것이다.