virtual-insanity
← 리포트 목록

tts-webhook PID 안전 종료 + Hermes 동등 검증

2026-04-24 tts [tts-webhook, launchd, openclaw-kill, hermes]

Executive Summary

  • com.openclaw.tts-webhook는 Google Home TTS용 HTTP webhook이며, 현재 PID 85326:18790에서 계속 LISTEN 중이다.
  • plist는 이미 .disabled-third-kill-*로 이동됐고 launchctl disable도 적용되어 재부팅/로그아웃 후 재기동 가능성은 낮다.
  • sudo 없는 종료는 실패했다. 현재 PID 즉시 종료는 root 권한 또는 세션 재시작이 필요하다.

1. 현재 상태

항목 결과
label com.openclaw.tts-webhook
PID 85326
상태 launchd running
포트 TCP *:18790 (LISTEN)
health http://127.0.0.1:18790/health{"status":"ok"}
실행 파일 /usr/bin/python3 /Users/ron/.hermes/skills/smart-home/scripts/tts_webhook.py
로그 /Users/ron/.hermes/logs/tts-webhook.log, .err.log 둘 다 0 bytes
disabled flag "com.openclaw.tts-webhook" => disabled
plist 원본 없음, .bak-*.disabled-third-kill-*만 존재

2. 무엇을 하는가

/Users/ron/.hermes/skills/smart-home/scripts/tts_webhook.py는 VPS/Home Assistant 등 외부에서 HTTP POST를 받으면 Google Home TTS 쉘 스크립트를 실행하는 webhook이다.

지원 route:

  • /tts/bedtimetts_bedtime.sh
  • /tts/morningtts_morning.sh
  • /tts/outingtts_outing.sh
  • /tts/hometts_home.sh
  • /tts/briefingtts_briefing.sh
  • /tts/weeklytts_weekly.sh
  • /tts/customgoogle_home_tts.sh 직접 호출
  • /health → 상태 확인

즉 Telegram 아침/주간 브리핑 자체가 아니라, Google Home 스피커 발화용 bridge다.

3. 의존성 확인

로컬 호출자

  • ~/.hermes/skills/smart-home/scripts/ 내부의 routine/tts 스크립트들은 대부분 google_home_tts.sh를 직접 호출한다.
  • /tts/... HTTP endpoint를 호출하는 로컬 스크립트는 발견하지 못했다.
  • Hermes cron에는 smart-home alert 3개가 남아있지만 모두 webhook이 아니라 쉘 스크립트 직접 실행이다.
  • hmig-cold-alert
  • hmig-rain-alert
  • hmig-late-lights

OpenClaw/Hermes 충돌 가능성

18790은 다른 OpenClaw/Hermes 스크립트에서 agent-bus/openclaw podman bridge health port로도 사용된다.

  • mcp_check.sh: agent-bus health를 http://127.0.0.1:18790/health로 본다.
  • 현재 이 health는 실제 agent-bus가 아니라 TTS webhook의 {"status":"ok"}일 수 있다.

따라서 이 PID는 기능 의존보다 포트 오염 리스크가 더 크다.

4. Hermes 동등 여부

항목 판정
Hermes webhook LaunchAgent 없음
Hermes cron smart-home 기능 있음. alert 3개가 ~/.hermes/skills/smart-home/scripts/*.sh 직접 실행
TTS routine 기능 webhook 없이 google_home_tts.sh 직접 호출 가능
이관 필요 현재 로컬 근거 기준 불필요

판정: Hermes 신규 이관 없이 kill 권고. 단, 외부 Home Assistant/VPS가 /tts/...를 직접 호출 중이면 별도 ai.hermes.tts-webhook로 재등록해야 한다. 로컬 코드에서는 그 의존을 확인하지 못했다.

5. sudo 없는 종료 시도 결과

방법 결과
kill -9 85326 실패: operation not permitted
launchctl print user/501/com.openclaw.tts-webhook 실패: user domain에 서비스 없음
launchctl bootout user/501/com.openclaw.tts-webhook 실패: No such process
launchctl kill SIGKILL gui/501/com.openclaw.tts-webhook 실패: Not privileged to signal service
post-check PID 85326 여전히 :18790 LISTEN, health OK

6. 권고 조치

현재 Codex 권한으로는 즉시 종료 불가. root 권한 또는 재부팅/로그아웃으로 정리해야 한다.

해리가 직접 실행할 명령:

sudo launchctl bootout gui/$(id -u)/com.openclaw.tts-webhook
# 그래도 남으면
sudo kill -9 85326

이미 plist 이동 + launchctl disable은 완료되어 있으므로, 재부팅/로그아웃 후에는 재발화하지 않는 상태다.

7. 결론

  • PID 종료: 실패(권한 부족). 현재 85326 살아있음.
  • Hermes 이관: 불필요. 로컬 의존 없음, smart-home cron은 Hermes에서 직접 스크립트 실행.
  • 다음 액션: 해리가 root 명령으로 kill하거나 다음 재부팅/로그아웃 때 자연 종료.

자체평가

기준 점수
정확성 4.5/5
완성도 4.5/5
검증 4.5/5
최소 변경 5.0/5

종합: 4.6/5

Remaining Risks: - 외부 Home Assistant/VPS가 /tts/... HTTP route를 직접 호출하는지는 로컬 grep만으로는 완전 증명할 수 없다. - 18790 포트가 agent-bus health로 오인될 수 있어, PID 종료 후 mcp_check.sh health 결과를 재검증해야 한다.