# CronCreate

將提示詞排入佇列，於未來特定時間執行，支援一次性觸發與週期性重複兩種模式。使用標準的 5 欄位 cron 表達式，基於使用者本地時區，無需進行時區轉換。

## 使用時機

- **一次性提醒**：當使用者希望在特定時間收到提醒時（如「明天下午 3 點提醒我」），將 `recurring` 設為 `false`，任務觸發一次後自動刪除。
- **週期性排程**：當使用者希望某件事反覆發生時（如「每個工作日早上 9 點」、「每 30 分鐘一次」），使用預設的 `recurring: true`。
- **自主 Agent 迴圈**：當需要建立定期自我觸發的工作流程時，例如每日摘要或週期性狀態檢查。
- **持久化任務**：當排程需要在工作階段重新啟動後繼續保留時，傳入 `durable: true`，任務將寫入 `.claude/scheduled_tasks.json`。
- **大約時間請求**：當使用者說「大約 9 點」或「每小時」時，應選擇非整點分鐘值（例如 `57 8 * * *` 或 `7 * * * *`），避免大量使用者在 :00 或 :30 時刻同時觸發。

## 參數

- `cron`（string，必填）：基於使用者本地時區的 5 欄位 cron 表達式，格式為 `分鐘 小時 日 月 星期`。例如 `"0 9 * * 1-5"` 表示週一至週五早上 9:00。
- `prompt`（string，必填）：cron 觸發時要排入佇列的提示詞文字，即到達排程時間時將提交給 REPL 的確切內容。
- `recurring`（boolean，選填，預設 `true`）：為 `true` 時，任務在每個符合的 cron 週期觸發，7 天後自動過期；為 `false` 時，任務僅觸發一次後自動刪除，適用於一次性提醒。
- `durable`（boolean，選填，預設 `false`）：為 `false` 時，排程僅存於記憶體中，工作階段結束後即消失；為 `true` 時，任務持久化至 `.claude/scheduled_tasks.json`，重新啟動後仍然有效。

## 範例

### 範例 1：一次性提醒

使用者說：「明天下午 2:30 提醒我寄送週報。」假設明天是 4 月 21 日：

```json
{
  "cron": "30 14 21 4 *",
  "prompt": "提醒：現在寄送週報。",
  "recurring": false,
  "durable": true
}
```

`recurring: false` 確保任務觸發後自動刪除。`durable: true` 保證在此之前的重新啟動不會遺失該任務。

### 範例 2：週期性工作日早晨任務

使用者說：「每個工作日早上，彙整我的 GitHub 未處理 Issue。」

```json
{
  "cron": "3 9 * * 1-5",
  "prompt": "彙整所有指派給我的 GitHub 未處理 Issue。",
  "recurring": true,
  "durable": true
}
```

使用分鐘 `3` 而非 `0`，避免在整點造成伺服器負載尖峰。該任務 7 天後自動過期。

## 注意事項

- **7 天自動過期**：週期性任務最多運行 7 天後自動刪除。若需更長時間的排程，請在過期前重新建立。
- **僅在閒置時觸發**：`CronCreate` 僅在 REPL 未處理其他查詢時才將提示詞排入佇列。若觸發時 REPL 正在忙碌，提示詞將等待當前查詢完成後再執行。
- **避免使用 :00 和 :30 分鐘值**：對於大約時間的請求，應主動選擇非整點分鐘值，以分散系統負載。只有使用者明確指定某個精確分鐘時，才使用 :00 或 :30。
- **無需時區轉換**：cron 表達式直接按使用者本地時區解析，無需轉換為 UTC 或其他時區。
