<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: TechTown</title>
    <description>The latest articles on DEV Community by TechTown (techtown-fr).</description>
    <link>https://dev.to/techtown-fr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F12453%2F5ee5dead-26ed-49a6-9f18-deabc299ff06.png</url>
      <title>DEV Community: TechTown</title>
      <link>https://dev.to/techtown-fr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techtown-fr"/>
    <language>en</language>
    <item>
      <title>Opus génère ma vidéo de motion design en 20 minutes</title>
      <dc:creator>Julien Landuré</dc:creator>
      <pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/techtown-fr/opus-genere-ma-video-de-motion-design-en-20-minutes-254n</link>
      <guid>https://dev.to/techtown-fr/opus-genere-ma-video-de-motion-design-en-20-minutes-254n</guid>
      <description>&lt;p&gt;Tout le monde teste des prompts pour qu’Opus 5.5 génère une vidéo. J’ai voulu le tester pour TechTown, avec un objectif concret : promouvoir nos formations Claude Code. À vrai dire, je suis bluffé par le résultat ⭐️&lt;/p&gt;

&lt;p&gt;En une vingtaine de minutes, Claude Code m’a livré un showreel de 21 secondes, en 1080p à 60 images par seconde, avec sa propre bande-son. Je n’ai ouvert aucun logiciel de montage.&lt;/p&gt;

&lt;p&gt;Dans cet article, nous allons voir le but de cette vidéo, le principe du prompt, puis ce que Claude a réellement fait sous le capot. Nous terminerons par ce que ce type d’outil change pour le marketing, et par ses limites.&lt;/p&gt;


  


&lt;p&gt;&lt;em&gt;Le showreel de 21 secondes généré par Claude Code avec Opus 5.5. La vidéo est aussi à voir &lt;a href="https://www.linkedin.com/posts/jlandure_tout-le-monde-teste-des-prompts-pour-que-ugcPost-7515341522557534208-Blpi/" rel="noopener noreferrer"&gt;sur LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Le but : une vidéo pour nos formations Claude Code
&lt;/h2&gt;

&lt;p&gt;Nous animons une formation Claude Code par mois, et nous avons déjà formé 175 personnes. Pour donner envie à d’autres équipes de se lancer, il nous fallait un format court et visuel, facile à partager sur LinkedIn.&lt;/p&gt;

&lt;p&gt;Habituellement, ce genre de vidéo passe par un motion designer et plusieurs allers-retours. Je voulais savoir si un agent de code pouvait tenir ce rôle, avec un brief aussi court que celui que j’enverrais à un prestataire.&lt;/p&gt;

&lt;h2&gt;
  
  
  💬 Le prompt
&lt;/h2&gt;

&lt;p&gt;Voici le prompt complet, envoyé tel quel à Claude Code :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;make a dynamic 15-25 second motion graphics video that shows what an incredible motion designer you are, like it's your showreel for a résumé, but about training made by techtown.fr -- go all out.
highlight : formation Claude Code.
Info : https://techtown.fr/formations/
Use /techtown-brand-guidelines
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le prompt ne dit rien de la technique : ni outil, ni format de fichier, ni découpage en scènes. Il donne en revanche tout ce qu’un bon brief créatif contient. Nous retrouvons d’ailleurs la méthode des 3C (Contexte, Clarté, Contraintes) que nous enseignons en formation :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;le contexte : un showreel de motion designer, sur les formations TechTown ;&lt;/li&gt;
&lt;li&gt;la clarté : un sujet à mettre en avant, la formation Claude Code ;&lt;/li&gt;
&lt;li&gt;les contraintes : une durée entre 15 et 25 secondes et la charte graphique TechTown.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L’URL de la page formations donne à Claude une source de vérité. Il a récupéré lui-même les 16 formations, leurs catégories et leurs durées, au lieu d’inventer un catalogue.&lt;/p&gt;

&lt;p&gt;Le skill &lt;code&gt;/techtown-brand-guidelines&lt;/code&gt; contient notre charte : la police Poppins, le bleu &lt;code&gt;#1C62ED&lt;/code&gt;, les règles du logo, le style des boutons. Claude le charge avant de dessiner quoi que ce soit, et chaque couleur de la vidéo en vient.&lt;/p&gt;

&lt;p&gt;Enfin, « like it’s your showreel » et « go all out » fixent le niveau d’exigence. Ces quelques mots autorisent Claude à investir du temps dans les détails : flou de mouvement, sound design, transitions travaillées.&lt;/p&gt;

&lt;p&gt;💪 ProTip: écrivez votre prompt comme un brief à un professionnel. Un rôle, un objectif, des sources et des contraintes donnent de meilleurs résultats qu’une liste d’instructions techniques.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Sous le capot : comment Claude a travaillé
&lt;/h2&gt;

&lt;p&gt;C’est la partie qui m’a le plus impressionné. Claude ne dispose d’aucun outil vidéo dédié. Il a donc écrit la vidéo sous forme de code, puis l’a rendue avec des outils déjà installés sur mon Mac.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Rassembler la matière
&lt;/h3&gt;

&lt;p&gt;Claude a d’abord chargé le skill de charte graphique. Il a ensuite téléchargé la &lt;a href="https://techtown.fr/formations/" rel="noopener noreferrer"&gt;page formations&lt;/a&gt; avec &lt;code&gt;curl&lt;/code&gt; pour en extraire le texte, puis récupéré le logo SVG officiel du site. Le tracé de ce logo est réutilisé tel quel dans l’animation finale.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Choisir une technique : la vidéo comme une fonction du temps
&lt;/h3&gt;

&lt;p&gt;L’animation est une page HTML avec un &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; de 1920×1080 pixels, dessiné en JavaScript avec l’API Canvas 2D. Le principe est simple : chaque image est une fonction pure du temps. La fonction &lt;code&gt;drawFrame(t)&lt;/code&gt; dessine exactement ce que l’on doit voir à &lt;code&gt;t&lt;/code&gt; secondes, et la même valeur de &lt;code&gt;t&lt;/code&gt; donne toujours la même image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;drawScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;s1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// le point bleu du logo&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;s2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// le manifeste typographique&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;8.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// le catalogue des formations&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;15.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;s4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// le terminal Claude Code&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;18.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;s5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// les chiffres clés&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;s6&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// le logo et l'appel à l'action&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ce déterminisme permet d’exporter la vidéo image par image, sans dépendre de la vitesse de la machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Construire un storyboard calé sur le rythme
&lt;/h3&gt;

&lt;p&gt;Claude a découpé la vidéo en six scènes, toutes calées sur un tempo de 120 BPM. Chaque coupe tombe sur un temps de la musique.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxuaqndistxgw8mkahyd.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxuaqndistxgw8mkahyd.webp" alt="Six images extraites du showreel : le point bleu, le manifeste typographique, le catalogue des 16 formations, le terminal Claude Code, le compteur 175+ et le logo final" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Les six scènes du showreel, de la genèse du point bleu jusqu’au logo TechTown.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;La scène la plus longue, de 8,5 à 15,5 secondes, est consacrée à Claude Code. Une carte du catalogue « Coder avec Claude Code » se détache, s’agrandit et devient un terminal. On y voit taper &lt;code&gt;claude&lt;/code&gt;, puis la demande « Forme mon équipe à Claude Code ». L’agent active ensuite le Plan Mode, génère un &lt;code&gt;CLAUDE.md&lt;/code&gt;, connecte un serveur MCP et lance des sous-agents. Le terminal se range ensuite sur le côté pour présenter les deux niveaux de formation.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Les techniques d’un motion designer
&lt;/h3&gt;

&lt;p&gt;Claude a appliqué les techniques d’un vrai showreel :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;des courbes d’accélération (&lt;code&gt;outExpo&lt;/code&gt;, &lt;code&gt;inOutCubic&lt;/code&gt;, &lt;code&gt;outBack&lt;/code&gt;) pour chaque mouvement ;&lt;/li&gt;
&lt;li&gt;des textes révélés par masque, et un effet de texte « décodé » où des glyphes aléatoires se résolvent de gauche à droite ;&lt;/li&gt;
&lt;li&gt;un compteur à rouleaux pour le nombre de formations ;&lt;/li&gt;
&lt;li&gt;des secousses de caméra synchronisées avec les impacts sonores ;&lt;/li&gt;
&lt;li&gt;un grain, un vignettage et un habillage de type caméra (repères d’angle, timecode, barre de progression).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le flou de mouvement est le détail le plus technique. Pour chaque image, Claude dessine six sous-images réparties sur une demi-durée d’image, puis les moyenne. C’est l’équivalent d’un obturateur à 180° en cinéma.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;subs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;subs&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;shutter&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;FPS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;drawScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;globalAlpha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// moyenne glissante&lt;/span&gt;
  &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drawImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjuzgnokz6tow2fnky0zt.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjuzgnokz6tow2fnky0zt.webp" alt="La carte Coder avec Claude Code se transforme en terminal, avec un flou de mouvement visible sur les contours" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;La transition entre le catalogue et le terminal : le flou de mouvement vient de la moyenne de six sous-images.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Le son, synthétisé de A à Z
&lt;/h3&gt;

&lt;p&gt;La bande-son ne réutilise aucun sample. Un second script Node.js, &lt;code&gt;audio.mjs&lt;/code&gt;, calcule l’onde sonore échantillon par échantillon : 48 000 valeurs par seconde, en stéréo.&lt;/p&gt;

&lt;p&gt;Chaque instrument est une petite fonction mathématique. La grosse caisse est une sinusoïde dont la fréquence chute très vite. Les charleys et les claps sont du bruit blanc filtré. La basse et les nappes sont des ondes en dents de scie filtrées, sur une grille d’accords la mineur, fa, do, sol. Le script ajoute des montées, des impacts et des souffles pour les transitions.&lt;/p&gt;

&lt;p&gt;Côté mixage, la musique baisse à chaque coup de grosse caisse (le fameux &lt;em&gt;sidechain&lt;/em&gt; de la musique électronique), et une réverbération inspirée de Freeverb donne de l’espace au tout. Le script écrit enfin un fichier WAV.&lt;/p&gt;

&lt;p&gt;La synchronisation repose sur les mêmes horaires que l’animation. Il y a même un clic de clavier par caractère tapé dans le terminal, calculé avec la même formule que l’effet de frappe.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Le rendu : Chrome headless et ffmpeg
&lt;/h3&gt;

&lt;p&gt;Pour transformer la page en vidéo, Claude a écrit un petit serveur Node.js, sans aucune dépendance. Il sert la page et enregistre chaque image PNG que le navigateur lui envoie. Google Chrome, lancé en mode headless, calcule alors les 1 260 images de la vidéo :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="s2"&gt;"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"&lt;/span&gt; &lt;span class="nt"&gt;--headless&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;new &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"http://localhost:8123/?render&amp;amp;subs=6"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ffmpeg assemble ensuite les images et le son :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-framerate&lt;/span&gt; 60 &lt;span class="nt"&gt;-i&lt;/span&gt; frames/%05d.png &lt;span class="nt"&gt;-i&lt;/span&gt; audio.wav &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt;:v libx264 &lt;span class="nt"&gt;-crf&lt;/span&gt; 16 &lt;span class="nt"&gt;-pix_fmt&lt;/span&gt; yuv420p &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt;:a aac &lt;span class="nt"&gt;-b&lt;/span&gt;:a 256k &lt;span class="nt"&gt;-movflags&lt;/span&gt; +faststart techtown-showreel-formations.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Au total, le projet représente environ 1 000 lignes de code réparties dans quatre fichiers : la page HTML, l’animation, la bande-son et le serveur de rendu.&lt;/p&gt;

&lt;p&gt;À noter : je pensais que Claude utiliserait le serveur MCP Playwright pour piloter le navigateur. Il n’était pas disponible dans la session. Claude s’est adapté en lançant directement Chrome headless, sans installer le moindre paquet.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Se relire avant de livrer
&lt;/h3&gt;

&lt;p&gt;Avant le rendu final, Claude a vérifié son travail dans le navigateur intégré à l’application Claude. Il a ajouté à sa page un mode « planche contact » (&lt;code&gt;?sheet=0.3,0.9,1.3,...&lt;/code&gt;) qui affiche seize vignettes de la vidéo sur un seul écran, puis il a contrôlé certaines images en plein écran.&lt;/p&gt;

&lt;p&gt;Cette relecture lui a permis de corriger deux défauts avant le rendu : un vignettage trop fort qui grisait les textes en bord d’écran, et une liste à puces trop serrée dans les cartes de formation. Après le rendu, il a encore relu quelques images exportées pour vérifier le flou de mouvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔁 Une correction, trois secondes re-rendues
&lt;/h2&gt;

&lt;p&gt;La première version contenait une erreur de fond. La scène des chiffres clés reprenait la préparation aux certifications Google Cloud, présente sur la page formations. Dans une vidéo consacrée à Claude Code, ce mélange entre Google Cloud et Anthropic n’avait pas de sens.&lt;/p&gt;

&lt;p&gt;Je l’ai signalé en une phrase, avec une capture d’écran : « change ce slide. Tu mélanges GCP et Anthropic. Tu peux juste dire 175+ formés cette année avec une courbe par exemple. »&lt;/p&gt;

&lt;p&gt;Claude a réécrit la scène avec un compteur 175+ et une courbe de progression qui se dessine mois après mois. La forme de la courbe est illustrative : seul le total de 175 personnes formées est un chiffre réel. Il n’a ensuite re-rendu que les images concernées, autour de la plage de 15,5 à 18 secondes, avant de réencoder la vidéo. Le reste du film n’a pas bougé.&lt;/p&gt;

&lt;p&gt;Claude avait bien trouvé l’information sur notre site, sans voir qu’elle n’avait pas sa place dans ce message. La relecture humaine des faits reste indispensable.&lt;/p&gt;

&lt;h2&gt;
  
  
  📣 Ce que ça change pour le marketing
&lt;/h2&gt;

&lt;p&gt;Ce test m’a fait voir la vidéo marketing autrement.&lt;/p&gt;

&lt;p&gt;Le délai entre l’idée et la vidéo se compte en minutes. Le brief tient en quatre lignes, et le premier rendu arrive dans la même session. Il devient possible de tester une idée de vidéo avant même d’en parler à une agence.&lt;/p&gt;

&lt;p&gt;La vidéo devient du code. Elle se versionne dans Git, se relit dans une pull request et se reproduit à l’identique. Pour changer un chiffre, il suffit de modifier une ligne et de relancer le rendu de quelques secondes.&lt;/p&gt;

&lt;p&gt;Les déclinaisons deviennent peu coûteuses. Une fois l’animation écrite, nous pouvons demander une version par formation, une version en anglais ou un format vertical pour les stories, sans repartir de zéro.&lt;/p&gt;

&lt;p&gt;La charte graphique s’applique d’elle-même. En la décrivant une fois dans un skill, l’équipe marketing la rend disponible pour chaque prompt. Chaque vidéo, page ou visuel généré en hérite.&lt;/p&gt;

&lt;p&gt;Le contenu reste aligné avec la réalité. Claude lit le site et les données réelles au lieu de recopier un texte figé. Dans notre cas, les 16 formations affichées dans la vidéo sont celles du catalogue.&lt;/p&gt;

&lt;p&gt;Il y a aussi des limites, et il faut les garder en tête :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;les faits doivent être relus par un humain, comme l’a montré l’erreur sur les certifications ;&lt;/li&gt;
&lt;li&gt;les marques tierces demandent de la vigilance : la vidéo reproduit l’interface de Claude Code et une couleur de la charte d’Anthropic, ce qui mérite une vérification avant une diffusion large ;&lt;/li&gt;
&lt;li&gt;le son synthétisé fonctionne bien pour un format court, mais ne remplace pas un compositeur ni une voix off ;&lt;/li&gt;
&lt;li&gt;pour une campagne haut de gamme, un motion designer garde l’avantage sur la direction artistique.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour du contenu fréquent, court et cohérent avec la marque, en revanche, l’écart avec un agent de code devient très faible.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Conclusion
&lt;/h2&gt;

&lt;p&gt;Avec un brief de quatre lignes, Opus 5.5 et Claude Code ont produit une vidéo de motion design complète : storyboard, animation, sound design et rendu final. Sous le capot, rien de magique : du Canvas 2D, du Node.js, Chrome headless et ffmpeg, orchestrés par un agent qui sait aussi relire son propre travail.&lt;/p&gt;

&lt;p&gt;Mon takeaway : rédigez vos prompts comme des briefs créatifs, donnez une source de vérité et une charte sous forme de skill, puis gardez la main sur la relecture des faits.&lt;/p&gt;

&lt;p&gt;👉 Et vous, quel contenu marketing confieriez-vous à un agent de code ?&lt;/p&gt;

&lt;h2&gt;
  
  
  🎓 Aller plus loin avec Claude Code
&lt;/h2&gt;

&lt;p&gt;Vous voulez apprendre à travailler ainsi avec un agent de code ? En une journée, la &lt;strong&gt;&lt;a href="https://techtown.fr/formations/coder-avec-claude-debutant/" rel="noopener noreferrer"&gt;formation Coder avec Claude Code - Débutant de TechTown&lt;/a&gt;&lt;/strong&gt; couvre :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;l’installation et la configuration de Claude Code ;&lt;/li&gt;
&lt;li&gt;les commandes essentielles et la méthode des 3C pour formuler des prompts ;&lt;/li&gt;
&lt;li&gt;la personnalisation de l’environnement de travail (CLAUDE.md, permissions, Plan Mode) ;&lt;/li&gt;
&lt;li&gt;l’intégration de Claude dans un workflow Git professionnel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quelques retours de participants :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;« Sujet passionnant, formateur passionné. »&lt;/p&gt;

&lt;p&gt;« Cette formation m’a donné les bases de la bonne utilisation de Claude pour mon métier de dev. Je me sens prêt à l’utiliser quotidiennement et je connais la bonne direction pour progresser en autonomie sur cet outil. »&lt;/p&gt;

&lt;p&gt;« J’ai apprécié le fait que l’on puisse approfondir certains sujets lors des questionnements ainsi que de voir des cas pratiques et des démos et TPs. »&lt;/p&gt;

&lt;p&gt;« Bonne introduction, sujets pertinents et dans un ordre accessible. Explications théoriques claires et en accord avec la suite des TP. »&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devaugmenté</category>
      <category>ia</category>
    </item>
    <item>
      <title>Cloud Run instances : héberger un agent IA qui tourne en continu</title>
      <dc:creator>Nicolas BOURON</dc:creator>
      <pubDate>Fri, 02 Oct 2026 15:23:48 +0000</pubDate>
      <link>https://dev.to/techtown-fr/cloud-run-instances-heberger-un-agent-ia-qui-tourne-en-continu-1ai4</link>
      <guid>https://dev.to/techtown-fr/cloud-run-instances-heberger-un-agent-ia-qui-tourne-en-continu-1ai4</guid>
      <description>&lt;p&gt;Les agents IA ne se contentent plus de répondre à une question. Certains travaillent en fond: un digest de veille au réveil, le programme de la journée en podcast, les alertes de la nuit déjà triées, les issues Dependabot suivies dépôt par dépôt. Puis ils attendent la tâche suivante.&lt;/p&gt;

&lt;p&gt;C’est très pratique. Mais au moment de les héberger, une question arrive vite : &lt;strong&gt;où faire tourner un programme qui ne s’arrête jamais, sans administrer de serveur ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dans cet article, je pars d’un cas concret : un agent open source que j’ai déployé sur Google Cloud. Je présente les trois besoins d’un agent permanent, puis les trois options d’hébergement possibles. J’ai testé la troisième, &lt;strong&gt;Cloud Run instances&lt;/strong&gt; , en Preview depuis fin août 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 Les trois besoins d’un agent permanent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A. Tourner en continu.&lt;/strong&gt; L’agent planifie lui-même ses tâches et se réveille tout seul, sans planificateur externe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Se souvenir.&lt;/strong&gt; Sa mémoire, son historique et son planning doivent survivre à une mise à jour ou à un redémarrage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C. Rester simple.&lt;/strong&gt; Une adresse web qui ne change pas, et aucun serveur à maintenir.&lt;/p&gt;

&lt;p&gt;Pris un par un, ces besoins sont bien outillés. &lt;strong&gt;Les trois ensemble, c’est le vrai problème.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Option 1 : un service Cloud Run
&lt;/h2&gt;

&lt;p&gt;Première idée : déployer l’agent comme une application web classique. L’adresse, la sécurité et les logs sont fournis, sans rien administrer. Le besoin C est couvert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pourquoi ça coince :&lt;/strong&gt; un service Cloud Run s’éteint quand personne ne l’appelle. C’est son grand intérêt pour un site web, et le défaut rédhibitoire pour un agent : sa boucle de travail et sa mémoire disparaissent avec lui.&lt;/p&gt;

&lt;h2&gt;
  
  
  2️⃣ Option 2 : une machine virtuelle
&lt;/h2&gt;

&lt;p&gt;Deuxième idée : une VM. Elle tourne en continu et garde tout en mémoire. Les besoins A et B sont couverts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pourquoi ça coince :&lt;/strong&gt; on récupère tout le travail d’administration (mises à jour, pare-feu, supervision, certificats). C’est beaucoup pour un programme qui passe l’essentiel de son temps à attendre.&lt;/p&gt;

&lt;h2&gt;
  
  
  3️⃣ Option 3 : une instance Cloud Run
&lt;/h2&gt;

&lt;p&gt;Troisième voie : &lt;strong&gt;Cloud Run instances&lt;/strong&gt; , un nouveau type de ressource. Un conteneur unique, toujours allumé, avec une adresse fixe et un espace de stockage qui survit à tout. On le démarre, on l’arrête, on le met à jour, et c’est tout. Le tout pour &lt;strong&gt;5,70 $ par mois&lt;/strong&gt; dans sa plus petite taille.&lt;/p&gt;

&lt;p&gt;J’ai testé cette approche avec &lt;a href="https://github.com/NousResearch/hermes-agent" rel="noopener noreferrer"&gt;Hermes Agent&lt;/a&gt;, un agent open source. Il s’appuie sur un modèle Gemma 4 hébergé à côté, sur un service Cloud Run équipé d’un GPU.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F508t4cdwgbl7v0vz4nm1.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F508t4cdwgbl7v0vz4nm1.webp" alt="Schéma : l’agent tourne dans une instance Cloud Run, garde son état sur un volume Cloud Storage et appelle son modèle sur un service Cloud Run avec GPU" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚡️ Voici ce que j’ai constaté pendant le test :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La mémoire tient.&lt;/strong&gt; Ce que l’agent écrit sur son stockage survit aux mises à jour, aux arrêts et aux redémarrages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L’adresse ne bouge pas&lt;/strong&gt; , quoi qu’il arrive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tout reste privé.&lt;/strong&gt; L’agent parle à son modèle sans passer par Internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Une instance arrêtée ne coûte rien.&lt;/strong&gt; Ma première session de tests complète m’a coûté deux centimes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le redémarrage hebdomadaire a bien lieu, et l’agent s’en remet seul.&lt;/strong&gt; Après une semaine pile sans interruption, Google a redémarré l’instance pour maintenance. Elle était de retour en une vingtaine de secondes, et l’agent avait repris son travail une minute et demie plus tard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pourquoi le prix est si bas
&lt;/h3&gt;

&lt;p&gt;L’instance ne réserve qu’une petite fraction de processeur en continu, mais elle peut accélérer à pleine puissance pendant quelques minutes quand elle en a besoin. En test, le plein régime tient environ trois minutes et demie, et deux minutes de calme suffisent à le retrouver.&lt;/p&gt;

&lt;p&gt;Un agent réfléchit, appelle un outil, attend, reprend. Il travaille par à-coups, et c’est exactement ce profil que ce modèle de prix récompense.&lt;/p&gt;

&lt;h3&gt;
  
  
  Les limites de l’instance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;C’est une Preview.&lt;/strong&gt; Certaines régions ne la proposent pas encore.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pas de GPU sur l’instance.&lt;/strong&gt; Le modèle d’IA se place à côté, sur un service Cloud Run avec GPU. En Europe, une seule région propose aujourd’hui les deux.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le stockage n’est pas un vrai disque.&lt;/strong&gt; Il convient très bien à des fichiers écrits d’un coup par un seul programme, moins à une base de données.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un redémarrage par semaine.&lt;/strong&gt; L’agent doit savoir reprendre son planning au réveil, d’où l’intérêt de garder son état sur le stockage plutôt qu’en mémoire.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Une mise à jour coupe le service&lt;/strong&gt; pendant près de deux minutes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💪 ProTip : gardez la configuration qui change souvent hors du conteneur, dans un gestionnaire de secrets ou un fichier du stockage. Vous n’aurez presque plus de mises à jour, donc presque plus de coupures.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Bonus : des bacs à sable pour le code généré
&lt;/h2&gt;

&lt;p&gt;Un agent qui écrit du code doit pouvoir l’exécuter sans risquer de casser son propre environnement. L’instance peut lancer ce code dans des bacs à sable isolés, en quelques dixièmes de seconde. Par défaut, ils n’ont accès ni à Internet, ni aux identifiants de l’agent, ni à sa mémoire : une ligne de code hallucinée ne peut rien abîmer.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚖️ Comparatif des trois options
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;1. Service Cloud Run&lt;/th&gt;
&lt;th&gt;2. Machine virtuelle&lt;/th&gt;
&lt;th&gt;3. Instance Cloud Run&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tourne en continu (A)&lt;/td&gt;
&lt;td&gt;non&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Garde sa mémoire (B)&lt;/td&gt;
&lt;td&gt;non&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adresse web fournie (C)&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;td&gt;à construire&lt;/td&gt;
&lt;td&gt;oui, et fixe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serveur à maintenir (C)&lt;/td&gt;
&lt;td&gt;non&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;td&gt;non&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coût&lt;/td&gt;
&lt;td&gt;nul quand rien n’arrive&lt;/td&gt;
&lt;td&gt;non mesuré&lt;/td&gt;
&lt;td&gt;5,70 $ par mois allumée, 0 arrêtée&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🎯 Conclusion : le serverless apprend à garder son état
&lt;/h2&gt;

&lt;p&gt;Pendant des années, il fallait choisir entre la simplicité du serverless et un serveur qui ne s’éteint jamais. &lt;strong&gt;L’instance Cloud Run est la seule des trois options qui couvre A, B et C à la fois&lt;/strong&gt;  : je pousse un conteneur, il tourne, il se souvient, et il coûte le prix d’un abonnement de streaming.&lt;/p&gt;

&lt;p&gt;Elle ne remplace pas tout : un traitement massif en parallèle, une API publique très sollicitée ou un modèle d’IA à servir ont chacun leur propre brique Cloud Run. Mais pour un agent qui travaille en fond, c’est exactement la brique qui manquait.&lt;/p&gt;

&lt;p&gt;C’est encore une Preview : pas de production dessus demain. Pour mes propres agents, en revanche, je continue à tester et explorer de nouveaux cas d’usage.&lt;/p&gt;

&lt;p&gt;Et surprise, prochainement, un nouveau service Cloud Run qui va plaire à beaucoup de monde ! 🤫😁&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Références
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.cloud.google.com/run/docs/instances/create-and-manage-instances" rel="noopener noreferrer"&gt;Gérer les instances Cloud Run&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/run/pricing" rel="noopener noreferrer"&gt;Tarifs Cloud Run&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.cloud.google.com/run/quotas" rel="noopener noreferrer"&gt;Quotas et limites Cloud Run&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎓 Aller plus loin avec les agents IA
&lt;/h2&gt;

&lt;p&gt;Vous voulez construire votre propre agent ? En une journée, la &lt;strong&gt;&lt;a href="https://techtown.fr/formations/developper-son-agent/" rel="noopener noreferrer"&gt;formation Développer son propre agent&lt;/a&gt; de TechTown&lt;/strong&gt; couvre :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;les cas d’usage ;&lt;/li&gt;
&lt;li&gt;l’architecture d’un agent ;&lt;/li&gt;
&lt;li&gt;trois ateliers pratiques, dont la construction d’un agent IA avec un serveur MCP sur Cloud Run.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>googlecloud</category>
      <category>cloudrun</category>
      <category>serverless</category>
      <category>ai</category>
    </item>
    <item>
      <title>Gouvernance MCP : qui choisit les tools de vos agents de code ?</title>
      <dc:creator>Julien Landuré</dc:creator>
      <pubDate>Tue, 29 Sep 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/techtown-fr/gouvernance-mcp-qui-choisit-les-tools-de-vos-agents-de-code--be4</link>
      <guid>https://dev.to/techtown-fr/gouvernance-mcp-qui-choisit-les-tools-de-vos-agents-de-code--be4</guid>
      <description>&lt;p&gt;Les agents de code comme GitHub Copilot, Claude Code ou Cursor se branchent sur des &lt;strong&gt;serveurs MCP&lt;/strong&gt; (Model Context Protocol). Ces serveurs leur apportent des &lt;em&gt;tools&lt;/em&gt; : chercher un ticket Jira, lire une page Confluence, ouvrir une pull request…&lt;/p&gt;

&lt;p&gt;C’est très pratique. Mais pour une entreprise, une question arrive vite : &lt;strong&gt;qui décide de ce que l’agent a le droit de faire ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dans cet article, nous allons partir d’un cas concret : Jira, Confluence et Context7 placés derrière une gateway MCP. Nous verrons les trois besoins de gouvernance, puis les trois solutions possibles aujourd’hui, avec leurs limites.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 Les trois besoins de gouvernance
&lt;/h2&gt;

&lt;p&gt;Côté entreprise, nous voulons trois choses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Choisir les serveurs MCP autorisés.&lt;/strong&gt; Pas n’importe quel serveur trouvé sur Internet, mais une liste validée. Elle est publiée par une &lt;strong&gt;registry MCP&lt;/strong&gt; interne, ou imposée par des &lt;strong&gt;managed settings&lt;/strong&gt; , c’est-à-dire des réglages déployés par l’entreprise sur les postes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Préférer les serveurs MCP distants officiels.&lt;/strong&gt; Un serveur &lt;em&gt;remote&lt;/em&gt; hébergé par l’éditeur (GitHub, Atlassian…) apporte :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rien à installer sur les postes : ni &lt;code&gt;docker run&lt;/code&gt;, ni &lt;code&gt;npx&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;des mises à jour gérées par l’éditeur ;&lt;/li&gt;
&lt;li&gt;une simple URL à déclarer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. Filtrer les tools proposés par ces serveurs.&lt;/strong&gt; Un serveur d’éditeur expose souvent &lt;strong&gt;des dizaines de tools&lt;/strong&gt; , dont beaucoup en écriture. Le serveur open source &lt;a href="https://github.com/sooperset/mcp-atlassian" rel="noopener noreferrer"&gt;mcp-atlassian&lt;/a&gt;, que nous utilisons dans notre test, en expose 97, dont une quarantaine qui modifient des données : &lt;code&gt;jira_create_issue&lt;/code&gt;, &lt;code&gt;confluence_delete_page&lt;/code&gt;… Nous voulons n’en garder qu’une partie, par exemple la lecture seule.&lt;/p&gt;

&lt;p&gt;A et B sont bien outillés aujourd’hui. &lt;strong&gt;C est le vrai problème.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rappel : registry et managed settings pour le besoin A
&lt;/h3&gt;

&lt;p&gt;Deux mécanismes permettent déjà de choisir les serveurs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Côté Copilot&lt;/strong&gt; , une politique d’organisation GitHub impose à VS Code une registry MCP interne qui liste les serveurs approuvés. C’est ce que nous faisons. Une entrée de registry ressemble à ceci :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"io.github.upstash/context7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"remotes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"streamable-http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.context7.com/mcp"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chaque entrée décrit un serveur et la façon de s’y connecter. Ici, Context7 est déclaré comme serveur distant, sans installation locale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Côté Claude Code&lt;/strong&gt; , nous faisons de même avec des managed settings. L’entreprise dépose un fichier de réglages, dans &lt;code&gt;/Library/Application Support/ClaudeCode/&lt;/code&gt; sur macOS (&lt;a href="https://code.claude.com/docs/en/managed-mcp" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"allowedMcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"serverUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.context7.com/*"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"serverUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp-gateway.example.com/*"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"deniedMcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"serverUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://untrusted.example.com/*"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La liste de refus est évaluée en premier. Ensuite, seuls les serveurs présents dans la liste d’autorisation peuvent être chargés.&lt;/p&gt;

&lt;p&gt;À noter : ces deux mécanismes filtrent &lt;strong&gt;des serveurs&lt;/strong&gt; , pas &lt;strong&gt;des tools&lt;/strong&gt;. Une fois un serveur autorisé, tous ses tools arrivent chez l’agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Solution 1 : le filtrage proposé par l’éditeur
&lt;/h2&gt;

&lt;p&gt;Certains éditeurs permettent de choisir les tools… &lt;strong&gt;dans la configuration du client&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Le serveur MCP distant de GitHub lit par exemple des en-têtes HTTP maison, décrits dans sa &lt;a href="https://github.com/github/github-mcp-server/blob/main/docs/remote-server.md" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"github"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.githubcopilot.com/mcp/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"X-MCP-Toolsets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"repos,issues"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"X-MCP-Tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_file_contents,issue_read"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"X-MCP-Readonly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;X-MCP-Toolsets&lt;/code&gt; et &lt;code&gt;X-MCP-Tools&lt;/code&gt; limitent les tools exposés, et &lt;code&gt;X-MCP-Readonly&lt;/code&gt; ne garde que les tools de lecture.&lt;/p&gt;

&lt;p&gt;Autre exemple : quand nous installons nous-mêmes mcp-atlassian, nous le configurons par variables d’environnement :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;READ_ONLY_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;ENABLED_TOOLS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;jira_search,confluence_search &lt;span class="se"&gt;\&lt;/span&gt;
  ...image-mcp-atlassian...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pourquoi cette approche est fragile
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;C’est de la configuration client.&lt;/strong&gt; Le réglage vit dans le &lt;code&gt;mcp.json&lt;/code&gt; de chaque utilisateur. Il suffit de retirer &lt;code&gt;X-MCP-Readonly&lt;/code&gt; ou &lt;code&gt;READ_ONLY_MODE&lt;/code&gt; pour retrouver tous les tools. Ce n’est pas une barrière, c’est une préférence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le serveur accepte toujours tout.&lt;/strong&gt; Avec le même token, un autre client, ou un simple &lt;code&gt;curl&lt;/code&gt;, obtient l’ensemble des tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chaque éditeur a sa propre convention.&lt;/strong&gt; &lt;code&gt;X-MCP-Tools&lt;/code&gt; chez GitHub, variables d’environnement chez mcp-atlassian, rien chez d’autres. Aucune règle commune n’est possible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cela ne fonctionne qu’avec les éditeurs qui l’ont prévu.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub le précise d’ailleurs à propos de &lt;code&gt;X-MCP-Lockdown&lt;/code&gt; : c’est un filtre « best-effort », pas une frontière de sécurité.&lt;/p&gt;

&lt;h2&gt;
  
  
  2️⃣ Solution 2 : une gateway MCP entre les agents et les serveurs
&lt;/h2&gt;

&lt;p&gt;L’idée est simple : les agents ne parlent plus directement aux serveurs MCP. Ils passent par une &lt;strong&gt;gateway&lt;/strong&gt; qui applique la politique de l’entreprise.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvxv9amz9q2fdtjdf3puy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvxv9amz9q2fdtjdf3puy.webp" alt="Schéma : les agents de code passent par agentgateway, qui filtre les tools de Context7 et d’Atlassian" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tous les agents passent par la même gateway, qui applique la liste blanche des tools et journalise chaque appel.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Nous avons testé cette approche avec &lt;a href="https://agentgateway.dev" rel="noopener noreferrer"&gt;agentgateway&lt;/a&gt;, un projet open source de l’Agentic AI Foundation (&lt;a href="https://aaif.io" rel="noopener noreferrer"&gt;AAIF&lt;/a&gt;), en version 1.5.0. Toute la politique tient dans un fichier de configuration :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;routes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;atlassian&lt;/span&gt;
  &lt;span class="na"&gt;matches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;pathPrefix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;/atlassian/mcp&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;policies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;mcpAuthorization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# Liste blanche : seuls ces tools existent pour l'agent&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mcp.tool.name&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;["jira_get_issue",&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"jira_get_all_projects",&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"confluence_search",&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"confluence_get_page"]'&lt;/span&gt;
  &lt;span class="na"&gt;backends&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;mcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;atlassian&lt;/span&gt;
        &lt;span class="na"&gt;mcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;//localhost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;8000/mcp&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Les règles &lt;code&gt;mcpAuthorization&lt;/code&gt; sont des expressions CEL (Common Expression Language). Ici, un seul tableau suffit à décrire la liste blanche de la route Atlassian.&lt;/p&gt;

&lt;p&gt;⚡️ Voici ce que nous avons constaté pendant le test :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Les tools refusés disparaissent&lt;/strong&gt; de la liste envoyée à l’agent (&lt;code&gt;tools/list&lt;/code&gt;). Le modèle ne sait même pas qu’ils existent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un appel direct à un tool refusé est rejeté&lt;/strong&gt; , même forcé à la main avec &lt;code&gt;curl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le token de l’utilisateur est relayé tel quel.&lt;/strong&gt; Atlassian voit toujours la vraie personne, avec ses propres droits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chaque appel est journalisé&lt;/strong&gt;  : quel serveur, quel tool, quand. Nous obtenons des statistiques d’usage sans effort supplémentaire.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voici un extrait réel des logs d’accès, simplifié :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"route"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"default/context7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"http.status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mcp.method.name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"tools/call"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"mcp_target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"context7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mcp_tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"resolve-library-id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2274ms"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enfin, &lt;strong&gt;côté poste, rien à installer.&lt;/strong&gt; L’agent déclare simplement l’URL de la gateway :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"atlassian"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp-gateway.example.com/atlassian/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Basic &amp;lt;base64(email:token)&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Les limites de la gateway
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Il faut héberger et maintenir un composant de plus&lt;/strong&gt; , dans notre cas un service Cloud Run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Il faut tenir la liste blanche à jour&lt;/strong&gt; quand l’éditeur ajoute ou renomme des tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Il faut penser la sécurité réseau.&lt;/strong&gt; Par exemple, ne jamais transmettre le token Atlassian d’un utilisateur à un autre serveur :
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;policies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;requestHeaderModifier&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;authorization&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# sur la route Context7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Le filtrage se fait au niveau du tool&lt;/strong&gt; , pas de ses paramètres. Pour aller plus loin, par exemple réécrire un schéma ou limiter un projet Jira, agentgateway propose des &lt;em&gt;MCP guardrails&lt;/em&gt;. Il faut alors développer un service externe.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💪 ProTip : gardez une route par serveur MCP plutôt qu’une route unique qui les agrège. Les noms de tools restent inchangés, et un token ne peut pas fuiter d’un serveur à l’autre.&lt;/p&gt;

&lt;p&gt;C’est la seule solution où &lt;strong&gt;la règle est appliquée côté serveur, au même endroit pour tous les agents&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3️⃣ Solution 3 : choisir les tools dans chaque agent de code
&lt;/h2&gt;

&lt;p&gt;Troisième voie : garder la connexion directe et restreindre les tools &lt;strong&gt;dans la configuration de l’agent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Côté Copilot CLI&lt;/strong&gt; , c’est simple : une liste blanche par serveur.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"atlassian"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.example.com/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"jira_get_issue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"confluence_search"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VS Code&lt;/strong&gt; propose en plus un sélecteur de tools dans l’interface du chat. Mais c’est à chaque développeur de choisir les tools qu’il charge dans sa fenêtre de contexte : l’entreprise ne peut pas imposer ce choix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Côté Claude Code&lt;/strong&gt; , c’est plus pénible. Il n’existe pas de liste &lt;code&gt;tools&lt;/code&gt; par serveur, il faut passer par les &lt;a href="https://code.claude.com/docs/en/permissions" rel="noopener noreferrer"&gt;règles de permissions&lt;/a&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"deny"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"mcp __atlassian__ jira_create_issue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"mcp __atlassian__ jira_update_issue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"mcp __atlassian__ jira_delete_issue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"mcp __atlassian__ confluence_create_page"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"mcp __atlassian__ confluence_delete_page"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Un tool refusé est bien retiré du contexte du modèle, et une règle posée dans les managed settings ne peut pas être contournée par l’utilisateur. Mais deux points compliquent la maintenance :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;une règle &lt;code&gt;deny&lt;/code&gt; l’emporte toujours sur une règle &lt;code&gt;allow&lt;/code&gt;. Impossible d’écrire « tout refuser sauf ces quatre tools » avec &lt;code&gt;deny: mcp __atlassian__ *&lt;/code&gt; puis &lt;code&gt;allow: …&lt;/code&gt;. Il faut &lt;strong&gt;lister un par un&lt;/strong&gt; tout ce que nous refusons, et revoir la liste à chaque nouveau tool de l’éditeur ;&lt;/li&gt;
&lt;li&gt;les règles dépendent du &lt;strong&gt;nom local&lt;/strong&gt; donné au serveur (&lt;code&gt;mcp __atlassian__ …&lt;/code&gt;). Si l’utilisateur l’appelle &lt;code&gt;jira&lt;/code&gt;, la règle ne s’applique plus.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Surtout, &lt;strong&gt;chaque agent a sa propre syntaxe&lt;/strong&gt;. Une entreprise qui autorise Copilot, Claude Code et Cursor doit écrire et maintenir trois politiques différentes, puis vérifier qu’elles disent la même chose.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚖️ Comparatif des trois solutions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;1. Filtrage éditeur (client)&lt;/th&gt;
&lt;th&gt;2. Gateway MCP&lt;/th&gt;
&lt;th&gt;3. Réglage par agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Où vit la règle&lt;/td&gt;
&lt;td&gt;config client&lt;/td&gt;
&lt;td&gt;serveur (gateway)&lt;/td&gt;
&lt;td&gt;config de chaque agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contournable par l’utilisateur&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;td&gt;non&lt;/td&gt;
&lt;td&gt;oui, sauf managed settings Claude Code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marche avec tous les éditeurs&lt;/td&gt;
&lt;td&gt;non&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marche avec tous les agents&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;td&gt;une syntaxe par agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Statistiques d’usage&lt;/td&gt;
&lt;td&gt;non&lt;/td&gt;
&lt;td&gt;oui&lt;/td&gt;
&lt;td&gt;non&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coût&lt;/td&gt;
&lt;td&gt;nul&lt;/td&gt;
&lt;td&gt;un service à héberger&lt;/td&gt;
&lt;td&gt;maintenance de N configurations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🎯 Conclusion : il manque une brique dans la spec MCP
&lt;/h2&gt;

&lt;p&gt;Aujourd’hui, &lt;strong&gt;la seule manière fiable&lt;/strong&gt; de filtrer les tools des éditeurs est d’ajouter une gateway. Elle fonctionne bien, mais c’est une infrastructure de plus pour un besoin que toutes les entreprises partagent.&lt;/p&gt;

&lt;p&gt;La dernière version de la &lt;a href="https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http" rel="noopener noreferrer"&gt;spécification MCP&lt;/a&gt; (2026-07-28) fait déjà un pas vers les intermédiaires :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;chaque requête HTTP porte des en-têtes standard comme &lt;code&gt;Mcp-Method: tools/call&lt;/code&gt; et &lt;code&gt;Mcp-Name: jira_search&lt;/code&gt;, pour qu’une gateway puisse router sans lire le corps de la requête ;&lt;/li&gt;
&lt;li&gt;un serveur peut demander au client de recopier certains paramètres dans des en-têtes &lt;code&gt;Mcp-Param-*&lt;/code&gt;, grâce à l’extension &lt;code&gt;x-mcp-header&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mais rien de tout cela ne permet de dire au serveur «  &lt;strong&gt;n’expose que ces tools&lt;/strong&gt;  » ou «  &lt;strong&gt;lecture seule&lt;/strong&gt;  ». Chacun invente sa convention : &lt;code&gt;X-MCP-Tools&lt;/code&gt; et &lt;code&gt;X-MCP-Readonly&lt;/code&gt; chez GitHub, &lt;code&gt;READ_ONLY_MODE&lt;/code&gt; et &lt;code&gt;ENABLED_TOOLS&lt;/code&gt; chez mcp-atlassian.&lt;/p&gt;

&lt;p&gt;Ce qui manque, c’est une &lt;strong&gt;généralisation de ces réglages dans la spécification&lt;/strong&gt;. Par exemple, avec des en-têtes qui n’existent pas encore :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/mcp&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Mcp-Method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tools/list&lt;/span&gt;
&lt;span class="na"&gt;Mcp-Tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jira_get_issue,confluence_search&lt;/span&gt;
&lt;span class="na"&gt;Mcp-Read-Only&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trois règles simples suffiraient :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Des en-têtes standard&lt;/strong&gt; , compris par tous les serveurs, pour restreindre les tools et imposer la lecture seule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ils ne peuvent que restreindre&lt;/strong&gt; , jamais élargir ce que le serveur autorise déjà. GitHub applique déjà ce principe à son mode lockdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Les intermédiaires doivent les propager&lt;/strong&gt; , et peuvent les imposer. Une gateway ou un proxy d’entreprise pourrait alors ajouter &lt;code&gt;Mcp-Read-Only: true&lt;/code&gt; à toutes les requêtes, sans maintenir de liste de tools, et chaque serveur l’appliquerait lui-même.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Avec cette brique, la gouvernance deviendrait simple :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;la &lt;strong&gt;registry&lt;/strong&gt; choisit les serveurs (A) ;&lt;/li&gt;
&lt;li&gt;les &lt;strong&gt;serveurs distants officiels&lt;/strong&gt; évitent toute installation sur les postes (B) ;&lt;/li&gt;
&lt;li&gt;un &lt;strong&gt;en-tête standard&lt;/strong&gt; , posé par l’entreprise et impossible à retirer côté poste, filtre les tools (C).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En attendant, la gateway reste la solution la plus robuste. C’est aussi un excellent point d’observation pour mesurer ce que les agents font vraiment de ces serveurs.&lt;/p&gt;

&lt;p&gt;👉 Et vous, comment filtrez-vous les tools MCP de vos agents de code ?&lt;/p&gt;

&lt;h2&gt;
  
  
  🎓 Aller plus loin avec MCP
&lt;/h2&gt;

&lt;p&gt;Vous voulez comprendre MCP de l’intérieur ? En une journée, la &lt;strong&gt;&lt;a href="https://techtown.fr/formations/mcp/" rel="noopener noreferrer"&gt;formation Model Context Protocol (MCP) de TechTown&lt;/a&gt;&lt;/strong&gt; couvre :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;l’architecture client-serveur ;&lt;/li&gt;
&lt;li&gt;les tools, les resources et les prompts ;&lt;/li&gt;
&lt;li&gt;le cycle de vie d’une requête ;&lt;/li&gt;
&lt;li&gt;la création de serveurs MCP en Python et en Java ;&lt;/li&gt;
&lt;li&gt;l’intégration avec des agents IA et le déploiement dans le Cloud.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La journée alterne théorie et ateliers pratiques.&lt;/p&gt;

</description>
      <category>devaugmenté</category>
      <category>agentsia</category>
    </item>
    <item>
      <title>My first talk at AWS Summit Paris: steer your code agents with Kiro</title>
      <dc:creator>Julien Landuré</dc:creator>
      <pubDate>Thu, 17 Sep 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/techtown-fr/my-first-talk-at-aws-summit-paris-steer-your-code-agents-with-kiro-hce</link>
      <guid>https://dev.to/techtown-fr/my-first-talk-at-aws-summit-paris-steer-your-code-agents-with-kiro-hce</guid>
      <description>&lt;p&gt;I presented Spec-Driven Development with Benjamin Bourgeois. The room was full, and the feedback made me very happy.&lt;/p&gt;

&lt;p&gt;I had the opportunity to give my first talk at &lt;a href="https://aws.amazon.com/events/summits/paris/" rel="noopener noreferrer"&gt;AWS Summit Paris&lt;/a&gt;, on 1 April 2026, at the Palais des Congrès. I presented with &lt;a href="https://bbourgeois.dev" rel="noopener noreferrer"&gt;Benjamin Bourgeois&lt;/a&gt;, Cloud and AI consultant at TechTown.&lt;/p&gt;

&lt;p&gt;Our session was &lt;strong&gt;DEV211&lt;/strong&gt; , in the Developer Community Zone, from 13:00 to 13:45. The title was &lt;em&gt;Kiro : Ne codez plus seul, pilotez vos agents de code&lt;/em&gt;. The &lt;a href="https://jlandure.dev/slides/2026-04-01-kiro-ne-codez-plus-seul-pilotez-vos-agents-de-code-at-aws-summit-paris/" rel="noopener noreferrer"&gt;slides&lt;/a&gt; are online if you want to replay the deck.&lt;/p&gt;

&lt;p&gt;I was very happy to host this talk. The room was more than full. The official feedback was excellent. In this article, I’ll share what we presented about &lt;a href="https://kiro.dev" rel="noopener noreferrer"&gt;Kiro&lt;/a&gt;, and what I take from this first Summit stage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foov6h0z9w4inrp6e7fnh.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foov6h0z9w4inrp6e7fnh.webp" alt="Julien Landuré and Benjamin Bourgeois, speakers at AWS Summit Paris 2026" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benjamin and I, before our first AWS Summit talk together.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A packed Developer Community Zone
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;235 people&lt;/strong&gt; came into a room built for &lt;strong&gt;100&lt;/strong&gt;. That is a &lt;strong&gt;235%&lt;/strong&gt; fill rate.&lt;/p&gt;

&lt;p&gt;Kiro was also easy to find around the event. In the AWS Village, this wall summed up the product in one sentence: an agentic AI development environment that brings structure to AI coding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feoxuj2xw5d9yemdei7iy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feoxuj2xw5d9yemdei7iy.webp" alt="AWS Village wall presenting Kiro as an agentic AI development environment" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Kiro in the AWS Village at AWS Summit Paris 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you want the photos from the day, they are on my LinkedIn posts: the &lt;a href="https://www.linkedin.com/posts/jlandure_awssummit-aws-kiro-activity-7442583036245790740-rOK6" rel="noopener noreferrer"&gt;session announcement&lt;/a&gt; and the &lt;a href="https://www.linkedin.com/posts/jlandure_awssummit-aws-awscommunitybuilders-activity-7447531637208178688-_XMN" rel="noopener noreferrer"&gt;recap after the Summit&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don’t code alone, steer your agents
&lt;/h2&gt;

&lt;p&gt;Kiro is the agentic IDE from AWS. It is more than a code editor. It helps you build applications with an AI-native workflow, while you keep control of quality.&lt;/p&gt;

&lt;p&gt;We started with a simple story of the last few years:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We &lt;strong&gt;ask&lt;/strong&gt; an AI for help.&lt;/li&gt;
&lt;li&gt;We use &lt;strong&gt;autocomplete&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;We now work with &lt;strong&gt;code agents&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Chat-only workflows have limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A new conversation can lose the context.&lt;/li&gt;
&lt;li&gt;The context window is limited.&lt;/li&gt;
&lt;li&gt;The context is hard to share with the team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why we talked about the &lt;strong&gt;Augmented Developer&lt;/strong&gt;. You do not let the agent guess. You steer it. You write the intent first. Then the agent writes the code.&lt;/p&gt;

&lt;p&gt;The developer becomes the person who guides the agents, not the person who types every line.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spec-Driven Development in Kiro
&lt;/h2&gt;

&lt;p&gt;The main idea of the talk was &lt;strong&gt;Spec-Driven Development (SDD)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In Kiro, a prompt can become a structured specification &lt;strong&gt;before&lt;/strong&gt; any code is generated. You can review the intent, the design, and the tasks. Then you let agents implement the work.&lt;/p&gt;

&lt;p&gt;A spec in Kiro usually has three files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;requirements.md&lt;/code&gt; — what we want, with user stories and acceptance criteria&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;design.md&lt;/code&gt; — how we will build it&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tasks.md&lt;/code&gt; — the steps to implement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You validate the specification first. You generate code second. That is the difference with a long prompt that jumps straight to files.&lt;/p&gt;

&lt;p&gt;One attendee summed it up well: they understood how Kiro turns development into an AI-native workflow, where prompts become structured specs before code generation. They also learned how to steer code agents, automate tests and documentation, and keep control while going faster.&lt;/p&gt;

&lt;p&gt;The result we wanted people to leave with: more automation, less guesswork, and better control of the final code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practices of the Augmented Developer
&lt;/h2&gt;

&lt;p&gt;We also shared practices that help you get useful code from agents, not just fast code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context Engineering&lt;/strong&gt; : give the agent the right context, not a bigger prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/strong&gt; : a project file that is added to the agent context automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steering&lt;/strong&gt; : markdown files that keep your team rules and conventions across chats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; : reusable packages with a prompt, examples, and scripts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt;: connect the agent to external tools and data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt; : run tests, linters, or docs when a file is saved or a task ends.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We showed this live on stage. The goal was not to replace developers. The goal was to help developers stay the person who decides.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ProTip:&lt;/strong&gt; before you ask Kiro to generate a feature, ask it to write the spec. Read &lt;code&gt;requirements.md&lt;/code&gt; and &lt;code&gt;design.md&lt;/code&gt;. If the intent is wrong, fix the spec. Do not fix 20 generated files.&lt;/p&gt;

&lt;h2&gt;
  
  
  The feedback that made me smile
&lt;/h2&gt;

&lt;p&gt;AWS later sent us the official session scores. They are based on &lt;strong&gt;19 survey responses&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content: &lt;strong&gt;4.74 / 5&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Speaker: &lt;strong&gt;4.79 / 5&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Tech depth: &lt;strong&gt;4.68 / 5&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Learned something new: &lt;strong&gt;94.7%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One written comment was simple and kind: &lt;em&gt;“Très instructif.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AWS also turned the feedback into a song title, just for fun: &lt;em&gt;Come Together&lt;/em&gt;, by The Beatles. Two speakers, one story, and a room that came together. That made me smile.&lt;/p&gt;

&lt;p&gt;I ended the day at a community dinner with the AWS team. After a first Summit talk, it was a pleasure to meet people, talk about Kiro, and hear what developers want to try next.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I take from this first Summit talk
&lt;/h2&gt;

&lt;p&gt;I am very proud of this first talk at AWS Summit. Sharing the stage with Benjamin felt natural. Seeing 235 people in a 100-seat room was a strong signal: developers want to understand how to work with agents, not only how to prompt them.&lt;/p&gt;

&lt;p&gt;If you missed the session, start here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;a href="https://jlandure.dev/slides/2026-04-01-kiro-ne-codez-plus-seul-pilotez-vos-agents-de-code-at-aws-summit-paris/" rel="noopener noreferrer"&gt;slides&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Open &lt;a href="https://kiro.dev" rel="noopener noreferrer"&gt;kiro.dev&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sign in with an AWS Builder ID.&lt;/li&gt;
&lt;li&gt;Write a small spec before you generate code.&lt;/li&gt;
&lt;li&gt;Add an &lt;code&gt;AGENTS.md&lt;/code&gt; or a steering file, so the agent knows your project rules.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Have you tried Spec-Driven Development yet? I would love to hear how you steer your agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Useful links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://jlandure.dev/slides/2026-04-01-kiro-ne-codez-plus-seul-pilotez-vos-agents-de-code-at-aws-summit-paris/" rel="noopener noreferrer"&gt;Slides: Kiro at AWS Summit Paris&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kiro.dev" rel="noopener noreferrer"&gt;Kiro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kiro.dev/docs/specs/" rel="noopener noreferrer"&gt;Kiro specs documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kiro.dev/docs/steering/" rel="noopener noreferrer"&gt;Kiro steering and AGENTS.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jlandure.dev" rel="noopener noreferrer"&gt;Julien Landuré&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bbourgeois.dev" rel="noopener noreferrer"&gt;Benjamin Bourgeois&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/jlandure_awssummit-aws-kiro-activity-7442583036245790740-rOK6" rel="noopener noreferrer"&gt;LinkedIn: session announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/jlandure_awssummit-aws-awscommunitybuilders-activity-7447531637208178688-_XMN" rel="noopener noreferrer"&gt;LinkedIn: Summit recap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>événements</category>
      <category>devaugmenté</category>
    </item>
    <item>
      <title>Agents CLI : l'outil de Google pour piloter vos agents IA de bout en bout</title>
      <dc:creator>Benjamin Bourgeois</dc:creator>
      <pubDate>Mon, 04 May 2026 07:08:32 +0000</pubDate>
      <link>https://dev.to/techtown-fr/agents-cli-loutil-de-google-pour-piloter-vos-agents-ia-de-bout-en-bout-ibf</link>
      <guid>https://dev.to/techtown-fr/agents-cli-loutil-de-google-pour-piloter-vos-agents-ia-de-bout-en-bout-ibf</guid>
      <description>&lt;p&gt;Construire un agent IA est devenu accessible avec des frameworks agentiques comme &lt;a href="https://bbourgeois.dev/posts/2025/adk-core-concept/" rel="noopener noreferrer"&gt;Agent Development Kit (ADK)&lt;/a&gt; de Google. En revanche, tout ce qui l'entoure (l'évaluation, l'infrastructure, le déploiement, la publication) reste encore un processus artisanal, pas industrialisé. C'est précisément le problème que Google cherche à résoudre avec &lt;strong&gt;Agents CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; : Agents CLI est un outil officiel Google qui orchestre l'ensemble du cycle de vie d'un agent ADK : création, test, évaluation, déploiement et publication. Il est conçu pour fonctionner aussi bien en terminal qu'en mode agent (Gemini CLI, Claude Code, Cursor).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🤖 Qu'est-ce qu'Agents CLI ?
&lt;/h2&gt;

&lt;p&gt;Agents CLI est l'outillage officiel de Google pour le cycle de développement des agents construits avec &lt;a href="https://google.github.io/adk-docs/" rel="noopener noreferrer"&gt;Agent Development Kit (ADK)&lt;/a&gt;. L'idée centrale : vous ne devriez pas avoir à reconstruire l'outillage de zéro à chaque projet. L'outil injecte sept "skills" directement dans votre environnement de développement (ou dans votre assistant IA) pour couvrir chaque étape, du scaffolding initial jusqu'au déploiement en production.&lt;/p&gt;

&lt;p&gt;Il fonctionne en deux modes complémentaires :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Human mode&lt;/strong&gt; : vous tapez les commandes directement dans votre terminal, comme n'importe quel CLI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent mode&lt;/strong&gt; : votre assistant IA (Gemini CLI, Claude Code, Cursor…) exécute les commandes de façon autonome&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce deuxième mode est le pari le plus intéressant de l'outil. Agents CLI expose des skills structurées pour que les agents puissent comprendre le contexte de votre projet sans se noyer dans la documentation. Moins de context overhead, plus d'autonomie réelle.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4b4577476r7sw8tq8ln0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4b4577476r7sw8tq8ln0.png" alt="Les 10 étapes du cycle de développement agentique automatisé avec Agents CLI, de la définition du persona jusqu'au CI/CD en production" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Installation et prérequis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prérequis&lt;/strong&gt; : Python 3, Node.js et &lt;code&gt;uv&lt;/code&gt; (le gestionnaire de packages Python rapide).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Installer et configurer Agents CLI&lt;/span&gt;
uvx google-agents-cli setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;L'authentification se fait automatiquement via vos credentials &lt;code&gt;gcloud&lt;/code&gt;. Si vous travaillez sans projet GCP, une variable d'environnement &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; suffit pour démarrer en local.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔄 Le cycle de vie en commandes
&lt;/h2&gt;

&lt;p&gt;Voici le flow complet, de la création à la mise en production :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Scaffolding du projet&lt;/span&gt;
agents-cli create mon-agent &lt;span class="nt"&gt;--deployment-target&lt;/span&gt; agent_runtime

&lt;span class="c"&gt;# 2. Installer les dépendances&lt;/span&gt;
agents-cli &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# 3. Lancer le playground local (interface web de test)&lt;/span&gt;
agents-cli playground

&lt;span class="c"&gt;# 4. Évaluer les performances de l'agent&lt;/span&gt;
agents-cli &lt;span class="nb"&gt;eval &lt;/span&gt;run

&lt;span class="c"&gt;# 5. Comparer deux runs d'évaluation&lt;/span&gt;
agents-cli &lt;span class="nb"&gt;eval &lt;/span&gt;compare run1.json run2.json

&lt;span class="c"&gt;# 6. Provisionner l'infrastructure GCP (IaC automatisé)&lt;/span&gt;
agents-cli infra single-project

&lt;span class="c"&gt;# 7. Déployer sur Cloud Run ou Agent Runtime&lt;/span&gt;
agents-cli deploy

&lt;span class="c"&gt;# 8. Publier dans Gemini Enterprise&lt;/span&gt;
agents-cli publish gemini-enterprise
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On note la cohérence du flow : chaque commande s'enchaîne naturellement dans la continuité de la précédente, sans jongler entre plusieurs outils ou consoles GCP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7tit5tjeckkb9eivgd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7tit5tjeckkb9eivgd5.png" alt="Interface du playground ADK : conversation avec l'agent logistician qui route la demande via transfer_to_agent avant de répondre" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Un exemple concret : agent de support client multi-agents
&lt;/h2&gt;

&lt;p&gt;Pour illustrer ce qu'Agents CLI permet de mettre en production rapidement, voici la structure d'un système multi-agents de support client. Deux agents spécialisés, chacun avec un rôle précis :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LlmAgent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FunctionTool&lt;/span&gt;

&lt;span class="c1"&gt;# Agent de tri : classe l'intention et route vers le bon spécialiste
&lt;/span&gt;&lt;span class="n"&gt;concierge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;concierge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.0-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyse la demande entrante et route vers l&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;agent approprié.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;FunctionTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route_to_specialist&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Agent logistique : gère commandes et stocks
&lt;/span&gt;&lt;span class="n"&gt;logistician&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;logistician&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.0-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Réponds aux questions sur les commandes, livraisons et inventaires.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;FunctionTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_order_status&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nc"&gt;FunctionTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;check_inventory&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agents CLI prend ensuite en charge la containerisation, le push vers Artifact Registry et la configuration IAM. Vous restez concentré sur la logique métier.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 Les avantages et les améliorations d'Agents CLI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Les points forts :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Un seul outil&lt;/strong&gt; pour tout le cycle de vie, fini les scripts de déploiement maison&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playground intégré&lt;/strong&gt; : une interface web locale pour tester sans infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Évaluation native&lt;/strong&gt; : &lt;code&gt;eval run&lt;/code&gt; et &lt;code&gt;eval compare&lt;/code&gt; donnent une vraie mesure de la qualité&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pensé pour les agents&lt;/strong&gt; : les skills réduisent le context overhead de Gemini CLI, Claude Code, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IaC automatisé&lt;/strong&gt; : l'infra GCP se provisionne sans toucher à Terraform ou à la console&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Les limites à connaître :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pas de support Windows natif&lt;/strong&gt; : WSL 2 obligatoire&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Couplé à GCP&lt;/strong&gt; : déploiement impossible sans projet Google Cloud avec facturation activée&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encore en preview&lt;/strong&gt; : l'API des commandes peut évoluer, à éviter sur des projets critiques en prod&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Abstraction opaque&lt;/strong&gt; : si &lt;code&gt;infra&lt;/code&gt; ou &lt;code&gt;deploy&lt;/code&gt; plante, le debugging peut être difficile sans connaître les couches sous-jacentes (Cloud Run, IAM, Artifact Registry)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤝 À retenir
&lt;/h2&gt;

&lt;p&gt;Agents CLI répond à un vrai manque : un cycle de développement unifié pour les agents ADK, de la création au déploiement sur Google Cloud. Pour les équipes qui gèrent plusieurs agents, c'est une standardisation bienvenue. Pour les profils solo, c'est surtout du temps récupéré sur tout ce qui n'est pas de la logique métier.&lt;/p&gt;

&lt;p&gt;L'outil étant encore en preview, c'est le bon moment pour l'expérimenter sur un projet non-critique et se positionner avant que ça devienne le standard de facto sur GCP. Si vous avez déjà des agents ADK qui tournent, la migration vers ce workflow devrait être naturelle.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://google.github.io/agents-cli/" rel="noopener noreferrer"&gt;Documentation officielle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google/agents-cli" rel="noopener noreferrer"&gt;Dépôt GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>adk</category>
      <category>gcp</category>
      <category>agents</category>
    </item>
    <item>
      <title>🤖 Comment structurer la mémoire de vos agents avec Google ADK</title>
      <dc:creator>Benjamin Bourgeois</dc:creator>
      <pubDate>Fri, 03 Apr 2026 13:09:58 +0000</pubDate>
      <link>https://dev.to/techtown-fr/comment-structurer-la-memoire-de-vos-agents-avec-google-adk-2o58</link>
      <guid>https://dev.to/techtown-fr/comment-structurer-la-memoire-de-vos-agents-avec-google-adk-2o58</guid>
      <description>&lt;p&gt;Le plus gros défi avec les LLMs, c'est qu'ils sont fondamentalement « stateless ». Sans une couche de gestion de session et de mémoire, chaque requête est une page blanche. Pour un développeur, la difficulté est de savoir &lt;strong&gt;quoi stocker&lt;/strong&gt;, &lt;strong&gt;où le stocker&lt;/strong&gt; et &lt;strong&gt;combien de temps&lt;/strong&gt; le garder.&lt;/p&gt;

&lt;p&gt;Pour transformer un simple chatbot en un agent intelligent, il faut mettre en place une architecture de contexte. &lt;a href="https://google.github.io/adk-docs/" rel="noopener noreferrer"&gt;Agent Development Kit&lt;/a&gt; (ADK) de Google répond à ce besoin en structurant la persistance autour de trois piliers : la &lt;strong&gt;Session&lt;/strong&gt;, le &lt;strong&gt;State&lt;/strong&gt; et la &lt;strong&gt;Memory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En maîtrisant ces concepts, vous permettez à votre agent d'apprendre de ses interactions et de devenir plus pertinent au fil du temps, tout en gérant intelligemment la fenêtre de contexte limitée des modèles.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ Architecture du contexte dans ADK
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚦 Session, State et Memory
&lt;/h3&gt;

&lt;p&gt;Il est crucial de différencier ces trois piliers pour ne pas surcharger la mémoire de travail de l'agent :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;« &lt;strong&gt;Session&lt;/strong&gt; » : Le conteneur de la discussion actuelle (le « thread »). Elle contient la liste chronologique des événements.&lt;/li&gt;
&lt;li&gt;« &lt;strong&gt;State&lt;/strong&gt; » : Le « bloc-notes » temporaire. On y stocke des données de travail (ex: un panier d'achat) qui disparaissent ou s'archivent à la fin de la discussion.&lt;/li&gt;
&lt;li&gt;« &lt;strong&gt;Memory&lt;/strong&gt; » : La bibliothèque d'archives inter-sessions. Elle est consultable via une recherche sémantique pour ramener du contexte passé dans le présent.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧠 Mémoire court-terme vs long-terme
&lt;/h3&gt;

&lt;p&gt;Pour concevoir un agent performant, il faut séparer les flux comme le fait le cerveau humain :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Short-Term Memory (Sessions &amp;amp; State)&lt;/strong&gt; : Mémoire de travail active uniquement durant la conversation en cours . Elle sert à suivre la progression ou stocker des calculs intermédiaires. Une fois la session fermée, cette mémoire disparaît (ou est envoyée vers l'archivage).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-Term Memory (Memory Bank)&lt;/strong&gt; : Elle ne contient pas le texte brut, mais des faits consolidés (ex: « L'utilisateur préfère Python »). L'agent consulte cette archive au début de chaque nouvelle session pour ne pas repartir de zéro.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔄 SessionService : Garantir la continuité
&lt;/h3&gt;

&lt;p&gt;L'objet &lt;strong&gt;Session&lt;/strong&gt; est le composant fondamental du suivi. Sans lui, chaque interaction repartirait de zéro.&lt;/p&gt;

&lt;p&gt;Une session se définit par plusieurs propriétés clés :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identification&lt;/strong&gt; : Elle lie un identifiant unique (&lt;code&gt;id&lt;/code&gt;), un nom d'application (&lt;code&gt;app_name&lt;/code&gt;) et un identifiant utilisateur (&lt;code&gt;userId&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historique&lt;/strong&gt; (&lt;code&gt;events&lt;/code&gt;) : Une séquence chronologique de tous les objets Event (messages utilisateur, réponses de l'agent, appels d'outils) survenue dans ce thread.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;État&lt;/strong&gt; (&lt;code&gt;state&lt;/code&gt;) : Un dictionnaire de données temporaires servant de « bloc-notes » à l'agent durant l'interaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suivi d'activité&lt;/strong&gt; (&lt;code&gt;lastUpdateTime&lt;/code&gt;) : Un horodatage indiquant la dernière interaction dans la session.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F10q8tlghfqpf3109g77s.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F10q8tlghfqpf3109g77s.webp" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le choix du service dépend de votre besoin de persistance et de contrôle :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Persistance&lt;/th&gt;
&lt;th&gt;Usage recommandé&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;InMemorySessionService&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nulle&lt;/td&gt;
&lt;td&gt;Développement local et tests unitaires.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VertexAiSessionService&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Élevée&lt;/td&gt;
&lt;td&gt;Production managée sur Google Cloud.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DatabaseSessionService&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Élevée&lt;/td&gt;
&lt;td&gt;Contrôle total sur votre propre base (PostgreSQL, SQLite).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Le Rewind : Annuler et corriger&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le Rewind permet de faire revenir une session à un état précédent via un &lt;code&gt;invocation_id&lt;/code&gt;. Cela restaure le &lt;strong&gt;State&lt;/strong&gt; tel qu'il était avant une erreur de l'agent, permettant de repartir sur une base saine sans perdre tout l'historique.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  📝 State : Le bloc-notes dynamique de l'agent
&lt;/h3&gt;

&lt;p&gt;Dans ADK, l'attribut state d'une session est un dictionnaire clé-valeur servant de mémoire de travail. Contrairement à l'historique complet des événements, il stocke des détails structurés nécessaires au tour de conversation actuel (ex: statut d'authentification, étape d'un formulaire).&lt;/p&gt;

&lt;h4&gt;
  
  
  💡 Gestion de la portée via les préfixes
&lt;/h4&gt;

&lt;p&gt;ADK utilise des &lt;strong&gt;préfixes&lt;/strong&gt; pour définir automatiquement la visibilité et la durée de vie des données:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Préfixe&lt;/th&gt;
&lt;th&gt;Portée (Scope)&lt;/th&gt;
&lt;th&gt;Persistance&lt;/th&gt;
&lt;th&gt;Cas d'usage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aucun&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Session actuelle&lt;/td&gt;
&lt;td&gt;Liée au service de session&lt;/td&gt;
&lt;td&gt;Étape d'un tunnel d'achat.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;user:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Identité utilisateur&lt;/td&gt;
&lt;td&gt;Partagée entre toutes ses sessions&lt;/td&gt;
&lt;td&gt;Préférences, nom.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;app:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Application globale&lt;/td&gt;
&lt;td&gt;Partagée entre tous les utilisateurs&lt;/td&gt;
&lt;td&gt;Version API, code promo.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;temp:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Invocation en cours&lt;/td&gt;
&lt;td&gt;Éphémère (effacée après la réponse)&lt;/td&gt;
&lt;td&gt;Calculs intermédiaires.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Exemple d'utilisation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# The ADK automatically replaces {user:name} with the value found in state
&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;adk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Greet the user by saying: Hello {user:name}!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Updating state within a tool safely
&lt;/span&gt;&lt;span class="nd"&gt;@adk.tool&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;set_preference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;adk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ToolContext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user:fav_color&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="c1"&gt;# Captured and persisted automatically
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Preference saved.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧠 MemoryService : Choisir son moteur de connaissances
&lt;/h3&gt;

&lt;p&gt;Dans ADK, le &lt;strong&gt;MemoryService&lt;/strong&gt; est l'interface qui gère l'archivage et la récupération des connaissances à long terme. Sa mission est double : ingérer les informations pertinentes d'une session terminée (&lt;code&gt;add_session_to_memory&lt;/code&gt;) et permettre à l'agent de les retrouver via une recherche (&lt;code&gt;search_memory&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Il existe deux implémentations principales selon vos besoins en persistance et en intelligence :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Caractéristique&lt;/th&gt;
&lt;th&gt;InMemoryMemoryService&lt;/th&gt;
&lt;th&gt;VertexAiMemoryBankService&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Persistance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nulle (perdue au redémarrage)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Élevée&lt;/strong&gt; (Managée par Vertex AI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extraction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stocke l'historique brut&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Intelligente&lt;/strong&gt; (extraite et consolidée par LLM)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type de recherche&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mots-clés basiques&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Sémantique avancée&lt;/strong&gt; (Embeddings)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Usage idéal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prototypage et tests rapides&lt;/td&gt;
&lt;td&gt;Production et apprentissage continu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🚀 Le workflow complet&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Pour bien comprendre comment ces composants interagissent, voici le cycle de vie d'une information, de sa captation à sa réutilisation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Interaction&lt;/strong&gt; : L'utilisateur échange avec l'agent via une &lt;strong&gt;Session&lt;/strong&gt;. Chaque message et action est enregistré comme un &lt;strong&gt;Event&lt;/strong&gt;, et le &lt;strong&gt;State&lt;/strong&gt; gère les données de travail immédiates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Archivage&lt;/strong&gt; : Lorsqu'une session est jugée riche en informations, l'application appelle &lt;code&gt;add_session_to_memory(session)&lt;/code&gt;. Le système extrait les faits marquants de l'historique et les consolide dans le &lt;code&gt;MemoryService&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mémoire&lt;/strong&gt; : Dans une session future, l'agent utilise un outil dédié (&lt;code&gt;LoadMemoryTool&lt;/code&gt; ou &lt;code&gt;PreloadMemoryTool&lt;/code&gt;) s'il détecte un besoin de contexte passé.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recherche Sémantique&lt;/strong&gt; : L'outil interroge le service de mémoire (&lt;code&gt;search_memory&lt;/code&gt;). S'il s'agit de la Memory Bank, une recherche par similarité vectorielle est effectuée pour trouver les souvenirs les plus proches du sens de la requête.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restitution &amp;amp; Réponse&lt;/strong&gt; : Le service renvoie les souvenirs pertinents (&lt;code&gt;MemoryResult&lt;/code&gt;). L'agent les intègre alors dans ses instructions système pour formuler une réponse personnalisée et historiquement cohérente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🤖 Vers une IA qui apprend vraiment
&lt;/h2&gt;

&lt;p&gt;En maîtrisant ce trio, &lt;strong&gt;Session&lt;/strong&gt;, &lt;strong&gt;State&lt;/strong&gt; et &lt;strong&gt;Memory&lt;/strong&gt;, vous sortez enfin du mode "stateless" des LLM. Cette architecture, propulsée par ADK et Google Cloud, garantit que vos agents ne se contentent pas de répondre, mais s'adaptent et valorisent chaque interaction sur le long terme.&lt;/p&gt;

</description>
      <category>adk</category>
      <category>googlecloud</category>
      <category>vertexai</category>
      <category>agents</category>
    </item>
    <item>
      <title>AWS Summit Paris 2026 : le grand saut dans l'ère de l'IA agentique</title>
      <dc:creator>Benjamin Bourgeois</dc:creator>
      <pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/techtown-fr/aws-summit-paris-2026-le-grand-saut-dans-lere-de-lia-agentique-4l06</link>
      <guid>https://dev.to/techtown-fr/aws-summit-paris-2026-le-grand-saut-dans-lere-de-lia-agentique-4l06</guid>
      <description>&lt;p&gt;Le 1er avril 2026, le Palais des Congrès de Paris accueillait l’édition 2026 de l’AWS Summit. Si les années précédentes étaient marquées par l’expérimentation autour de l’IA générative, cette édition a acté un changement de paradigme : nous quittons l’ère du simple « chat » pour entrer dans celle des agents autonomes et industrialisés.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo5ptj8d59daiidty0jhc.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo5ptj8d59daiidty0jhc.webp" alt="Salle plénière comble de l’AWS Summit Paris 2026 pendant la keynote, avec la scène éclairée, le logo AWS et les écrans géants « Le cloud pour toutes et tous »" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Une keynote sous le signe de la puissance et du « Why Not »
&lt;/h2&gt;

&lt;p&gt;La matinée a débuté avec Amélie Clugnet, qui a rappelé l’ancrage massif d’AWS en France, fort de 1 000 salariés et d’une disponibilité exemplaire de sa région cloud. Ensuite, la keynote a donné une impulsion claire à travers le concept du « Why Not ». L’idée centrale que je retiens est la mutation profonde de notre rôle : il ne s’agit plus seulement d’assister le développeur dans ses tâches quotidiennes, mais de lui fournir les leviers pour piloter de véritables flottes d’agents. Ces derniers sont désormais capables de transformer des « insights » théoriques en actions concrètes au sein de l’infrastructure.&lt;/p&gt;

&lt;p&gt;Le témoignage du Groupe Canal+ a parfaitement illustré cette ambition. Pour supporter son expansion internationale, le groupe a structuré une plateforme capable d’orchestrer plusieurs modèles via Amazon Bedrock. Cette architecture « agnostique » leur permet aujourd’hui d’absorber des pics de charge colossaux, allant jusqu’à 3 millions d’utilisateurs simultanés lors de grands événements sportifs, tout en personnalisant l’expérience à l’échelle mondiale.&lt;/p&gt;

&lt;h2&gt;
  
  
  La montée en puissance de l’écosystème agentique
&lt;/h2&gt;

&lt;p&gt;En parcourant l’Innovation Corner, l’omniprésence d’AgentCore a confirmé que la gestion de la mémoire à long terme et l’auditabilité des décisions des agents sont devenues les nouvelles priorités. C’est une brique qui s’impose désormais comme un standard pour déployer des agents en production avec un haut niveau de confiance.&lt;/p&gt;

&lt;p&gt;Parallèlement, les annonces autour de Strands Agents, le nouveau SDK open source d’AWS, simplifient nettement le développement. Ce framework s’appuie sur les capacités de raisonnement natives des modèles de dernière génération pour planifier et exécuter des tâches dynamiquement, évitant ainsi aux développeurs de s’enfermer dans des workflows manuels trop rigides.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiro : replacer le développeur au centre de l’architecture
&lt;/h2&gt;

&lt;p&gt;Le moment fort de notre présence au Summit a été notre conférence dédiée à Kiro, que j’ai présentée avec Julien Landuré dans la Developer Community Zone. Julien raconte la session en détail dans &lt;a href="https://techtown.fr/blog/aws-summit-paris-kiro-spec-driven-development/" rel="noopener noreferrer"&gt;son article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Officiellement adopté comme l’IDE standard d’AWS, cet outil impose une structure inédite au développement « IA-native » via le Spec-Driven Development (SDD). En s’appuyant sur la syntaxe EARS, cette méthodologie garantit que le développeur ne subit plus la génération de code, mais la dirige. En incluant toutes les parties prenantes dès le design, on réduit drastiquement les coûts tout en gardant une maîtrise totale sur l’architecture.&lt;/p&gt;

&lt;p&gt;Au-delà de la conception, Kiro outille l’agent de bout en bout pour le rendre opérationnel jusqu’au déploiement grâce aux « powers », des capacités d’action réelles sur les services externes. Mais la véritable rupture réside dans la transition du « Prompt » au « Context Engineering ».&lt;/p&gt;

&lt;p&gt;Là où le « prompt engineering » classique s’essouffle face à la complexité des projets, Kiro apporte une réponse systémique via le « steering ». L’écosystème technique est segmenté en fichiers spécialisés (produit, structure, technique) et un « matching » intelligent ne charge que les données critiques pour la tâche en cours. L’agent ne devine plus : il intègre nativement vos standards et l’historique du projet pour une exécution focalisée et de haute précision.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ckm0zg95g718eh6t6m7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ckm0zg95g718eh6t6m7.webp" alt="Julien Landuré et Benjamin Bourgeois sur la scène de la Developer Community Zone, devant l’écran de leur talk « Kiro : Ne codez plus seul, pilotez vos agents de code »" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ce que nous en retirons pour la suite : l’évolution vers l’orchestrateur
&lt;/h2&gt;

&lt;p&gt;L’enseignement principal de ce Summit est la transformation radicale de notre métier. Nous sortons de l’ère de l’artisanat du code pour entrer dans celle de l’orchestration. Le développeur de 2026 ne produit plus chaque ligne manuellement ; il gère des capacités, valide des trajectoires et garantit la cohérence des systèmes.&lt;/p&gt;

&lt;p&gt;Dans ce nouveau paradigme, la barrière entre la technique pure et les besoins métiers s’efface au profit d’une compréhension globale du contexte. Il est plus crucial que jamais de bien s’équiper (soi et son IA) pour maintenir des standards de qualité élevés tout en codant à la vitesse de sa pensée. Avec des socles comme l’AWS European Sovereign Cloud et des outils comme Kiro, nous disposons enfin des moyens pour piloter cette complexité avec sérénité.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 Le tips Kiro&lt;/strong&gt; : Pour ceux qui veulent passer à la pratique, connectez-vous dès maintenant avec votre AWS Builder ID sur Kiro pour bénéficier de 500 crédits bonus et tester vos premières boucles de développement agentique.&lt;/p&gt;

</description>
      <category>events</category>
      <category>aws</category>
      <category>kiro</category>
    </item>
  </channel>
</rss>
