tts-webhook PID 안전 종료 + Hermes 동등 검증
Executive Summary
com.openclaw.tts-webhook는 Google Home TTS용 HTTP webhook이며, 현재 PID85326이: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/bedtime→tts_bedtime.sh/tts/morning→tts_morning.sh/tts/outing→tts_outing.sh/tts/home→tts_home.sh/tts/briefing→tts_briefing.sh/tts/weekly→tts_weekly.sh/tts/custom→google_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-alerthmig-rain-alerthmig-late-lights
OpenClaw/Hermes 충돌 가능성
18790은 다른 OpenClaw/Hermes 스크립트에서 agent-bus/openclaw podman bridge health port로도 사용된다.
mcp_check.sh:agent-bushealth를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 결과를 재검증해야 한다.