Smart Rules: tự động hóa if-this-then-that cho nguồn điện và làm mát Mac

Henry AGI
6 phút đọcJun 2026
Smart Rules: tự động hóa if-this-then-that cho nguồn điện và làm mát Mac

Smart Rules là lớp tự động hóa kiểu if-this-then-that của LidRun cho nguồn điện Mac: bạn đặt một điều kiện — một process đang chạy, pin dưới một mức phần trăm, máy giữ nhiệt cao, một khung giờ nhất định — và khi điều kiện đó đúng, LidRun sẽ giữ Mac thức, cho phép nó ngủ, chuyển profile làm mát, hoặc gửi cảnh báo, mà bạn không cần đụng tay vào công tắc nào. Đây là cùng một kiểu chuyển đổi như khi thermostat thay thế công tắc đèn: bạn mô tả trạng thái mong muốn một lần, còn việc kiểm tra liên tục thì để app lo, thay vì bạn phải tự nhớ. Phần dưới đây sẽ nói rõ một rule có thể theo dõi những gì, nó được phép làm gì, cách nhiều người hiện đang tự chắp vá việc này bằng caffeinate và pmset, và DIY theo kiểu đó âm thầm để Mac thức — hoặc ngủ — lâu hơn dự tính ở chỗ nào.

Vì sao một công tắc keep-awake duy nhất là chưa đủ

Một công tắc thủ công chỉ có đúng hai trạng thái, trong khi một ngày làm việc có nhiều hơn hai vấn đề cần giải quyết. Cùng một chiếc Mac cần thức trọn vẹn suốt 40 phút build cũng cần được ngủ tự do một giờ sau đó, khi không còn gì chạy và pin chỉ còn 18%.

Bật keep-awake để bao trọn những lúc bận rộn thì bạn cũng đang giữ Mac thức suốt những lúc rảnh — tốn pin vô ích, và nếu để trên bàn ấm, quạt còn quay lên mà chẳng để làm gì. Tắt nó đi giữa các job thì bạn lại quay về cảnh canh chừng công tắc, phải bắt kịp đúng lúc một job dài bắt đầu. Rule chính là khoảng giữa còn thiếu: bạn viết điều kiện một lần, LidRun tự kiểm tra liên tục, và hành động chỉ kích hoạt khi điều kiện thực sự đúng.

Cách tự động hóa miễn phí, có sẵn trên máy — và nó gãy ở đâu

Phần lớn mọi người không tìm đến một app riêng ngay từ đầu, và với một job chỉ chạy một lần thì cũng chẳng cần. macOS có sẵn hai công cụ thật sự hữu dụng. caffeinate -i some-command chặn idle sleep đúng bằng thời gian some-command chạy, rồi tự rút lui — đây thực sự là công cụ đúng cho một job chạy foreground đơn lẻ. caffeinate -s làm điều tương tự nhưng chỉ khi Mac đang cắm sạc (AC power), khớp với thứ mà hầu hết build script thực sự cần. Riêng với chuyện nắp máy, sudo pmset disablesleep 1 chính là công tắc mà Closed-Lid mode của LidRun cũng bật — nó bảo macOS bỏ qua hoàn toàn trigger clamshell-sleep, và sudo pmset disablesleep 0 sẽ trả nó về như cũ. macOS còn có một cách miễn phí, không cần Terminal, để "giữ máy mở dù đóng nắp": cắm sạc, gắn màn hình ngoài, nối bàn phím hoặc chuột có dây hoặc không dây, và chế độ clamshell của chính Apple sẽ chạy Mac đóng nắp ở công suất đầy đủ mà không cần phần mềm bên thứ ba nào. Nếu muốn thứ gì đó gần với một rule hơn, app Shortcuts có thể kích hoạt hành động "Run Shell Script" từ một automation theo mức pin hoặc theo giờ trong ngày, để một sự kiện pin-dưới-20% có thể gọi một script chạy caffeinate hoặc pmset giúp bạn.

Không có gì sai ở cách làm đó, và với một job đơn lẻ thì nói thật là đã quá đủ. Rắc rối xuất hiện khi bạn chồng nhiều hơn một điều kiện, hoặc quên đóng vòng lặp lại. Một caffeinate -i & bị bỏ chạy trong một terminal nền không hề biết job của bạn đã xong — nó giữ Mac thức cho đến khi bạn nhớ ra mà kill nó, hoặc đến khi bạn đóng nắp một chiếc Mac vẫn đang chạy hết công suất trong balo. pmset disablesleep 1 còn tệ hơn nếu quên: nó không tự hết hạn, không theo dõi pin, cũng không biết máy đang nóng — nó vẫn ở trạng thái disabled qua lần boot này lẫn lần boot sau, cho đến khi lệnh 0 tương ứng thực sự được chạy. Không công cụ có sẵn nào trong số này đọc được nhiệt độ CPU (macOS không expose thông tin đó cho shell script nếu thiếu một trình đọc bên thứ ba), nên một script dựa trên chúng không có cách nào tự giảm nhiệt khi máy thực sự nóng lên, và cũng chẳng có bản ghi nào về việc gì đã kích hoạt hay khi nào.

Hướng dẫn liên quanBộ điều tiết an toàn khi giữ Mac thức: vì sao LidRun để một chiếc Mac quá nóng hoặc không hoạt động đi ngủ

Những điều kiện mà một Smart Rule có thể phản ứng

Một rule bắt đầu từ một hoặc nhiều điều kiện, và LidRun yêu cầu tất cả phải đúng cùng lúc — không có OR bên trong một rule; nếu bạn cần kiểu "either/or", hãy tạo hai rule với cùng hành động. Một điều kiện có thể so khớp tên process hoặc tên app với một pattern (nên một rule có thể bắt theo Claude Code, Codex, Cursor, Ollama, Docker, một Xcode build, hay một python script — khớp chính xác hoặc khớp tiền tố với tên process/app đang chạy, không phân biệt hoa thường), pin dưới hoặc trên một mức phần trăm, nhiệt độ giữ trên một ngưỡng độ trong một khoảng thời gian, đang dùng pin hay đang cắm AC, nắp máy đang đóng, không có workload nào khớp chạy trong N giây, hoặc một khung giờ.

Engine kiểm tra lại mỗi 5 giây. Các điều kiện dựa trên thời lượng — "nhiệt độ trên X trong Y giây", "không có workload trong N giây" — chỉ tính thời gian khi mọi điều kiện trong rule đó đang đúng cùng lúc. Nếu bất kỳ điều kiện nào rớt, dù chỉ trong chốc lát (rút AC một giây, workload chớp tắt giữa các bước), bộ đếm sẽ reset và đếm lại từ đầu. Đây là chủ ý: một rule nên phản ứng với một trạng thái kéo dài, không phải một cú chớp nhoáng.

"Không có workload nào khớp trong N giây" kiểm tra dựa trên cùng danh sách pattern Auto-Watch mà bạn thiết lập trong Settings, chứ không phải pattern riêng bạn gõ vào rule đó — điều này đáng lưu ý nếu bạn dùng nó để tự động nhả (release) sau một job tùy chỉnh: hãy thêm tên process của job đó vào Auto-Watch patterns luôn, nếu không rule sẽ chẳng có gì để theo dõi xem nó đã biến mất chưa.

Nhiệt độ lấy từ các SMC sensor key mà LidRun đọc trực tiếp. Vì không có một key duy nhất nào tồn tại trên mọi Mac, nó thử qua một danh sách ứng viên và lấy giá trị hợp lệ nóng nhất, nên thứ mà rule đem so sánh là phần nóng nhất của máy mà nó thực sự nhìn thấy được, chứ không phải một phỏng đoán. Nếu một chiếc Mac cụ thể không có sensor nào đọc được cho phép so sánh đó, điều kiện đơn giản là không bao giờ đúng — rule nằm im chứ không báo lỗi.

Một rule được phép làm những gì

Hành động xoay quanh các control của chính LidRun, và giới hạn đó là có chủ đích: giữ Mac thức, ngừng giữ thức, chuyển sang một cooling preset (Quiet, Balanced, AI Workload, hoặc Emergency Max) trong phạm vi phần cứng cho phép, gửi thông báo (kèm tùy chọn push về điện thoại), cho Mac ngủ, bật hoặc tắt Closed-Lid mode, hoặc ghi log một ghi chú. Nó không giả vờ làm được những việc mà macOS không cho phép một app làm.

Việc ghi (write) vào fan phần lớn bị giới hạn trên Apple Silicon bởi firmware và SIP, nên một hành động làm mát dựa vào những gì phần cứng expose ra chứ không ép một đường cong quạt thủ công; nếu fan control không khả dụng trên Mac của bạn hoặc trên tier license của bạn, bước cooling của rule đơn giản là bị bỏ qua trong khi các hành động khác — keep awake, notify, sleep — vẫn kích hoạt bình thường. Các hành động cooling cũng chỉ bao giờ tăng lên, không bao giờ hạ xuống: nếu bạn đã thủ công đặt quạt ở Max, bước "chuyển sang Balanced" của một rule sẽ không kéo nó xuống lại. Chỉ có rule khẩn cấp về nhiệt (emergency-thermal) mới ép Max bất kể trạng thái đang đặt là gì, và đó chính là thứ ngăn một rule thông thường âm thầm phá bỏ một lựa chọn bạn đã chủ ý đặt.

Không hành động nào của rule hỏi xác nhận một khi bạn đã bật rule lên — kể cả Sleep-the-Mac và Closed-Lid mode, và đó chính là lý do vì sao chính phần copy trong app ở Smart Rules cảnh báo bạn nên bật hai cái này một cách có chủ đích. Những gì một rule làm là nhìn thấy được, nhưng chưa được gắn nhãn là do rule nào: kích hoạt "keep awake" hay "sleep the Mac" tạo ra cùng một dòng Activity Log như một hành động thủ công sẽ tạo ra (ví dụ "Keep Awake started") — dòng log đó không nói rõ rule nào đã kích hoạt nó. Nếu bạn đang tinh chỉnh một rule mới và muốn xác nhận nó đã thực sự chạy, subsystem com.lidrun.app trong Console.app, category RuleEngine, sẽ ghi log tên rule mỗi lần nó chạy — đây là chỗ chính xác hơn để xem trong lúc bạn đang thử nghiệm các ngưỡng.

Bản thân Smart Rules là một tính năng Pro với công tắc tổng riêng, mặc định tắt kể cả trên license Pro. Auto Mode, ở tier miễn phí, đã tự bật và nhả keep-awake quanh công việc được phát hiện; Smart Rules là lớp điều kiện chồng lên trên đó — thêm cooling, cảnh báo, hoặc một lần ngủ có kiểm soát khi có rủi ro thực sự.

Đâu là preset có sẵn, đâu là thứ bạn tùy chỉnh được ngay bây giờ

LidRun đi kèm 15 rule có sẵn, trải khắp các nhóm AI coding agent, AI chạy local, dev & build, và an toàn. Bạn có thể bật hoặc tắt từng cái, nhưng không xóa được, và năm rule mặc định tắt sẵn — LM Studio, Python, Node/npm, Xcode build, và ffmpeg — vì một pattern interpreter rộng như "python" hay "node" khớp với quá nhiều process không liên quan để bật sẵn cho tất cả mọi người ngay từ đầu.

Chỗ mà trình tạo rule trong app còn hạn chế hiện tại: thêm một rule tùy chỉnh từ cửa sổ Smart Rules hiện chỉ có nghĩa là gõ vào một pattern tên process, và nó tạo ra đúng một dạng rule cố định — process đó chạy thì giữ Mac thức và chuyển sang cooling AI Workload. Các điều kiện phần trăm pin, nhiệt độ-và-thời lượng, nắp máy, và khung giờ đã nói ở trên đều tồn tại dưới dạng preset có sẵn mà bạn có thể bật, nhưng trình tạo rule dạng giao diện chưa cho bạn gõ ngưỡng tùy ý cho chúng. Nếu muốn một rule pin hoặc nhiệt độ tùy chỉnh ngay bây giờ, các preset có sẵn là cách để có được nó; còn bản thân các rule nằm trong một file JSON thuần trong Application Support, nếu bạn thoải mái tự tay chỉnh sửa trực tiếp.

Những rule mà một developer thực sự sẽ dùng

Thức trong lúc nó chạy, buông ra khi nó xong: các preset Claude Code, Codex, Cursor, và Ollama đều giữ Mac thức và chuyển sang cooling AI Workload ngay khi process đó bắt đầu chạy, kèm cooldown 5 phút để rule không kích hoạt lại mỗi tick trong khi job vẫn đang tiếp diễn. Docker được xử lý tương tự nhưng dùng cooling Balanced thay vì AI Workload. Ghép bất kỳ preset nào trong số đó với rule có sẵn "không có AI workload trong 10 phút → dừng keep-awake", và một lần pull model hay chạy agent qua đêm sẽ tự nhả Mac một khi nó thực sự rảnh, thay vì để keep-awake bật suốt phần còn lại của đêm.

Hai preset an toàn mặc định bật sẵn và không cần thiết lập gì: pin dưới 10%, khi đang dùng pin, gửi thông báo sắp hết pin; pin dưới 5%, khi đang dùng pin, cho Mac ngủ luôn. Cả hai chạy độc lập với bất kỳ rule workload nào đang làm gì, và cả hai đều nằm trên governor an toàn toàn app, thứ vốn đã kiểm soát keep-awake theo pin và trạng thái nhiệt bên dưới mọi rule.

Hai preset nhiệt độ cho thấy cơ chế gating theo thời lượng trong thực tế: trên 90°C giữ liên tục 5 phút sẽ chuyển sang cooling Emergency Max và gửi thông báo "Mac đang nóng"; trên 95°C giữ liên tục 2 phút thì bỏ qua luôn các bước, cho Mac ngủ ngay. Cả hai đều cần giá trị đọc được giữ ở mức cao liên tục trong đúng khoảng thời gian đó, nên một cú tăng nhiệt bình thường, ngắn ngủi trong lúc build sẽ không kích hoạt cái nào cả. Luồng không khí và vị trí bạn đặt Mac vẫn là trách nhiệm của bạn — một rule phản ứng với một con số, nó không thể sửa được một cái túi đóng kín.

Với bất cứ thứ gì nằm ngoài các pattern có sẵn — vllm, Blender, một training script với tên binary lạ — gõ tên đó vào "Add a custom rule" sẽ cho bạn keep-awake cộng với cooling AI Workload trong một bước. Nếu bạn còn muốn job đó tôn trọng một ngưỡng pin sàn hay một khung giờ, hãy bật thêm các preset an toàn có sẵn tương ứng song song với nó, thay vì kỳ vọng một rule duy nhất làm được mọi thứ ở thời điểm hiện tại.

Thử nó thay vì vật lộn với ngủ khi gập máy

LidRun giữ công việc của bạn chạy tiếp khi đóng nắp, với cơ chế bảo vệ pin và nhiệt tích hợp sẵn.

Tải cho macOS

Đã có LidRun? Đọc hướng dẫn thiết lập →

Mới biết đến LidRun? Xem bảng giá →

Câu hỏi thường gặp

Một Smart Rule có thể kiểm tra những điều kiện gì?

Một process hoặc app khớp đang chạy, pin dưới hoặc trên một mức phần trăm, nhiệt độ trên một ngưỡng độ trong một khoảng thời gian, đang dùng pin so với đang cắm AC, nắp máy đang đóng, không có workload nào khớp trong N giây, và một khung giờ. Mọi điều kiện của một rule phải đúng cùng lúc — không có OR bên trong một rule; dùng hai rule nếu cần kiểu either/or.

Một rule có thể điều khiển quạt của tôi hay ép một mức nhiệt độ không?

Không. Các hành động là những đòn bẩy riêng của LidRun — keep awake, dừng keep-awake, chuyển cooling preset trong phạm vi phần cứng cho phép, notify, sleep, hoặc bật/tắt Closed-Lid mode. Việc ghi vào fan phần lớn bị giới hạn trên Apple Silicon bởi firmware và SIP, nên một hành động cooling hoạt động trong những giới hạn đó; ở nơi fan control không khả dụng, bước đó bị bỏ qua và các hành động khác của rule vẫn chạy. Các hành động cooling chỉ tăng lên, không bao giờ âm thầm kéo một mức Max đã đặt thủ công xuống lại.

Một rule có dừng một job nếu pin xuống thấp không?

Có — các preset có sẵn cho Mac ngủ khi pin dưới 5% và thông báo khi pin dưới 10%, cả hai khi đang dùng pin, độc lập với bất kỳ rule workload nào đang làm gì. Governor an toàn của LidRun vốn đã kiểm soát keep-awake theo pin và trạng thái nhiệt bên dưới mọi rule, nên đây không phải là lớp bảo vệ duy nhất.

Một rule biết workload của tôi đã thực sự xong bằng cách nào?

Dùng "không có workload nào khớp trong N giây". Nó chờ cho danh sách pattern Auto-Watch của bạn (trong Settings) không cho thấy gì đang chạy trong đúng khoảng thời gian đó rồi mới kích hoạt, nên một khoảng dừng ngắn giữa các bước sẽ không làm nó kích hoạt sớm. Nó theo dõi danh sách Auto-Watch toàn cục của bạn, chứ không phải một pattern gõ riêng vào rule đó — hãy thêm tên process của job vào Auto-Watch luôn, nếu không điều kiện sẽ chẳng có gì để theo dõi xem đã biến mất chưa.

Tôi có thể tự viết rule pin, nhiệt độ, hay khung giờ của riêng mình không?

Chưa thể từ trình tạo rule. Gõ một rule tùy chỉnh ở thời điểm hiện tại sẽ tạo ra một rule dạng process-pattern — process đó chạy thì giữ Mac thức và chuyển sang cooling AI Workload. Các điều kiện pin, nhiệt độ, nắp máy, và khung giờ hiện đến từ các preset có sẵn, thứ bạn có thể bật hoặc tắt riêng từng cái.

Việc theo dõi rule có tự nó làm tốn pin không?

Engine kiểm tra mỗi 5 giây, nhưng nó chỉ liệt kê các process đang chạy — phần tốn tài nguyên nhất — khi có ít nhất một rule đang bật thực sự cần thông tin process. Nếu chỉ bật các rule pin, nhiệt, nguồn điện, nắp máy, hoặc khung giờ, thì việc kiểm tra gần như không tốn gì cả.

Bạn đang tò mò LidRun có hợp với mình không?

Cứ để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm vào bên dưới xem AI thực sự nghĩ gì về LidRun.