Cron vs Heartbeat: 각각을 언제 사용해야 할까
heartbeat 와 cron 작업은 모두 일정에 따라 작업을 실행할 수 있게 해줍니다. 이 가이드는 사용 사례에 맞는 올바른 메커니즘을 선택하는 데 도움을 줍니다.빠른 결정 가이드
| 사용 사례 | 권장 사항 | 이유 |
|---|---|---|
| 30 분마다 받은편지함 확인 | Heartbeat | 다른 점검과 함께 배치 처리, 컨텍스트 인지 |
| 매일 정확히 오전 9 시에 보고서 전송 | Cron (격리) | 정확한 타이밍 필요 |
| 다가오는 일정 이벤트 모니터링 | Heartbeat | 주기적 인지에 자연스럽게 적합 |
| 매주 심층 분석 실행 | Cron (격리) | 독립 작업, 다른 모델 사용 가능 |
| Remind me in 20 minutes | Cron (메인, --at) | 정확한 타이밍의 단발성 작업 |
| 백그라운드 프로젝트 상태 점검 | Heartbeat | 기존 사이클을 활용함 |
Heartbeat: 주기적 인지
heartbeat 는 메인 세션에서 정기적인 간격(기본값: 30 분)으로 실행됩니다. 에이전트가 상태를 점검하고 중요한 사항을 드러내도록 설계되었습니다.heartbeat 를 사용해야 할 때
- 여러 주기적 점검: 받은편지함, 캘린더, 날씨, 알림, 프로젝트 상태를 각각 확인하는 5 개의 cron 작업 대신, 하나의 heartbeat 로 모두 배치 처리할 수 있습니다.
- 컨텍스트 인지 결정: 에이전트는 메인 세션의 전체 컨텍스트를 가지므로, 무엇이 긴급한지와 무엇이 기다릴 수 있는지를 현명하게 판단할 수 있습니다.
- 대화 연속성: heartbeat 실행은 동일한 세션을 공유하므로, 에이전트가 최근 대화를 기억하고 자연스럽게 후속 조치를 할 수 있습니다.
- 낮은 오버헤드 모니터링: 하나의 heartbeat 가 여러 작은 폴링 작업을 대체합니다.
heartbeat 의 장점
- 여러 점검을 배치 처리: 한 번의 에이전트 턴으로 받은편지함, 캘린더, 알림을 함께 검토합니다.
- API 호출 감소: 단일 heartbeat 는 5 개의 독립적인 cron 작업보다 비용이 적게 듭니다.
- 컨텍스트 인지: 에이전트는 사용자가 무엇을 작업 중인지 알고 우선순위를 정할 수 있습니다.
- 스마트 억제: 주의를 요하는 것이 없으면 에이전트는
HEARTBEAT_OK로 응답하며 메시지는 전달되지 않습니다. - 자연스러운 타이밍: 큐 부하에 따라 약간 드리프트가 발생하지만, 대부분의 모니터링에는 문제가 되지 않습니다.
heartbeat 예시: HEARTBEAT.md 체크리스트
heartbeat 구성
Cron: 정밀한 스케줄링
cron 작업은 정확한 시각에 실행되며, 메인 컨텍스트에 영향을 주지 않는 isolated 세션에서 실행될 수 있습니다.cron 을 사용해야 할 때
- 정확한 타이밍이 필요한 경우: “매주 월요일 오전 9:00 에 전송”과 같이, “대략 9 시쯤”이 아닌 경우.
- 독립 작업: 대화 컨텍스트가 필요 없는 작업.
- 다른 모델/사고 방식: 더 강력한 모델이 필요한 무거운 분석.
- 단발성 알림:
--at와 함께 “20 분 후에 알림”. - 시끄럽거나 빈번한 작업: 메인 세션 기록을 어지럽힐 수 있는 작업.
- 외부 트리거: 에이전트가 다른 활동을 하지 않더라도 독립적으로 실행되어야 하는 작업.
cron 의 장점
- 정확한 타이밍: 타임존을 지원하는 5 필드 cron 표현식.
- 세션 격리: 메인 기록을 오염시키지 않고
cron:<jobId>에서 실행. - 모델 재정의: 작업별로 더 저렴하거나 더 강력한 모델 사용.
- 전달 제어: isolated 작업은 기본값으로
announce(요약); 필요 시none선택. - 즉시 전달: announce 모드는 heartbeat 를 기다리지 않고 직접 게시.
- 에이전트 컨텍스트 불필요: 메인 세션이 유휴 상태이거나 압축되어 있어도 실행.
- 단발성 지원: 정확한 미래 타임스탬프를 위한
--at.
cron 예시: 일일 아침 브리핑
cron 예시: 단발성 알림
결정 플로차트
둘을 함께 사용하기
가장 효율적인 설정은 둘 다 사용하는 것입니다:- Heartbeat 는 받은편지함, 캘린더, 알림과 같은 일상적 모니터링을 30 분마다 한 번의 배치된 턴으로 처리합니다.
- Cron 은 정확한 스케줄(일일 보고서, 주간 리뷰)과 단발성 알림을 처리합니다.
예시: 효율적인 자동화 설정
HEARTBEAT.md (30 분마다 확인):Lobster: 승인 기반의 결정적 워크플로
Lobster 는 다단계 도구 파이프라인을 위한 워크플로 런타임으로, 결정적 실행과 명시적 승인이 필요할 때 사용합니다. 작업이 단일 에이전트 턴을 넘어서며, 사람의 체크포인트가 있는 재개 가능한 워크플로가 필요할 때 사용하십시오.Lobster 가 적합한 경우
- 다단계 자동화: 일회성 프롬프트가 아닌, 고정된 도구 호출 파이프라인이 필요한 경우.
- 승인 게이트: 부작용이 승인 전까지 일시 중지되었다가, 승인 후 재개되어야 하는 경우.
- 재개 가능한 실행: 이전 단계를 다시 실행하지 않고 일시 중지된 워크플로를 계속하는 경우.
heartbeat 및 cron 과의 조합
- Heartbeat/cron 은 실행 시점 을 결정합니다.
- Lobster 는 실행이 시작된 후 어떤 단계 가 수행되는지를 정의합니다.
운영 참고 사항 (코드 기준)
- Lobster 는 도구 모드에서 로컬 서브프로세스 (
lobsterCLI) 로 실행되며 JSON 엔벨로프를 반환합니다. - 도구가
needs_approval를 반환하면,resumeToken와approve플래그로 재개합니다. - 이 도구는 선택적 플러그인이며,
tools.alsoAllow: ["lobster"]을 통해 추가적으로 활성화합니다(권장). lobsterPath를 전달하는 경우, 절대 경로여야 합니다.
메인 세션 vs Isolated 세션
heartbeat 와 cron 은 모두 메인 세션과 상호작용할 수 있지만, 방식은 다릅니다:| Heartbeat | Cron (main) | Cron (격리) | |
|---|---|---|---|
| 세션 | 메인 | 메인 (시스템 이벤트 경유) | cron:<jobId> |
| 기록 | 공유됨 | 공유됨 | 실행마다 새로 시작 |
| 컨텍스트 | 전체 | 전체 | 없음 (깨끗하게 시작) |
| 모델 | 메인 세션 모델 | 메인 세션 모델 | Can override |
| 출력 | HEARTBEAT_OK 이 아니면 전달 | Heartbeat 프롬프트 + 이벤트 | 요약 공지 (기본값) |
메인 세션 cron 을 사용해야 할 때
다음과 같은 경우--session main 와 --system-event 를 사용하십시오:
- 알림/이벤트가 메인 세션 컨텍스트에 나타나길 원하는 경우
- 에이전트가 다음 heartbeat 동안 전체 컨텍스트로 이를 처리하길 원하는 경우
- 별도의 isolated 실행이 필요 없는 경우
isolated cron 을 사용해야 할 때
다음과 같은 경우--session isolated 를 사용하십시오:
- 이전 컨텍스트 없이 깨끗한 시작이 필요한 경우
- 다른 모델 또는 사고 설정이 필요한 경우
- 요약 공지를 채널로 직접 보내고 싶은 경우
- 메인 세션을 어지럽히지 않는 기록이 필요한 경우
비용 고려 사항
| 메커니즘 | 비용 특성 |
|---|---|
| Heartbeat | N 분마다 한 턴; HEARTBEAT.md 크기에 따라 확장 |
| Cron (main) | 다음 heartbeat 에 이벤트 추가 (isolated 턴 없음) |
| Cron (격리) | 작업당 전체 에이전트 턴; 더 저렴한 모델 사용 가능 |
- 토큰 오버헤드를 최소화하려면
HEARTBEAT.md를 작게 유지하십시오. - 여러 cron 작업 대신 유사한 점검을 heartbeat 에 배치하십시오.
- 내부 처리만 원한다면 heartbeat 에
target: "none"를 사용하십시오. - 일상적인 작업에는 더 저렴한 모델로 isolated cron 을 사용하십시오.