A cena do crime

Zaragoza, cafeteria do Hotel Pilar Plaza. Um café com leite, vista para a basílica, e eu aqui com o novinho MacBook Air M3 pronto para trabalhar umas duas horas com Claude Code antes de uma reunião.

Duas horas depois: bateria em 15%. Alerta vermelho. Pânico.

Mas como? Se eu só estava num terminal digitando código. Nem vídeo, nem Zoom, nem nada que justificasse esse consumo absurdo.

Abro o Monitor de Atividade, aba Energia, e lá está o culpado: Ghostty, com um consumo acumulado de 3.600 nas últimas 12 horas. Para você ter uma ideia, o Brave Browser consumiu 125. Zoom com vídeo, 99. Claude (o app de desktop), 46.

Meu terminal — uma aplicação que mostra texto — consumiu 30 vezes mais que um navegador web.

A ironia das ironias

Para um momento para pensar no que acabei de escrever.

Um terminal. Um emulador de VT100. Uma tecnologia de 1978. Literalmente uma aplicação cujo trabalho é mostrar letras numa tela, algo que um Commodore 64 fazia sem suar.

E em 2026, precisa de uma GPU para funcionar.

Traduzindo: estamos usando o poder de processamento que poderia renderizar Toy Story em tempo real… para mostrar ls -la.

O terminal VT100 original consumia 30W incluindo o monitor CRT. Meu MacBook Air, com seu chip de última geração projetado especificamente para eficiência energética, consome mais mostrando um git status do que executando uma videochamada.

É como usar uma Ferrari para ir à padaria. Mas pior, porque a Ferrari pelo menos faz sentido se você quer ir rápido. Aqui não há nenhuma vantagem prática: o texto fica exatamente igual.

Por que diabos um terminal precisa de GPU?

Ghostty, Alacritty, Kitty e companhia fazem parte de uma nova geração de terminais “acelerados por GPU”. A promessa: renderização mais suave, melhor performance com muito output, fontes mais nítidas.

A realidade: consomem bateria como se não houvesse amanhã para mostrar exatamente a mesma coisa que o Terminal.app mostra usando a CPU.

O problema não é só a renderização. É que quando você tem o Claude Code rodando, há output constante: spinners, logs, resultados de ferramentas. Cada caractere que aparece na tela dispara o pipeline de renderização da GPU. O Metal se ativa, os shaders fazem seu trabalho, os frames são compostos…

Para mostrar um ponto girando.

Como se não bastasse, esses terminais modernos não entram em “App Nap” corretamente. O macOS tem um sistema para pausar aplicações em segundo plano, mas se o terminal está mostrando um spinner animado, o sistema acha que está fazendo algo importante e o mantém ativo.

Solução para pobres: Terminal.app

A solução mais simples é a mais óbvia: use o Terminal.app.

Sim, o terminal que vem com o macOS. Aquele que parece que não mudou desde 2005. Aquele que não tem aceleração por GPU nem ligatures nem nenhuma dessas modernidades.

# Abra o Terminal.app e execute
claude

Funciona exatamente igual. O Claude Code não sabe nem se importa de qual terminal você o executa. E o Terminal.app:

  • Usa renderização por CPU (eficientíssima no Apple Silicon)
  • Entra em App Nap corretamente
  • Consome uma fração da bateria

É sexy? Não. Funciona? Perfeitamente.

Solução melhorada: iTerm2 com perfis

Se você não consegue viver sem seu terminal moderno, o iTerm2 tem uma opção que o Ghostty não tem: você pode desativar a renderização por GPU.

Passo 1: Criar perfil “Bateria”

  1. Abra o iTerm2
  2. Preferences → Profiles
  3. Duplique seu perfil atual (botão + embaixo à esquerda, depois Duplicate Profile)
  4. Nomeie o novo perfil “Battery”
  5. No perfil Battery: Terminal → desmarque “GPU Rendering”

Passo 2: Mudança manual

Quando trabalhar com bateria, simplesmente mude para o perfil:

Profiles → Battery (no menu do iTerm2)

Dois cliques. Seu terminal agora consome como um cidadão responsável.

Passo 3: Mudança automática (opcional)

Se quiser que a mudança seja automática, adicione isso ao seu .zshrc ou config.fish:

# Para zsh (~/.zshrc)
if [[ $(pmset -g batt | grep -c "Battery Power") -gt 0 ]]; then
    echo -e "\033]50;SetProfile=Battery\a"
fi
# Para fish (~/.config/fish/conf.d/iterm_battery.fish)
if test (pmset -g batt | grep -c "Battery Power") -gt 0
    echo -e "\033]50;SetProfile=Battery\a"
end

Toda vez que abrir uma nova aba, o iTerm2 verificará se você está na bateria e mudará para o perfil eficiente automaticamente.

Ghostty: o elefante na sala

E se eu quiser continuar usando o Ghostty?

Bom, não vai rolar uma solução elegante. O Ghostty não tem opção para desativar renderização por GPU. É GPU ou nada.

Você pode tentar:

  • Minimizar a janela quando não usar (força algo parecido com App Nap)
  • Reduzir animações na config (cursor-style-blink = false)
  • Desativar vsync se não se importar com tearing

Mas a realidade é que o Ghostty foi projetado para performance, não para eficiência. Se você trabalha regularmente na bateria, não é a ferramenta adequada.

# ~/.config/ghostty/config
# Tentativas desesperadas de reduzir consumo
cursor-style-blink = false
mouse-hide-while-typing = true

A reflexão

Tem algo profundamente irônico em tudo isso.

Em 1978, mostrar texto numa tela era trivial. Em 2026, conseguimos transformar isso numa tarefa que requer hardware de última geração e consome mais energia que uma videochamada intercontinental.

Chamam isso de progresso.

Da próxima vez que alguém te vender uma ferramenta “otimizada” e “moderna”, se pergunte: otimizada para quê? Porque se a resposta for “para as letras aparecerem 2 milissegundos antes às custas de queimar a bateria”, talvez o progresso esteja indo na direção errada.

Enquanto isso, o Terminal.app continua ali. Feio, chato, funcionando perfeitamente há 20 anos.

Às vezes o velho é velho por algum motivo. E às vezes, simplesmente funciona.

Este artigo foi escrito originalmente em espanhol e traduzido com a ajuda de IA.