launchd 부활 1/5 — 애널리스트 4개 복구 보고
결론
- 4개 plist 모두 백업 후 Hermes 경로로 rewrite 완료.
- plist 문법 정상:
plutil -lint4/4 OK. analyst_runner.sh문법 정상:bash -nOK.- 하지만 이 세션에서
launchctl bootstrap은 4개 모두Bootstrap failed: 5: Input/output error로 실패했다. launchctl list에 4개 label은 아직 없음. 즉, launchd 부활은 이 세션에서 완료되지 않았다.- 원인은 plist 내용 문제가 아니라 이 세션의 launchd 등록 권한/도메인 제약으로 보인다. 같은 plist를 XML로 변환해 재시도해도 동일했다.
- 직접 실행 fallback으로
technical1회 실행을 시도했으나 Claude CLI 인증 실패(Not logged in) + Telegram DNS 실패로 실제 리포트 생성/발송에는 실패했다.
수정한 plist
백업 시각: 20260415-160700
| label | 백업 파일 | Hermes rewrite 결과 |
|---|---|---|
com.openclaw.analyst-macro |
~/Library/LaunchAgents/com.openclaw.analyst-macro.plist.bak-hermes-20260415-160700 |
analyst_runner.sh macro, stdout/stderr → ~/.hermes/logs/ |
com.openclaw.analyst-fundamental |
~/Library/LaunchAgents/com.openclaw.analyst-fundamental.plist.bak-hermes-20260415-160700 |
analyst_runner.sh fundamental, stdout/stderr → ~/.hermes/logs/ |
com.openclaw.analyst-technical |
~/Library/LaunchAgents/com.openclaw.analyst-technical.plist.bak-hermes-20260415-160700 |
analyst_runner.sh technical, stdout/stderr → ~/.hermes/logs/ |
com.openclaw.analyst-pm |
~/Library/LaunchAgents/com.openclaw.analyst-pm.plist.bak-hermes-20260415-160700 |
analyst_runner.sh pm, stdout/stderr → ~/.hermes/logs/ |
변경 후 4개 plist 모두 /Users/ron/.openclaw 파일시스템 경로는 남아있지 않다.
launchctl 결과
| label | bootout | bootstrap | list | kickstart |
|---|---|---|---|---|
com.openclaw.analyst-macro |
0 | 5 (Input/output error) |
not in list | 113 (service not found) |
com.openclaw.analyst-fundamental |
0 | 5 (Input/output error) |
not in list | 113 (service not found) |
com.openclaw.analyst-technical |
0 | 5 (Input/output error) |
not in list | 113 (service not found) |
com.openclaw.analyst-pm |
0 | 5 (Input/output error) |
not in list | 113 (service not found) |
추가로 plutil -convert xml1 후 재시도했지만 동일하게 bootstrap_exit=5였다.
결과 표
| label | 재기동 | cwd | 발송경로 | 라이브 성공 |
|---|---|---|---|---|
| analyst-macro | ❌ bootstrap 5 | 미기동 | prompt: send_sector("market", text) / runner 실패 fallback: Telegram DM curl |
launchd 실패. 기존 latest.json은 2026-04-15, telegram_sent=true |
| analyst-fundamental | ❌ bootstrap 5 | 미기동 | prompt: send_sector("market", text) / runner 실패 fallback: Telegram DM curl |
launchd 실패. 기존 latest.json은 2026-04-15, telegram_sent=true |
| analyst-technical | ❌ bootstrap 5 | 미기동 | prompt: send_sector("market", text) + chart album 안내 / runner 실패 fallback: Telegram DM curl |
launchd 실패. 직접 실행도 Claude 인증 실패. 최신 파일은 2026-04-14.json, telegram_sent=false, latest.json 없음 |
| analyst-pm | ❌ bootstrap 5 | 미기동 | prompt: send_sector("market", text) / send_sector_album("market", ...) |
launchd 실패. 기존 latest.json은 2026-04-15, telegram_sent=true |
스크립트/발송 경로 확인
공통 실행기:
/Users/ron/.hermes/workspace/scripts/analyst_runner.sh- 실행 인자:
macro,fundamental,technical,pm - 프롬프트 파일:
~/.hermes/workspace/scripts/analyst_<type>_prompt.md - 출력 폴더:
~/.hermes/workspace/memory/analyst-<type>/ - 로그 폴더:
~/.hermes/logs/
발송 경로:
- 각 prompt의 리포트 발송 지시:
send_sector("market", text)— 론 알림센터 market 섹터 - PM prompt:
send_sector("market", text)및 필요 시send_sector_album("market", [...]) - runner 내부 실패 fallback: Telegram DM curl. 다만 runner 끝부분에 “Telegram DM fallback disabled — reports available via 론 알림센터 + /analyst/log” 로그가 찍힘.
실제 산출물 상태
| analyst | 파일 | mtime | telegram flag |
|---|---|---|---|
| macro | ~/.hermes/workspace/memory/analyst-macro/latest.json |
2026-04-15 07:06 | telegram_sent=true |
| fundamental | ~/.hermes/workspace/memory/analyst-fundamental/latest.json |
2026-04-15 07:18 | telegram_sent=true |
| technical | ~/.hermes/workspace/memory/analyst-technical/2026-04-14.json |
2026-04-15 07:25 | telegram_sent=false; latest.json 없음 |
| pm | ~/.hermes/workspace/memory/analyst-pm/latest.json |
2026-04-15 07:44 | telegram_sent=true |
직접 실행 테스트
launchctl이 막혀서 technical만 직접 실행했다.
명령:
/bin/bash /Users/ron/.hermes/workspace/scripts/analyst_runner.sh technical
결과:
- exit: 0 (runner 자체는 정상 종료)
- 내부 Claude CLI 결과:
Not logged in · Please run /login - runner 로그:
WARN: Claude CLI failed (exit: 1, no output) - Telegram fallback:
WARN: Telegram send failed - 산출물 변화: 없음.
analyst-technical/latest.json여전히 없음.
별도 send_sector("market", ...) smoke도 수행했다.
sector_trace.log에는 호출 라인이 남음.- 실제 전송은 실패:
nodename nor servname provided, or not known. - 따라서 이 세션의 네트워크/DNS 환경에서는 Telegram 실제 전송 확인 불가.
실패 원인
- launchd 등록 실패
launchctl bootstrap gui/501 <plist>가 4개 모두Input/output error.- plist lint, 경로 존재, 로그 디렉터리 존재, XML 변환 모두 확인했으므로 plist 자체 오류 가능성은 낮다.
-
현재 Codex 세션의 launchd 제어 제약으로 판단.
-
Claude CLI 인증 실패
- 직접 runner에서 Claude Code가
Not logged in으로 종료. -
analyst_runner는 Claude CLI 기반이라 이 상태에서는 새 분석 생성 불가.
-
Telegram DNS 실패
shared.telegram.send_sectorsmoke가 DNS 에러로 실패.- 단,
sector_trace.log에는 호출 자체가 기록됨.
다음 조치
샌드박스 밖 메인 터미널에서 아래를 실행해야 launchd 등록이 완료될 가능성이 높다.
for label in \
com.openclaw.analyst-macro \
com.openclaw.analyst-fundamental \
com.openclaw.analyst-technical \
com.openclaw.analyst-pm; do
launchctl bootout gui/$(id -u)/$label 2>/dev/null || true
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/$label.plist
launchctl kickstart -k gui/$(id -u)/$label
done
확인:
launchctl list | grep -E 'com\.openclaw\.analyst-(macro|fundamental|technical|pm)'
그리고 Claude CLI 인증 상태 확인:
~/.local/bin/claude --version
# 분석 실행 시 Not logged in 이 나오면 claude /login 필요
자체평가
- 정확성: 4.2/5 — plist rewrite와 경로 검증은 완료. launchd 부활은 세션 제약으로 실패를 명확히 확인.
- 완성도: 3.8/5 — 실제 launchd running/cwd/message id까지는 못 갔다.
- 검증: 4.3/5 — plutil, bash -n, launchctl 실패 코드, 직접 runner, Telegram smoke까지 확인.
- 최소 변경: 4.8/5 — plist 경로 rewrite만 수행. analyst 원본 스크립트는 수정하지 않음.
- 종합: 4.28/5