역할
사용자가 “매주 월요일 9시에 standup 알림 보내줘”라고 말하면 스케줄러가 이를 파싱하고 정규화하여 반복 작업으로 영속화합니다. 사용자가 선호하면 cron 표현식을 직접 받기도 합니다.
파일
core/scheduler/scheduler.py:76.class ScheduleKindenum (cron, once, calendar)core/scheduler/nl_scheduler.py. 자연어를 cron으로 변환하는 파서core/scheduler/calendar_bridge.py. 시스템 캘린더와 스케줄을 연결하는CalendarSchedulerBridgecore/scheduler/jitter.py. task-id 해시 기반 결정론적 ±10% jitter
Jitter (thundering herd 방어)
다수의 작업이 동일한 명목 트리거 시각 (정각)을 공유할 때 모든 cron 플랫폼에서 thundering herd가 발생합니다. GEODE의 jitter는 결정론적입니다. offset이 task ID 해시의 함수이므로 같은 작업은 항상 같은 offset에 발화하지만, 같은 윈도 내 다른 작업들은 시간상 분산됩니다.
# core/scheduler/scheduler.py:_compute_jitter_frac fraction = (sha256(task_id) % 1000) / 1000 offset = -0.1 + (0.2 * fraction) # ±10% fire_at = nominal + offset * period
캘린더 브리지
GEODE는 로컬 캘린더 (core/mcp/apple_calendar_adapter.py를 통한 Apple Calendar)에서 이벤트를 읽어 스케줄 소스로 취급할 수 있습니다.“주간 회의 30분 전에 알림”은 캘린더 이벤트를 키로 삼는 파생 스케줄이 됩니다.
훅 이벤트
SCHEDULE_FIRED. 작업이 트리거될 때SCHEDULE_REGISTERED. 새 스케줄이 파싱될 때