# CronCreate

กำหนดตารางเวลาให้ prompt ถูกเพิ่มเข้าคิวในเวลาอนาคต รองรับทั้งการรันครั้งเดียวและการรันซ้ำเป็นประจำ ใช้ไวยากรณ์ cron มาตรฐาน 5 ฟิลด์ตามเขตเวลาท้องถิ่นของผู้ใช้ โดยไม่ต้องแปลงเขตเวลา

## เมื่อใดควรใช้

- **การแจ้งเตือนครั้งเดียว**: เมื่อผู้ใช้ต้องการรับการแจ้งเตือนในเวลาที่กำหนด เช่น "เตือนฉันพรุ่งนี้บ่าย 3 โมง" ตั้ง `recurring: false` เพื่อให้งานถูกลบโดยอัตโนมัติหลังจากรันเสร็จ
- **ตารางเวลาซ้ำประจำ**: เมื่อต้องการให้บางอย่างเกิดขึ้นซ้ำเป็นประจำ เช่น "ทุกวันทำการเวลา 9 โมงเช้า" หรือ "ทุก 30 นาที" ค่าเริ่มต้น `recurring: true` รองรับกรณีนี้
- **ลูปของ Agent อัตโนมัติ**: สำหรับสร้างเวิร์กโฟลว์ที่ทริกเกอร์ตัวเองตามตาราง เช่น สรุปประจำวันหรือตรวจสอบสถานะเป็นระยะ
- **งานแบบถาวร**: เมื่อตารางต้องคงอยู่หลังจากเริ่มเซสชันใหม่ ส่ง `durable: true` เพื่อบันทึกงานลงใน `.claude/scheduled_tasks.json`
- **เวลาโดยประมาณ**: เมื่อผู้ใช้พูดว่า "ประมาณ 9 โมง" หรือ "ทุกชั่วโมง" ควรเลือกค่านาทีที่ไม่ใช่เลขกลม เช่น `57 8 * * *` หรือ `7 * * * *` เพื่อกระจายโหลดของระบบ

## พารามิเตอร์

- `cron` (string, จำเป็น): ค่า cron 5 ฟิลด์ตามเขตเวลาท้องถิ่นของผู้ใช้ รูปแบบ: `นาที ชั่วโมง วันของเดือน เดือน วันของสัปดาห์` ตัวอย่าง: `"0 9 * * 1-5"` หมายถึง จันทร์–ศุกร์ เวลา 9:00 น.
- `prompt` (string, จำเป็น): ข้อความ prompt ที่จะถูกเพิ่มเข้าคิวเมื่อ cron ทำงาน คือข้อความที่จะส่งไปยัง REPL ตามเวลาที่กำหนด
- `recurring` (boolean, ไม่บังคับ, ค่าเริ่มต้น `true`): เมื่อเป็น `true` งานจะรันในทุกรอบ cron ที่ตรงกัน และหมดอายุอัตโนมัติหลัง 7 วัน เมื่อเป็น `false` งานจะรันครั้งเดียวแล้วลบตัวเอง — ใช้สำหรับการแจ้งเตือนครั้งเดียว
- `durable` (boolean, ไม่บังคับ, ค่าเริ่มต้น `false`): เมื่อเป็น `false` ตารางอยู่ในหน่วยความจำเท่านั้น จะสูญหายเมื่อเซสชันสิ้นสุด เมื่อเป็น `true` งานจะถูกบันทึกถาวรใน `.claude/scheduled_tasks.json` และคงอยู่หลังรีสตาร์ท

## ตัวอย่าง

### ตัวอย่างที่ 1: การแจ้งเตือนครั้งเดียว

ผู้ใช้พูดว่า: "เตือนฉันพรุ่งนี้เวลา 14:30 น. ให้ส่งรายงานประจำสัปดาห์" สมมติว่าพรุ่งนี้คือวันที่ 21 เมษายน:

```json
{
  "cron": "30 14 21 4 *",
  "prompt": "การแจ้งเตือน: ส่งรายงานประจำสัปดาห์ตอนนี้เลย",
  "recurring": false,
  "durable": true
}
```

`recurring: false` รับประกันว่างานจะลบตัวเองหลังจากรันเสร็จ `durable: true` ทำให้คงอยู่แม้จะรีสตาร์ทก่อนถึงเวลานั้น

### ตัวอย่างที่ 2: งานช่วงเช้าซ้ำในวันทำการ

ผู้ใช้พูดว่า: "ทุกเช้าวันทำการ สรุป GitHub issues ที่ยังค้างอยู่ของฉัน"

```json
{
  "cron": "3 9 * * 1-5",
  "prompt": "สรุป GitHub issues ทั้งหมดที่เปิดอยู่และถูกมอบหมายให้ฉัน",
  "recurring": true,
  "durable": true
}
```

ใช้นาที `3` แทน `0` เพื่อหลีกเลี่ยงโหลดสูงสุดในชั่วโมงกลม งานจะหมดอายุอัตโนมัติหลัง 7 วัน

## หมายเหตุ

- **หมดอายุอัตโนมัติใน 7 วัน**: งานซ้ำจะถูกลบอัตโนมัติหลังจาก 7 วันสูงสุด หากต้องการตารางที่ยาวกว่านั้น ให้สร้างงานใหม่ก่อนที่จะหมดอายุ
- **ทำงานเฉพาะเมื่อว่างเท่านั้น**: `CronCreate` จะเพิ่ม prompt เข้าคิวเฉพาะเมื่อ REPL ไม่ได้ประมวลผลคำถามอื่นอยู่ หาก REPL ยุ่งอยู่ในเวลาที่ควรทำงาน prompt จะรอจนกว่าคำถามปัจจุบันจะเสร็จสิ้น
- **หลีกเลี่ยงนาที :00 และ :30**: สำหรับคำขอเวลาโดยประมาณ ควรเลือกค่านาทีที่ไม่ตรงเลขกลมอย่างตั้งใจ เพื่อกระจายโหลดของระบบ สงวน :00/:30 ไว้เฉพาะเมื่อผู้ใช้ระบุนาทีนั้นอย่างชัดเจน
- **ไม่ต้องแปลงเขตเวลา**: ค่า cron จะถูกตีความตามเขตเวลาท้องถิ่นของผู้ใช้โดยตรง ไม่จำเป็นต้องแปลงเป็น UTC หรือเขตเวลาอื่น
