최종 Grand Critic — 2026-04-15 Hermes Migration Phase Close
최종 Grand Critic — 오늘 하루 작업 전체 판정
판정 시각: 2026-04-15 20:40~20:55 KST
검증자: Codex Critic
범위: Phase 17 종료, OpenClaw→Hermes 이전, launchd/bootstrap, 해리 시야 webapp/Telegram 리포트, wrapper 5종, sandbox 해제 후 live 검증
최종 판정
부분 PASS.
해리가 실제로 보는 핵심 표면 — 웹앱 + Telegram 리포트 도달 — 은 오늘 최종 라운드에서 실증 수준까지 올라왔다. 그러나 “OpenClaw 완전 이전”은 아직 아니다. 이유는 세 가지다.
~/.openclaw/cron/jobs.json은 활성 0개라 cron 측 동결은 가능하지만,launchctl print기준 아직 OpenClaw 경로를 물고 실행 중인 서비스가 남아 있다.- Hermes cron 8개 중 일부는 silent-fail 패치 이후 실패를 exit 1로 드러내기 시작했고, 실제 최신 상태에
price-history,blog-monitor,vault-analyst-feedback오류가 남아 있다. ~/.hermes/openclaw.json의 learning-topic/collab prompt 안에/Users/ron/.openclaw/...exec 경로가 여전히 남아 있어, Telegram ingest/반응 계열은 hard freeze 시 깨질 수 있다.
따라서 결론은 다음과 같다.
- 해리 시야 기능: PASS
- Hermes 핵심 전환: 부분 PASS
- OpenClaw hard freeze/delete: 아직 금지
- OpenClaw cron soft freeze: 가능
1. 카테고리별 판정표
| 카테고리 | 판정 | 직접 확인 근거 | 남은 리스크 |
|---|---|---|---|
| webapp | APPROVE | launchctl print gui/501/com.openclaw.sihwang-webapp → pid=17287, program/cwd/log 모두 /Users/ron/.hermes/.... Live curl: days=abc/0/-5 → 400, days=30 → 200. /market/bond-study/2026-04-12/pdf → 200, /ops/pipelines, /pm, /briefing → 200. |
/api/news/S10_반도체기술은 200이나 count 0. 04-14 bond PDF는 404로 정상/자료부재 상태. |
| cron | REVISE | ~/.hermes/cron/jobs.json active 8개, 명령은 Hermes 경로. 260415_cron_silent_fail_audit.md에서 7개 silent-fail 경로 패치와 강제 실패 exit 1 확인. |
최신 output 기준 price-history는 yfinance not installed로 exit 1, blog-monitor exit 1, vault-analyst-feedback job state error 잔존. cron은 “조용히 성공”은 줄었지만 운영 성공은 아직 전부 아님. |
| Telegram 리포트 | APPROVE | message_id 실증 다수 확보: DM 11602, ops 2350/2355, report 2351/2352/2353, market 2356/2357/2358/2359/2360, bond group 51803/51804. api.telegram.org DNS/HTTP 200도 현재 Codex shell에서 확인. |
sector_trace만 남는 경로와 message_id 저장 경로가 혼재. 모든 발송 wrapper의 message_id 표준화 필요. |
| launchd 19개 | 부분 APPROVE | 19개 핵심 대상은 현재 대부분 loaded/not running/last exit 0이며 Hermes 경로. 직접 launchctl print에서 대상 19개 모두 oc_refs=0, hm_refs>0 확인. ai.hermes.gateway running pid 20146. |
전체 LaunchAgent 전수로 보면 별도 16개 loaded service가 OpenClaw 경로를 여전히 참조한다. 19개만 기준이면 통과, 전체 OpenClaw 폐기 기준이면 미완. |
| sandbox/network | APPROVE | 현재 network enabled 상태에서 DNS 확인: api.telegram.org, Yahoo, Naver RSS, FRED 모두 resolve. https://api.telegram.org root HTTP 200. Localhost webapp curl 성공. |
launchctl 제어는 여전히 일부 환경에서 제한될 수 있음. 단 이번 검증은 read/print/curl 중심이라 충분. |
| analyst 4종 | APPROVE | market topic 도달: fundamental 2356 및 최종 2360, macro 2357, technical 2358, pm 2359. TSV와 sector_trace.log 모두 ok=True/topic_id=5. |
fundamental prompt 안의 DM 지시 충돌은 보고서에서 known issue로 남음. 정기 실행 전 prompt 정리가 필요. |
2. 5 sub-task 최종 판정
이전 최종 Critic에서 REVISE였던 webapp/cron/data→UI 항목을 오늘 후속 증거까지 반영해 다시 판정했다.
| sub-task | 최종 판정 | 근거 |
|---|---|---|
| s:2 webapp 전수 검증 | APPROVE | live webapp이 Hermes PID/cwd로 올라왔고, /api/chart/SPY guard curl이 실제 400/200으로 통과. 주요 페이지도 200. |
| s:4 cron reports | REVISE | silent fail 패치는 유효하지만 최신 Hermes cron output에서 실제 실패가 남아 있다. “작동 확인”이 아니라 “실패를 드러내는 상태”까지 온 것. |
| s:6 newsletter/briefing chain | APPROVE | weekly/morning Telegram wrapper가 report topic message_id 2351, 2352, 2353을 남김. newsletter sector routing도 기존 trace와 설정 일치. |
| s:8 sector topics | APPROVE | sector-group.json topic map 유지, market/ops/report 실도달 message_id 확보. sandbox network 차단 이슈는 현재 해소. |
| s:9 data→UI | APPROVE with caveat | fed-liquidity chart API 200, SPY chart API 200, bond 04-12 PDF 200. 단 sector-news count 0과 04-14 bond PDF 404는 데이터 공백으로 남음. |
집계: APPROVE 3 / APPROVE with caveat 1 / REVISE 1 / REJECT 0.
3. wrapper 5종 판정
| wrapper/작업 | 판정 | 실증 증거 |
|---|---|---|
| KPI daily/weekly | APPROVE | ~/.hermes/logs/kpi_daily.log: telegram_ok=True message_id=2355. 이전 동일 경로 2350. weekly KPI도 message_id=2354 추가 확인. |
| morning briefing Telegram | APPROVE | ~/.hermes/logs/morning-briefing-telegram.log: message_ids=[2352], 이후 2353도 확인. |
| weekly briefing Telegram | APPROVE | ~/.hermes/logs/weekly-briefing-telegram.log: message_ids=[2351]. |
| analyst resend | APPROVE | analyst_*_last_telegram.tsv: macro 2357, fundamental 2360, technical 2358, pm 2359. fundamental_resend_fix에는 2356/2360 두 차례 성공. |
| bond message_id logging | APPROVE | ~/.hermes/logs/bond_daily_last_telegram.tsv: group topic 51803, 51804 success. bond_daily_report.py의 bool-only blind spot은 보강됨. |
4. 오늘 확보된 message_id 전수 집계
| 영역 | 목적지 | message_id | 직접 확인 위치 |
|---|---|---|---|
| inbox-triage / cowork DM | Harry DM 492860021 |
11602 |
~/.hermes/logs/cowork_daily_review.log |
| KPI daily | ops topic topic_id=9 |
2350, 2355 |
~/.hermes/logs/kpi_daily.log, 보고서 grep |
| KPI weekly | ops topic topic_id=9 |
2354 |
~/.hermes/logs/kpi_weekly.log |
| weekly briefing | report topic topic_id=8 |
2351 |
~/.hermes/logs/weekly-briefing-telegram.log |
| morning briefing | report topic topic_id=8 |
2352, 2353 |
~/.hermes/logs/morning-briefing-telegram.log |
| analyst fundamental | market topic topic_id=5 |
2356, 2360 |
~/.hermes/logs/sector_trace.log, analyst_fundamental_last_telegram.tsv |
| analyst macro | market topic topic_id=5 |
2357 |
~/.hermes/logs/analyst_macro_last_telegram.tsv |
| analyst technical | market topic topic_id=5 |
2358 |
~/.hermes/logs/analyst_technical_last_telegram.tsv |
| analyst PM | market topic topic_id=5 |
2359 |
~/.hermes/logs/analyst_pm_last_telegram.tsv |
| bond daily | group topic -1003076685086 / topic_id=39439 |
51803, 51804 |
~/.hermes/logs/bond_daily_last_telegram.tsv |
사용자 제공 목록과 대조:
- DM
11602: 확인. - ops
2350/2355: 확인. 추가로 weekly KPI2354확인. - report
2351/2352: 확인. 추가로 morning 재발송2353확인. - market
2356/2357/2358/2359: 확인. 추가로 fundamental 최종2360확인. - 그룹
51803/51804: 확인.
5. Phase 17 Critic Round 3 권고 4개 대응 상태
| Round 3 권고 | 대응 상태 | 판정 |
|---|---|---|
| 49 silent fail / cron false-success | 260415_cron_silent_fail_audit.md 기준 7개 스크립트와 vault prompt job을 패치. 강제 실패 케이스가 exit 1로 떨어지는 것 확인. |
부분 해소 — silent fail은 줄었지만 최신 cron 자체 성공은 아직 전부 아님. |
| Copilot 403 영향 cron 분리 | price_history_collector.py 자체는 LLM 호출 없음. 다만 Hermes LLM log에는 Codex token 401과 OpenRouter key 없음이 반복됨. |
부분 해소 — price-history와 LLM 문제는 분리됐지만 LLM provider fallback 품질/토큰 문제는 잔존. |
| Hermes launchd 안정화 | ai.hermes.gateway running pid 20146, HERMES_HOME=/Users/ron/.hermes. 핵심 19개 LaunchAgent는 Hermes 경로로 loaded. |
부분 해소 — 전체 LaunchAgent 전수 기준 OpenClaw 경로 running 서비스가 별도로 남음. |
| localhost/sandbox 검증 한계 | network_access=true 이후 local curl과 DNS가 통과. webapp guard 직접 확인. | 해소. |
6. 전체 이전 완성도 점수
| 기준 | 점수 | 이유 |
|---|---|---|
| 해리 원래 의도 일치도 | 4.4/5 | 해리가 보는 웹앱/Telegram 리포트는 실증 도달까지 확인. 완전 이전은 일부 미달. |
| webapp Hermes 전환 | 4.6/5 | PID/cwd/log Hermes, curl 400/200, 주요 페이지/API 200. 일부 데이터 공백은 남음. |
| Telegram 도달성 | 4.7/5 | 실제 message_id가 10건 이상 확보됨. bond도 그룹 topic message_id 확보. |
| cron 안정성 | 3.4/5 | active 8개와 silent-fail patch는 좋지만 최신 job error가 남음. |
| launchd 전환 | 3.6/5 | 핵심 19개는 Hermes 기준. 그러나 전체 LaunchAgent 중 OpenClaw path running 16개 발견. |
| 데이터/UI 연동 | 4.1/5 | SPY/fed/bond 04-12는 UI에서 확인. sector-news 일부 빈 상태. |
| OpenClaw 제거 준비도 | 2.8/5 | OpenClaw cron active 0은 좋지만 launchd/config 잔존 때문에 hard freeze 불가. |
종합: 3.9/5 — 부분 PASS.
7. 직접 실행한 핵심 검증 커맨드 결과 요약
webapp
launchctl print gui/501/com.openclaw.sihwang-webapp
state = running
program = /usr/bin/python3 /Users/ron/.hermes/workspace/scripts/pipeline/run_webapp.py
working directory = /Users/ron/.hermes/workspace/scripts/pipeline
stdout/stderr = /Users/ron/.hermes/logs/...
pid = 17287
/api/chart/SPY?days=abc -> HTTP 400
/api/chart/SPY?days=0 -> HTTP 400
/api/chart/SPY?days=-5 -> HTTP 400
/api/chart/SPY?days=30 -> HTTP 200
/market/bond-study/2026-04-12/pdf -> HTTP 200, PDF bytes 167496
/market/bond-study/2026-04-14/pdf -> HTTP 404, "PDF 없음"
/api/fed-liquidity/chart -> HTTP 200
/api/news/S10_반도체기술 -> HTTP 200, count 0
launchd
핵심 19개 + webapp/gateway 확인 결과:
com.openclaw.cowork-daily-review loaded, not running, last=0, Hermes refs, OpenClaw refs 0
com.openclaw.autopilot-sweeper loaded, not running, last=0, Hermes refs, OpenClaw refs 0
com.openclaw.inbox-triage loaded, not running, last=0, Hermes refs, OpenClaw refs 0
ai.openclaw.memory-guardian loaded, not running, last=0, Hermes refs, OpenClaw refs 0
com.openclaw.ron-orchestrator loaded, not running, last=0, Hermes refs, OpenClaw refs 0
analyst 4종 loaded, not running, last=0, Hermes refs, OpenClaw refs 0
morning/weekly/kpi/sensors/briefing loaded, mostly last=0, Hermes refs, OpenClaw refs 0
com.openclaw.sihwang-webapp running pid=17287, Hermes refs, OpenClaw refs 0
ai.hermes.gateway running pid=20146, HERMES_HOME=/Users/ron/.hermes
하지만 전체 LaunchAgent 전수에서는 다음 문제가 남았다.
loaded_related 42
loaded_with_openclaw_refs 16
대표 잔존 running 서비스:
com.openclaw.auto-dispatcher
com.openclaw.claude-listener
com.openclaw.collab-review-loop
com.openclaw.dispatch-watcher
com.openclaw.ops-dashboard
com.openclaw.otel-collector
com.openclaw.telegram-bridge
com.openclaw.task-notifier
com.openclaw.tts-webhook
com.ron.pipeline-orchestrator
com.ron.vault-watcher
즉, “19개 목표 LaunchAgent”는 상당히 닫혔지만 “OpenClaw 전체 폐기” 기준은 아직 아니다.
cron
~/.openclaw/cron/jobs.json: total 295 / active 0
~/.hermes/cron/jobs.json: total 8 / active 8
~/.hermes/workspace/scripts active strict grep for .openclaw path: hit_count 0
최신 Hermes cron output에서 확인된 잔존 실패:
ocPH-SPY-price-history-refresh: Exit Code 1, ERROR: yfinance not installed
ocM-M019-blog-monitor: Exit Code 1
41c2736f0527 vault-analyst-feedback: jobs.json last error / output stale failed prompt 기록
network/sandbox
api.telegram.org DNS -> 149.154.166.110
query1.finance.yahoo.com DNS -> resolved
rss.blog.naver.com DNS -> resolved
fred.stlouisfed.org DNS -> resolved
https://api.telegram.org -> HTTP 200
8. 잔존 known issues 우선순위
P0 — hard freeze 차단
- OpenClaw 경로를 물고 실행 중인 LaunchAgent 16개
- 핵심 19개 외 서비스가 아직 OpenClaw cwd/program/log를 참조한다.
-
hard freeze/delete 시 대시보드, bridge, listener, watcher 계열이 깨질 수 있다.
-
~/.hermes/openclaw.json내부 learning-topic exec 경로 - 다수 topic prompt가
ingest_topic_media.py,telegram_react.py,collab_trigger.py,ingest_discord_announcement.py,forward_to_telegram.py를/Users/ron/.openclaw/...로 호출한다. - Telegram 수집/반응 계열이 hard freeze에 취약하다.
P1 — 운영 품질 차단
- Hermes cron 최신 실패
- price-history:
yfinance not installed. - blog-monitor: exit 1.
- vault-analyst-feedback: last error/stale failed output.
-
silent-fail은 잡았지만, 실제 성공률은 아직 끌어올려야 한다.
-
LLM provider/token 품질 문제
~/.hermes/logs/llm/20260415.jsonl에 Codex token refresh 401, OpenRouter key 없음 반복.-
Ollama fallback으로 성공한 경우는 있으나 품질/지연 리스크가 있다.
-
message_id 로깅 표준화 미완
- KPI/briefing/analyst/bond는 점점 보강됐지만 모든
send_sector()호출이 동일 포맷으로 저장되는 것은 아니다. sector_trace와 TSV/DB가 혼재한다.
P2 — 데이터 공백/정리
- sector-news 일부 빈 상태
-
S10_반도체기술API는 200이지만 count 0. -
04-14 bond PDF 없음
-
/market/bond-study/2026-04-14/pdf는 404. 04-12 PDF는 200. -
LaunchAgent label 이름은 여전히
com.openclaw.* - 기능 문제는 아니지만 “완전 Hermes” 관점에서는 이름/namespace 정리가 남아 있다.
9. OpenClaw freeze 권고 여부
지금 가능한 것
OpenClaw cron soft freeze는 가능.
근거:
~/.openclaw/cron/jobs.json total 295 / active 0
즉, OpenClaw cron scheduler 관점에서는 더 이상 active job이 없다.
아직 하면 안 되는 것
~/.openclaw hard freeze/delete/write-protect는 아직 금지.
근거:
- 현재 loaded LaunchAgent 중 OpenClaw 경로 참조 16개.
~/Library/LaunchAgents/*.plist중 OpenClaw 경로 포함 18개.~/.hermes/openclaw.json안의 learning-topic/collab prompt가 OpenClaw script path를 직접 호출.- 일부 외부 bridge/agent queue/pipeline watcher가 아직 OpenClaw workspace 또는 scripts에 의존.
권고:
- 오늘은
~/.openclaw/cron만 동결 대상으로 표시. .openclaw/workspace/scripts와.openclaw/skills는 내일 전수 migration 전까지 보존.- hard freeze 전 필수 gate:
launchctl print전수에서/Users/ron/.openclaw0건.~/Library/LaunchAgents/*.plist에서/Users/ron/.openclaw0건 또는 명시 예외 목록 확정.~/.hermes/openclaw.json의 exec path 전부 Hermes로 치환.- Hermes cron 8개 최신 run이 성공 또는 의도된 실패로 분류.
10. 내일 이후 후속 과제
- LaunchAgent 전수 2차 이전
- 19개 목표 외 남은 16개 loaded OpenClaw-ref 서비스를 분류: 유지/폐기/이전.
-
특히
telegram-bridge,claude-listener,auto-dispatcher,ops-dashboard,vault-watcher,pipeline-orchestrator는 해리 시야/운영과 직접 연결될 가능성이 높다. -
~/.hermes/openclaw.jsonprompt path 치환 -
ingest_topic_media.py,telegram_react.py,collab_trigger.py, Discord forward 계열의 Hermes 대응 파일 존재 확인 후 치환. -
Hermes cron 8개 최신 성공률 회복
price-history: Hermes runtime에 yfinance 설치/venv 경로 고정 또는 fallback만으로 성공하도록 수정.blog-monitor: 최신 exit 1 원인 로그 확정.-
vault-analyst-feedback: shell job 전환 후 실제 output 재생성. -
message_id 표준 로그 통일
-
모든 Telegram 발송 함수가
chat_id/topic_id/message_id/ok/error/source를 TSV 또는 DB에 남기게 통일. -
OpenClaw hard freeze 전 최종 게이트 리포트 작성
- 이름 예:
260416_openclaw_freeze_gate.md. - 조건: launchd refs 0, Hermes cron latest OK, Telegram ingest OK, webapp OK.
11. 자체평가
- 정확성: 4.7/5 — 보고서 주장만 수용하지 않고
launchctl print, live curl, cron output, grep, 로그 TSV를 직접 확인했다. - 완성도: 4.6/5 — 요청한 판정표, message_id 집계, Round 3 권고 대응, freeze 여부, 후속 과제를 포함했다.
- 검증: 4.6/5 — network enabled 이후 DNS/local curl까지 직접 확인했다. 단 Telegram에 새 메시지를 보내는 destructive-ish 검증은 하지 않고 기존 message_id/로그를 기준으로 검증했다.
- 최소 변경: 5.0/5 — 원본 코드/서비스/Gateway는 건드리지 않았고, 이 Critic 보고서만 작성했다.
종합: 4.7/5.