Un magnétophone à bobines déverse un ruban de code lumineux dans un ordinateur portable ouvert, sous une unique lampe d'enregistrement rouge.
Guides & Insights

Comment enregistrer une session Claude Code, et tout autre agent qui refuse de coopérer : un guide pratique de terrain

Auteur

Gideon Frost

Date de publication

Derniers modèles · 20Voir tous les modèles
Benchmarks : Artificial Analysis · mis à jour quotidiennement
Retour à tous les articles

Oui : vous pouvez enregistrer une session Claude Code dès aujourd’hui, et ce que vous obtenez, c’est l’intégralité de la session (chaque tour de modèle, chaque appel d’outil, chaque fichier touché par l’agent) sous une forme que vous pouvez rejouer. Voilà la version courte, et elle est vraie aujourd’hui. La version plus longue, c’est que la capacité d’enregistrement est décidée pour chaque harnais selon deux questions : le harnais peut-il être pointé vers un proxy, et son format de transmission est-il compris une fois le trafic arrivé ? Claude Code satisfait aux deux conditions, tout comme un CLI Codex connecté avec une clé API. Un agent dont l’URL du fournisseur est codée en dur dans son code source, un agent exécuté dans un conteneur ou sur un VPS, et un harnais connecté via un abonnement suivent chacun un chemin différent, et l’un d’eux, aujourd’hui, n’arrive pas.

Ce qui a changé, c'est que ces agents ont cessé d'être des démos. Ils se trouvent dans votre dépôt avec un accès au shell, ils modifient des fichiers, ils exécutent la suite de tests, ils ouvrent des pull requests. Lorsque l'un d'eux fait quelque chose que vous n'aviez pas prévu – que ce soit supprimer le mauvais fichier, boucler sur le même test qui échoue, ou brûler un après-midi de calcul – le défilement du terminal n'est pas une preuve. C'est un rendu, et un rendu incomplet.

Ce dont vous avez besoin, c'est du fil : ce qui a réellement été envoyé au modèle, ce qui est réellement revenu, et ce que l'agent a fait entre les tours. Cet enregistrement est aussi le début d'une suite d'évaluation, car une session capturée est un test de régression que vous pouvez rejouer contre le prochain modèle ou la prochaine invite. Le problème, c'est que chaque harnais suppose qu'il parle directement à son fournisseur, et presque aucun d'entre eux ne rend cela facile à modifier.

Qu'est-ce qui détermine si un harnais peut être enregistré ?

Toute question du type « peux-tu l'enregistrer ? » se réduit aux deux mêmes questions.

La première : le harnais peut-il être pointé vers un proxy ? Quatre voies le couvrent, par ordre décroissant de commodité.

La variable d'URL de base. La route construite pour cela : le harnais lit une variable d'environnement d'URL de base, et vous la définissez.

Lancer vous-même le harnais. Un processus enfant hérite de l'environnement de son parent, donc une passerelle qui lance un agent de codage est également capturée, sans la coopération de l'agent.

Interception TLS. Pour les harnais qui ne lisent aucune configuration, l'enregistreur lance l'agent et vous optez pour l'interception.

Attacher. Quand l'agent s'exécute quelque part où l'enregistreur ne peut pas le lancer, il ne reste qu'à l'attacher.

Si aucune de ces conditions ne s'applique, le trafic n'atteint jamais l'enregistreur et il n'y a rien à discuter.

Deuxièmement : une fois le trafic arrivé, son format filaire est-il compris ? Capturer des octets n'est pas le produit. L'enregistreur doit reconnaître la conversation qu'il représente, y compris les formes d'appels d'outils, les trames de streaming et les nouvelles tentatives, sinon l'enregistrement est un pcap, pas une relecture. Un format compris par l'enregistreur produit une session rejouable ; un dialecte privé produit une capture que l'on ne peut que contempler.

La réponse diffère d'un harnais à l'autre, et elle diffère dans des détails où il est facile de se tromper : c'est la même leçon qui ressort de la comparaison de la façon dont le harnais DeepSeek diffère de Claude Code. Le reste de cet article montre à quoi ressemblent les deux questions lorsqu'on exécute réellement les harnais.

A three-card decision diagram running from "Pointed at a proxy?" through "Wire format known?" to a "Recordable" badge.

Claude Code, le Codex CLI et le Agents SDK

Claude Code est la référence à laquelle tout le reste est comparé, car il lit ANTHROPIC_BASE_URL. Pointez cette variable vers l’enregistreur, lancez l’agent, et la session se déroule tour par tour : les prompts, les appels d’outils, les modifications de fichiers et les réponses du modèle intercalées. Nous l’avons validée de bout en bout sur un vrai correctif (un vrai dépôt, un vrai défaut, une session qui va du premier prompt au correctif fonctionnel), et ce premier agent réel a cassé quatre choses qu’aucun dispositif de test n’avait produites. Ces quatre problèmes ont depuis été corrigés, ce qui est la façon honnête de dire que le trafic synthétique ne vous prépare pas à ce qu’un agent réel fait quand on le laisse seul avec une base de code.

Le Codex CLI, connecté à l'aide d'une clé API, est la même histoire via OPENAI_BASE_URL. Pointez-le vers l'enregistreur et vous obtenez la session ; rien d'autre ne change dans la façon d'utiliser le harnais.

Les agents programmatiques héritent de la voie la plus facile de toutes. Un processus enfant hérite de l’environnement de son parent, donc une passerelle qui génère un agent de codage est également capturée, sans la coopération de l’agent. Définissez une fois la variable d’URL de base dans le processus qui effectue le lancement, et chaque agent qu’il lance arrive au collecteur par lui-même. Si vous exécutez des agents depuis CI, depuis un orchestrateur, ou via le SDK Agents, c’est le chemin que vous empruntez déjà.

L'enregistreur dans tous ces cas est OrcaReplay. Il s'installe avec npm i -g orcareplay, nécessite Node 20 ou plus récent, et n'a aucune dépendance native : rien à compiler, rien à construire. Il capture le même trafic d'agents que OrcaRouter achemine à travers le catalogue de modèles d'OrcaRouter.

The OrcaReplay GitHub repository page with its README showing the npm i -g orcareplay installation command.

Un agent qui ne lit aucune variable d'URL de base.

Certains harnais codent en dur l’URL du fournisseur dans leur code source. Aucune variable d’environnement, aucun fichier de configuration, aucune option. Définir ANTHROPIC_BASE_URL ne fait rien, car aucun code ne lit cette variable. Si l’enregistreur peut lancer l’agent, il existe encore une voie, et c’est celle qui préoccupe le plus : l’interception TLS.

Activer l’option est exactement cela : un opt-in ; elle est désactivée par défaut. Lorsque vous l’activez pour une exécution, l’enregistreur génère une autorité de certification propre à cette exécution, et cette autorité n’est approuvée que par l’agent que l’enregistreur lance : elle est remise à cet unique processus, pas installée dans votre trousseau système, pas conservée pour l’exécution suivante. Quand l’exécution se termine, l’autorité est supprimée. L’agent se connecte à son hôte codé en dur exactement comme il l’a toujours fait ; l’enregistreur répond, et la session s’établit comme si l’URL avait été configurable depuis le début.

Ce que la route refuse délibérément importe autant que ce qu'elle fait. Elle lit les hôtes de sa liste d'autorisation et rien d'autre. Les hôtes hors liste d'autorisation sont transmis par tunnel sans être lus, et enregistrés sous la forme d'une adresse et d'un nombre d'octets : preuve que l'agent a contacté quelque chose, et pas un seul octet de ce qui a été dit. Cette frontière est un choix de conception, pas une limitation qui reste à traiter ; la même discipline se retrouve dans le pare-feu d'agent d'OrcaRouter, où la liste d'autorisation est le produit plutôt qu'un effet secondaire de l'enregistrement.

The OrcaRouter agent firewall solutions page with its title and introduction visible.

Le hic est celui de la première question : l'interception fonctionne lorsque l'enregistreur lance l'agent. Un agent déjà en cours d'exécution dans un conteneur n'a jamais reçu l'autorité de certification de cette exécution et il ne fera pas confiance à la réponse de l'enregistreur.

Un agent qui n'est pas sur cette machine.

Un conteneur a son propre environnement. La variable d’URL de base que vous définissez dans votre shell ne l’atteint pas, et un enregistreur sur l’hôte ne peut pas lancer un processus qui existe déjà ailleurs : sur un VPS, dans une CI, dans un bac à sable que le harnais a construit sans vous demander. La capture basée sur le lancement échoue ici non pas parce que l’agent est difficile, mais parce que l’enregistreur n’arrive jamais à l’atteindre.

Pour ce cas précis, il y a orca attach : il enregistre un agent que le recorder ne peut pas lancer, par exemple un agent qui s'exécute dans un conteneur ou sur un VPS. La logique s'inverse : au lieu que le recorder démarre l'agent et lui transmette un environnement, il s'attache à un agent déjà en cours d'exécution et l'enregistre.

Attacher ne répond pas à la seconde question à votre place. Il s'occupe d'acheminer le trafic jusqu'à l'enregistreur ; toutefois, la transformation de ce trafic en session rejouable dépend toujours de la compréhension du format de transmission. Attachez un agent qui parle un format connu de l'enregistreur et vous obtenez une session rejouable. Attachez-en un qui ne parle pas ce format, et vous avez trouvé le mur — un mur qu'il est moins coûteux de trouver volontairement qu'en plein incident.

Que change une connexion par abonnement ?

Le même binaire peut être enregistrable ou non selon la façon dont il s'est connecté. Un Codex CLI connecté avec une clé API est capturé via OPENAI_BASE_URL : il suffit de pointer cette variable vers l'enregistreur et le tour est joué. Connectez ce même Codex CLI avec un abonnement à ChatGPT et il ne communique plus du tout avec cet endpoint ; il communique avec son propre backend, authentifié en votre nom, et il n'y a aucune origine à réécrire. La variable d'URL de base existe toujours, mais quelle que soit la cible vers laquelle vous la pointez, elle ne devient pas le service que le harnais utilise réellement.

Il s'agit de la deuxième question qui échoue, pas de la première. Les octets peuvent être amenés à se déplacer ; l'enregistreur peut même les voir. Mais la conversation est adressée à un backend auquel l'enregistreur ne peut pas se substituer, dans un flux qui n'est pas l'API que parle l'enregistreur. Il n'y a aucun rejeu à produire car il n'y a pas d'origine que l'enregistreur puisse devenir.

La réponse honnête pour un harnais à connexion par abonnement, aujourd'hui, est qu'il n'est pas enregistrable, et la leçon utile est que la méthode de connexion fait partie de la décision d'enregistrabilité. Si vous avez besoin d'enregistrements pour des évaluations ou pour une piste d'audit, lancez les sessions à enregistrer avec une clé API et gardez l'abonnement pour le travail interactif — comment transformer une session enregistrée en évaluation de régressioncouvre cette boucle de bout en bout. Et avant d'arrêter votre choix sur un harnais, posez-lui d'abord les deux questions ; nous continuons à faire exactement cela pour chaque harnais, tout dernièrement avec le harnais Prime Agent.

Le point à retenir

Vous pouvez enregistrer une session Claude Code aujourd'hui avec une commande et une variable d'environnement :

npm i -g orcareplay

• Pointez ANTHROPIC_BASE_URL vers l'enregistreur

• Exécuter l'agent

Un Codex CLI utilisant une clé API se trouve à la même distance. Une URL codée en dur vous coûte un opt-in à l’interception TLS qui ne lit que sa liste autorisée (la même discipline que fait respecter le pare-feu d’agent d’OrcaRouter) et qui oublie ses propres certificats à la fin de l’exécution. Un conteneur ou un VPS vous coûte orca attach. Une connexion par abonnement vous coûte l’enregistrement lui-même : ce harnais ne sera pas enregistré, et aucune modification de configuration ne changera cela aujourd’hui.

Toute la décision en un coup d'œil :

• Claude Code — Clé API de connexion vs Route vers l’enregistreur ANTHROPIC_BASE_URL vs Enregistrable aujourd’hui Oui

• Codex CLI — Clé API de connexion vs route vers l’enregistreur OPENAI_BASE_URL vs Enregistrable aujourd’hui Oui

• Harness avec l’URL du fournisseur codée en dur — connexion depuis n’importe où vs route vers l’enregistreur ; interception TLS opt-in, lancée par l’enregistreur vs enregistrable ; aujourd’hui : oui

• Agent dans un conteneur ou sur un VPS — Connexion n’importe où vs Acheminement vers l’enregistreur orca attach vs Enregistrable aujourd’hui : oui, si le format fil est connu

• Codex CLI — Connexion abonnement ChatGPT vs Chemin vers l’enregistreur Aucun vs Enregistrable aujourd’hui Non

La dernière ligne est la seule combinaison à ne disposer d'aucun chemin vers l'enregistreur.

Posez les deux questions avant d'adopter un harnais, pas après votre premier incident ; les réponses sont peu coûteuses à obtenir, et elles déterminent si la session dont vous aurez un jour désespérément besoin existe tout court.

Note sur les sources : chaque comportement et chaque chiffre de cet article (les chemins de capture `ANTHROPIC_BASE_URL` et `OPENAI_BASE_URL`, les quatre pannes post-fixture et leurs correctifs, le cycle de vie des certificats TLS, le comportement de liste blanche et de tunnel, `orca attach` et les exigences d'installation) provient de nos propres exécutions de validation contre les bancs de test nommés, plus récemment le 4 septembre 2026. Nous ne citons aucun benchmark tiers, car nous n'en avons exécuté aucun.

© 2026 OrcaRouter

Pour les fournisseurs

Vous exploitez une plateforme d'inférence ? Proposez vos modèles sur OrcaRouter.

providers@orcarouter.ai

Rejoignez notre communauté

Discordsupport@orcarouter.aiXGitHubYouTube