
Il décide ce qui reste dans la fenêtre de contexte, ce qui est résumé, ce qui s'exécute dans un bac à sable sans jamais entrer dans le contexte, quand confier une sous-tâche complexe à un sous-agent, et quand s'arrêter pour demander l'avis d'un humain. Ce n'est pas un framework : vous écrivez toujours vos propres outils. Ce n'est pas une passerelle : il ne détient ni vos identifiants ni votre politique. C'est l'élément qui maintient un agent opérationnel de la première à la cinquantième itération.
La boucle elle-même représente environ deux cents lignes de code. N'importe qui peut l'écrire, et la plupart des équipes le font en un après-midi. Le harnais, c'est tout ce que vous construisez au cours des six mois suivants, une fois que cette boucle rencontre une charge de travail réelle et commence à faire face à des obstacles en cours de route.
Notre thèse est que les modèles deviendront interchangeables, que les outils deviendront le facteur de différenciation de l'entreprise plutôt que celui du fournisseur, et que la gouvernance doit se situer sous l'agent plutôt qu'à l'intérieur. Ce que nous avions sous-estimé, c'était le harnais. L'équipe d'ingénierie des plateformes de développement de NetApp a soumis une charge de travail réellement complexe à cette thèse, en profondeur, en avance sur le marché, et nous a montré exactement là où elle montrait ses limites.
En juin 2025, Rob Rubin, désormais directeur principal de l'ingénierie des plateformes de développement chez NetApp, avait déjà dépassé la question que la plupart des entreprises débattaient encore. Son équipe gère les environnements Kubernetes sur lesquels le reste de l'entreprise s'appuie, et le provisionnement en libre-service était déjà entièrement automatisé. La contrainte résidait dans l'interface : un formulaire de demande ne peut offrir que ce qui a été modélisé à l'avance.
Son idée était d'y placer l'intention à la place. Décrivez la pile que vous souhaitez ; laissez un agent l'assembler à partir de l'automatisation existante.
Cela impliquait deux choses de notre part.
Pas de framework d'agent. Pas de harnais. Ce n'était pas encore le sujet de la conversation. La raison pour laquelle il a choisi de standardiser sur MCP explique pourquoi cette histoire s'arrête là :
Mi-2025, c'était une position minoritaire. C'est en grande partie pour cette raison que TrueForge propose ses solutions en open source plutôt que sous forme de runtime géré fermé.
La première phase concernait l'identité, et c'est la partie que la plupart des équipes sous-estiment.
Pas une identité basée sur « l'agent détient une clé API ». Une véritable identité, où la personne qui pose la question détermine ce que les outils peuvent faire. Un utilisateur s'authentifie via le fournisseur d'identité de NetApp. Cette identité est transmise via la passerelle MCP au serveur MCP, qui la vérifie par rapport au compte de cluster de l'utilisateur et émet des identifiants à courte durée de vie, limités à l'utilisateur. Chaque appel kubectl et chaque commande shell s'exécutent en tant que cette personne. Si vous interrogez quelque chose auquel vous n'avez pas accès, vous obtenez exactement ce qu'un terminal vous donnerait : rien.
Quatre mots, et ils sont la raison pour laquelle ce projet est passé en production. Un agent fonctionnant avec un compte de service disposant des droits cluster-admin n'est qu'une démonstration. Un agent fonctionnant avec votre identité est une infrastructure.
Tout le reste réside dans la passerelle plutôt que dans un agent individuel : identifiants de fournisseur, RBAC au niveau du modèle, autorisations au niveau des outils, budgets, limites de débit, garde-fous, journalisation. Les agents font référence aux noms des modèles et des serveurs ; les identifiants ne transitent jamais. C'est ce qui permet à une équipe de plateforme d'approuver le quarantième agent aussi facilement que le premier, car un nouvel agent n'est pas une nouvelle copie du modèle de sécurité.
Début 2026, l'agent Kubernetes était opérationnel auprès des utilisateurs, et la nature de la charge de travail explique tout ce qui suit.
Un ingénieur demande : « Pourquoi mon pod est-il en CrashLoopBackOff ? » La plateforme couvre huit clusters Kubernetes au service de toute l'entreprise ; la première tâche de l'agent consiste donc généralement à localiser la charge de travail avant de pouvoir diagnostiquer quoi que ce soit. Vient ensuite l'enquête proprement dite : décrire l'espace de noms, lister les pods, extraire les événements, filtrer les journaux, inspecter la couche d'entrée, interroger les métriques historiques. Le serveur MCP expose kubectl, un shell, Prometheus et un outil d'inventaire de cluster. Aucune de ces séquences n'est scriptée ; le modèle la compose en fonction du problème.
Quinze à trente séries de sorties de commandes réelles par question. Gardez ce chiffre en tête, car il résume toute l'histoire de l'ingénierie.
Fidèle à son habitude, NetApp a vu Igor Feoktistov construire un second serveur MCP plongeant sous le cluster, au cœur de l'infrastructure physique. Lors d'une session de laboratoire, il a tapé « dépanner problème de cluster », sans nom de cluster ni aucune autre indication.
L'agent a localisé le nœud non réactif, a exploré la couche Kubernetes, n'y a rien trouvé de concluant, est passé aux diagnostics matériels et a identifié la cause profonde comme étant une erreur mémoire sur le matériel sous-jacent. Il a ensuite identifié une ressource de secours et a effectué la migration de la charge de travail, avec une fenêtre de rétablissement prévue de cinq à dix minutes.
Ce qui est techniquement intéressant, c'est le cheminement, pas le résultat. Aucun manuel de procédure ne code « défaillance de pod vers erreur mémoire vers migration de charge de travail ». Cette chaîne a traversé deux serveurs MCP conçus indépendamment, et elle a tenu parce que les deux exposaient des outils fiables sous la même identité utilisateur, permettant au modèle de continuer à descendre dans les couches jusqu'à ce que les preuves soient établies. Cette capacité provenait de la couche d'outils, que NetApp a conçue et développée. Notre rôle était de rendre son exposition sûre et d'offrir à la boucle un environnement durable pour s'exécuter.
Trente itérations de sorties brutes kubectl et de logs ont un effet prévisible sur une fenêtre de contexte. Les investigations commençaient à échouer en cours de route.
Ce que nous avons reçu n'était pas une demande de fonctionnalité. C'était un rapport de bug, et un rapport bien argumenté :
Il avait écarté les suspects coûteux, ce qui constitue la partie la plus ardue de tout diagnostic : ce n'était ni le modèle, ni le prompt, ni les outils. La couche qu'il pointait du doigt se situait juste sous l'interface, celle qui décide de ce qui reste dans le contexte, de ce qui est résumé, et de ce qui est exécuté ailleurs sans jamais entrer dans le contexte.
Nous n'avions pas cette couche. Nous étions partis du principe, à tort, que la boucle intermédiaire relevait de la responsabilité du client. C'est cette hypothèse que NetApp a fait voler en éclats, et c'est celle sur laquelle repose encore, selon nous, une grande partie du marché.
La suite de nos réalisations nous appartient, et personne ne nous a rien demandé. NetApp a identifié le mur ; la conception de ce qui l'a franchi est notre œuvre, éprouvée chaque semaine face à leur charge de travail réelle.
Exécution isolée pour le code, les fichiers et les commandes shell. Au lieu d'importer des mégaoctets de journaux dans le contexte pour que le modèle les lise, l'agent exécute du code sur ces données et ne renvoie que la réponse. Les secrets n'entrent jamais dans le bac à sable.
Dès qu'un agent peut migrer une charge de travail hors d'un matériel défaillant, quelqu'un doit pouvoir dire « pause » et demander une confirmation préalable. L'exécution s'arrête pour approbation à des points définis.
Les agents deviennent des services appelables, intégrables dans n'importe quelle interface plutôt que d'être confinés à la nôtre. Une demande de NetApp, et celle qui a le plus transformé le produit.
Compactage automatique à mesure que la fenêtre se remplit ; résultats d'outils volumineux déchargés vers le stockage plutôt qu'intégrés ; chargement différé des outils, afin que plus d'une centaine de définitions d'outils n'encombrent pas la fenêtre avant le début du travail.
Une interface de création et de test pour ceux qui ne programmeront jamais en Python, et qui ne devraient pas avoir à le faire.
Permet au modèle d'enchaîner plusieurs appels d'outils dans un script isolé plutôt que de payer un aller-retour de modèle par appel. Conçu pour les tâches de diffusion comme l'analyse de huit clusters.
C'était banal, et pourtant crucial. Le plafond de NetApp est passé de 30 à 40 puis 50 à mesure que les outils s'enrichissaient. Toute limite codée en dur aurait été erronée à chaque étape de cette courbe.
Permet à une investigation longue de déléguer une sous-tâche fastidieuse et de recevoir une conclusion plutôt qu'une transcription. Le contexte parent reste propre sur plus de 30 itérations.
Une seconde équipe de NetApp est arrivée indépendamment. Vimal Kannan, directeur informatique pour les données d'entreprise et l'analytique, gère NetAI Chat, l'assistant interne de NetApp. Son problème tenait à l'étendue plutôt qu'à la profondeur : de nombreuses équipes, de nombreux outils, de nombreux modèles, le tout nécessitant une gouvernance centralisée.
Aujourd'hui, environ 150 outils sont accessibles via un seul Serveur MCP Virtuel — un point de terminaison unique qui centralise de nombreux serveurs MCP, permettant au client de se connecter une seule fois au lieu d'être configuré pour chacun d'eux. Le contrôle d'accès par utilisateur détermine ce que chaque individu peut invoquer, et les Compétences (instructions packagées pour une tâche récurrente) sont délimitées de sorte qu'une équipe ne voit que ce qui lui appartient. Des milliers d'employés de NetApp accèdent à ces outils via la passerelle sans jamais ouvrir une console TrueFoundry. La gouvernance est invisible pour eux, et c'est bien là l'objectif.
Parce que l'équipe d'ingénierie de plateforme développeur nous avait poussés à exposer les agents sous forme de SDK et d'API, l'équipe NetAI Chat a pu appeler ces agents directement depuis sa propre interface. Deux efforts indépendants sont devenus une plateforme unique, désormais sous une direction commune assurée par Rob Rubin, couvrant les modèles, les outils, les agents et un Registre d'Agents qui répertorie ce qui existe et qui en est responsable.
Un agent Kubernetes est devenu plusieurs en production, avec d'autres en cours de développement et un générateur d'agents interne sur la feuille de route. À ce stade, le problème change de nature :
C'est le problème qui survient quand l'adoption fonctionne. Elle arrive plus vite que ce que la plupart des équipes avaient prévu.
Un moteur d'exécution ouvert et auto-hébergé élimine la facture par utilisateur d'une plateforme gérée. Ce n'est pas là l'aspect le plus intéressant, et ce n'est pas la raison pour laquelle NetApp est ici.
Parallèlement à l'attribution, il y a le problème de la discipline : les utilisateurs se tournent vers le plus gros modèle alors qu'un plus petit suffirait. Les deux problèmes se règlent au même endroit. Chaque appel de modèle et chaque appel d'outil est associé à une personne et à une équipe, avec des budgets et des limites de débit réellement contraignants, et un routage qui dirige le travail vers le modèle approprié plutôt que vers le plus gros disponible.
Nous n'avons pas fini. Rob souhaite une application du budget par exécution plutôt que par semaine, et il a raison : un plafond hebdomadaire est trop imprécis lorsqu'un agent à exécution longue peut l'épuiser en une seule investigation.
C'est aussi pour cette raison que le harness et la passerelle doivent appartenir au même système. Un harness seul vous donne un agent. Un harness intégré à un plan de contrôle gouverné vous donne un agent que vos équipes de sécurité et de finance pourront valider.
Un client, aussi avancé soit-il, ne constitue qu'un seul point de données. NetApp a rencontré une limite contextuelle en menant des investigations de 30 itérations sur huit clusters. Une équipe travaillant sur des flux documentaires, le traitement de dossiers ou le tri de tickets CI rencontrera une limite différente, et nous préférons l'apprendre du marché plutôt que de notre propre feuille de route.
Il existe une raison plus pragmatique. Une équipe qui a refusé les connecteurs propriétaires en 2025 n'allait jamais miser son infrastructure Kubernetes sur un moteur d'exécution qu'elle ne pouvait ni lire, ni exécuter elle-même, ni modifier. La portabilité était la condition sine qua non de toute cette collaboration. En rendant le harness open source, nous prenons cette condition au sérieux plutôt que de demander à être crus sur parole.
La capacité différenciée de NetApp, de Kubernetes jusqu'au matériel, existe parce que leurs ingénieurs ont écrit leurs propres serveurs MCP pour leurs propres systèmes. Aucun fournisseur n'aurait pu fournir cela. Le rôle de la plateforme est de les héberger, de les sécuriser et de les gouverner.
C'est à la vingt-deuxième itération, quand le contexte est saturé de sorties de terminal et que l'investigation n'est pas terminée, que tout se joue. L'essentiel du travail d'ingénierie réside dans cet écart, qui reste invisible tant que vous ne faites pas tourner un processus assez longtemps pour y être confronté. Un test simple : si vos agents dépassent régulièrement dix appels d'outils par tâche, vous finirez par vous heurter à ce mur.
Chaque agent qui bloque lors de la revue se heurte à la même question : que peut faire cet outil, et avec quelles permissions ? Répondez-y au niveau de l'infrastructure, et la réponse sera valable pour tous les agents suivants.
Limites d'itération, budgets de contexte, nombre d'outils : chez NetApp, tous ces paramètres ont évolué en quelques mois. Gérez-les comme de la configuration.
Un agent qui ne fonctionne qu'au sein de l'interface utilisateur d'un fournisseur ne peut être intégré à rien. Le SDK et l'API ont été le catalyseur qui a permis à deux équipes de NetApp de ne former qu'une seule plateforme.
TrueForge est open source, sous licence MIT, disponible sur github.com/truefoundry/trueforge. Le mur auquel NetApp s'est heurté est désormais un obstacle que vous pouvez rencontrer avec vos propres charges de travail, avec la couche qui l'a franchi déjà entre vos mains.

Cela lance le harness et son interface utilisateur sur votre machine. Lorsque vous êtes prêt pour une utilisation réelle, auto-hébergez-le avec Docker Compose ou Kubernetes dans votre propre environnement. Connectez-le à n'importe quel modèle via un point de terminaison compatible OpenAI, reliez vos serveurs MCP, et vous disposez d'un agent opérationnel.
Le harness est autonome ; les passerelles vous permettent de le piloter. Exécutez TrueForge seul et vous bénéficiez de la boucle complète : exécution en bac à sable, ingénierie de contexte, sous-agents, approbations, SDK et API. Vous gérez vos propres modèles et clés MCP. Associez-le aux passerelles AI Gateway et MCP Gateway de TrueFoundry, et chaque appel de modèle, appel d'outil et interaction MCP devient authentifié, budgétisé, soumis à des politiques et consigné sous une identité utilisateur réelle, la couche à laquelle l'examen de sécurité de NetApp accordait réellement de l'importance.