Câu chuyện tạo ra LidGuard, chương trình được làm vì muốn giao việc cho AI agent rồi đóng laptop và xuống xe buýt hay tàu điện ngầm
(github.com/airtaxi)Tôi thường xuyên code trên laptop khi đang di chuyển. Đặc biệt dạo gần đây, tôi ngày càng hay giao cho các AI coding agent như Codex những việc sẽ mất chút thời gian để xử lý.
Vấn đề nảy sinh là lúc phải xuống xe buýt hoặc tàu điện ngầm.
Prompt thì đã gửi đi rồi, agent vẫn đang xử lý, nhưng nếu đóng nắp laptop lại thì máy có thể vào chế độ ngủ và công việc bị gián đoạn. Vì vậy tôi thường phải gập máy hờ hờ rồi cầm xuống trong khi màn hình vẫn bật, hoặc chờ thêm một chút, hoặc đơn giản là ngắt công việc rồi làm tiếp sau.
Thoạt nhìn có vẻ chỉ là một bất tiện nhỏ, nhưng lặp đi lặp lại thì khá khó chịu.
Thế là tôi làm ra nó
LidGuard là một công cụ quản lý điện năng giúp ngăn laptop đi ngủ khi local AI coding agent đang làm việc, rồi sau khi công việc kết thúc thì đưa máy trở về chính sách nguồn điện ban đầu.
Tôi tạo nó với mục tiêu đại khái theo luồng như sau.
- Giao cho agent một công việc mất nhiều thời gian.
- Nếu cần di chuyển thì đóng nắp laptop.
- Trong lúc agent đang làm việc, tạm thời chặn chế độ ngủ và hành vi ngủ khi đóng nắp.
- Khi công việc kết thúc, khôi phục cài đặt nguồn điện ban đầu.
- Tùy theo cấu hình, đưa máy vào chế độ ngủ hoặc ngủ đông.
Cá nhân tôi thích nhất là phần cuối cùng này. Nếu chỉ dừng ở mức “đóng nắp vẫn tiếp tục chạy” thì cuối cùng người dùng vẫn phải tự nhớ xử lý lại sau đó, còn LidGuard hướng tới việc để laptop cũng được nghỉ khi agent làm xong việc.
Vì sao phải làm riêng
Tôi cũng đã thử tìm các chương trình chống ngủ hiện có.
Trong phạm vi tôi tìm được, phần lớn đều gần với một trong các kiểu sau.
- Chặn ngủ khi một process cụ thể đang chạy
- Bật timer để giữ máy thức
- Người dùng tự bật và tắt
- Chỉ chặn chế độ ngủ khi nắp laptop đang mở
Thứ tôi muốn thì hơi khác một chút.
- Tạm thời thay đổi cả hành vi ngủ khi nắp đã đóng
- Biết được thời điểm phiên AI agent thực sự kết thúc
- Khi xong thì khôi phục chính sách nguồn điện ban đầu
- Nếu cần thì tự động đưa máy vào ngủ hoặc ngủ đông
Vì vậy với các agent được hỗ trợ, tôi làm theo hướng dùng hook để theo dõi thời điểm bắt đầu và kết thúc công việc. Nó gần với “công cụ chỉ giữ máy thức khi agent đang làm việc” hơn là “công cụ bắt máy luôn bật vô điều kiện”.
Những tính năng đã đưa vào
Ban đầu tôi nghĩ chỉ cần chạy tốt với Codex trên Windows là đủ. Môi trường tôi dùng chủ yếu là Windows, và agent tôi dùng gần như cũng chỉ là Codex.
Nhưng làm rồi thì tôi thấy có lẽ đây là vấn đề khá phổ biến, nên dần dần bổ sung thêm tính năng.
- Điều khiển nguồn trên Windows, Linux dựa trên systemd/logind và macOS
- Kết nối với Codex, Claude Code, GitHub Copilot CLI
- Tự động ngủ hoặc ngủ đông sau khi công việc kết thúc
- Cấu hình cách xử lý yêu cầu cấp quyền khi nắp đang đóng
- Gỡ chặn chống ngủ cho các phiên không có hoạt động trong một khoảng thời gian
- Ngủ đông khẩn cấp theo ngưỡng cảm biến nhiệt độ
Laptop của tôi là Windows on ARM nên với mức tải kiểu agent làm việc thì thường không bị nóng lên quá nhiều trong túi. Dù vậy, tôi vẫn nghĩ việc di chuyển với laptop đang bật trong trạng thái đóng nắp cần phải cẩn thận, nên ở các môi trường được hỗ trợ tôi cũng thêm tính năng thử đưa máy vào ngủ đông hoặc ngủ ngay lập tức nếu nhiệt độ vượt quá một mức nhất định.
Những điểm cần lưu ý
LidGuard không có nghĩa là “cứ nhét laptop vào túi thế nào cũng được”.
Quản lý điện năng, cảm biến nhiệt độ, quyền, firmware và chính sách của hệ điều hành có thể hoạt động khác nhau tùy môi trường. Tính năng ngủ đông khẩn cấp cũng chỉ nên xem là một lớp an toàn bổ trợ.
Bạn cũng có thể dùng cấu hình tự động xử lý yêu cầu cấp quyền khi nắp đang đóng, nhưng vì công việc có thể tiếp tục diễn ra trong lúc bạn không nhìn màn hình, tốt hơn là nên dùng một cách thận trọng.
Phạm vi kiểm thử hiện tại
Môi trường được kiểm thử nhiều nhất là Windows + Codex.
Hỗ trợ cho Linux, macOS, Claude Code và GitHub Copilot CLI cũng đã được triển khai, nhưng tôi chưa thực sự dùng đủ nhiều trên mọi tổ hợp. Nếu bạn thử trên hệ điều hành khác hoặc agent khác và phát hiện điều gì bất thường, bạn có thể để lại issue, viết bằng tiếng Hàn cũng không sao, tôi sẽ cố gắng sửa trong khả năng có thể.
Cuối cùng, LidGuard là một công cụ nhỏ tôi làm ra chỉ vì muốn dùng AI agent thuận tiện hơn một chút khi đang di chuyển. Hy vọng nó cũng hữu ích với những ai từng rơi vào tình huống như trên xe buýt, tàu điện ngầm, quán cà phê hay lúc đi giữa các phòng họp, và chỉ mong rằng “giá như laptop đừng ngủ cho tới khi xong nốt việc này”.
6 bình luận
Tuyệt vời. Trên Windows có thể phát hiện cả Codex hoặc Claude Code được cài trong WSL không?
Tôi đã cân nhắc cách tiếp cận nào sẽ là tốt nhất trong môi trường WSL, và đi đến kết luận rằng cách gọn gàng nhất là gọi LidGuard được cài ở phía Windows từ hook của agent được cài trên Linux.
Liên quan đến việc này, tôi đã đăng bản vá 1.0.1 và phản ánh cách cài đặt chi tiết vào README(.ko).md, nên bạn có thể kiểm tra ở đó.
Hoặc trong
agent-install.md, nơi giao việc cài đặt cho agent, tôi cũng đã thêm prompt liên quan đến việc phát hiện môi trường WSL, nên bạn có thể xem bên đóBạn có thể tận dụng nó! Tôi lỡ bấm nút gửi giữa chừng hu hu
À không, có vẻ như tôi đã không tính đến tình huống đó. Tôi sẽ suy nghĩ xem nên hỗ trợ như thế nào!
Có lẽ đây chẳng phải là lời khen ngợi tuyệt vời rằng "về mặt logic thì đây là một ý tưởng hoàn hảo không thể chê vào đâu được, và tôi thấy ghen tị lẫn đố kỵ" hay sao?
Vui lòng kiểm tra mục bình luận trong cách sử dụng trang web.
Hãy trao đổi một cách thân thiện và lịch sự.
Xin đừng công kích tác giả bài viết.
Nếu có ý kiến phản biện, vui lòng chỉ viết nội dung phản biện đó.