บันทึกการทำ LidGuard โปรแกรมที่สร้างขึ้นเพราะอยากปล่อยให้ AI เอเจนต์ทำงานต่อ แล้วปิดฝาโน้ตบุ๊กลงตอนอยู่บนรถบัสหรือรถไฟใต้ดินได้
(github.com/airtaxi)ผมเขียนโค้ดบนโน้ตบุ๊กระหว่างเดินทางอยู่บ่อย ๆ โดยเฉพาะช่วงนี้ที่มักจะมอบงานที่ใช้เวลาสักหน่อยให้ AI coding agent อย่าง Codex ทำแทนไว้
ปัญหาเกิดขึ้นตอนต้องลงจากรถบัสหรือรถไฟใต้ดิน
เราใส่พรอมป์ต์ไปแล้ว เอเจนต์ก็ยังประมวลผลไม่เสร็จ แต่ถ้าปิดฝาโน้ตบุ๊ก เครื่องอาจเข้าสู่โหมดสลีปจนงานสะดุดได้ เลยต้องคอยถือเครื่องแบบพับครึ่งเปิดจอค้างไว้ตอนลงจากรถ รออีกนิด หรือไม่ก็ตัดงานแล้วค่อยกลับมาต่อทีหลัง
มันอาจดูเป็นความไม่สะดวกเล็กน้อย แต่พอเกิดซ้ำ ๆ ก็รบกวนใจพอสมควร
สิ่งที่เลยทำขึ้นมา
LidGuard เป็นเครื่องมือจัดการพลังงานที่คอยกันไม่ให้โน้ตบุ๊กหลับระหว่างที่ local AI coding agent กำลังทำงาน และเมื่อทำงานเสร็จก็จะคืนค่านโยบายพลังงานกลับไปเป็นแบบเดิม
โดยตั้งเป้าให้ลำดับการทำงานประมาณนี้
- มอบหมายงานที่ใช้เวลานานให้เอเจนต์
- ถ้าต้องเดินทางต่อ ก็ปิดฝาโน้ตบุ๊ก
- ระหว่างที่เอเจนต์ทำงาน จะบล็อกการสลีปและการสลีปจากการปิดฝาไว้ชั่วคราว
- พองานเสร็จ จะคืนค่าการตั้งค่าพลังงานเดิม
- แล้วเข้าสู่โหมดสลีปหรือไฮเบอร์เนตตามการตั้งค่า
ส่วนตัวผมชอบข้อสุดท้ายที่สุด ถ้ามันจบแค่ “ปิดฝาก็ยังรันต่อได้” สุดท้ายผู้ใช้ก็ยังต้องกลับมาคอยจัดการเองอยู่ดี แต่ LidGuard ตั้งใจให้หลังจากเอเจนต์ทำงานเสร็จแล้ว โน้ตบุ๊กก็ได้พักไปพร้อมกันด้วย
ทำไมถึงแยกทำขึ้นมาเอง
ผมลองหาโปรแกรมกันสลีปที่มีอยู่แล้วเหมือนกัน
จากที่หาเจอ ส่วนใหญ่จะใกล้เคียงกับแบบใดแบบหนึ่งต่อไปนี้
- กันสลีปเมื่อมีโปรเซสหนึ่งกำลังรันอยู่
- ใช้วิธีเปิดไทเมอร์ทิ้งไว้
- ให้ผู้ใช้เปิดปิดเอง
- กันเฉพาะการสลีปตอนที่ฝาโน้ตบุ๊กยังเปิดอยู่
แต่สิ่งที่ผมต้องการต่างออกไปเล็กน้อย
- เปลี่ยนพฤติกรรมการสลีปตอนปิดฝาแบบชั่วคราวด้วย
- รู้จังหวะที่ AI agent session จบจริง ๆ
- พอจบแล้วให้คืนค่านโยบายพลังงานเดิม
- และถ้าจำเป็นก็ส่งเครื่องเข้าสลีปหรือไฮเบอร์เนตอัตโนมัติ
ดังนั้นในเอเจนต์ที่รองรับ ผมเลยทำให้มันติดตามการเริ่มและจบงานด้วย hook แทน มันจึงใกล้เคียงกับ “เครื่องมือที่ปลุกคอมไว้เฉพาะตอนที่เอเจนต์กำลังทำงาน” มากกว่าจะเป็น “เครื่องมือที่บังคับให้คอมเปิดอยู่ตลอดเวลา”
ฟีเจอร์ที่ใส่ไว้
ตอนแรกผมคิดว่าแค่ให้ Codex บน Windows ใช้งานได้ดีก็พอแล้ว เพราะสภาพแวดล้อมหลักที่ผมใช้คือ Windows และเอเจนต์ที่ใช้ก็มักจะเป็น Codex แทบทั้งหมด
แต่พอทำไปเรื่อย ๆ ก็รู้สึกว่าปัญหานี้น่าจะพบได้ทั่วไปพอสมควร เลยค่อย ๆ เติมความสามารถเพิ่มเข้าไป
- ควบคุมพลังงานบน Windows, Linux ที่ใช้ systemd/logind และ macOS
- เชื่อมต่อกับ Codex, Claude Code, GitHub Copilot CLI
- สลีปหรือไฮเบอร์เนตอัตโนมัติหลังงานเสร็จ
- ตั้งค่าการจัดการคำขอสิทธิ์ในขณะปิดฝา
- ยกเลิกการกันสลีปสำหรับเซสชันที่ไม่มีความเคลื่อนไหวตามเวลาที่กำหนด
- ไฮเบอร์เนตฉุกเฉินตามค่าเซ็นเซอร์อุณหภูมิ
โน้ตบุ๊กของผมเป็น Windows on ARM ดังนั้นงานระดับเอเจนต์โดยทั่วไปจึงไม่ได้ทำให้เครื่องร้อนมากเวลาอยู่ในกระเป๋า ถึงอย่างนั้นผมก็คิดว่าการเคลื่อนที่พร้อมกับเครื่องที่ยังเปิดอยู่ในสภาพปิดฝาควรทำอย่างระมัดระวัง ดังนั้นในสภาพแวดล้อมที่รองรับ ผมจึงใส่ฟังก์ชันที่ถ้าอุณหภูมิเกินระดับที่กำหนด จะพยายามเข้าสู่ไฮเบอร์เนตหรือสลีปทันทีด้วย
สิ่งที่ควรระวัง
LidGuard ไม่ได้แปลว่า “เอาโน้ตบุ๊กใส่กระเป๋าแบบไม่ต้องคิดอะไรก็ได้”
การจัดการพลังงาน เซ็นเซอร์อุณหภูมิ สิทธิ์ เฟิร์มแวร์ และนโยบายของระบบปฏิบัติการ อาจทำงานต่างกันไปในแต่ละสภาพแวดล้อม ฟังก์ชันไฮเบอร์เนตฉุกเฉินเองก็เป็นเพียงตัวช่วยด้านความปลอดภัยเสริมเท่านั้น
ยังมีตัวเลือกสำหรับจัดการคำขอสิทธิ์อัตโนมัติขณะปิดฝาได้ด้วย แต่เพราะงานอาจเดินหน้าต่อไปในช่วงที่คุณไม่ได้มองหน้าจอ จึงควรใช้อย่างระมัดระวัง
ขอบเขตการทดสอบในตอนนี้
สภาพแวดล้อมที่ทดสอบมากที่สุดคือ Windows + Codex
แม้ว่าจะรองรับ Linux, macOS, Claude Code และ GitHub Copilot CLI ไว้แล้ว แต่ผมยังไม่ได้ลองใช้งานจริงกับทุกชุดผสมอย่างเพียงพอ ถ้าลองใช้กับระบบปฏิบัติการหรือเอเจนต์อื่นแล้วเจอความผิดปกติ จะเขียนอีเวนต์ปัญหาเป็นภาษาเกาหลีก็ได้ ฝากไว้เป็น issue แล้วผมจะพยายามแก้ให้มากที่สุด
สุดท้ายแล้ว LidGuard ก็คือเครื่องมือเล็ก ๆ ที่ผมทำขึ้นเพราะอยากใช้ AI เอเจนต์ได้สะดวกขึ้นอีกนิดระหว่างเดินทาง หวังว่ามันจะช่วยคนที่เคยเจอสถานการณ์คล้ายกันอย่างบนรถบัส รถไฟใต้ดิน คาเฟ่ หรือระหว่างย้ายห้องประชุม แล้วคิดว่า “ขอแค่งานนี้เสร็จก่อน อย่าเพิ่งให้โน้ตบุ๊กหลับ” ได้บ้าง
6 ความคิดเห็น
เจ๋งมาก บน Windows สามารถตรวจจับ Codex หรือ Claude Code ที่ติดตั้งใน WSL ได้ไหม?
ผมได้ลองพิจารณาแล้วว่าแนวทางที่ดีที่สุดในสภาพแวดล้อม WSL ควรเป็นแบบไหน และได้ข้อสรุปว่าแนวทางที่สะอาดที่สุดคือให้เรียก LidGuard ที่ติดตั้งอยู่ฝั่ง Windows จาก agent hook ที่ติดตั้งอยู่บน Linux
ในส่วนนี้ได้ปล่อยแพตช์ 1.0.1 แล้ว และได้อัปเดตวิธีติดตั้งอย่างละเอียดไว้ใน README(.ko).md ดังนั้นสามารถตรวจสอบได้จากที่นั่น
หรือใน
agent-install.mdที่ให้เอเจนต์จัดการติดตั้งแทน ก็ได้ใส่พรอมป์ต์เกี่ยวกับการตรวจจับสภาพแวดล้อม WSL ไว้ด้วย ดังนั้นทางนั้นก็นำไปใช้ได้เลยครับ! ผมเผลอกดปุ่มส่งระหว่างทางโดยไม่ตั้งใจครับ ฮือ
อ๊ะ ไม่ครับ/ค่ะ ดูเหมือนว่ายังไม่ได้พิจารณาสถานการณ์นั้นไว้ คงต้องลองคิดดูก่อนว่าจะรองรับอย่างไร!
บางทีนี่อาจเป็นคำชมอย่างยิ่งว่า "เป็นไอเดียที่สมบูรณ์แบบจนในเชิงตรรกะไม่มีทางจะวิจารณ์ได้ และทำให้รู้สึกทั้งอิจฉาและหมั่นไส้" ก็ได้นะ
โปรดตรวจสอบหัวข้อการแสดงความคิดเห็นในวิธีใช้งานเว็บไซต์
กรุณาพูดคุยกันอย่างสุภาพและนุ่มนวล
กรุณาอย่าโจมตีผู้เขียนโดยตรง
หากมีข้อโต้แย้ง กรุณาเขียนเฉพาะเนื้อหาของข้อโต้แย้งนั้น