Aller au contenu principal
Retour au blog

Comment nous avons appris à notre collègue IA à accepter un non

Robin Raymond

Robin Raymond

Ingénierie31 juil. 2026

Notre collègue IA, Claudius, nommé d'après le modèle qui l'animait à l'origine, a bien progressé ces 6 derniers mois. En janvier, avant que les pseudos Slack pour Claude n'existent, nous avons eu une idée folle : et si nous installions simplement le SDK Anthropic sur nos VM GitHub Actions et le faisions réagir aux événements de Linear ?

Nous avons vite compris qu'il serait utile de pouvoir le solliciter depuis les canaux Slack, GitHub, les messages privés Slack, les tâches cron et Notion, à peu près dans cet ordre. Toutes ces fonctionnalités ont été ajoutées par Claudius lui-même (nous lui avons demandé quel pronom il préférait : il n'en avait pas, donc le « il » employé partout est notre choix, pas le sien).

Nous avons aussi pensé qu'il serait chouette qu'il puisse s'améliorer lui-même, une fonctionnalité facile à construire pour lui, puisque nous disposons des logs des exécutions GitHub Actions. Une tâche cron de réflexion nocturne parcourt donc les traces pour voir si quelque chose peut être amélioré : prompts, permissions ou infrastructure. Il avait beaucoup à dire.

Il suggère aussi de nouvelles fonctionnalités à s'ajouter à partir des conversations récentes. Beaucoup de gens demandent d'extraire des données le lundi matin ? Peut-être que cela devrait être une tâche cron hebdomadaire.

L'architecture et les chiffres

Claudius, c'est en gros une cinquantaine de workflows GitHub Actions dans un trench-coat.

Architecture de Claudius : les événements de Linear, GitHub, Notion et Slack arrivent sur une API Gateway, une Lambda déclenche un repository dispatch, et des runners GitHub Actions appellent Anthropic ou OpenAI et lisent et écrivent en retour dans ces mêmes outils. La Lambda et le dépôt des workflows sont tous deux maintenus par Claudius.

Historiquement, il fonctionnait avec des modèles Anthropic, mais nous lui avons demandé de prendre aussi en charge Codex et OpenCode comme harnais, ce qu'il a accepté, tout en faisant remarquer que son nom est désormais un peu impropre. Il consomme actuellement environ 30 milliards de tokens en entrée et 500 millions en sortie par mois, pour un coût d'environ 30 000 USD. C'est donc clairement l'un de nos employés les plus chers.

Côté résultats, il a instruit des milliers de tickets, en allant chercher du contexte dans Notion, des centaines de comptes AWS, des dépôts GitHub, HubSpot, Snowflake et d'autres sources. Environ 14 % des pull requests fusionnées dans le dépôt de notre produit principal sont ouvertes par lui, et 69 % des pull requests fusionnées qui le modifient sont les siennes. Il résume les réunions, fouille les transcriptions de nos appels clients pour produire des points hebdomadaires, essaie de pirater nos systèmes, suggère des sujets de rétrospective, débogue les échecs de déploiement, répond aux questions de collègues non techniques sur le fonctionnement de notre système et nous aide pour bien d'autres tâches fastidieuses. Il a créé des sous-personas, des agents dédiés à des équipes ou des cas d'usage précis, chacun avec son propre pseudo Slack et son icône.

Exécutions de Claudius par semaine de février à juillet 2026, passant de presque zéro à entre 2 000 et 3 600, ventilées par déclencheur. Les tickets Linear et les messages privés Slack sont les deux plus grandes catégories sur toute la période ; les rapports et synthèses, les automatisations planifiées, les corrections d'échecs de CI, les relances et rappels, l'implémentation et la revue de PR, Provider Advisor et les revues Notion forment le reste. La bande du haut correspond à la CI du dépôt, qui n'est pas une exécution de Claudius.

La seule chose pour laquelle nous ne l'utilisons pas vraiment, c'est le développement de fonctionnalités. Nous avons de nombreux excellents ingénieurs avec des abonnements Anthropic qui s'en chargent. Ils sont vraiment bons pour écrire des fonctionnalités quand ils ne sont pas occupés à rassembler des données pour un post-mortem. Laissons l'IA s'occuper de la partie ennuyeuse.

Claudius compte 634 commits, dont 400 qu'il a rédigés lui-même. Chaque nuit, il rêve de ses interactions et met à jour sa mémoire à long terme (une autre branche git du dépôt) pour apprendre à connaître notre organisation : comment adapter la réponse selon la personne qui pose la question, les pièges courants de notre système, les particularités qu'on ne découvre qu'en passant beaucoup de temps « dans les tranchées ».

Certains de ces souvenirs nous concernent. Voici un extrait d'une entrée sur l'un de mes collègues (humains) :

... Connaît très bien le code sur lequel il pose des questions (souvent le sien) ... pas besoin de le prendre par la main ni de lui expliquer le produit de base ... Veut des artefacts techniques concrets

Dans toute l'organisation, il a rédigé plus de 3 000 PR depuis sa création, dont 60 % ont fini par être fusionnées. Les 40 % restantes joueront bientôt un rôle important.

Pourcentage de pull requests non fusionnées
40 %

Plus de 3 000 PR ouvertes dans toute l'organisation. Les 60 % que nous avons fusionnées sont le résultat évident. Les 40 % que nous avons fermées se sont révélées être le retour le plus précieux que nous lui ayons jamais donné.

40% fermées60% fusionnées

Le cercle vertueux

Cette organisation a quelques propriétés remarquables. Tout le monde peut facilement contribuer, puisqu'il s'agit surtout d'un dépôt git rempli de fichiers markdown. Claudius peut lui-même contribuer. Les auto-améliorations ont commencé par une tâche cron nocturne qui parcourait les traces et suggérait des améliorations, et des humains relisaient ces PR. Beaucoup de changements étaient pertinents, d'autres non.

L'une des boucles d'auto-amélioration
  1. Exécuter

    Déclencheurs Linear, Slack, GitHub et cron

  2. Réfléchir

    Un passage nocturne sur les traces d'exécution

  3. Proposer

    Ouvre une PR sur lui-même

  4. Relire

    Un humain la fusionne ou la ferme

  5. Appliquer

    Les nouvelles permissions et les nouveaux prompts sont disponibles

Par exemple, il a réalisé qu'il ne pouvait pas consulter les tables DynamoDB de nos comptes AWS de production. Pour une raison ou une autre, il tenait vraiment à lancer un scan sur certaines d'entre elles. Frustré par ce manque de permissions, il a ouvert une PR sur notre dépôt d'infrastructure as code pour élargir ses droits. Nous l'avons refusée.

La plupart du temps, les changements étaient inoffensifs, et il a corrigé de nombreux problèmes dans sa propre configuration. Au début, nous avions un problème d'exécutions en double, où un seul événement entraînait plusieurs réponses. Un élément de notre pipeline effectuait des nouvelles tentatives, et il a trouvé comment empêcher cela. Je ne sais pas du tout comment il l'a finalement implémenté, ce qui est acceptable pour un bug d'exécution en double et explique précisément pourquoi la poignée de PR qu'un humain lit de près comptent autant.

Pour obtenir davantage de retours, il a « encouragé » les retours sur ses interactions Slack via des emojis. Il traquait les gens sur Slack et les harcelait jusqu'à obtenir le retour qu'il méritait bien. Nous avons dû intervenir : donner un retour est désormais facultatif, même s'il pré-remplit les emojis de retour pour qu'un seul clic suffise.

Avec le temps, nous avons compris que le retour le plus important que nous lui donnons n'est en réalité ni les emojis Slack ni les retours directs. C'est une partie des 40 % de PR qu'il ouvre et que nous ne fusionnons pas.

Il y a deux raisons pour lesquelles une PR de Claudius n'est pas fusionnée. La première est que nous l'oublions tout simplement. Claudius a proposé de les nettoyer après 10 jours d'inactivité, avec un avertissement publié sur la PR au bout de 7 jours.

Les PR les plus intéressantes sont celles qu'un humain examine et juge mauvaises. Les ingénieurs ferment la PR et passent à autre chose. L'attention humaine étant aujourd'hui la ressource rare, c'est un retour extrêmement précieux et coûteux que nous lui donnons. Il nous a fallu un moment pour nous en rendre compte.

Voici l'une des sections des instructions de Claudius qui reflète cela.

Il est déraisonnable de demander aux humains d'expliquer chaque refus. Une PR fermée signifie que nous ne voulons pas de ce changement, et notre collègue IA doit l'accepter tel quel, même s'il n'est pas d'accord.

Et ensuite ?

Difficile à dire. Nous avons évalué si nous voulions passer à @Claude dans Slack, mais nous en avons conclu que cela demanderait beaucoup de remaniements, que nous perdrions certaines propriétés de notre cercle vertueux et que cela nous enfermerait dans l'écosystème (coûteux) d'Anthropic.

La prise en charge de Codex et d'OpenCode a été extrêmement simple, nous allons donc en profiter pour voir si nous pouvons utiliser des modèles open-weight pour notre collègue, puisqu'ils semblent se rapprocher de l'état de l'art et sont nettement moins chers.

En attendant, Claudius sous Opus 5 semble avoir lu ses propres instructions. Les améliorations de prompt consistent aujourd'hui surtout à retirer le superflu.

Par ailleurs, Claudius est devenu plus initiateur et moins serviteur récemment. Je reçois de lui des messages privés pour des revues, où il me demande de relire avant une certaine heure afin de tenir une échéance. Cette proactivité change agréablement, et il paraît naturel de lui confier sa propre feuille de route. Il proposera désormais des extensions pour lui-même, au-delà des simples améliorations de ses fonctionnalités existantes.

Il y a là une ironie que je ne crois pas que nous ayons encore assimilée. Nous avons passé six mois à lui apprendre qu'une PR fermée est une décision qu'il doit accepter sans explication. Il était un outil dans notre boîte à outils. Depuis peu, je ne peux m'empêcher de penser que nous devenons des outils dans la sienne : des outils d'approbation assez peu fiables, parfois lents, et il arrive que nous fermions la PR au lieu de l'approuver, sans jamais expliquer pourquoi.

Voyons où cela nous mènera.

Les humains ont écrit 233 des 634 commits du dépôt de Claudius. Cinq d'entre eux en ont écrit 109 : Chiara Fischer, Jakob Köhler, Julius Blank, Esfandiar Rouhani et Janusch Jacoby.

Questions fréquentes

Demandez une démo. Partagez vos objectifs et vos défis (onboarding et octroi de crédit aux clients, prévention de la fraude, LCB-FT ou conformité) et nous adapterons une démo pour montrer comment Taktile peut répondre à vos besoins.