สวัสดีครับ ผมทำแอปเมนูบาร์สำหรับ macOS ที่ทำให้ AI agent ไม่หยุดและทำงานต่อได้แม้ปิดฝา MacBook (โหมด clamshell) เลยอยากนำมาแชร์ครับ

ช่วงนี้มีข่าวอย่าง 'นักพัฒนาที่ต้องเดินทางทั้งที่ยังปิดโน้ตบุ๊กไม่ได้เพราะกระแส AI coding' (หรือมีมที่เรียกว่า
'เดินไปพร้อมกับเปิดโน้ตบุ๊ก') ออกมาด้วย
(https://www.donga.com/news/Economy/article/all/20260513/133913987/3)

มันตรงกับตัวผมมากครับ เวลาต้องให้ agent ทำงานไว้ระหว่างเดินทางแล้วต้องลุกออกจากที่นั่ง
พอปิดฝา MacBook เครื่องก็มักจะ sleep แล้วงานก็ขาดตอน
ในบทความนั้นยังมีคนพูดว่า "ใช้ Caffeinate ก็ได้นี่"
แต่เอาเข้าจริง ต่อให้ใช้ caffeinate ถ้าปิดฝาโดยไม่มีจอนอก เครื่องก็ยัง sleep แบบ clamshell อยู่ดี
และถ้าจะปล่อยให้เครื่องตื่นไว้ตลอด ก็แค่ดูได้ว่า process ยังรันอยู่หรือเปล่า เท่านั้น ต่อให้งานเสร็จแล้วก็ยังตื่นค้าง
ทำให้เกิดความร้อนและแบตหมด แอปตระกูล 'coffee' ที่มีอยู่เดิมบางตัวก็กันไม่ได้ หรือกันได้แต่ยังไม่ค่อยตอบโจทย์นัก

เลยตัดสินใจทำขึ้นมาเองครับ

  • ไม่ให้ sleep แม้ปิดฝา — สลับด้วย toggle เดียว ไม่ต้องพิมพ์คำสั่งในเทอร์มินัล และไม่ต้องยืนยันสิทธิ์ซ้ำ
  • ป้องกันความร้อนเกิน·แบตหมด — คอยดูแบตเตอรี่และอุณหภูมิ แล้วพักงานเมื่อเกินค่าที่ตั้งไว้
    เพื่อป้องกันไม่ให้ MacBook ร้อนอยู่ในกระเป๋าหรือแบตหมด ถ้าปิดฝาโดยไม่มีจอนอกจะเข้มงวดกว่า
    แต่ถ้าเป็นโหมด Desktop ก็จะผ่อนเกณฑ์ลง — เกณฑ์เปลี่ยนตามสถานะ
  • ตรวจจับงาน ไม่ใช่แค่ process — ถ้างานของ agent จบไปนานแล้วแต่ยังคงอยู่ใน clamshell
    แบบนั้นก็เปลืองแบตและเกิดความร้อนเหมือนกัน จึงตรวจจับว่า กำลังทำงานจริงหรือไม่ และเมื่อเสร็จแล้ว
    จะเปลี่ยนเป็น idle ให้อัตโนมัติ (Strict) นอกจากนี้ยังมีโหมด Lax ที่จะปลุกไว้ตราบใดที่ process ยังอยู่
  • รู้จัก agent พื้นฐาน 5 ตัว — Claude Code · Codex · Cursor · opencode · Antigravity
    และยังเพิ่ม agent อื่นเองได้ด้วย glob pattern หรือไฟล์ประกาศเพียงไฟล์เดียว
  • รับรู้การทำงานระยะไกล — ถ้ากำลังเชื่อมต่อผ่าน SSH·การแชร์หน้าจอ·Tailscale ก็จะไม่ sleep เพื่อไม่ให้งาน remote หลุด
  • ความปลอดภัย — การตรวจจับจะอ่านแค่ เวลาแก้ไขล่าสุด ของไฟล์ transcript เท่านั้น ไม่ได้อ่านเนื้อหา

นอกจากนี้ยังมี CLI, เซสชันแบบตั้งชื่อ, การแจ้งเตือนผ่าน Telegram (เลือกใช้ได้), และระบบป้องกัน 3 ชั้นที่คืนค่า sleep เมื่อออกจากโปรแกรม

เทคโนโลยีที่ใช้คือ Swift + AppKit โดยไม่มี external dependency ส่วนการควบคุมพลังงานใช้ IOKit SPI
(IOPMSetSystemPowerSetting) และสิทธิ์ใช้งานใช้ helper ผ่าน SMAppService daemon หนึ่งตัว
ตัวแอปเซ็นด้วย Developer ID แล้ว รองรับเฉพาะ Apple Silicon · macOS 13+ (Ventura)

ตอนนี้ยังอยู่ในช่วงพัฒนา จึงยังมีบางจุดที่หยาบอยู่บ้าง
เป็นโอเพนซอร์สฟรีครับ ลองใช้แล้วถ้ามีฟีดแบ็กจะขอบคุณมากจริง ๆ 🙏
ถ้ามี agent ไหนที่อยากให้รองรับเพิ่มเติมก็บอกได้เลยครับ

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น