สกิล hermes-cron ของผมเข้าแคตตาล็อกปลั๊กอินทางการของ Hermes Agent แล้ว มันสอนให้เอเจนต์จัดการงานตามกำหนดเวลาอย่างเรียบร้อย: ตั้งการเตือนโดยไม่เกิดงานซ้ำ ไม่เปลือง token ไปกับการรันที่ไม่มีอะไรให้ทำ ตรวจทุกการเปลี่ยนแปลง และหาว่างานที่ไม่ทำงานนั้นพังตรงไหน Teknium จากทีม Nous Research กด merge pull request เมื่อ 3 ตุลาคม และสกิลก็มีหน้าของตัวเองในเอกสารของ Hermes: หมวด Automation ระดับ Community เวอร์ชัน 1.2.0 ไลเซนส์ MIT ตอนนี้จึงหามันเจอได้ในที่เดียวกับที่ผู้ใช้ Hermes หาส่วนขยายอื่น ๆ ไม่ใช่แค่จากลิงก์ในแชทของเรา
ทำไมงาน cron ของเอเจนต์ถึงพังโดยไม่มีใครสังเกต
cron หรืองาน cron คือสิ่งที่เอเจนต์ทำตามกำหนดเวลา: สรุปตอนเช้า การเตือนในอีกครึ่งชั่วโมง การตรวจเซิร์ฟเวอร์ตอนกลางคืน งานพวกนี้แหละที่เปลี่ยนเอเจนต์จากคู่สนทนาให้กลายเป็นผู้ช่วย และก็เป็นจุดที่พลาดง่ายที่สุดด้วย ความผิดพลาดใน cron หน้าตาเหมือนความสำเร็จ: เครื่องมือตอบ success: true งานขึ้นสถานะว่าพักไว้ สถานะล่าสุดคือ ok แต่บางทีข้อความก็ยังส่งมาเรื่อย ๆ บางทีก็ไม่มาเลยสักข้อความ
สาเหตุมักเป็นเรื่องธรรมดา ๆ เอเจนต์เข้าใจ “อีก 30 นาที” ว่าเป็น 30m ซึ่งไม่ใช่การเตือนครั้งเดียว แต่เป็นการทำซ้ำทุกครึ่งชั่วโมง ในพรอมต์เขียนว่า “ส่งสรุปมา” เอเจนต์ก็ส่ง แล้วตัวจัดตารางงาน (scheduler) ก็ส่งซ้ำอีกรอบ การส่งแบบ origin จะไปที่แชทที่สร้างงานไว้ ไม่ใช่ไปหาคนที่ต้องการมัน งานที่ติดป้ายว่าพักไว้แต่ยังเป็น enabled: true จะไม่ทำงานเลย ทั้งที่ในรายการดูเหมือนตั้งเวลาไว้แล้ว ผมเจอแทบทุกข้อนี้มากับตัวตอนที่ดูแลงานหลายสิบงานใน Hermes และเปลี่ยนความผิดพลาดแต่ละข้อให้เป็นกฎที่ตอนนี้เอเจนต์ทำตามเอง
hermes-cron ทำอะไรได้บ้าง
เลือกคำสั่งให้ถูก การพัก การปิด และการลบเป็นคนละอย่างกัน และสกิลอธิบายให้เอเจนต์รู้ว่าเมื่อไหร่ต้องใช้อันไหน คำขอ “พักสรุปข่าวตอนเช้าไว้จนถึงวันจันทร์” จะจบด้วยการพักงานโดยไม่สร้างงานซ้ำ และคำตอบตรง ๆ ว่าใครจะเป็นคนเปิดกลับในวันจันทร์: Hermes ไม่มีการตั้งเวลาให้งานที่ทำซ้ำกลับมาทำงานต่อเอง
ไม่ปลุกโมเดลโดยไม่จำเป็น การเรียกโมเดลภาษาแต่ละครั้งใช้ token แต่งานตามกำหนดเวลาจำนวนมากต้องใช้โมเดลแค่บางครั้ง หรือไม่ต้องใช้เลย มีสามโหมดที่ไม่ต้องเรียกโมเดลเกินจำเป็น: งานที่เป็นสคริปต์ล้วนไม่มีเอเจนต์ (no_agent) การตรวจล่วงหน้าที่ตัดสินว่าต้องรันไหม และการเฝ้าดูการเปลี่ยนแปลงแบบ “บอกเมื่อมีอะไรเปลี่ยน” โหมดที่สี่ คือการตอบ [SILENT] ไม่ได้ประหยัด token แต่ช่วยลดข้อความที่รบกวนคุณ: โมเดลทำงานแล้ว แต่ไม่มีอะไรต้องรายงาน ข้อความก็จะไม่ถูกส่ง ตัวเฝ้าแบบ “เขียนมาเฉพาะตอนดิสก์เต็มเกิน 90%” ไม่ต้องเรียกโมเดลเลยสักครั้งตราบที่ทุกอย่างยังปกติ เรื่องการประหยัด token ในระบบเอเจนต์ เรามีเช็กลิสต์แยกไว้

ตรวจทุกการเปลี่ยนแปลง หลังสร้างหรือแก้งาน เอเจนต์จะอ่านงานนั้นอีกรอบและเช็กว่าสิ่งที่บันทึกไว้ตรงกับที่ขอจริง ๆ: เป็นงานครั้งเดียวหรืองานที่ทำซ้ำ และจะทำงานเมื่อไหร่ ตามคำสั่งของสกิล มันจะบอกว่า “เสร็จแล้ว” ได้ก็ต่อเมื่อตรวจแบบนี้แล้วเท่านั้น
หาจุดที่พังทีละชั้น เมื่อถามว่า “ทำไมรายงานตอนเก้าโมงไม่มา” เอเจนต์จะไม่เดาสุ่มแล้วเขียนตารางเวลาใหม่ แต่ไล่จากบนลงล่าง: ตัวจัดตารางงานยังเดินอยู่ไหม รายการของงานยังอยู่ครบดีไหม มีการรันหรือเปล่า ผลลัพธ์ส่งถึงไหม และการซิงค์ไปเขียนทับการแก้ไขหรือเปล่า

Doctor ในชุดมีสคริปต์ cron-doctor.py มาด้วย ตัวมันเองไม่เขียน ไม่รัน และไม่ลบงานใด ๆ ไม่ต่อเน็ต และไม่แตะคีย์ มันเรียกการตรวจในตัว hermes cron doctor แล้วเติมสิ่งที่การตรวจนั้นมองไม่เห็น: งานที่ถูกปิดและงานที่ “พักครึ่ง ๆ กลาง ๆ” ความล้มเหลวที่เกิดต่อเนื่องเป็นชุด ผลการส่งของการรันครั้งล่าสุด incident ที่ยังเปิดอยู่ และงานที่ระบุโมเดลตายตัวไว้ งานแบบนี้จะไม่ทำตามการตั้งค่าโมเดลส่วนกลาง และไม่สลับไปใช้โมเดลสำรองเมื่อผู้ให้บริการล่ม มีข้อแม้ข้อหนึ่ง: การตรวจในตัวโหลดงานด้วยตัวโหลดมาตรฐานของ Hermes และตัวโหลดนี้อาจซ่อมรายการที่เสียใน jobs.json ได้ แบบเดียวกับที่เกิดในทุกรอบปกติของตัวจัดตารางงาน ถ้าต้องการรันแบบอ่านอย่างเดียวจริง ๆ มีแฟล็ก --no-builtin
ความผิดพลาดที่เจอบนโปรดักชัน
การตรวจข้อล่าสุดที่เพิ่มเข้าไปใน doctor มาจากเหตุการณ์จริง บน Hermes 0.21.3 งานตามกำหนดเวลาของผมไม่ทำงานเลยสักงานติดกันหลายวัน ทุกงานล้มด้วยข้อผิดพลาดเดียวกันตอนเริ่มรัน แต่ incident ไม่ถูกเปิด และข้อมูลความล้มเหลวของแต่ละงานก็ถูกรีเซ็ตหลังการรันสำเร็จครั้งถัดไป ถ้าดูทีละงานจึงแทบไม่เห็นอะไรผิดปกติ สาเหตุไม่ได้อยู่ที่ตัวงาน แต่อยู่ที่การตั้งค่าเซิร์ฟเวอร์
ตอนนี้ doctor จับเรื่องแบบนี้ได้พอดี: ข้อผิดพลาดเดียวกันในงานตั้งแต่สามงานขึ้นไปภายในหนึ่งวัน จะแสดงครั้งเดียวในฐานะความผิดพลาดของตัวจัดตารางงานหรือของโฮสต์ ไม่ใช่ปัญหากระจัดกระจายสิบเรื่อง ก่อนส่งเข้าแคตตาล็อก สกิลผ่านการรีวิวอิสระและการทดสอบบนเอเจนต์ที่ใช้งานจริง ส่วน doctor มีเทสต์อัตโนมัติ 43 ตัวที่ไม่ต้องใช้เน็ตและไม่พึ่งอะไรภายนอก
วิธีติดตั้ง hermes-cron
ต้องใช้ Hermes Agent 0.21 ขึ้นไป ในแคตตาล็อกระบุว่ารองรับ Linux, macOS และ Windows วิธีปกติคือติดตั้งเป็นสกิล แล้วเอเจนต์จะหยิบมาใช้เองจากคำอธิบาย:
hermes skills install itpartypattaya/hermes-cron/skills/hermes-cron
หรือติดตั้งเป็นปลั๊กอินแบบพกพา:
hermes plugins install itpartypattaya/hermes-cron --no-enable
hermes plugins enable hermes-cron
จากนั้นแค่คุยกับเอเจนต์ด้วยภาษาธรรมดา: “อีก 30 นาทีเตือนให้โทรหาธนาคาร” “ทำไมรายงานตอนเช้าไม่มา” ถ้าคุณติดตั้ง hermes-cron เป็นสกิลธรรมดา ก็รัน doctor ด้วยมือได้ด้วย:
python3 ~/.hermes/skills/hermes-cron/scripts/cron-doctor.py
ถ้ายังไม่ได้ติดตั้ง Hermes ให้เริ่มจากการติดตั้งและเชื่อมต่อกับ Telegram แล้วต่อด้วยการตั้งค่าหลังติดตั้ง โค้ด เอกสาร และที่สำหรับถามคำถาม อยู่ในรีโพบน GitHub ยินดีรับ issues และ pull requests
สกิลตัวที่สองของผมในแคตตาล็อกเดียวกันคือ hermes-dreaming: มันจัดระเบียบหน่วยความจำของเอเจนต์ทุกคืน ส่วนจะหาสกิลและปลั๊กอินอื่นของ Hermes ได้ที่ไหน และควรตรวจของคนอื่นอย่างไรก่อนติดตั้ง ผมรวบรวมไว้ในบทความรีวิวแยก




