ให้ Claude Code ทำงานเอง 24/7: บทเรียนจริงจากการสร้าง auto runner
โครง runner ที่ดึงงานจาก CSV มารันทีละตัวแบบไม่ต้องนั่งเฝ้า — พร้อมบทเรียนเรื่อง single-instance, cost guard และ session ritual ที่กันงานพังตอนตีสาม
Claude Code เก่งตอนนั่งคุยกันสด ๆ อยู่แล้ว แต่ของจริงที่เปลี่ยนวิธีทำงานคือตอนที่มัน ทำงานต่อเองได้แม้คุณไม่ได้นั่งเฝ้า ผมเลยทำ runner ตัวหนึ่งที่รัน 24/7 ดึงงานจากคิวมาทำทีละตัว นี่คือโครงและบทเรียนที่ได้จากการรันมันจริง

ทำไมต้องมี runner
งานหลายอย่างไม่ต้องการคนคอยกดทีละขั้น — เติม backlog, รัน audit, สรุปรายงาน, ตรวจคุณภาพข้อมูล สิ่งเหล่านี้ทำซ้ำได้และอธิบายเป็นขั้นตอนได้ ถ้าปล่อยให้ต้องเปิด session มานั่งสั่งเองทุกครั้ง สุดท้ายมันก็ไม่ได้ทำ runner คือตัวที่แปลง “อยากให้ทำ” เป็น “ทำเองทุกวันโดยไม่ต้องจำ”
แก่นของมันเรียบง่ายอย่างน่าตกใจ: ลูปที่อ่านคิวงาน แล้วส่งให้ Claude ทำทีละตัว ผมเก็บคิวเป็น CSV ธรรมดา หนึ่งแถวคืองานหนึ่งชิ้น runner หยิบแถวถัดไป รัน บันทึกผล แล้ววนใหม่
สามอย่างที่ขาดไม่ได้
ลูปเปล่า ๆ พังง่ายมากเมื่อปล่อยรันยาว ๆ สามอย่างนี้คือสิ่งที่กันงานพัง:
- Single-instance ต้องมีตัวเดียวเท่านั้นที่รันคิว ผมเคยเจอตอนย้ายโฟลเดอร์แล้วเกิด runner ผีตัวที่สองแอบรันซ้อน ทำงานชนกันจนข้อมูลเพี้ยน ใช้ file lock กันไว้ให้แน่ใจว่ามีหนึ่งเดียวเสมอ
- Cost guard agent ที่รันเองได้หมายถึงบิลที่พุ่งเองได้ด้วย ตั้งเพดานต้นทุนต่อรอบ/ต่อวัน แล้วให้มันหยุดเองเมื่อชนเพดาน ดีกว่ามารู้ตอนสิ้นเดือน
- Refill คิว ถ้าคิวหมดแล้วเงียบไป runner ก็ว่างงานเปล่า ๆ ผมให้มันเติมงานจาก backlog เองเมื่อคิวตื้น เพื่อให้มีของทำต่อเนื่อง
Session ritual: พิธีเปิด-ปิดที่กันงานพัง
บทเรียนที่เจ็บที่สุดคือ งานที่รันแบบไม่มีคนดู (headless) ไม่เหมือนงานที่นั่งคุยสด ตอนที่เราหลับไม่มีใครคอยเบรกถ้ามันหลงทาง ผมเลยใส่ “พิธีกรรม” ครอบทุกงาน: ขั้นเปิดให้มันโหลดบริบทและกฎที่ต้องรู้ก่อน ขั้นปิดให้สรุปและตรวจตัวเองก่อนจบ แล้วบังคับด้วย hooks/gate ไม่ใช่แค่หวังให้มันจำเอง
จุดที่พลาดบ่อย และผมเจอมากับตัว:
- ชื่อ gate ไม่ตรงกับ slot ทำให้ระบบนึกว่างานพังทั้งที่ไม่พัง — ต้องกันงาน headless ไม่ให้รันพิธีของ session สด
- import พังเมื่อเปลี่ยน directory เพราะ path ไม่ได้ตั้งให้ถูก เป็นสาเหตุอันดับหนึ่งของงานล้มในช่วงแรก
- ไฟล์ signal ตอนจบงานรั่ว สะสมจนรกถ้าไม่มีตัวกวาดทิ้งเป็นรอบ
ทุกอันแก้ได้ด้วยการ “ออกแบบให้รันเองได้ตั้งแต่แรก” ไม่ใช่เอาสคริปต์ที่ทำงานตอนนั่งเฝ้ามาปล่อยทิ้งไว้แล้วหวังว่ามันจะรอด
เริ่มเล็ก ๆ ก่อน
ไม่ต้องสร้างทั้งระบบในวันเดียว เริ่มจาก:
- ทำคิว CSV ที่มีงานซ้ำ ๆ ง่าย ๆ สัก 3–5 ชิ้น
- เขียนลูปที่หยิบทีละแถวส่งให้ Claude แล้วบันทึกผล
- ใส่ cost guard กับ single-instance lock ก่อน ปล่อยรันค้างคืนครั้งแรก
- ค่อยเพิ่มพิธีเปิด-ปิดและ refill เมื่อเริ่มไว้ใจมันมากขึ้น
พอมันเดินได้เอง คุณจะเปลี่ยนจาก “คนที่นั่งสั่ง AI” เป็น “คนที่ออกแบบระบบให้ AI เดินเอง” — ซึ่งคือจุดที่ leverage ของจริงเริ่มทำงาน ถ้าอยากได้ runner ตัวเต็มพร้อม session ritual ที่ผมใช้รันค้างคืนจริง ลองดูแบบลงมือทำตามได้ในคอร์ส Claude Code