Face aux harness du marché
Votre harness corrige un bug réel pour 5 centimes et vous savez exactement ce qu'il fait. La question suivante viendra vite d'un collègue : « pourquoi ne pas simplement utiliser Claude Code ? ». La bonne réponse n'est ni « le nôtre est mieux » ni « on jette le nôtre ». Elle dépend de qui utilise l'agent, sur quoi, et de qui doit pouvoir auditer ce qu'il a fait.
Le mécanisme : les mêmes briques, poussées plus loin
Les cinq outils ci-dessous reposent sur les briques que vous avez écrites. Le tableau dit ce qu'ils font de plus, d'après leur documentation publique consultée le 2026-10-15.
| Brique | Ce projet | Claude Code | Gemini CLI | Codex CLI | OpenHands | Aider |
|---|---|---|---|---|---|---|
| Isolation des commandes | sous-processus, unshare -rn, env vidé | Seatbelt (macOS), bubblewrap + socat (Linux) : fichiers et réseau | optionnelle : Seatbelt, Docker/Podman, gVisor, LXC | read-only / workspace-write / danger-full-access ; Seatbelt, bubblewrap, sandbox Windows | conteneur Docker par session | aucune |
| Réseau | coupé ou ouvert | proxy local, liste de domaines autorisés vide au départ | selon le profil de bac à sable | soumis à approbation | celui du conteneur | ouvert |
| Permissions | 3 modes, liste blanche par préfixe | modes, règles allow/deny par outil et motif, hooks avant/après outil | modes d'approbation : default, auto_edit, yolo, plan | approval_policy : on-request, never | confirmation dans l'interface | confirmation des commandes |
| Points de reprise | refs git par écriture | instantané par message, /rewind code et conversation | dépôt git fantôme, /restore rejoue l'appel d'outil | git | historique d'événements | un commit par édition, /undo |
| Contexte | troncature, compaction | compaction automatique et /compact, sous-agents à contexte neuf | /compress, fichier GEMINI.md | fichier AGENTS.md | condensation de l'historique | carte du dépôt (tree-sitter) |
| Extensibilité | modifier le code | MCP, skills, sous-agents, plugins | MCP, extensions | MCP | navigateur, Jupyter, MCP | modes d'édition, lint et test automatiques |
flowchart TD
Q["Qui pilote l'agent ?"] -->|"un développeur, en interactif"| D["Harness du marché : Claude Code, Gemini CLI, Codex CLI, Aider"]
Q -->|"un processus métier, sans humain au clavier"| P{"Besoins spécifiques ? outils maison, audit, conformité, modèle imposé"}
P -->|"non"| H["Harness du marché en mode non interactif (Claude Agent SDK, codex exec, gemini -p)"]
P -->|"oui"| O["Votre harness, ou un SDK d'agent que vous encadrez"]
Q -->|"code non fiable, exécution longue"| C["Isolation par conteneur : OpenHands ou équivalent"]
Ce qu'ils font de plus, et qui compte vraiment
- Le confinement du système de fichiers. C'est l'écart le plus important. Claude Code et Codex CLI enferment les commandes dans un bac à sable du système d'exploitation (bubblewrap sous Linux, Seatbelt sous macOS) ; OpenHands exécute tout dans un conteneur. Votre bac à sable coupe le réseau mais laisse lire
~/.ssh(leçon 3). Sur un poste de développeur, c'est la première chose à rattraper. - Le réseau filtré plutôt que coupé. Couper le réseau casse
pip installet les tests qui appellent une API locale. Le proxy de Claude Code avec une liste de domaines autorisés laisse passerpypi.orget bloque le reste : plus utile qu'un interrupteur. - La restauration de la conversation avec les fichiers. Votre
undoremet les fichiers ; le modèle, lui, croit encore ses éditions faites. Gemini CLI restaure aussi la conversation et repropose l'appel d'outil ; Claude Code laisse choisir code, conversation ou les deux. - La carte du dépôt. Sur 2 000 fichiers, votre agent cherche par regex et lit au hasard. Aider envoie une carte compacte des symboles (fonctions, classes) construite avec tree-sitter, ce qui réduit fortement les lectures exploratoires.
- Les hooks et les règles déclaratives. Une règle « interdire l'écriture dans
migrations/» ou « lancer le formateur après chaque édition » s'écrit en configuration, sans modifier le harness, et peut être imposée par l'entreprise. - L'ergonomie et l'écosystème. Intégration IDE, MCP, sous-agents, skills, modèles réglés sur leurs outils. Ce sont des mois de travail d'équipes dédiées, évalués sur des milliers de tâches.
Ce que votre harness fait et qu'ils ne vous donnent pas
- Un code de sortie qui dépend d'une vérification indépendante, branché sur votre CI ou votre file de tickets, sans interface.
- Un journal dans votre format, dans votre stockage, exploitable pour l'audit et l'évaluation.
- Vos outils métier comme outils de premier rang (API interne de facturation, base de test, outil de ticket), avec vos propres règles de permission.
- Le choix du modèle et du prix : une variable d'environnement, y compris un modèle hébergé sur Vertex AI dans votre région.
Ce qui casse en production
- Croire qu'un harness du marché est sûr par défaut. Les bacs à sable sont souvent optionnels ou réglables : le bac à sable de Gemini CLI s'active explicitement, Codex propose
danger-full-access, Claude Code permet d'exclure des commandes du bac à sable. Auditez la configuration réelle des postes, pas la documentation. - Maintenir un harness maison sans évaluation. Sans jeu de tâches rejoué à chaque changement de prompt, d'outil ou de modèle, le vôtre se dégrade en silence. Le journal JSONL est la matière première de cette évaluation : gardez-le.
- Mélanger les deux sans frontière. Les développeurs utilisent Claude Code, la CI utilise votre harness, et personne ne sait lequel a produit quel commit. Parade : une signature dans les messages de commit et un journal par session des deux côtés.
La règle de décision
Pour le travail interactif d'un développeur, adoptez un harness du marché et configurez-le sérieusement : bac à sable actif, liste blanche, réseau filtré. Construisez ou gardez votre propre harness quand l'agent est un composant d'un processus (ticket vers correctif, migration en masse, contrôle de conformité), qu'il doit appeler vos outils internes, et que vous devez prouver ce qu'il a fait. Dans ce cas, comblez d'abord l'écart 1 (fichiers confinés par bubblewrap ou conteneur), puis l'écart 3 (restauration de la conversation). Les autres écarts relèvent du confort.
Pratique
Une équipe de 40 développeurs veut un assistant de code dans le terminal. Un architecte propose d'étendre le harness de ce projet. Que recommandez-vous ?
Pour l'usage interactif, l'ergonomie, l'intégration IDE et la qualité réglée sur des milliers de tâches d'un produit du marché ne se rattrapent pas avec 1 000 lignes. Le harness maison garde sa valeur dans les processus sans humain au clavier. Interdire pousse aux usages non encadrés. Le conteneur d'OpenHands répond à l'isolation, pas forcément au flux de travail d'un développeur dans son terminal.
Votre harness maison tourne en CI sur des dépôts de fournisseurs externes. Quel écart avec les harness du marché corrigez-vous en premier ?
Sur du code non fiable, une suite de tests peut lire les secrets du runner ou empoisonner le cache de CI. Le réseau coupé ne protège pas les fichiers. La carte du dépôt améliore l'efficacité, pas la sécurité. MCP et interface graphique n'ont pas d'effet sur le risque.
Exercice. Faites tourner la même tâche (le dépôt d'exemple) avec un harness du marché de votre choix et votre harness. Comparez sur une grille : tours, tokens, coût, refus, diff final, et ce que chacun vous laisse comme trace exploitable.
Voir la solution
Démarche, pour Gemini CLI par exemple :
make runune fois pour obtenirsorties/depot, puisgit -C sorties/depot stashpour revenir à l'état rouge, ou recréer la copie.- Dans
sorties/depot, lancez le harness du marché en mode non interactif avec la même consigne queDEMO_TASK, bac à sable actif. - Relevez ses statistiques de session (tokens, durée) et le diff final ; relancez
python -m pytest -qvous-même. - Comparez avec
sorties/trajectoire.jsonlde votre harness sur une grille à six colonnes.
Ce que l'on observe en général : un harness du marché fait moins de tours grâce à de meilleures consignes et à la lecture de plusieurs fichiers par tour ; votre harness donne une trace plus directement exploitable et un code de sortie fiable. Écrivez la conclusion en une phrase pour votre équipe : quel outil pour quel usage.
- Je sais citer les six écarts entre mon harness et ceux du marché, par ordre d'importance
- Je sais vérifier la configuration réelle de bac à sable d'un harness du marché
- Je sais justifier quand construire, quand adopter, et comment faire cohabiter les deux
- Je garde mes journaux pour évaluer mon harness à chaque changement