Vous payez déjà Claude Pro/Max : Hermes peut désormais s'en servir


Vous avez un abonnement Claude Max et vous utilisez claude dans le terminal tous les jours. Tout naturellement, vous voulez Hermes sur le même forfait : l’agent qui se souvient des choses d’une session à l’autre, fonctionnant sur le quota que vous payez déjà. Puis l’assistant d’installation vous demande une clé API, vous achetez du crédit à l’usage pour passer la porte, et à la fin du mois vous payez les deux — avec deux enveloppes distinctes. Cette gêne a désormais une réponse officielle : brancher Hermes sur l’exécutable claude officiel lui-même.

Ce que fait réellement le plugin

Le plugin s’appelle Claude Subscription DirectSDK (Experimental) et s’installe sous le nom claude-subscription-directsdk-experimental. Il pilote l’exécutable officiel Claude Code non modifié comme client de modèle à portée de requête, donc le travail s’exécute sur votre abonnement Claude Pro/Max — tandis que Hermes garde sa propre boucle d’agent : outils, politique d’approbation, compaction, mémoire et skills restent du côté Hermes.

Le nom est un peu trompeur. Malgré « DirectSDK », l’implémentation parle directement le protocole natif stream-json et n’exige pas le paquet Python Agent SDK. Le plugin déclare sa dépendance au binaire claude dans plugin.yaml, sous external_dependencies, mais ne détient aucun credential : l’authentification appartient à la CLI officielle, et le plugin n’ouvre, ne copie, ne rafraîchit ni n’affiche jamais ses fichiers de credentials. Aucun repli silencieux vers HTTP + clé API.

Ce qu’il lui faut :

  • Hermes Agent 0.21.4 ou plus récent (ou main à partir de 118984d7a02f, la moitié cœur étant dans la PR #117451). Sur un Hermes plus ancien, le plugin échoue à se charger avec un avertissement clair Failed to load user provider plugin, au lieu de fonctionner à moitié.
  • Python 3.10+ sous Linux, macOS ou Windows. L’exécution native se fait dans son propre groupe de processus et une annulation tue tout l’arbre, si bien que l’enfant node derrière le shim npm ne survit jamais à une requête annulée.
  • La CLI officielle Claude Code, installée et connectée : npm install -g @anthropic-ai/claude-code, puis claude auth login.

Le plugin est explicite sur chaque chemin où claude manque : au chargement il journalise un avertissement et reste enregistré, pour que l’installation puisse expliquer ce qui manque ; hermes model s’arrête sur l’indication d’installation sans rien écrire dans la configuration ; une requête échoue immédiatement avec la même indication, au lieu d’une trace Popen.

Installer et sélectionner

# 1) la CLI officielle (le plugin ne stocke aucun credential)
npm install -g @anthropic-ai/claude-code
claude auth login

# 2) installation depuis le catalogue de plugins Hermes (figé, audité)
hermes plugins install claude-subscription-directsdk

# ou directement depuis GitHub (suit main)
hermes plugins install NousResearch/hermes-plugin-claude-subscription-directsdk

# 3) le sélectionner
hermes model          # choisissez "Claude Subscription DirectSDK (Experimental)"

Les installations par profile vont sous ~/.hermes/profiles/<profile>/plugins/. Le plugin déclare kind: model-provider, donc la découverte de providers l’importe directement — aucune entrée plugins.enabled n’est nécessaire.

Pour une exécution unique :

hermes --provider claude-subscription-directsdk-experimental -m sonnet

La configuration persistante est la paire de provider ordinaire :

model:
  provider: claude-subscription-directsdk-experimental
  default: sonnet

Deux variables d’environnement comptent dans les projets réels : CLAUDE_CONFIG_DIR (ou la variable côté plugin CLAUDE_SUBSCRIPTION_DIRECTSDK_CONFIG_DIR) pour pointer vers un répertoire d’authentification CLI géré séparément, et CLAUDE_SUBSCRIPTION_DIRECTSDK_COMMAND pour un binaire en dehors du PATH. Une dernière chose à savoir : si l’environnement de lancement porte un ANTHROPIC_API_KEY hérité, un endpoint Anthropic personnalisé ou une surcharge de backend cloud, le chemin client Hermes refuse avant de lancer quoi que ce soit — l’erreur nomme les variables en conflit sans imprimer leurs valeurs. Supprimez ces surcharges quand vous voulez OAuth.

Un appel Hermes, une requête amont : le relais d’admission

C’est la partie qui mérite d’être comprise. Claude Code natif 2.1.263 peut tenter des générations supplémentaires même avec --max-turns 1 et les retries HTTP désactivés. Laissé à lui-même, un seul appel Hermes pourrait signifier deux requêtes amont, doublant discrètement l’usage comme le coût.

Le plugin intercale donc un relais à portée de requête : il transmet uniquement la première requête Messages et rejette localement les tentatives suivantes. Hermes reçoit la première réponse amont complète, avec son usage réel et sa raison d’arrêt native, et une reprise native bloquée ne transforme pas une réponse complète en exception — les flux tronqués et les erreurs HTTP amont restent des échecs.

Les chiffres de qualification prouvent que la frontière d’admission tient : une revue intégrée adossée à l’abonnement a bouclé sept appels Hermes avec exactement sept requêtes amont, douze exécutions d’outils et douze résultats d’outils durables. Le contexte est passé de 138 498 à 165 697 tokens, les lectures de cache de suivi ont atteint en moyenne 97,13 %, et la comptabilité native a rapporté 0,8793728 $ en équivalent prix catalogue.

L’isolation est construite de la même manière : chaque chat.completions.create démarre un processus neuf dans un répertoire temporaire privé, avec les outils, skills et sources de réglages natifs désactivés ; le MCP n’annonce que l’inventaire d’outils Hermes courant, avec des callbacks inertes et une exécution refusée par le dontAsk natif ; le prompt système et les champs de génération passent par des fichiers privés pour éviter la limite de longueur par argument du système d’exploitation. Les champs d’authentification et d’identité ne sont jamais remplacés.

Facturation : le prix catalogue n’est pas une facture

La formulation officielle est ici volontairement prudente, et il vaut la peine de la garder telle quelle en tête. Quand chaque modèle rapporté porte costBasis: list et que le total est fini et non négatif, Hermes enregistre ce montant comme un équivalent estimé au prix catalogue de l’API — ce n’est pas votre facture d’abonnement ni une facture d’usage supplémentaire, ce n’est jamais marqué comme gratuit ou inclus, et ce n’est jamais remplacé par des prix d’alias devinés. Une comptabilité finale manquante ou invalide reste inconnue, et une requête interrompue ne doit pas être lue comme un travail gratuit ou à zéro token.

Ce qui se résume en deux phrases : l’éligibilité de l’abonnement et les réglages d’usage supplémentaire relèvent de votre compte et du service natif — désactivez l’usage supplémentaire dans le compte si vous ne voulez pas de facturation de dépassement ; et une estimation native au prix catalogue ne prouve pas une facturation d’abonnement.

Deux vrais pièges de cache (et comment ils ont été corrigés)

Pour tout design du type « envelopper une CLI », le cache de prompt est précisément là où ça dérape. Le plugin documente deux qualifications de contexte long, et elles méritent d’être lues ensemble.

Première : une vraie tâche de revue Sonnet 5 a envoyé 187 049 tokens d’entrée à sa première requête, et le tour d’outil suivant n’a lu que 6 989 des 190 840 tokens d’entrée depuis le cache (3,66 %), réécrivant 183 849 tokens dans le cache d’une heure. Les tests à requête identique à 179K tokens avaient passé — ils n’avaient tout simplement jamais exercé cette frontière de rejeu.

La cause était le rappel natif de budget de tokens injecté dans le contexte : Hermes possède les budgets et reconstruit ce rappel à travers la frontière de cache pendant le rejeu, si bien que le préfixe cessait d’être stable. Le correctif a été de désactiver le rappel natif — aucun marqueur de cache supplémentaire, aucun changement de TTL. Après quoi : une revue complète de sept appels avec dix exécutions d’outils réelles a fait passer le contexte de 187K à 212K, avec des requêtes de suivi à 97,99 % de lectures de cache en moyenne (85,45 % en incluant le démarrage à froid) et 1,1030034 $ de comptabilité native au prix catalogue.

Lisez les deux ensemble et la conclusion est : le cache peut être amené à fonctionner, et les charges au-delà d’environ 187K de contexte méritent d’être mesurées avant de s’engager. Notez aussi qu’il s’agit de résultats Sonnet 5 — Fable 5.1 sur le même compte exigeait des crédits d’usage payants et n’a pas été exercé.

Limites et mises en garde

  • C’est une version de revue, pas une promesse de parité totale ni de maturité de production. La version qualifiée de Claude Code natif est la 2.1.263 ; les accusés de rejeu et le comportement d’extra-body sont des interfaces sensibles à la version.
  • Les noms d’outils passent par mcp__hermes__, et les noms d’origine doivent être des identifiants ASCII uniques, alphanumériques / underscore / tiret, de 50 caractères au plus.
  • Le texte arrive en flux progressif, mais un lot d’outils complet n’est publié qu’une fois le tour de l’assistant stabilisé (message_stop natif, usage final, sortie du processus). Hermes applique ensuite ses propres hooks, approbations, outils et persistance.
  • L’autocompaction native est désactivée pour que Hermes possède la compaction ; ce n’est pas la même chose que la parité pour chaque transformation d’historique ou chaque rejeu signé inter-modèles.
  • Le routage auxiliaire et de repli reste à la charge de l’hôte : configurez-les explicitement s’ils doivent eux aussi utiliser l’abonnement. Ce provider ne modifie pas silencieusement vos autres providers sélectionnés.

En résumé

Si vous avez à la fois un abonnement Claude Pro/Max et Hermes, ce plugin transforme « acheter une seconde enveloppe de crédit API » en choix : trois commandes d’installation, on choisit le provider, et le reste est le protocole natif de la CLI officielle qui fait le travail. Deux choses seulement exigent vraiment votre intervention — le réglage d’usage supplémentaire sur le compte, et votre propre environnement (supprimez les surcharges héritées comme ANTHROPIC_API_KEY pour que le chemin client ne refuse pas au démarrage). Pour savoir quelle release porte la moitié cœur dont dépend le plugin, lisez ce que la v0.21.4 a réellement livré ; pour le travail quotidien sur les modèles, voyez la référence de la commande hermes model et les hooks de plugins provider.