Documentation / Commandes

Le proxy LLM

Mis à jour le

TL;DR — `tokenade llm-proxy install --agent <name>` fait pointer un agent vers un proxy local (à partir de 127.0.0.1:8787, un port par agent) qui replie les sorties d'outils dans chaque requête suivante et masque les identifiants. Ajoutez `--autostart` pour qu'il survive aux redémarrages. `tokenade install` ne le met en place de lui-même que là où les hooks ne suffisent pas, comme Codex tant que ses hooks ne sont pas approuvés.

tokenade llm-proxy est un proxy HTTP local entre votre agent et son fournisseur de modèle. À l'aller, il replie les résultats d'outils déjà présents dans l'historique de la conversation, retire les doublons exacts et masque les identifiants ; au retour, il lit la consommation de tokens annoncée par le fournisseur lui-même. C'est la solution de repli pour les agents, ou les parties d'agents, que les hooks ne peuvent pas atteindre.

Sa place

Tokenade atteint un agent par le meilleur canal disponible, dans cet ordre :

  1. les hooks (ou un plugin passerelle), qui agissent avant même l'envoi d'un résultat d'outil ;
  2. l'enveloppe shell (tokenade wrap) ;
  3. le proxy MCP (mcp-wrap) ;
  4. le proxy LLM.

Le proxy LLM arrive en dernier parce qu'il ne peut pas changer le tour où un résultat brut arrive pour la première fois : il retire le coût de ce résultat de tous les tours suivants. Quand les hooks d'un agent fonctionnent, le proxy ne couvre que ce qu'ils ne font pas, et rien n'est fait deux fois.

Utilisation

tokenade llm-proxy --upstream <url> [--listen 127.0.0.1:8787] [--agent <name>]
[--remote] [--no-compaction]

tokenade llm-proxy install --agent <name> [--listen <addr>] [--autostart]
tokenade llm-proxy uninstall --agent <name>
tokenade llm-proxy status

Alias : llm_proxy.

OptionDéfautEffet
--upstream <url>URL de base du fournisseur. Sans elle, llm-proxy sert tous les agents enregistrés par install
--listen <addr>127.0.0.1:8787Adresse d'écoute. install attribue un port à chaque agent (8787, 8788, …)
--agent <name>Agent servi par ce port ; les économies lui sont attribuées
--remotedésactivéObligatoire pour écouter ailleurs qu'en local. Le processus détient votre clé d'API : une écoute hors boucle locale est joignable depuis d'autres machines
--no-compactiondésactivéRelaie sans replier
--autostartdésactivéAvec install : écrit la définition de service de la plateforme et affiche les commandes qui l'activent
--enabledésactivéAvec install --autostart : exécute aussi ces commandes

Faire pointer un agent vers le proxy

tokenade llm-proxy install --agent aider --autostart

install annonce d'abord ce qu'il va changer et où partira le trafic, puis réécrit la configuration de l'agent pour qu'il passe par le proxy local :

AgentCe qui change
Codex (CLI et app)~/.codex/config.toml : model_provider = "tokenade" et un base_url dans [model_providers.tokenade]
Claude CodeANTHROPIC_BASE_URL dans le bloc env de settings.json. Sert uniquement à des chiffres de coût exacts ; les requêtes sont relayées telles quelles, car les hooks font déjà le repli
Qwen Code, OpenClawOPENAI_BASE_URL dans les réglages de l'agent
Copilot CLICOPILOT_PROVIDER_BASE_URL
CursorCURSOR_API_ENDPOINT dans le profil de votre shell
AutresAider, OpenCode, Kilo Code, Grok, Cline, Hermes, Droid, Pi, Copilot dans VS Code, Devin Desktop : leur propre fichier de configuration

Claude Desktop, Claude Cowork et l'app Codex en tant que cible distincte sont refusés. L'app Codex partage ~/.codex/config.toml avec la CLI : --agent codex couvre donc les deux.

uninstall --agent <name> remet le point d'accès d'origine de l'agent.

$ tokenade llm-proxy status
aider ~/.aider.conf.yml on 127.0.0.1:8787 → https://api.openai.com/v1
grok ~/.grok/config.toml on 127.0.0.1:8788 → https://api.x.ai/v1
qwen-code ~/.qwen/.env on 127.0.0.1:8789 → https://openrouter.ai/api/v1

aider
(— = not supported · partial = partly · yes = supported)
Command compaction partial → yes
Web search partial → yes
…

status liste chaque agent installé, son port et son fournisseur, et les fonctions que le proxy ajoute à ce que l'agent a déjà.

Mise en place automatique

tokenade install, tokenade upgrade et la vérification quotidienne en arrière-plan installent le proxy d'eux-mêmes, mais seulement pour les agents où il apporte ce que l'agent ne peut pas obtenir autrement (par exemple Codex tant que ses hooks ne sont pas approuvés). Trois garde-fous s'appliquent :

  • un agent déjà couvert par ses hooks n'est pas touché ;
  • le proxy est démarré puis interrogé ; s'il ne répond pas, la configuration de l'agent est remise exactement comme avant ;
  • tokenade llm-proxy uninstall --agent <name> est mémorisé (~/.tokenade/llm-proxy-declined) : la mise en place automatique ne revient jamais sur votre choix. Relancer llm-proxy install pour cet agent annule ce refus.

Démarrage automatique

Une URL de base qui pointe vers un proxy arrêté fait échouer chaque tour : le proxy doit donc tourner dès que l'agent tourne. Avec --autostart, le proxy de chaque agent reçoit son propre service :

SystèmeService
LinuxUnité systemd utilisateur ~/.config/systemd/user/tokenade-llm-proxy*.service. Lancez loginctl enable-linger pour qu'elle survive à un redémarrage sans ouverture de session
macOSLaunchAgent (plist) dans ~/Library/LaunchAgents
WindowsTâche planifiée

Tokenade affiche les commandes qui activent le service ; passez --enable pour qu'il les exécute. Il ne lance jamais sudo lui-même : toute commande qui demande des droits d'administrateur vous est affichée pour que vous la lanciez. Ajouter --autostart à un agent déjà installé conserve la configuration existante et ajoute l'entrée de démarrage.

Codex est configuré automatiquement

Codex n'exécute que les hooks que vous avez approuvés dans Codex. tokenade install marque les hooks Codex de Tokenade comme approuvés (tokenade codex-trust le refait), et installe aussi le proxy LLM pour Codex, CLI et app de bureau, comme décrit plus haut. Tant que les hooks ne tournent pas réellement, le proxy assure la compaction, le masquage des identifiants, la note de style et les chiffres d'économies ; dès qu'ils tournent, le proxy ne fait plus que mesurer. Codex reste connecté avec votre compte ChatGPT à travers le proxy.

Ce que le proxy fait d'une requête

  • Comprend les formats Anthropic Messages, OpenAI Chat et OpenAI Responses. Tout le reste est relayé octet pour octet.
  • Replie les résultats d'outils de l'historique sortant avec le compacteur de leur commande, et remplace la répétition exacte d'un résultat précédent par un court renvoi.
  • Masque les identifiants dans chaque résultat d'outil relayé, replié ou non.
  • N'ajoute la note de style qu'aux agents qui ne la reçoivent pas autrement.
  • En cas d'erreur interne, relaie votre requête d'origine.
  • Sans licence valide, ou au-delà du quota de votre offre, il se contente de masquer les identifiants.

Les économies sont comptées une fois par bloc replié, au premier envoi, puis prudemment comme relectures évitées sur les requêtes suivantes. Voir Comment les économies sont mesurées.

Pièges

  • Si le proxy est arrêté, les requêtes de l'agent échouent. Vérifiez tokenade llm-proxy status, démarrez le service, ou lancez tokenade llm-proxy uninstall --agent <name> pour revenir au point d'accès direct.
  • Restez en boucle locale. --remote expose un processus qui détient la clé de votre fournisseur.
  • Code de sortie 2 quand il n'y a rien à installer pour cet agent, ou que la configuration ne peut pas être préparée.

Voir aussi