# ScheduleWakeup

`/loop` 동적 모드에서 작업을 재개할 시점을 예약합니다. 이 도구를 사용하면 Claude가 지정된 시간 동안 슬립한 후 동일한 루프 프롬프트로 다시 트리거하여 작업 반복의 페이스를 자율적으로 제어할 수 있습니다.

## 사용 시점

- 반복 간격이 고정된 클록이 아닌 작업 상태에 따라 달라지는 `/loop` 동적 작업에서 자율적으로 페이스를 조절할 때
- 긴 빌드, 배포 또는 테스트 실행이 완료될 때까지 기다렸다가 결과를 확인할 때
- 현재 감시할 특정 신호가 없을 때 반복 사이에 유휴 대기를 삽입할 때
- 사용자 프롬프트 없이 자율 루프를 실행할 때 — 리터럴 센티널 `<<autonomous-loop-dynamic>>`을 `prompt`로 전달
- 곧 상태가 변경될 프로세스를 폴링할 때 (짧은 지연으로 캐시를 워밍 상태로 유지)

## 매개변수

- `delaySeconds` (숫자, 필수): 재개까지의 초 단위 시간. 런타임이 값을 자동으로 `[60, 3600]` 범위로 클램프하므로 직접 클램프할 필요가 없습니다.
- `reason` (문자열, 필수): 선택한 지연 시간의 이유를 설명하는 짧은 문장. 사용자에게 표시되고 텔레메트리에 기록됩니다. 구체적으로 작성하세요 — "bun 빌드 완료 확인 중"이 "대기 중"보다 유용합니다.
- `prompt` (문자열, 필수): 웨이크업 시 트리거될 `/loop` 입력. 다음 트리거가 작업을 반복할 수 있도록 매 턴 동일한 문자열을 전달합니다. 사용자 프롬프트 없는 자율 루프의 경우 리터럴 센티널 `<<autonomous-loop-dynamic>>`을 전달합니다.

## 예시

### 예시 1: 빠르게 변화하는 신호를 재확인하기 위한 짧은 지연 (캐시 워밍 유지)

빌드가 막 시작되었고 일반적으로 2~3분 내에 완료됩니다.

```json
{
  "delaySeconds": 120,
  "reason": "약 2분 후 완료 예정인 bun 빌드 확인 중",
  "prompt": "빌드 상태를 확인하고 오류 보고"
}
```

120초의 지연으로 대화 컨텍스트가 Anthropic 프롬프트 캐시에 유지됩니다(TTL 5분). 따라서 다음 웨이크업이 더 빠르고 저렴합니다.

### 예시 2: 긴 유휴 대기 (캐시 미스 허용, 더 긴 대기 시간에 분산)

데이터베이스 마이그레이션이 실행 중이며 일반적으로 20~40분이 소요됩니다.

```json
{
  "delaySeconds": 1200,
  "reason": "마이그레이션은 보통 20~40분 소요; 20분 후 확인",
  "prompt": "마이그레이션 상태 확인 후 완료 시 계속"
}
```

웨이크업 시 캐시는 콜드 상태가 되지만, 20분의 대기는 단일 캐시 미스 비용을 충분히 분산시킵니다. 5분마다 폴링하면 동일한 캐시 미스 비용을 4번 지불하게 되어 아무런 이점이 없습니다.

## 참고사항

- **5분 캐시 TTL**: Anthropic 프롬프트 캐시는 300초 후에 만료됩니다. 300초 미만의 지연은 컨텍스트를 워밍 상태로 유지합니다. 300초를 초과하면 다음 웨이크업에서 캐시 미스가 발생합니다.
- **정확히 300초는 피하세요**: 이는 최악의 선택입니다 — 캐시 미스 비용을 지불하면서 실질적으로 더 긴 대기 시간을 얻지 못합니다. 270초로 낮추거나(캐시 워밍 유지) 1200초 이상으로 커밋하세요(한 번의 캐시 미스로 훨씬 긴 대기 확보).
- **유휴 대기의 기본값**: 감시할 특정 신호가 없을 때는 **1200~1800초** (20~30분)를 사용하세요. 이렇게 하면 루프가 주기적으로 확인하면서 시간당 12번의 의미 없는 캐시 미스를 발생시키지 않습니다.
- **자동 클램프**: 런타임은 `delaySeconds`를 `[60, 3600]` 범위로 클램프합니다. 60 미만의 값은 60이 되고, 3600을 초과하는 값은 3600이 됩니다. 이 경계를 직접 처리할 필요가 없습니다.
- **루프를 종료하려면 호출을 생략하세요**: 반복을 중단하려면 ScheduleWakeup을 호출하지 마세요. 호출을 생략하기만 하면 루프가 종료됩니다.
- **매 턴 동일한 `prompt` 전달**: `prompt` 필드는 매 호출마다 원래의 `/loop` 지시를 포함해야 합니다. 그래야 다음 웨이크업이 어떤 작업을 재개해야 하는지 알 수 있습니다.
