research

ZeroClaw — Daemon 스케줄링 구조

ZeroClaw — Daemon 스케줄링 구조

Daemon이 관리하는 컴포넌트 전체와 각각이 어떻게 작업을 트리거하는지. 소스: src/daemon/mod.rs


전체 구조


컴포넌트별 트리거 방식 비교

| 컴포넌트 | 트리거 | 실행 조건 | Agent 위임 | |----------|--------|----------|-----------| | Gateway | HTTP 요청 | 요청 수신 시 | 항상 | | Channels | 플랫폼 메시지 | 메시지 수신 시 | 항상 | | Heartbeat | interval_minutes 타이머 | two_phase=true면 LLM이 태스크 선택 | 선택적 | | Scheduler | next_run <= now | enabled=true + SecurityPolicy 통과 | JobType::Agent만 |


spawn_component_supervisor — 지수 백오프 재시작

컴포넌트가 Ok(())로 정상 종료해도 재시작. 데몬 컴포넌트는 무한 루프여야 하기 때문.


Heartbeat vs Scheduler 차이

두 컴포넌트 모두 시간 기반이지만 성격이 다르다.

| | Heartbeat | Scheduler (Cron) | |---|---|---| | 간격 단위 | 분 (N분마다) | 초 폴링 → cron 표현식 | | 작업 정의 | config.toml의 태스크 목록 | SQLite의 CronJob 레코드 | | LLM 판단 | two_phase=true면 LLM이 뭘 실행할지 결정 | 없음. 예약된 대로 실행 | | 적응 로직 | 실패 누적 시 interval 늘림 (adaptive) | 재시도 + backoff (execute_job_with_retry) | | Deadman switch | 있음 (N분 무응답 시 알림) | 없음 | | 목적 | 자율적 주기 작업 ("스스로 할 일") | 명시적 예약 작업 ("정해진 시각에 할 일") |


관련