Anthropic supprime le mode programmatique de Pro/Max — la parade node-pty + tmux
Mike Codeur
![]()
Anthropic nous supprime encore un avantage de l'abonnement Pro et Max.
À partir du 15 juin 2026, le mode programmatique de Claude Code bascule sur le pool de facturation API. Plein tarif au token, plus aucune couverture par l'abonnement. C'est la suite logique d'une série de restrictions qui touche en silence celles et ceux qui construisent autour de Claude Code.
Pour les développeurs qui utilisent Claude Code à la main, en interactif, rien ne change. Pour ceux qui automatisent, l'addition arrive vite.
Ce qui change concrètement le 15 juin
Anthropic sépare la facturation de Claude Code en deux pools distincts.
Le pool subscription (Pro, Max 5x, Max 20x) couvre uniquement le mode interactif. Le binaire claude lancé dans un terminal, avec un humain derrière le clavier.
Le pool Agent SDK credits couvre tout le reste. claude -p, l'Agent SDK, les GitHub Actions, les crons, les tâches planifiées, et tout pipeline qui pilote Claude sans humain.
| Plan | Crédits Agent SDK offerts par mois |
|---|---|
| Pro | 20 $ |
| Max 5x | 100 $ |
| Max 20x | 200 $ |
Une fois les crédits offerts consommés, l'addition continue au tarif API plein. Pas de soft cap, pas d'alerte, pas de pause forcée.
Qui est concerné, et qui ne l'est pas
Le changement crée deux mondes distincts.
Utilisateurs interactifs : si ton usage de Claude Code se résume à ouvrir un terminal, lancer claude et discuter avec lui pour coder, rien ne change. Ton abonnement Max couvre tout comme avant.
Builders et tout pipeline agentique : si tu construis autour de Claude Code, la facture bascule sur le pool API.
Sont touchés notamment :
- Les Agentic OS construits autour de Claude Code (OpenClaw, AgentOS, Quivr 247)
- Les solutions de remote control type Hermes
- Tous les crons et tâches planifiées qui lancent
claude -p - Les pipelines CI/CD qui appellent Claude
- Tout outil qui pilote Claude sans TTY (pipe stdin, headless)
Le problème de ce changement, c'est qu'il est silencieux. Tu lances ton script comme d'habitude, il marche, et la facture s'accumule en arrière-plan.
L'exemple qui fait peur : 1 800 $ en deux jours
Un développeur a documenté sur GitHub avoir reçu une facture de 1 800 $ en deux jours simplement parce qu'il avait laissé un cron claude -p tourner toutes les heures. Il avait son ANTHROPIC_API_KEY exporté dans son environnement, et Claude a basculé silencieusement sur le pool API sans aucun warning.
Multiplie par le nombre de scripts oubliés dans des crons un peu partout, et l'addition explose vite.
Pourquoi ça marche comme ça : la détection TTY
La bascule entre interactif et programmatique est faite côté client, dans le binaire Claude Code, pas côté serveur Anthropic.
Au démarrage, Claude regarde si son stdin et stdout sont connectés à un vrai terminal (TTY).
- TTY détecté → mode interactif → token OAuth de l'abonnement
- Pas de TTY → mode programmatique → token API
C'est précisément cette détection qui ouvre la porte à la solution.
La solution : node-pty + tmux
Si la détection se fait côté client, il suffit de fournir à Claude un vrai terminal depuis du code, et Claude reste sur le pool de l'abonnement.
Deux briques permettent de monter ça proprement.
node-pty
node-pty est une bibliothèque Node officielle maintenue par Microsoft. C'est elle qui fait tourner les terminaux intégrés de VS Code, de Hyper et de la plupart des "terminaux dans une app".
Elle expose une API simple :
import * as pty from 'node-pty';
const shell = pty.spawn('claude', [], {
name: 'xterm-256color',
cols: 200,
rows: 50,
cwd: process.cwd(),
env: { ...process.env, TERM: 'xterm-256color' }
});
shell.onData((data) => process.stdout.write(data));
shell.write("Écris-moi un hello world en Rust\r");Cinq lignes utiles. Claude est lancé dans un vrai pseudo-terminal. Il voit un TTY. Il reste en mode interactif. Il facture l'abonnement.
tmux
tmux est un serveur de sessions terminal séparé du processus Node. Il tourne au niveau du système, owned par init ou systemd.
L'intérêt : si ton processus Node crashe, si le SSH coupe, si la machine redémarre, la session Claude lancée dans tmux continue. Tu te reconnectes plus tard avec tmux attach, et tu retrouves exactement où tu en étais.
C'est exactement ce que faisait Claude Code avec claude -p avant le 15 juin, mais sans la facture API.
Quand choisir node-pty ou tmux

La règle simple :
| Contexte | Bon choix | Pourquoi |
|---|---|---|
| MVP local, dev rapide | node-pty | Simple à coder, live stream direct via onData |
| Prod, VPS, sessions longues | tmux | Sessions qui survivent au crash, reconnect depuis n'importe où |
| Pipeline Next.js + UI | node-pty + tmux | Le meilleur des deux mondes |
Dans la pratique, les solutions sérieuses (Quivr 247, AgentOS, OpenClaw) utilisent les deux en combinaison.
Architecture complète d'un agent PTY
Pour une solution prod-ready avec UI temps réel, l'architecture qu'on retrouve partout est la suivante.
- Browser envoie un POST au backend avec le prompt
- API route Next.js récupère ou démarre le PTY pour cet agent
- PTY Manager maintient une
Map<agent_id, runtime>en mémoire - Child PTY lance
claudedans un pseudo-terminal réel - Claude écrit son transcript dans
~/.claude/projects/.../sid.jsonl, qui devient la source de vérité unique - JSONL Tail lit ce fichier en append toutes les 400 ms
- SSE endpoint broadcast chaque nouvelle ligne aux clients connectés
- EventSource côté browser réactualise l'UI en temps réel
L'astuce centrale : ne pas utiliser pty.onData pour piloter le state React. Passer par le JSONL de Claude. Cela donne trois propriétés essentielles :
- Survit aux HMR Next.js (le tail reprend là où il en était)
- Plusieurs clients peuvent se connecter au même tail
- Cohérence avec
claude /resumequi utilise déjà ce JSONL
Limites honnêtes du loophole
Il faut dire les choses telles qu'elles sont. Cette solution est un contournement, pas une faille officielle.
Loophole précaire. Anthropic peut ajouter une vérification supplémentaire à tout moment. Vérification du parent process, du device, de patterns de timing. Rien ne garantit que ça tient six mois.
Les limites de l'abonnement s'appliquent toujours. Tu restes capped par les fenêtres 5h de Max. Tu changes de pool de facturation, pas de capacité.
Pas de structured output. Pas de --json-schema, pas de tool callbacks programmatiques. Tu lis du texte terminal brut. Pour les pipelines qui ont besoin de structured output, il faut parser côté client.
OAuth one-shot requis. claude login doit avoir tourné une fois sur la machine pour que le token soit dans le keychain.
Récapitulatif
Anthropic n'a pas tué le mode programmatique. Il l'a juste basculé sur un pool de facturation séparé, plein tarif au token.
Pour continuer à automatiser Claude Code sans toucher ce pool, deux outils techniques suffisent. node-pty pour le pseudo-terminal réel, tmux pour la persistance. C'est ce qu'utilisent en silence toutes les solutions Agentic OS sérieuses depuis plusieurs semaines.
Dans la vidéo du jour, je détaille l'architecture complète, le code minimal pour la mettre en place, et les limites honnêtes du loophole.
🎁 Télécharger le PTY Toolkit — les 2 prompts ready-to-paste pour Claude Code (version minimale et version Next.js complète), le diagramme excalidraw éditable, et la checklist de vérification OAuth.
📩 Newsletter The Agentic Dev — chaque semaine, les workflows et outils Claude Code que j'utilise vraiment.