📝 한줄 요약
PC에서 24시간 돌리는 AI 에이전트 두 마리(Hermes, OpenClaw)가 자꾸 한쪽씩 죽어서 — 각자 상대편을 감시하다 죽으면 자동으로 살려내는 양방향 watchdog을 cron으로 시켰다.
바쁘시면 이것만 읽어도 돼요:
사용한 도구: Hermes & Openclaw (PrimeSentinel + PrimeSecretary 두 워크스페이스에서 양쪽 cron 등록)
핵심 아이디어: A가 B를 살리고 B가 A를 살린다 — 외부 단일 모니터 없이 서로가 부활자
5월 22일 새벽 02시 첫 가동, 같은 날 오후 13시에 첫 실전 다운/복구 풀 사이클 성공
가장 깨달은 점: cron payload를 자연어로 적어도 에이전트가 알아서 명령을 골라 쓴다는 것
다음 단계: 백업 점검, 시크릿 만료 알림 같은 다른 자동화도 같은 패턴으로 확장
🎯 이런 분께 도움돼요
로컬에서 AI 에이전트 데몬을 띄우는데 자꾸 죽어서 골치 아픈 분
자가복구를 외부 모니터링 SaaS에 의존하지 않고 가볍게 만들고 싶은 분
"AI한테 자기 자신을 관리시키는 것"이 어디까지 되는지 궁금한 분
단일 장애점(single point of failure)이 싫어서 상호 감시 패턴이 흥미로운 분
😫 문제 상황 (Before)
내 PC에는 두 개의 AI 에이전트가 항상 떠 있다. 하나는 NousResearch/hermes-agent(외부 OSS), 다른 하나는 직접 운영 중인 OpenClaw 게이트웨이. 둘 다 텔레그램으로 말 걸면 답해주는 동거인 같은 존재.
문제는 가끔 한쪽이 조용히 죽는다. 새벽에 죽으면 다음 날 점심쯤 "어, 응답이 없네?" 하고 알아챈다. 그 사이에 보낸 메시지들은 다 휘발. 윈도우 작업 스케줄러로 모니터링 스크립트 따로 만들기엔 그것 자체가 또 단일 장애점이 되고, Datadog 같은 외부 모니터 붙이긴 너무 거창하다.
이걸 한 달째 미루고 있다가 5월 22일 새벽 2시, 그 날따라 PrimeSentinel을 부팅하면서 결심했다.
🔧 작업 과정
"서로 살리게 하자"는 한 줄 결정
PrimeSentinel 부트 화면이 친절하게 옵션 셋을 띄웠다. "현재 스케줄된 크론 작업 없음 (0/0). 어떤 거 만드시겠어요?"
게이트웨이 헬스 체크 → 매시간 자동 감시
백업 상태 검증 → 매일 자정
시크릿 로테이션 경고 → 만료 7일 전
그냥 1번 골랐으면 평범한 watchdog인데, 어차피 두 게이트웨이가 동시에 돌고 있다는 게 떠올랐다. 그래서 이렇게 부탁했다.
첫 번째 만들어줘. 근데 그냥 한쪽만 보는 게 아니라,
두 게이트웨이가 서로를 보게 해.
Hermes에서 OpenClaw 살리고, OpenClaw에서 Hermes 살리고.
자연어로 cron payload 적기
여기서 가장 재밌었던 부분. 보통 cron 작업이라고 하면 bash 스크립트나 systemd unit 같은 걸 떠올리는데, OpenClaw cron에 넣은 payload는 그냥 한국어였다.
Hermes gateway 헬스체크.
체크: 프로세스가 살아있는지 ps랑 PowerShell 둘 다로 확인.
판정:
- 1개 이상이면 ALIVE — 아무 행동 안 함.
- 0개면 DEAD — 다음 순서로:
1) 백그라운드로 hermes_cli gateway 재시작
2) 30초 대기 후 재확인
3) 살아났으면 PrimeSentinel_Bot으로 마스터에게 텔레그램 알림
이거 그대로 cron 큐에 넣어두면, 매시간 PrimeSecretary가 페이로드를 받아 알아서 ps 명령 만들고, PowerShell 명령 만들고, 텔레그램 토큰 읽어와서 호출까지 한다. 사람이 "한 줄짜리 bash"를 짜는 대신 의도를 적었더니 에이전트가 절차를 만들어 실행한 셈.
첫 실전 — 그날 오후 1시 15분
watchdog 등록한 다음 날 점심을 먹고 자리에 앉았을 때, 텔레그램에 못 보던 알림이 와 있었다.
👁️ Hermes gateway가 죽어 있어서 자동 재시작했어요. 정상 가동 중입니다.
세션 로그를 열어보니 13:15에 다음 흐름이 자동으로 돌아갔다:
DEAD 판정 — ps 결과 0개, PowerShell도 빈 테이블
백그라운드 재시작 — Hidden window로 게이트웨이 띄우기
30초 대기 트랩 발견 —
sleep 30 && check형태가 Claude Code 안전 가드에 막힘. 즉시 다른 형태(until <check>; do sleep 5; done)로 우회.35초 안에 부활 확인 — 새 PID 두 개로
hermes_cli.main gateway가동 중텔레그램 알림 발송
그리고 마지막 줄에 에이전트가 한 마디 남겼다.
완료. Hermes gateway가 다운된 것을 감지하여 자동 재시작했고, 복구 확인 후 마스터에게 Telegram 알림을 발송했습니다.
내가 한 건 부엌에서 점심 먹은 것뿐.
그리고 반대 방향
Hermes 쪽 cron에도 같은 패턴으로 OpenClaw 게이트웨이(포트 18789) 헬스체크 추가. 이제 그림이 이렇게 된다.
Hermes ──감시──▶ OpenClaw
OpenClaw ──감시──▶ Hermes
어느 한쪽이 살아있는 한 다른 쪽은 살아날 수 있다. 둘이 동시에 죽는 경우는 — 그땐 PC 전원이 나간 거라 사람이 일어나야 한다.
✅ 결과 (After)
Before vs After
항목
Before
After
게이트웨이 다운 감지 시간
며칠 (우연히 발견)
1시간 이내
복구 작업 시간
사람이 터미널 열고 5분
자동 60초
새벽 다운 대응
다음 날 아침 발견
자고 일어나면 이미 복구됨
사람 개입
매번
양쪽 다 죽지 않는 한 0
알림 피로
없음 (몰랐으니까)
없음 (DEAD→RESTORED만 push)
결과물
양방향 cron 자동화 1쌍 (디스크 파일 0개, OpenClaw 큐에만 상주)
5월 22~24일 사이 약 70건의 매시간 헬스체크, 그중 실제 복구 1건
텔레그램에 마음 편한 알림 1건
💬 이 과정에서 배운 AI 활용 팁
효과적이었던 것
자연어 cron payload — bash 짜기 싫으면 한국어로 "체크하고, 죽었으면 살리고, 살아나면 알려줘" 적으면 끝. 에이전트가 도구를 골라 쓴다.
이중 감지 —
ps도 쓰고 PowerShell도 쓴다. 한쪽이 빈 결과를 줘도 다른 쪽이 잡는다. 더블 체크는 비용이 거의 0이다.NO_REPLY 디폴트 — ALIVE일 땐 무음. 사람 핸드폰이 조용한 게 시스템이 잘 돌아간다는 신호.
외부 단일 모니터 거부 — 외부 한 곳에 모니터 두면 그게 죽었을 때 다 끝난다. 둘이 서로 보면 단일 장애점이 사라진다.
이렇게 하면 안 됨
sleep 30 && check형태로 길게 자게 하면 안전 가드에 막힌다.until <조건>; do sleep 5; done으로 풀어야 한다.ALIVE에서도 알림 보내면 일주일 안에 진짜 중요한 알림을 무시하게 된다. 무소식이 희소식.
cron payload에 텔레그램 토큰을 인라인으로 박지 말 것. 매번 시크릿 파일에서 읽어와야 로그에 안 남는다.
cron 정의를 디스크 파일 없이 큐에만 두면 며칠 지나면 어디 만들었는지 못 찾는다. 따로 한 줄짜리 메모라도 남길 것 (이 글이 그 메모다).
🌍 다른 업무에 적용한다면?
사이드 프로젝트 백엔드 2대 — 둘이 서로 헬스체크
홈서버 NAS 2대 — 메인과 백업이 서로 watchdog
자동화 매크로 페어 — 출퇴근 자동화와 가계부 자동화가 서로의 부팅 보증인
가족 디바이스 — 부모님 PC의 원격제어 데몬과 백업 데몬이 서로 살림
🚀 앞으로의 계획
PrimeSentinel 부트 화면이 제안했던 나머지 두 옵션을 같은 패턴으로 마저:
백업 상태 검증 — 매일 자정 OneDrive sync 상태 점검
시크릿 로테이션 경고 — 만료 7일 전 텔레그램 알림
그리고 watchdog 페어를 셋(triangle)으로 확장 — A↔B↔C↔A — 이 가능한지 실험.