En observant la façon dont mes agents IA (comme Claude Code) travaillent au quotidien, j’ai vite constaté à quel point les retours verbeux de la console encombrent inutilement le contexte. Un simple test unitaire qui échoue ou un dump de logs de 200 lignes peut rapidement saturer la mémoire de travail de l’agent. (Et entre nous, voir défiler des dizaines de lignes de rapports de progression pour un simple git push finit par coûter cher en tokens).
C’est pour résoudre ce problème précis que j’utilise RTK, un proxy CLI haute performance écrit en Rust. Distribué sous licence Apache 2.0, il intercepte et compresse les sorties de terminal de plus de 100 commandes courantes avant qu’elles ne soient lues par l’LLM, le tout avec une latence imperceptible de moins de 10 ms.
Ce qu’il faut retenir d’abord
- Réduction du bruit : RTK filtre et condense jusqu’à 90 % de la sortie brute de vos commandes Bash.
- Distinction importante : Cette réduction de 90 % concerne le volume de texte lu par l’agent, pas directement votre facture globale. Le coût de vos requêtes dépend aussi de vos prompts d’origine, de l’historique et des jetons générés en sortie.
- Estimation des jetons : RTK n’embarque pas de tokenizer pour rester ultra-léger. Les volumes de tokens affichés sont estimés de manière simple (nombre d’octets divisé par 4), ce qui donne une approximation fiable des gains de volume.
Comment fonctionne l’optimisation RTK
Sans RTK, l’agent IA envoie sa commande directement au terminal et reçoit la totalité de la sortie brute, souvent polluée de détails inutiles. Avec RTK, l’outil s’interpose en douceur :
Sans RTK :
Claude --[git status]--> shell --> git
^ |
+-------- sortie brute ----------+
Avec RTK :
Claude --[git status]--> RTK --> git
^ | |
+--- sortie filtrée ----+-------+
Pour compresser ces données sans faire perdre d’informations cruciales à l’IA, RTK applique quatre stratégies bien précises selon les commandes :
- Le filtrage intelligent : Suppression du bruit, des commentaires, des espaces superflus et du texte passe-partout.
- Le regroupement : Agrégation des données similaires (par exemple, regrouper les fichiers par dossier ou les erreurs par type).
- La troncature : Conservation du contexte utile uniquement en éliminant les redondances.
- La déduplication : Compression des lignes de log identiques en affichant un simple compteur d’occurrences.
Guide d’installation
Il existe plusieurs manières d’installer RTK sur sa machine. J’utilise personnellement la méthode Homebrew, mais d’autres options sont disponibles selon les environnements.
Via Homebrew (recommandé)
brew install rtk
Installation rapide (Linux et macOS)
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
Le script installe le binaire dans le dossier ~/.local/bin. Si ce n’est pas déjà fait, il faut ajouter ce chemin à votre variable d’environnement PATH :
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # ou ~/.zshrc
Via Cargo
cargo install --git https://github.com/rtk-ai/rtk
Une petite mise en garde : Il existe un autre projet nommé “rtk” (Rust Type Kit) publié sur crates.io. Si la commande de vérification rtk gain échoue après l’installation, c’est probablement que vous avez récupéré le mauvais paquet. Passez impérativement par la commande d’installation Git ci-dessus.
Binaires précompilés
Vous pouvez récupérer directement les archives depuis les releases du dépôt :
- macOS :
rtk-x86_64-apple-darwin.tar.gzourtk-aarch64-apple-darwin.tar.gz - Linux :
rtk-x86_64-unknown-linux-musl.tar.gzourtk-aarch64-unknown-linux-gnu.tar.gz - Windows :
rtk-x86_64-pc-windows-msvc.zip
Pour les utilisateurs de Windows, il suffit d’extraire l’archive et de placer le fichier rtk.exe dans un dossier inclus dans votre PATH (comme C:\Users\<votre_nom>\.local\bin). Attention à ne pas double-cliquer sur le fichier exécutable, car la fenêtre s’ouvrirait et se fermerait aussitôt.
Utilisez-le toujours depuis l’invite de commande, PowerShell ou Windows Terminal. Le système de hooks fonctionne nativement sous Windows ainsi que dans WSL.
Vérifier que tout fonctionne
rtk --version # Doit retourner "rtk 0.28.2"
rtk gain # Affiche le tableau de bord des gains
Mise en route rapide et configuration des agents
La première étape consiste à initialiser RTK pour votre assistant IA. Cette opération installe le hook global.
# Pour Claude Code ou GitHub Copilot (par défaut)
rtk init -g
# Pour Gemini CLI
rtk init -g --gemini
# Pour Codex (OpenAI)
rtk init -g --codex
# Pour Cursor
rtk init -g --agent cursor
# Pour Windsurf
rtk init -g --agent windsurf
# Pour Cline / Roo Code
rtk init --agent cline
# Pour Kilo Code
rtk init --agent kilocode
# Pour Google Antigravity
rtk init --agent antigravity
# Pour Kimi AI
rtk init --agent kimi
# Pour Pi
rtk init -g --agent pi
# Pour Hermes
rtk init --agent hermes
# Pour Factory Droid
rtk init -g --agent droid
Une fois l’initialisation terminée, redémarrez votre outil IA et faites un test simple, par exemple un git status. La commande sera interceptée et réécrite à la volée en rtk git status.
Note importante sur les outils intégrés : Le hook d’interception automatique ne s’applique qu’aux appels d’outils via le shell Bash. Les fonctionnalités natives de Claude Code (comme Read, Grep ou Glob) contournent ce hook.
Pour appliquer les filtres RTK à ces actions, utilisez plutôt les commandes shell classiques (comme cat, rg, find) ou appelez directement les commandes spécifiques de l’outil : rtk read, rtk grep ou rtk find.
Vue d’ensemble des optimisations par commande
Voici un aperçu de l’impact des filtres de RTK sur les commandes que vous utilisez au quotidien. Ces pourcentages mesurent la baisse de volume textuel renvoyé à l’agent.
Fichiers et recherche
rtk ls .: Génère un arbre de répertoires compact avec le décompte des fichiers au lieu d’une ligne détaillée par entrée.rtk read fichier.rs: Lecture intelligente de fichiers, mettant en avant la structure et les signatures de fonctions plutôt que l’intégralité du code.rtk read fichier.rs -l aggressive: Ne conserve que les signatures et masque les corps des méthodes.rtk smart fichier.rs: Produit un résumé heuristique du code en deux lignes.rtk find "*.rs" .: Renvoie une liste compacte des fichiers trouvés.rtk grep "pattern" .: Regroupe et affiche les résultats de recherche par fichier en tronquant les lignes trop longues.rtk diff fichier1 fichier2: Affiche un diff condensé (renvoie un code de sortie de 1 si les fichiers diffèrent).
Gestion de version (Git et GitHub)
rtk git status: Synthétise le statut des fichiers en les regroupant par état.rtk git log -n 10: Liste les commits sur une seule ligne (hash, auteur et sujet).rtk git diff: Élimine les en-têtes et réduit le contexte superflu.rtk git add: Réduit le retour à un simple “ok”.rtk git commit -m "msg": Renvoie une confirmation minimaliste de type “ok abc1234”.rtk git push: Renvoie simplement “ok main” au lieu de tout le processus de transfert.rtk git pull: Résume la mise à jour (ex: “ok 3 files +10 -2”).rtk gh pr list/rtk gh issue list: Présentation ultra-compacte des pull requests et des tickets.rtk gh pr view 42: Détails de la PR et état des vérifications.rtk gh run list: Liste simplifiée des workflows.
Exécution des tests (-90 % de volume moyen)
rtk jest/rtk vitest/rtk playwright test: Supprime le superflu des tests réussis et isole uniquement les erreurs de manière lisible.rtk pytest/rtk go test/rtk cargo test: Filtre les réussites, réduit les tracebacks et ne remonte que les échecs réels.rtk rake test/rtk rspec: Nettoyage des rapports de tests Ruby.rtk test <commande>/rtk err <commande>: Wrappers génériques pour intercepter uniquement les erreurs de n’importe quel processus.
Compilation et Linters (-80 % en moyenne)
rtk lint/rtk ruff check/rtk rubocop: Regroupement des avertissements par fichier et par règle.rtk tsc: Regroupe les erreurs TypeScript par fichier.rtk cargo build/rtk cargo clippy/rtk sbt compile: Isole uniquement les erreurs de compilation et élimine les bruits de fond.
Gestionnaires de paquets, Cloud et Containers
rtk pnpm list: Affiche un arbre de dépendances épuré.rtk aws ec2 describe-instances: Liste d’instances simplifiée au strict nécessaire.rtk aws lambda list-functions: Extrait le nom, le runtime et la mémoire allouée en masquant les variables secrètes.rtk docker ps/rtk kubectl pods: Tableaux d’état épurés contenant uniquement les colonnes essentielles.rtk docker logs <container>: Déduplication des lignes répétitives de vos journaux d’application.rtk pulumi preview: Élimination des en-têtes bruyants, des URL d’aperçu et des mesures de durée d’exécution.
Exemples de réduction
Pour mieux visualiser la différence, voici quelques comparaisons avant/après l’utilisation de RTK.
Exemple 1 : Liste de répertoires
# ls -la classique (45 lignes)
drwxr-xr-x 15 user staff 480 ...
-rw-r--r-- 1 user staff 1234 ...
...
# Avec rtk ls (12 lignes)
my-project/
+-- src/ (8 files)
| +-- main.rs
+-- Cargo.toml
Exemple 2 : Publication Git
# git push classique (15 lignes)
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
...
# Avec rtk git push (1 ligne)
ok main
Détails techniques de l’intégration par agent
Le tableau ci-dessous liste la manière dont RTK s’interface avec les différents assistants de développement du marché.
| Outil d’IA | Commande d’installation | Mécanisme d’intégration |
|---|---|---|
| Claude Code | rtk init -g | Hook PreToolUse (binaire natif) |
| GitHub Copilot (VS Code) | rtk init -g --copilot | Hook PreToolUse transparent |
| GitHub Copilot CLI | rtk init -g --copilot | PreToolUse avec suggestion de refus (limitation CLI) |
| Cursor | rtk init -g --agent cursor | Hook PreToolUse via hooks.json |
| Gemini CLI | rtk init -g --gemini | Hook BeforeTool |
| Codex | rtk init -g --codex | Instructions intégrées dans AGENTS.md et RTK.md |
| Windsurf | rtk init -g --agent windsurf | Fichier .windsurfrules restreint au projet |
| Cline / Roo Code | rtk init --agent cline | Fichier .clinerules restreint au projet |
| OpenCode | rtk init -g --opencode | Plugin TypeScript (tool.execute.before) |
| OpenClaw | S’installe via le gestionnaire de plugins | Plugin TypeScript (before_tool_call) |
| Pi | rtk init -g --agent pi | Extension globale en TypeScript (tool_call) |
| Hermes | rtk init --agent hermes | Plugin Python modifiant les commandes via rtk rewrite |
| Kilo Code | rtk init --agent kilocode | Règles de projet stockées dans rtk-rules.md |
| Google Antigravity | rtk init --agent antigravity | Règles de projet stockées dans antigravity-rtk-rules.md |
| Kimi AI | rtk init --agent kimi | Règles au niveau du projet via AGENTS.md |
| Factory Droid | rtk init -g --agent droid | Hook PreToolUse configuré dans hooks.json |
Le fonctionnement sous Windows s’est grandement simplifié depuis la version 0.37.2. Le hook s’exécute désormais sous forme d’un exécutable natif (rtk hook claude), ce qui évite de devoir installer un environnement de type Unix, Bash ou encore JQ.
Tout se passe de manière transparente sur l’invite de commandes Windows standard ou PowerShell.
Pour comparer la compatibilité entre Windows natif et WSL :
| Fonctionnalité | Windows Natif | WSL (Windows Subsystem for Linux) |
|---|---|---|
| Filtres (cargo, git, etc.) | Disponible | Disponible |
| Hook de réécriture auto | Oui (via binaire natif) | Oui (comportement identique à Linux) |
Installation simplifiée (rtk init -g) | Disponible | Disponible |
Suivi des gains (rtk gain) | Disponible | Disponible |
Mesure de la consommation et historique des gains
Pour savoir si l’outil est vraiment rentable, vous pouvez interroger le système d’analyse intégré de RTK. C’est l’un des aspects de l’outil que je consulte le plus souvent pour garder un œil sur mon utilisation quotidienne.
rtk gain: Affiche les statistiques globales de réduction.rtk gain --graph: Génère un graphique en ASCII de l’activité des 30 derniers jours.rtk gain --history: Affiche la liste chronologique des dernières commandes exécutées.rtk gain --daily: Détaille les économies réalisées jour après jour.rtk gain --all --format json: Exporte l’historique au format JSON pour l’intégrer à un outil de visualisation externe.rtk discover: Analyse vos historiques pour trouver d’autres opportunités de commandes à optimiser.rtk session: Présente le taux d’adoption de RTK lors de vos récentes sessions de travail.
Configuration avancée
Le fichier de configuration global se trouve dans ~/.config/rtk/config.toml (ou sous macOS dans ~/Library/Application Support/rtk/config.toml). Voici un exemple typique de paramétrage personnalisé :
[hooks]
exclude_commands = ["curl", "playwright"] # N'applique pas de réécriture sur ces commandes
[tee]
enabled = true # Sauvegarde la sortie brute en cas d’erreur (valeur par défaut) mode = “failures” # Peut être réglé sur “failures”, “always” ou “never”
Cette option [tee] est très bien pensée. Lorsqu’une commande échoue, RTK stocke temporairement la totalité de la sortie brute dans un fichier de log local. L’agent peut ainsi aller inspecter le journal complet si besoin, sans avoir à relancer la commande à l’aveugle :
FAILED: 2/15 tests
[full output: ~/.local/share/rtk/tee/1707753600_cargo_test.log]
Gestion des données personnelles et télémétrie
Par défaut, la télémétrie est strictement désactivée. Lors de l’initialisation de l’outil, vous avez la possibilité de donner votre consentement explicite (RGPD Art. 6, 7) pour envoyer une fois par jour des données statistiques d’utilisation anonymes.
Ce qui est transmis si vous acceptez :
- Identité anonymisée : Une empreinte de hachage de l’appareil générée avec SHA-256 (non réversible).
- Environnement de travail : La version de RTK installée, le système d’exploitation, l’architecture processeur et la méthode d’installation utilisée.
- Volume d’usage : Le nombre total de commandes traitées sur 24 heures et une estimation globale des tokens économisés.
- Mesures de qualité : Le nombre d’échecs d’analyse, le top 5 des commandes non filtrées (qui ont généré 0 % d’économie) ou celles qui enregistrent moins de 30 % de réduction. Cela permet de savoir où l’outil doit être amélioré.
- Données de répartition : Les types de commandes les plus courantes (ex: Git 45 %, Cargo 20 %, JS 15 %).
- Données d’intégration : Le type de hook utilisé par l’agent de développement et la présence d’éventuels filtres personnalisés configurés dans votre fichier de configuration TOML.
- Indicateurs d’impact économique : Une valeur monétaire indicative (USD) calculée de manière fixe à partir du volume de jetons économisés.
Ce qui n’est jamais collecté : Vos codes sources, vos chemins d’accès locaux, vos arguments de commandes de terminal, vos clés de chiffrement, vos variables d’environnement, vos fichiers personnels ou l’intégralité du contenu de vos dépôts Git.
Pour gérer vos préférences à tout moment :
rtk telemetry status # Vérifie l'état actuel de votre consentement
rtk telemetry enable # Active la collecte de données après validation
rtk telemetry disable # Désactive immédiatement la télémétrie
rtk telemetry forget # Révoque le consentement, supprime les logs locaux et demande l'effacement côté serveur
Si vous souhaitez bloquer globalement tout envoi de paquets statistiques depuis votre environnement, vous pouvez définir cette variable d’environnement dans votre terminal :
export RTK_TELEMETRY_DISABLED=1
Comment désinstaller proprement RTK
Si vous souhaitez supprimer l’outil de votre machine, la désinstallation se fait en quelques commandes rapides pour nettoyer les hooks et les fichiers de configuration associés :
rtk init -g --uninstall # Supprime les hooks actifs, le fichier RTK.md et les entrées de configuration
cargo uninstall rtk # Si vous étiez passé par Cargo pour l'installation
brew uninstall rtk # Si vous aviez privilégié Homebrew
Pour en savoir plus sur les détails d’implémentation ou les questions de sécurité, le projet met à disposition les fichiers de référence complets directement sur son dépôt officiel https://github.com/rtk-ai/rtk ou via sa documentation en ligne à l’adresse https://rtk-ai.app/guide.