La scène de crime

Zurich, café du Marriott. Un café crème, vue sur le lac, et votre serviteur avec son flambant neuf MacBook Air M3 prêt à bosser quelques heures avec Claude Code avant un rendez-vous.

Deux heures plus tard : batterie à 15%. Alerte rouge. Panique.

Mais comment ? Je n’étais que dans un terminal en train d’écrire du code. Ni vidéo, ni Zoom, rien qui justifie une telle consommation.

J’ouvre le Moniteur d’activité, onglet Énergie, et voilà le coupable : Ghostty, avec une consommation cumulée de 3'600 ces 12 dernières heures. Pour vous donner une idée, Brave Browser avait consommé 125. Zoom avec vidéo, 99. Claude (l’app de bureau), 46.

Mon terminal — une application qui affiche du texte — avait consommé 30 fois plus qu’un navigateur web.

L’ironie des ironies

Arrêtez-vous un instant pour réfléchir à ce que je viens d’écrire.

Un terminal. Un émulateur de VT100. Une technologie de 1978. Littéralement une application dont le boulot est d’afficher des lettres sur un écran, quelque chose qu’un Commodore 64 faisait sans broncher.

Et en 2026, ça a besoin d’un GPU pour fonctionner.

Dit en bon français : on utilise la puissance de calcul qui pourrait faire tourner Toy Story en temps réel… pour afficher un ls -la.

Le terminal VT100 original consommait 30W en incluant l’écran CRT. Mon MacBook Air, avec sa puce dernier cri conçue spécifiquement pour l’efficacité énergétique, consomme plus pour afficher un git status que pour exécuter un appel vidéo.

C’est comme prendre une Ferrari pour aller chercher le pain. Mais en pire, parce que la Ferrari au moins ça se justifie si vous voulez aller vite. Ici il n’y a aucun avantage pratique : le texte a exactement la même tête.

Pourquoi diable un terminal a-t-il besoin d’un GPU ?

Ghostty, Alacritty, Kitty et compagnie font partie d’une nouvelle génération de terminaux « accélérés par GPU ». La promesse : rendu plus fluide, meilleures performances avec beaucoup d’output, polices plus nettes.

La réalité : ils consomment de la batterie comme s’il n’y avait pas de lendemain pour afficher exactement la même chose que Terminal.app affiche en utilisant le CPU.

Le problème c’est pas que le rendu. C’est que quand vous avez Claude Code qui tourne, il y a de l’output constant : des spinners, des logs, des résultats d’outils. Chaque caractère qui apparaît à l’écran déclenche le pipeline de rendu du GPU. Metal s’active, les shaders font leur boulot, les frames se composent…

Pour afficher un point qui tourne.

Cerise sur le gâteau, ces terminaux modernes n’entrent pas correctement en « App Nap ». macOS a un système pour mettre en pause les applications en arrière-plan, mais si le terminal affiche un spinner animé, le système pense qu’il fait quelque chose d’important et le maintient actif.

Solution pour les fauchés : Terminal.app

La solution la plus simple est la plus évidente : utilisez Terminal.app.

Oui, le terminal qui vient avec macOS. Celui qui semble n’avoir pas changé depuis 2005. Celui qui n’a pas d’accélération GPU ni de ligatures ni aucune des modernités.

1
2
# Ouvrez Terminal.app et exécutez
claude

Ça marche exactement pareil. Claude Code ne sait pas et s’en fiche de savoir depuis quel terminal vous l’exécutez. Et Terminal.app :

  • Utilise le rendu par CPU (hyper efficace sur Apple Silicon)
  • Entre correctement en App Nap
  • Consomme une fraction de la batterie

C’est sexy ? Non. Ça marche ? Parfaitement.

Solution améliorée : iTerm2 avec profils

Si vous ne pouvez pas vivre sans votre terminal moderne, iTerm2 a une option que Ghostty n’a pas : vous pouvez désactiver le rendu GPU.

Étape 1 : Créer un profil « Batterie »

  1. Ouvrez iTerm2
  2. PreferencesProfiles
  3. Dupliquez votre profil actuel (bouton + en bas à gauche, puis Duplicate Profile)
  4. Nommez le nouveau profil “Battery”
  5. Dans le profil Battery : Terminal → décochez “GPU Rendering”

Étape 2 : Changement manuel

Quand vous bossez sur batterie, changez simplement de profil :

ProfilesBattery (dans le menu d’iTerm2)

Deux clics. Votre terminal consomme maintenant comme un citoyen responsable.

Étape 3 : Changement automatique (facultatif)

Si vous voulez que le changement soit automatique, ajoutez ça à votre .zshrc ou config.fish :

1
2
3
4
# Pour zsh (~/.zshrc)
if [[ $(pmset -g batt | grep -c "Battery Power") -gt 0 ]]; then
    echo -e "\033]50;SetProfile=Battery\a"
fi
1
2
3
4
# Pour 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

À chaque fois que vous ouvrez un nouvel onglet, iTerm2 vérifiera si vous êtes sur batterie et basculera automatiquement sur le profil efficace.

Ghostty : l’éléphant dans la pièce

Et si je veux continuer à utiliser Ghostty ?

Eh bien il n’y a pas de solution élégante. Ghostty n’a pas d’option pour désactiver le rendu GPU. C’est GPU ou rien.

Vous pouvez essayer :

  • Minimiser la fenêtre quand vous ne l’utilisez pas (force quelque chose qui ressemble à App Nap)
  • Réduire les animations dans la config (cursor-style-blink = false)
  • Désactiver vsync si le tearing ne vous dérange pas

Mais la réalité c’est que Ghostty est conçu pour la performance, pas pour l’efficacité. Si vous bossez régulièrement sur batterie, c’est pas l’outil qu’il vous faut.

# ~/.config/ghostty/config
# Tentatives désespérées de réduire la consommation
cursor-style-blink = false
mouse-hide-while-typing = true

La réflexion

Il y a quelque chose de profondément ironique dans tout ça.

En 1978, afficher du texte sur un écran était trivial. En 2026, on a réussi à transformer ça en une tâche qui nécessite du hardware dernier cri et consomme plus d’énergie qu’un appel vidéo intercontinental.

Ils appellent ça le progrès.

La prochaine fois que quelqu’un vous vend un outil « optimisé » et « moderne », demandez-vous : optimisé pour quoi ? Parce que si la réponse c’est « pour que les lettres apparaissent 2 millisecondes plus tôt au prix de cramer la batterie », peut-être que le progrès va dans la mauvaise direction.

En attendant, Terminal.app est toujours là. Moche, ennuyeux, marchant parfaitement depuis 20 ans.

Parfois ce qui est vieux est vieux pour une bonne raison. Et parfois, ça marche tout simplement.