# ScheduleWakeup

กำหนดเวลาว่าจะกลับมาทำงานอีกครั้งเมื่อใดในโหมดไดนามิก `/loop` เครื่องมือนี้ช่วยให้ Claude จัดการจังหวะการวนซ้ำของงานได้เอง โดยหยุดพักตามช่วงเวลาที่เลือก จากนั้นทริกเกอร์อีกครั้งด้วยพรอมต์ลูปเดิม

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

- เมื่อต้องการควบคุมจังหวะของงานไดนามิก `/loop` ด้วยตนเอง โดยช่วงเวลาการวนซ้ำขึ้นอยู่กับสถานะงานไม่ใช่นาฬิกาคงที่
- เมื่อรอการสร้าง การปรับใช้ หรือการรันการทดสอบที่ใช้เวลานานให้เสร็จสิ้นก่อนตรวจสอบผลลัพธ์
- เมื่อต้องการแทรกการรอแบบว่างเปล่าระหว่างการวนซ้ำ ในกรณีที่ไม่มีสัญญาณเฉพาะให้ตรวจสอบในขณะนี้
- เมื่อรันลูปอัตโนมัติโดยไม่มีพรอมต์จากผู้ใช้ — ส่ง sentinel ตามตัวอักษร `<<autonomous-loop-dynamic>>` เป็น `prompt`
- เมื่อต้องการโพลล์กระบวนการที่สถานะกำลังจะเปลี่ยนแปลงในเร็วๆ นี้ (ใช้ค่าหน่วงเวลาสั้นเพื่อรักษาแคชให้ยังอุ่นอยู่)

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

- `delaySeconds` (ตัวเลข, จำเป็น): จำนวนวินาทีจนกว่าจะกลับมาทำงาน ระบบรันไทม์จะจำกัดค่าอัตโนมัติไว้ที่ `[60, 3600]` จึงไม่จำเป็นต้องจำกัดเองด้วยตนเอง
- `reason` (สตริง, จำเป็น): ประโยคสั้นๆ หนึ่งประโยคที่อธิบายเหตุผลของค่าหน่วงเวลาที่เลือก แสดงให้ผู้ใช้เห็นและบันทึกในข้อมูลการวัดประสิทธิภาพ ควรเจาะจง — "กำลังตรวจสอบการสร้าง bun ที่ใช้เวลานาน" มีประโยชน์กว่า "กำลังรอ"
- `prompt` (สตริง, จำเป็น): อินพุต `/loop` ที่จะทริกเกอร์เมื่อตื่นนอน ส่งสตริงเดิมในทุกรอบเพื่อให้การทริกเกอร์ครั้งต่อไปทำซ้ำงาน สำหรับลูปอัตโนมัติที่ไม่มีพรอมต์จากผู้ใช้ ให้ส่ง sentinel ตามตัวอักษร `<<autonomous-loop-dynamic>>`

## ตัวอย่าง

### ตัวอย่างที่ 1: ค่าหน่วงเวลาสั้นเพื่อตรวจสอบสัญญาณที่เปลี่ยนแปลงเร็วอีกครั้ง (รักษาแคชให้ยังอุ่นอยู่)

เพิ่งเริ่มการสร้างและโดยปกติจะเสร็จสิ้นภายในสองถึงสามนาที

```json
{
  "delaySeconds": 120,
  "reason": "กำลังตรวจสอบการสร้าง bun ที่คาดว่าจะเสร็จใน ~2 นาที",
  "prompt": "ตรวจสอบสถานะการสร้างและรายงานข้อผิดพลาด"
}
```

120 วินาทีช่วยรักษาบริบทการสนทนาไว้ในแคชพรอมต์ของ Anthropic (TTL 5 นาที) ทำให้การตื่นนอนครั้งต่อไปเร็วขึ้นและประหยัดกว่า

### ตัวอย่างที่ 2: การรอแบบว่างเปล่านานๆ (ยอมรับการพลาดแคช และกระจายต้นทุนไปยังการรอที่ยาวกว่า)

การย้ายฐานข้อมูลกำลังดำเนินการและโดยปกติใช้เวลา 20–40 นาที

```json
{
  "delaySeconds": 1200,
  "reason": "การย้ายข้อมูลมักใช้เวลา 20–40 นาที; กลับมาตรวจสอบใน 20 นาที",
  "prompt": "ตรวจสอบสถานะการย้ายข้อมูลและดำเนินการต่อหากเสร็จแล้ว"
}
```

แคชจะเย็นเมื่อตื่นนอน แต่การรอ 20 นาทีนั้นชดเชยต้นทุนการพลาดแคชครั้งเดียวได้อย่างเพียงพอ การโพลล์ทุก 5 นาทีจะจ่ายต้นทุนการพลาดเดิม 4 ครั้งโดยไม่ได้ประโยชน์ใดๆ

## หมายเหตุ

- **TTL แคช 5 นาที**: แคชพรอมต์ของ Anthropic จะหมดอายุหลังจาก 300 วินาที ค่าหน่วงเวลาต่ำกว่า 300 วินาทีช่วยรักษาบริบทให้อุ่นอยู่ ค่าหน่วงเวลาเกิน 300 วินาทีจะทำให้เกิดการพลาดแคชเมื่อตื่นนอนครั้งต่อไป
- **หลีกเลี่ยงค่าที่ 300 วินาทีพอดี**: นี่คือสถานการณ์ที่แย่ที่สุดจากทั้งสองโลก — คุณจ่ายต้นทุนการพลาดแคชโดยไม่ได้รับเวลารอที่ยาวกว่าอย่างมีนัยสำคัญ ลดลงเป็น 270 วินาที (รักษาแคชให้อุ่น) หรือยึดมั่นที่ 1200 วินาทีขึ้นไป (การพลาดครั้งเดียวซื้อเวลารอที่ยาวกว่ามาก)
- **ค่าเริ่มต้นสำหรับการรอแบบว่างเปล่า**: เมื่อไม่มีสัญญาณเฉพาะให้ตรวจสอบ ให้ใช้ **1200–1800 วินาที** (20–30 นาที) ทำให้ลูปตรวจสอบเป็นระยะโดยไม่เผาแคชโดยเปล่าประโยชน์ 12 ครั้งต่อชั่วโมง
- **การจำกัดอัตโนมัติ**: ระบบรันไทม์จำกัด `delaySeconds` ไว้ที่ `[60, 3600]` ค่าที่ต่ำกว่า 60 จะกลายเป็น 60 ค่าที่สูงกว่า 3600 จะกลายเป็น 3600 ไม่จำเป็นต้องจัดการขอบเขตเหล่านี้เอง
- **ละเว้นการเรียกใช้เพื่อสิ้นสุดลูป**: หากต้องการหยุดการวนซ้ำ อย่าเรียกใช้ ScheduleWakeup เพียงแค่ละเว้นการเรียกใช้ก็สิ้นสุดลูป
- **ส่ง `prompt` เดิมในทุกรอบ**: ฟิลด์ `prompt` ต้องมีคำสั่ง `/loop` เดิมในทุกการเรียกใช้ เพื่อให้การตื่นนอนครั้งต่อไปรู้ว่างานใดที่ต้องกลับมาทำต่อ
