Por que o caffeinate não é suficiente para workflows de IA com a tampa fechada

Não — o caffeinate só bloqueia o sleep por inatividade, e fechar a tampa aciona um tipo de sleep completamente diferente. Isso significa que um agente de IA ou um job de modelo rodando sem supervisão pode morrer no instante em que você fecha a tampa e sai da sala. Aqui está exatamente por que essa lacuna existe, o comando gratuito que a fecha, o risco que esse comando traz e o que um workflow de tampa fechada mais seguro precisa adicionar em cima disso.
O que o caffeinate realmente bloqueia
O caffeinate é uma ferramenta pequena e confiável que já vem com o macOS, em /usr/bin/caffeinate. Rode caffeinate -i e ele cria uma assertion que impede o sleep do sistema por inatividade; -d mantém a tela ligada; -s mantém o sistema sem dormir, mas só enquanto o Mac está na tomada; -m impede que o disco entre em sleep por inatividade. Envolva um comando com ele — caffeinate -i make — e, se você não especificar uma flag, o caffeinate assume -i por padrão, segurando a assertion por exatamente o tempo que esse processo rodar.
Por baixo dos panos, isso é uma chamada a IOPMAssertionCreateWithName pedindo um tipo de assertion como PreventUserIdleSystemSleep — a mesma primitiva de baixo nível sobre a qual o próprio modo Keep Awake do LidRun (com a tampa aberta) é construído. Isso não é uma crítica ao caffeinate; é a ferramenta certa, bem construída, para o que ela se propõe a fazer.
Para um build longo, um download grande, uma suíte de testes ou uma sessão noturna do Codex ou do Claude Code com a tampa aberta, essa única linha já basta de verdade. Não há motivo para recorrer a algo mais pesado.
A palavra que vale a pena notar é inatividade (idle). O caffeinate bloqueia o sleep que acontece quando você se afasta de um laptop aberto e o macOS decide que você não está usando ele. Esse é um tipo específico de sleep — não é o único que existe.
Por que uma tampa fechada é um problema diferente
Fechar a tampa não aciona o sleep por inatividade — aciona o clamshell sleep, um comportamento separado e mais baixo nível do macOS. A menos que um monitor externo, a energia da tomada e um teclado ou mouse estejam ativamente sustentando um verdadeiro desktop de tela fechada, o macOS suspende a máquina em segundos após a tampa fechar, com ou sem assertion.


Nenhuma assertion baseada em IOPMAssertionCreateWithName alcança esse caminho — nem a do caffeinate, nem a de qualquer app construído sobre a mesma primitiva. Até a -s, a flag mais forte do caffeinate, é explicitamente limitada na própria man page a funcionar apenas quando o sistema está na tomada ("valid only when system is running on AC power"), e ainda assim não diz nada sobre a tampa.
Então o caso cada vez mais comum — iniciar um agente ou um job de fine-tune, fechar o laptop, sair para outro cômodo — deixa a execução suspensa no instante em que a tampa fecha. O caffeinate continua segurando sua assertion fielmente; a tampa vence assim mesmo, porque o sleep por inatividade e o clamshell sleep respondem a duas perguntas diferentes.
Guia relacionadoModo Closed-lid no macOS, sem kextA correção gratuita: pmset disablesleep
A única alavanca documentada e pública que muda o comportamento de fechar a tampa na bateria, sem monitor externo, é o ajuste pmset disablesleep. O comando é: sudo pmset -a disablesleep 1 permite fechar a tampa sem o Mac dormir, e sudo pmset -a disablesleep 0 devolve o comportamento normal de sleep ao fechar a tampa.


Ele pede sua senha de administrador quando você roda manualmente (a flag -a faz o ajuste valer para o sistema inteiro), e o efeito é imediato — sem precisar reiniciar.
Esse é o mecanismo real que o modo Closed-Lid do LidRun aciona por baixo dos panos, e rodá-lo você mesmo para um único job noturno não custa nada e funciona. Se for algo pontual, isso já costuma bastar de verdade.
O risco de fazer isso manualmente — e por que outros apps de manter-acordado esbarram na mesma parede
A pegadinha está no que o pmset disablesleep não faz sozinho: é um ajuste global e persistente. Não fica restrito à sua sessão de terminal nem ao processo para o qual você o configurou — ele fica em 1 até você mudar explicitamente de volta para 0 ou reiniciar o Mac. Esqueça o segundo comando, ou deixe a janela de terminal ou o app de onde você o rodou travar antes de chegar lá, e o Mac vai se recusar a dormir com a tampa fechada — mesmo parado dentro de uma mochila — até você perceber e corrigir manualmente.


E com a tampa fechada, um Mac que continua acordado não consegue dissipar calor do mesmo jeito que faz com a tampa aberta. Rodar uma sessão dentro de uma mochila fechada é o caso que exige cuidado, não importa qual ferramenta ligou o disablesleep — a regra honesta é manter um Mac em funcionamento ventilado, não lacrado.
E essa lacuna também não é resolvida por um substituto mais bonito do caffeinate. Amphetamine, KeepingYouAwake, Lungo e Caffeine são todos apps de menu bar sólidos e bem construídos, com méritos reais — interface mais limpa, timers de sessão, regras acionadas por app — mas todos eles funcionam através da mesma primitiva de assertion IOKit de sleep por inatividade que o caffeinate usa. Nenhum deles sobrepõe o clamshell sleep: uma tampa fechada na bateria continua colocando o Mac para dormir sob o Amphetamine ou o KeepingYouAwake exatamente como faria sob um caffeinate -i puro. Isso não é esses apps deixando a desejar em algum recurso — sobrepor o sleep de fechar a tampa exige a escalada do pmset disablesleep (ou uma configuração de clamshell com monitor externo), não um wrapper de assertion mais elegante.
O que um workflow de IA com a tampa fechada realmente precisa para ser mais seguro
Ligar o disablesleep manualmente leva um job até o fim da noite, mas "fica acordado não importa o quê" é o alvo errado para algo rodando com a tampa fechada, na bateria, possivelmente sem supervisão. O que esse ajuste realmente precisa em cima é uma limpeza confiável e limites que respeitem a bateria e o calor.


Sobre a limpeza: o LidRun combina ativar o disablesleep com desativá-lo de novo a cada stop, a cada saída e a cada encerramento normal, e — depois que você aprova o helper privilegiado dele — faz isso sem pedir senha de administrador toda vez. Se o app for encerrado à força antes de conseguir limpar, um pequeno arquivo de heartbeat registra que o Closed-Lid estava ativo; na próxima vez que o LidRun abrir, ele verifica esse estado deixado para trás e reseta o disablesleep para 0. Esse reset acontece no próximo lançamento, não no instante em que a falha ocorre — vale saber disso em vez de presumir.
Sobre a bateria: o keep-awake para automaticamente abaixo de um limite que você define, 20% por padrão e ajustável entre 15% e 50%. Por baixo disso existe um piso de emergência separado de force-sleep — 4% por padrão, ajustável entre 4% e 8% — que atua independentemente do ajuste de auto-stop, porque o macOS precisa de alguma margem para realmente concluir o sleep antes que a bateria acabe.
Sobre o calor: quando o próprio sinal térmico (grosseiro) do macOS relata que o chip está criticamente quente, o LidRun desativa o modo Closed-Lid por padrão e explica o motivo — o Mac esquentou demais, abra a tampa ou melhore a ventilação — em vez de deixar um Mac lacrado e fechado continuar cozinhando. Isso é um recuo de segurança, não uma afirmação de que um Mac fechado não pode superaquecer; a regra de fundo continua sendo manter um Mac em funcionamento ventilado.
Também existem modos charging-only e de timer para execuções em que você prefere que a assertion exista só enquanto estiver na tomada, ou que expire sozinha depois de uma janela fixa, em vez de depender da sua memória para desligá-la. Juntando tudo, essa é a forma da promessa: agente rodando, fica acordado; agente terminou, ou a execução ficou insegura, libera e deixa o Mac dormir. Não é um wake lock cego brigando com a bateria e o sensor térmico — a segurança vence a conveniência quando as duas entram em conflito.
Usando o caffeinate (ou o Amphetamine) e o LidRun juntos
Isso continua não sendo caffeinate contra LidRun. O caffeinate é excelente na tarefa para a qual foi criado, e muitos workflows nunca precisam de mais do que aquela linha única — o mesmo vale para o Amphetamine, o KeepingYouAwake ou o Lungo, para manter o Mac acordado com a tampa aberta com uma interface de menu bar mais agradável.
Se você mantém a tampa aberta, caffeinate -i (ou qualquer um desses apps que você já goste) costuma ser a resposta mais simples. Se você fecha a tampa em execuções longas de IA e desenvolvimento e quer proteções de bateria e temperatura em volta disso, essa é a lacuna específica que o LidRun preenche.
Muita gente usa os dois: caffeinate para tarefas rápidas e pontuais no terminal, LidRun para as execuções sem supervisão com a tampa fechada, onde esquecer de desligar um ajuste que vale para o sistema inteiro realmente importa.
O LidRun mantém seu trabalho rodando com a tampa fechada, com proteção de bateria e temperatura embutida.
Já tem o LidRun? Leia o guia de configuração →
Novo no LidRun? Veja os preços →
Perguntas frequentes
Não sozinho. O caffeinate bloqueia o sleep do sistema por inatividade; fechar a tampa aciona o clamshell sleep, que nenhuma assertion de sleep por inatividade — incluindo a do caffeinate — consegue tocar. Para isso, você precisa do caminho pmset disablesleep (ou de um monitor externo ativamente sustentando um verdadeiro desktop de clamshell).
De jeito nenhum. É uma ferramenta nativa confiável e a escolha certa para muitas necessidades de manter o Mac acordado com a tampa aberta. O ponto aqui é escopo, não qualidade: ele nunca foi feito para lidar com a tampa fechada, e a própria man page deixa isso claro — até a flag mais forte dele, -s, só é válida na tomada e nunca menciona a tampa.
É o comando real e documentado: configure para 1 antes de fechar a tampa, volte para 0 quando terminar. Funciona, e para um único job noturno, rodá-lo manualmente é tranquilo. O risco é que ele é global e persistente — fica ativo até você desligá-lo explicitamente ou reiniciar o Mac, então uma limpeza esquecida, ou uma falha antes de você chegar lá, deixa o Mac incapaz de dormir com a tampa fechada até você perceber e corrigir.
Não além do que o caffeinate consegue. São boas ferramentas de menu bar para manter o Mac acordado, construídas sobre a mesma primitiva de assertion de sleep por inatividade, e nenhuma delas sobrepõe o clamshell sleep na bateria. Uma tampa fechada ainda coloca o Mac para dormir sob qualquer uma delas, a menos que o pmset disablesleep, ou uma configuração de clamshell com monitor externo, também esteja em jogo.
O toggle sendo desligado de forma confiável, inclusive depois de uma falha; um piso de bateria para que uma execução longa e sem supervisão não drene a bateria até zero; um recuo térmico para que um Mac lacrado e fechado não continue empurrando calor; e, idealmente, opções de charging-only ou timer para você não depender da memória para desligar isso.
Sim. Os dois convivem bem — caffeinate para tarefas rápidas, envolvidas em comando, com a tampa aberta; LidRun para as execuções com a tampa fechada e sem supervisão, onde a limpeza do disablesleep e as proteções de bateria e temperatura importam.