virtual-insanity
← 리포트 목록

Hermes cron entry 8개 실제 실행 검증

2026-04-15 migrate

결론

8개 중 즉시 정상 판정은 3개, 조건부 정상/주의가 4개, 수정 필요가 1개다.

  • ✅ 정상: price-history SPY refresh, fed-liquidity-aggregator, gmail-newsletter-collector
  • ⚠️ 주의: vault-analyst-feedback, bond-daily-report-real-notify, bond-morning-poll-real-gmail-collector, batchM-intelligence-blog-monitor
  • ❌ 수정 필요: macro-series-collector

가장 중요한 수정 포인트는 두 개다.

  1. macro-series-collector는 Hermes 쪽 FRED API key가 없어 현재 entry 그대로 직접 실행하면 실패한다. ~/.openclaw/fred_api_key는 있으나 ~/.hermes/fred_api_key는 없다.
  2. blog_monitor.py --notify는 backlog 44건이 확인됐다. 현재 enabled 상태로 다음 tick이 오면 대량 텔레그램 발송 가능성이 있다.

Gateway 상태 확인

hermes cron list는 아래 경고를 출력했다.

Gateway is not running — jobs won't fire automatically.

하지만 프로세스/포트/API는 살아 있었다.

PID 50183: python -m hermes_cli.main gateway run
127.0.0.1:18789 LISTEN
GET /v1/models => HTTP/1.1 200 OK

따라서 Gateway 자체는 동작 중으로 보이지만, hermes cron list의 상태 감지 로직은 불일치한다. 스케줄 자동 firing 보장은 별도 tick 로그로 한 번 더 확인해야 한다.

8개 entry 결과표

# Entry 판정 검증 결과 실패/주의 원인 권고
1 vault-analyst-feedback ⚠️ command는 비어 있고 prompt 기반 Hermes job. 최신 output은 2026-04-15 09:00 실행, last_status=ok, response 없음. 구현 파일 ~/.hermes/workspace/scripts/pipeline/vault_analyst_feedback.py 존재. shell entry가 아니라 prompt job이다. 실제 구현 파일은 현재 job에 wired 되어 있지 않다. prompt job으로 유지할지, shell job으로 vault_analyst_feedback.py를 호출할지 결정 필요.
2 price-history SPY refresh 실제 실행 성공. stdout 저장 경로가 /Users/ron/.hermes/workspace/memory/price-history로 찍힘. SPY.json mtime 2026-04-15 14:02:42. 샌드박스 실행은 DNS 실패했으나 escalated 실제 실행은 OK. 현재 상태 유지.
3 bond-daily-report-real-notify ⚠️ py_compile/import OK. --dry-run 존재. escalated dry-run에서 LLM 완료 후 리포트 stdout 생성. 실제 cron command는 --notify라 텔레그램 발송을 유발한다. dry-run은 저장/전송 안 함. bond-report-output 디렉토리는 없지만 스크립트는 memory/bond-briefing을 사용한다. real notify가 의도된 entry인지 확인. 테스트용이면 command를 --dry-run으로 분리 권고.
4 bond-morning-poll-real-gmail-collector ⚠️ 파일 존재. --fixed-income-only 지원. 토큰 경로 ~/.credentials/gmail_token.json, profile [email protected]. 기존 Hermes output 09:33 exit 0, 황대진 2건 저장. fi_saved > 0이면 내부에서 bond_daily_report.py --notify를 트리거한다. 이번 세션에서는 텔레그램 방지를 위해 직접 실행하지 않음. 운영용이면 OK. 검증용/마이그레이션용이면 notify trigger를 stub/dry-run 분리 필요.
5 macro-series-collector 현재 entry와 같은 환경에서 --dry-run 실행 시 49/49 실패. 원인: FRED API key 없음. 단, FRED_API_KEY=$(cat ~/.openclaw/fred_api_key)를 주입하면 DGS10 1개 dry-run 성공. ~/.hermes/fred_api_key 없음. cron command도 FRED_API_KEY를 명시하지 않는다. ~/.hermes/fred_api_key 배치 또는 command/env에 FRED_API_KEY 주입 필요.
6 fed-liquidity-aggregator --dry-run 성공. Hermes memory/macro-timeseries를 읽어 net_t=5.9452, phase=유동성 축소 — 흡수 국면 산출. jobs.json의 last_status=error는 이전 OpenClaw 경로 실행 흔적으로 보임. 현재 스크립트는 Hermes path 기준. 다음 실제 tick 이후 last_status 갱신 확인.
7 batchM-intelligence-blog-monitor ⚠️ import/compile OK. escalated --dry-run --limit 10 성공. RSS 50건, category filter 후 44건 backlog 확인. 현재 cron command는 --notify. backlog 44건 때문에 발송 폭주 위험. 첫 운영 실행 전 --dry-run/--limit/processed seed 처리 후 notify 전환 권고.
8 gmail-newsletter-collector dual wrapper 존재. $HOME/.openclaw 하드코드 없음. 두 토큰 실행 OK. gmail_token.json → 0건, gmail_token_mangdeng2.json → Damnang chat 알림 skip 후 0건. 현재 cron command에는 --no-digest가 없어 새 글이 있으면 Telegram digest 전송 가능. 운영 목적이면 정상. 상태 유지. 필요 시 검증용 job은 --no-digest 별도 분리.

Entry별 증거 로그

1. vault-analyst-feedback

현재 job은 command가 아니라 prompt 기반이다.

id 41c2736f0527
name vault-analyst-feedback
command None
type None job_type None kind None
last_status ok

최신 output tail:

# Cron Job: vault-analyst-feedback
Run Time: 2026-04-15 09:00:51
Prompt: 볼트 분석 환류 작업을 실행해줘...
Response: (No response generated)

구현 파일 확인:

/Users/ron/.hermes/workspace/scripts/pipeline/vault_analyst_feedback.py

2. price-history SPY refresh

실행:

cd /Users/ron/.hermes/workspace
python3 /Users/ron/.hermes/workspace/scripts/pipeline/price_history_collector.py --ticker SPY

stdout tail:

=== 가격 이력 수집 시작 [증분] — 1개 티커 ===
저장 경로: /Users/ron/.hermes/workspace/memory/price-history

  [SPY] 증분 수집 (마지막: 2026-04-14)...
  [SPY] OK — 51일치 저장 (신규 2개)

=== 완료 — 성공 1/1, 실패 0 ===

저장 확인:

2026-04-15 14:02:42 /Users/ron/.hermes/workspace/memory/price-history/SPY.json

3. bond-daily-report-real-notify

검증:

python3 -m py_compile .../bond_daily_report.py => OK
import bond_daily_report => IMPORT_OK
--help: --dry-run, --notify 지원

디렉토리:

/Users/ron/.hermes/workspace/memory/bond-briefing 존재
/Users/ron/.hermes/workspace/memory/bond-report-output 없음

주의: 스크립트 실제 PDF/JSON 저장 경로는 bond-report-output이 아니라 memory/bond-briefing이다.

escalated dry-run tail:

[2026-04-15 13:47:19] bond_daily_report 시작
[2026-04-15 13:47:19] 노트: 260414_황대진_전달-일일-414-화-마감-및-채권시장-정리-DS증권-황대진.md
[2026-04-15 13:47:19] 파싱 완료 — 타입: 낙찰정리, 날짜: 2026-04-14, 낙찰: 0건
[2026-04-15 13:48:04] LLM 완료 (모델: ollama/qwen2.5:3b, 2198자)

4. bond-morning-poll-real-gmail-collector

파일/옵션:

/Users/ron/.hermes/workspace-root-scripts/gmail_credit_monitor.py 존재
--fixed-income-only 지원
TOKEN_PATH /Users/ron/.credentials/gmail_token.json
token_exists True
profile [email protected]

최신 Hermes output tail:

✅ Gmail 토큰 자동 갱신 완료
[정대호] 0건 발견
[이향기] 0건 발견
[황대진] 8건 발견
[vault] 저장: 260414_황대진_전달-금일-415-수-입찰-및-해외시장-동향-DS증권-황대진.md
[vault] 저장: 260414_황대진_전달-일일-414-화-마감-및-채권시장-정리-DS증권-황대진.md
[fixed-income] 볼트 저장 2건
완료

직접 실행은 하지 않았다. 이유: 새 fixed-income 메일이 있으면 내부에서 bond_daily_report.py --notify를 트리거한다.

5. macro-series-collector

현재 entry 환경 dry-run tail:

완료: 0개 성공, 49개 실패
요약: 0/49 succeeded, 49 failed (success_rate=0.0%)
❌ macro_series_collector 실패: 성공한 시리즈가 0개입니다.

반복된 원인:

FRED API 키 없음. ~/.hermes/fred_api_key 파일에 저장하거나 FRED_API_KEY 환경변수로 설정하세요.

키 위치 확인:

MISSING /Users/ron/.hermes/fred_api_key
EXISTS /Users/ron/.openclaw/fred_api_key

키를 명시 주입했을 때 1개 series 검증:

[macro_series_collector] 시작 — incremental(최근 60일)
  ⚠️  dry-run 모드: 실제 저장 없음
  OK  DGS10               40건  latest=2026-04-13 4.3

완료: 1개 성공, 0개 실패
요약: 1/1 succeeded, 0 failed (success_rate=100.0%)

6. fed-liquidity-aggregator

실행:

python3 /Users/ron/.hermes/workspace/scripts/pipeline/fed_liquidity_aggregator.py --dry-run

stdout tail:

"net_t": 5.9452,
"wow_t": -0.0001,
"mom_t": 0.143,
"phase": "유동성 축소 — 흡수 국면",
"phase_color": "red",
"interpretation": "TGA 증가 또는 Fed 자산 감소로 시장에서 자금이 회수되고 있음.",
"investment_signal": "단기 위험자산 비중 축소. 연준 정책 전환 시점 주시."
}
[fed_liquidity_aggregator] 완료

저장 파일 확인:

/Users/ron/.hermes/workspace/memory/fed-liquidity/latest.json 존재

7. batchM-intelligence-blog-monitor

실행:

python3 /Users/ron/.hermes/workspace/scripts/pipeline/blog_monitor.py --dry-run --limit 10

stdout tail:

[2026-04-15 13:49:20] Fetching RSS from https://rss.blog.naver.com/ranto28
[2026-04-15 13:49:20] RSS fetched: 50 entries
[2026-04-15 13:49:20] Category filter: 50 → 44 entries
[2026-04-15 13:49:20] New entries: 44
[2026-04-15 13:49:20]   [DRY-RUN] 파월과 베센트가 은행장들을 긴급 소집한 이유 (feat 미토스) [주절주절]
[2026-04-15 13:49:20]   [DRY-RUN] 원유 상황은 정말 괜찮을까? [주절주절]
[2026-04-15 13:49:20]   [DRY-RUN] 우리 파키스탄이 달라졌어요 (feat 미국 이란의 종전협상 중재) [경제/주식/국제정세/사회]
[2026-04-15 13:49:20]   [DRY-RUN] 미장은 언제부터 오를수 있을까? A/S [경제/주식/국제정세/사회]
{"source": "blog_monitor", "blog": "ranto28", "status": "dry_run", "new_posts": 10}

주의: current cron command는 python3 .../blog_monitor.py --notify다.

8. gmail-newsletter-collector

wrapper 확인:

/Users/ron/.hermes/workspace/scripts/pipeline/gmail_newsletter_collector_dual.sh 존재
COLLECTOR_DIR="$HOME/.hermes/workspace/scripts/pipeline"
PYTHONPATH="$HOME/.hermes/workspace/scripts/shared:$HOME/.hermes/workspace/scripts/pipeline..."
tokens=(~/.credentials/gmail_token.json ~/.credentials/gmail_token_mangdeng2.json)

토큰 profile:

/Users/ron/.credentials/gmail_token.json => [email protected]
/Users/ron/.credentials/gmail_token_mangdeng2.json => [email protected]

실행:

bash /Users/ron/.hermes/workspace/scripts/pipeline/gmail_newsletter_collector_dual.sh --days 2 --no-digest

stdout tail:

=== [dual-collector] run with gmail_token.json ===
[start] 뉴스레터 수집 시작 (days=2, backfill=False, only=None, limit=None)
[done] 0건 수집 완료
[dual-collector] gmail_token.json ok
=== [dual-collector] run with gmail_token_mangdeng2.json ===
[start] 뉴스레터 수집 시작 (days=2, backfill=False, only=None, limit=None)
[skip] Damnang: 비본문 알림 (💬 New thread from Damnang)
[done] 0건 수집 완료
[dual-collector] gmail_token_mangdeng2.json ok

수정 필요 사항

  1. macro-series-collector
  2. ~/.hermes/fred_api_key를 준비하거나 command에 FRED_API_KEY를 주입해야 한다.
  3. 현재 entry 그대로는 직접 실행 기준 실패한다.

  4. batchM-intelligence-blog-monitor

  5. backlog 44건 확인.
  6. 현재 enabled + --notify는 발송 폭주 위험.
  7. 최초 1회는 --dry-run/--limit/processed seed 후 notify 전환 권고.

  8. vault-analyst-feedback

  9. command empty는 prompt job으로는 정상이나, “Hermes 경로 shell 실행 검증” 범주에는 맞지 않는다.
  10. 이미 존재하는 vault_analyst_feedback.py를 shell job으로 연결할지 결정 필요.

  11. bond-* 계열

  12. 두 job 모두 운영 의도상 Telegram notify 가능성이 있다.
  13. 검증용 entry와 운영용 entry를 분리하면 이후 테스트가 안전해진다.

자체평가

  • 정확성: 4.6/5 — 각 entry를 파일/옵션/실행 로그 기준으로 확인했다.
  • 완성도: 4.5/5 — 8개 모두 판정했고 실패 원인과 권고를 남겼다.
  • 검증: 4.5/5 — py_compile/import/help/dry-run/escalated run을 조합했다. 단, notify 위험 entry는 직접 full run하지 않았다.
  • 최소 변경: 4.8/5 — 코드/cron 수정 없이 보고서만 작성했다. 실행 검증 중 price/newsletter 상태 파일 일부 갱신 가능성은 있다.

종합: 4.6/5.