[{"data":1,"prerenderedAt":2600},["ShallowReactive",2],{"/fr-fr/blog/understanding-flows-multi-agent-workflows":3,"navigation-fr-fr":1820,"banner-fr-fr":2252,"footer-fr-fr":2260,"blog-post-authors-fr-fr-Itzik Gan Baruch":2499,"blog-related-posts-fr-fr-understanding-flows-multi-agent-workflows":2514,"blog-promotions-fr-fr":2539,"next-steps-fr-fr":2591},{"id":4,"title":5,"authors":6,"body":8,"category":1800,"date":1801,"description":1802,"extension":1803,"externalUrl":1804,"faq":1804,"featured":1805,"heroImage":1806,"meta":1807,"navigation":926,"path":1808,"seo":1809,"slug":1811,"stem":1812,"tags":1813,"template":1818,"updatedDate":1804,"__hash__":1819},"blogPosts/fr-fr/blog/understanding-flows-multi-agent-workflows.md","Comprendre les flows : workflows multi-agents",[7],"Itzik Gan Baruch",{"type":9,"value":10,"toc":1777},"minimark",[11,24,39,44,47,52,86,89,93,96,184,188,248,252,262,267,403,407,416,430,434,437,442,474,478,486,513,516,520,523,529,539,545,563,582,588,603,616,619,623,634,639,665,669,675,678,1537,1543,1546,1561,1565,1568,1572,1575,1613,1616,1620,1623,1641,1644,1648,1651,1669,1672,1676,1696,1700,1708,1712,1753,1756,1764,1773],[12,13,14],"p",{},[15,16,17,18,23],"em",{},"Bienvenue dans la partie 4 de notre guide en huit parties, ",[19,20,22],"a",{"href":21},"/fr-fr/blog/gitlab-duo-agent-platform-complete-getting-started-guide/","Démarrer avec GitLab Duo Agent Platform",", dans laquelle vous apprendrez à maîtriser la construction et le déploiement d'agents d'IA et de workflows au sein de votre cycle de développement. Suivez des tutoriels qui vous mèneront de votre première interaction à des workflows d'automatisation prêts pour la production avec une personnalisation complète.",[25,26,27],"blockquote",{},[12,28,29,30,38],{},"🎯 Essayez ",[31,32,33],"strong",{},[19,34,37],{"href":35,"rel":36},"https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/?utm_medium=blog&utm_source=blog&utm_campaign=eg_emea_x_trial_x_fr_blog_fr",[],"GitLab Duo Agent Platform"," dès aujourd'hui !",[40,41,43],"h2",{"id":42},"introduction-aux-flows","Introduction aux flows",[12,45,46],{},"Les flows sont des combinaisons d'un ou de plusieurs agents qui collaborent ensemble. Ils orchestrent des workflows multi-étapes pour résoudre des problèmes complexes et s'exécutent sur la plateforme de calcul de GitLab.",[12,48,49],{},[31,50,51],{},"Caractéristiques clés des flows :",[53,54,55,62,68,74,80],"ul",{},[56,57,58,61],"li",{},[31,59,60],{},"Orchestration multi-agents :"," ils combinent plusieurs agents spécialisés.",[56,63,64,67],{},[31,65,66],{},"Intégrés :"," ils s'exécutent sur la plateforme de calcul, aucun environnement supplémentaire nécessaire.",[56,69,70,73],{},[31,71,72],{},"Pilotés par des événements :"," ils sont déclenchés par des mentions, des assignations ou peuvent être assignés en tant que relecteur.",[56,75,76,79],{},[31,77,78],{},"Asynchrones :"," ils s'exécutent en arrière-plan pendant que vous continuez à travailler.",[56,81,82,85],{},[31,83,84],{},"Workflows complets :"," ils gèrent les tâches de bout en bout, de l'analyse à l'implémentation.",[12,87,88],{},"Les flows sont des workflows autonomes capables de rassembler du contexte, de prendre des décisions, d'exécuter des changements et de livrer des résultats pendant que vous vous concentrez sur d'autres tâches.",[40,90,92],{"id":91},"flows-vs-agents-quelle-est-la-différence","Flows vs agents : quelle est la différence ?",[12,94,95],{},"Les agents travaillent avec vous de manière interactive. Les flows travaillent pour vous de manière autonome.",[97,98,99,115],"table",{},[100,101,102],"thead",{},[103,104,105,109,112],"tr",{},[106,107,108],"th",{},"Aspect",[106,110,111],{},"Agents",[106,113,114],{},"Flows",[116,117,118,132,145,158,171],"tbody",{},[103,119,120,126,129],{},[121,122,123],"td",{},[31,124,125],{},"Interactions",[121,127,128],{},"Chat interactif",[121,130,131],{},"Exécution autonome",[103,133,134,139,142],{},[121,135,136],{},[31,137,138],{},"Quand les utiliser",[121,140,141],{},"Questions, conseils et exécution interactive de tâches",[121,143,144],{},"Workflows multi-étapes autonomes",[103,146,147,152,155],{},[121,148,149],{},[31,150,151],{},"Implication de l'utilisateur",[121,153,154],{},"Conversation active",[121,156,157],{},"Déclenchement et revue des résultats",[103,159,160,165,168],{},[121,161,162],{},[31,163,164],{},"Temps d'exécution",[121,166,167],{},"Réponses en temps réel",[121,169,170],{},"Traitement en arrière-plan",[103,172,173,178,181],{},[121,174,175],{},[31,176,177],{},"Complexité",[121,179,180],{},"Tâches effectuées par un agent unique",[121,182,183],{},"Orchestration multi-agents",[40,185,187],{"id":186},"vue-densemble-des-types-de-flows","Vue d'ensemble des types de flows",[97,189,190,206],{},[100,191,192],{},[103,193,194,197,200,203],{},[106,195,196],{},"Type",[106,198,199],{},"Interface",[106,201,202],{},"Responsable",[106,204,205],{},"Cas d'utilisation",[116,207,208,228],{},[103,209,210,219,222,225],{},[121,211,212],{},[31,213,214],{},[19,215,218],{"href":216,"rel":217},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/",[],"Agent de base",[121,220,221],{},"Actions dans l'interface utilisateur (UI), interface IDE",[121,223,224],{},"GitLab",[121,226,227],{},"Développement logiciel, développeur, correction de pipeline CI/CD, conversion en GitLab CI/CD, revue de code, détection des faux positifs SAST",[103,229,230,239,242,245],{},[121,231,232],{},[31,233,234],{},[19,235,238],{"href":236,"rel":237},"https://docs.gitlab.com/user/duo_agent_platform/flows/custom/",[],"Agent personnalisable",[121,240,241],{},"Mention, assignation, assignation comme relecteur",[121,243,244],{},"Vous",[121,246,247],{},"Exemples : migration/modernisation à grande échelle, automatisation des releases, gestion des mises à jour des dépendances",[40,249,251],{"id":250},"flows-de-base","Flows de base",[12,253,254,255,261],{},"Les flows de base sont des workflows prêts pour la production créés et maintenus par GitLab. Ils sont accessibles via des contrôles UI dédiés ou des interfaces ",[19,256,260],{"href":257,"rel":258,"title":259},"https://about.gitlab.com/fr-fr/blog/what-is-an-ide/",[],"Qu'est-ce qu'un IDE ?","IDE",".",[263,264,266],"h3",{"id":265},"flows-de-base-actuellement-disponibles","Flows de base actuellement disponibles",[97,268,269,285],{},[100,270,271],{},[103,272,273,276,279,282],{},[106,274,275],{},"Flow",[106,277,278],{},"Emplacement",[106,280,281],{},"Comment y accéder",[106,283,284],{},"Idéal pour",[116,286,287,307,327,346,365,384],{},[103,288,289,298,301,304],{},[121,290,291],{},[31,292,293],{},[19,294,297],{"href":295,"rel":296},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/software_development/",[],"Software Development (Développement logiciel)",[121,299,300],{},"IDE (VS Code, JetBrains, Visual Studio)",[121,302,303],{},"Onglet Flows dans l'IDE",[121,305,306],{},"Implémentation de fonctionnalités, refactorisation complexe, modifications de plusieurs fichiers",[103,308,309,318,321,324],{},[121,310,311],{},[31,312,313],{},[19,314,317],{"href":315,"rel":316},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/developer/",[],"Developer (Développeur)",[121,319,320],{},"Interface utilisateur web GitLab",[121,322,323],{},"Bouton « Générer une merge request avec Duo » dans les tickets",[121,325,326],{},"Fonctionnalités bien définies, corrections de bogues avec étapes claires",[103,328,329,338,340,343],{},[121,330,331],{},[31,332,333],{},[19,334,337],{"href":335,"rel":336},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/fix_pipeline/",[],"Fix CI/CD Pipeline (Correction de pipeline CI/CD)",[121,339,320],{},[121,341,342],{},"Interface d'échec de pipeline",[121,344,345],{},"Débogage de pipeline, problèmes de configuration CI/CD",[103,347,348,357,359,362],{},[121,349,350],{},[31,351,352],{},[19,353,356],{"href":354,"rel":355},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/convert_to_gitlab_ci/",[],"Convert to GitLab CI/CD (Conversion en GitLab CI/CD)",[121,358,320],{},[121,360,361],{},"Bouton « Convertir en GitLab CI/CD » sur fichier Jenkins (Jenkinsfile)",[121,363,364],{},"Migration de Jenkins vers GitLab CI/CD",[103,366,367,376,378,381],{},[121,368,369],{},[31,370,371],{},[19,372,375],{"href":373,"rel":374},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/",[],"Code Review (Revue de code)",[121,377,320],{},[121,379,380],{},"Assignation comme relecteur sur une merge request",[121,382,383],{},"Revue de code automatisée avec analyse et feedback d'IA native",[103,385,386,395,397,400],{},[121,387,388],{},[31,389,390],{},[19,391,394],{"href":392,"rel":393},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/sast_false_positive_detection/",[],"SAST false positive detection (Détection des faux positifs SAST)",[121,396,320],{},[121,398,399],{},"Résultats de scans de sécurité",[121,401,402],{},"Identification et filtrage automatique des faux positifs dans les résultats SAST",[40,404,406],{"id":405},"flows-personnalisables","Flows personnalisables",[12,408,409,410,415],{},"Les flows personnalisables sont des workflows définis en YAML que vous créez pour les besoins spécifiques de votre équipe. Ils s'exécutent dans ",[19,411,414],{"href":412,"rel":413,"title":414},"https://about.gitlab.com/fr-fr/blog/what-is-gitlab-runner/",[],"GitLab Runner"," et peuvent être déclenchés par des événements GitLab.",[25,417,418],{},[12,419,420,423,424,429],{},[31,421,422],{},"🎯 Essayez les flows :"," visionnez notre ",[19,425,428],{"href":426,"rel":427},"https://gitlab.navattic.com/custom-flows",[],"démo interactive des flows personnalisables"," pour explorer comment les créer et les configurer.",[263,431,433],{"id":432},"pourquoi-créer-des-flows-personnalisés","Pourquoi créer des flows personnalisés ?",[12,435,436],{},"Les flows personnalisables automatisent les tâches multi-étapes répétitives spécifiques au workflow de votre équipe. Contrairement aux flows de base qui servent des objectifs généraux, les flows personnalisables sont adaptés aux processus, outils et exigences de votre organisation.",[12,438,439],{},[31,440,441],{},"Cas d'utilisation courants :",[53,443,444,450,456,462,468],{},[56,445,446,449],{},[31,447,448],{},"Revue de code automatisée :"," processus de revue multi-étapes (scan de sécurité → vérification de qualité → validation de style)",[56,451,452,455],{},[31,453,454],{},"Vérification de la conformité :"," vérification des exigences réglementaires, de la conformité des licences ou des politiques de sécurité pour chaque merge request",[56,457,458,461],{},[31,459,460],{},"Génération de documentation :"," mise à jour automatique de la documentation API, des fichiers README ou des changelogs basée sur les modifications de code",[56,463,464,467],{},[31,465,466],{},"Gestion des dépendances :"," scans de sécurité hebdomadaires, mises à jour automatisées et rapports de vulnérabilité",[56,469,470,473],{},[31,471,472],{},"Tests personnalisés :"," suites de tests spécialisées pour votre pile technologique ou vos tests d'intégration",[263,475,477],{"id":476},"exemple-concret","Exemple concret",[12,479,480,481,485],{},"Une entreprise fintech crée un flow de conformité qui s'exécute sur chaque merge request. Lorsqu'il est déclenché par ",[482,483,484],"code",{},"@compliance-flow",", le flow exécute les étapes suivantes :",[487,488,489,495,501,507],"ol",{},[56,490,491,494],{},[31,492,493],{},"L'agent Security Analyst"," scanne le code pour détecter les violations PCI-DSS et vérifie les données sensibles exposées.",[56,496,497,500],{},[31,498,499],{},"L'agent Code Review"," vérifie que les modifications respectent les standards de codage sécurisé et les bonnes pratiques.",[56,502,503,506],{},[31,504,505],{},"L'agent de documentation"," vérifie que les modifications apportées à l'API incluent une documentation mise à jour.",[56,508,509,512],{},[31,510,511],{},"L'agent de synthèse"," agrège les résultats et publie un rapport de conformité avec un statut réussite/échec.",[12,514,515],{},"L'ensemble de la revue de conformité se déroule automatiquement en 5 à 10 minutes, avec des vérifications cohérentes sur toutes les merge requests.",[263,517,519],{"id":518},"comment-déclencher-des-flows-personnalisés","Comment déclencher des flows personnalisés ?",[12,521,522],{},"Les flows personnalisés peuvent être déclenchés de plusieurs façons :",[12,524,525,528],{},[31,526,527],{},"1. Via des mentions dans les tickets/merge requests :"," mentionnez le flow dans un commentaire pour le déclencher. Exemple pour un flow de génération de documentation :",[530,531,537],"pre",{"className":532,"code":534,"language":535,"meta":536},[533],"language-text","@doc-generator Generate API documentation for this feature\n","text","",[482,538,534],{"__ignoreMap":536},[12,540,541,544],{},[31,542,543],{},"2. En assignant le flow à un ticket ou une merge request :"," assignez le flow en utilisant :",[53,546,547,553],{},[56,548,549,552],{},[31,550,551],{},"L'interface utilisateur de GitLab :"," cliquez sur le bouton « Assigner » sur le ticket/la merge request et sélectionnez le flow.",[56,554,555,558,559,562],{},[31,556,557],{},"Commande :"," utilisez la commande ",[482,560,561],{},"/assign"," dans un commentaire. Exemple :",[530,564,568],{"className":565,"code":566,"language":567,"meta":536,"style":536},"language-shell shiki shiki-themes github-light","/assign @doc-generator\n","shell",[482,569,570],{"__ignoreMap":536},[571,572,575,578],"span",{"class":573,"line":574},"line",1,[571,576,561],{"class":577},"s7eDp",[571,579,581],{"class":580},"sYBdl"," @doc-generator\n",[12,583,584,587],{},[31,585,586],{},"3. En assignant le flow en tant que relecteur :"," assignez le flow comme relecteur sur une merge request en utilisant :",[53,589,590,595],{},[56,591,592,594],{},[31,593,551],{}," cliquez sur le bouton « Assigner un relecteur » sur la merge request et sélectionnez le flow.",[56,596,597,558,599,602],{},[31,598,557],{},[482,600,601],{},"/assign reviewer"," dans un commentaire. Exemple :",[530,604,606],{"className":565,"code":605,"language":567,"meta":536,"style":536},"/assign_reviewer @doc-reviewer\n",[482,607,608],{"__ignoreMap":536},[571,609,610,613],{"class":573,"line":574},[571,611,612],{"class":577},"/assign_reviewer",[571,614,615],{"class":580}," @doc-reviewer\n",[12,617,618],{},"Chacune de ces méthodes déclenche automatiquement le flow pour qu'il exécute ses tâches.",[263,620,622],{"id":621},"comment-créer-des-flows-personnalisés","Comment créer des flows personnalisés",[12,624,625,626,629,630,633],{},"Les flows personnalisés sont créés via l'interface de GitLab sous ",[31,627,628],{},"Automatisation → Flows → Nouveau flow"," dans votre projet, ou depuis ",[31,631,632],{},"Explorer → Catalogue d'IA → Flows → Nouveau flow",". Vous définissez votre flow à l'aide d'une configuration YAML qui précise les composants, les prompts, le routage et le flow d'exécution. Le schéma YAML vous permet de créer des workflows multi-agents sophistiqués avec un contrôle précis du comportement et de l’orchestration des agents.",[12,635,636],{},[31,637,638],{},"Éléments clés d'un flow personnalisé :",[53,640,641,647,653,659],{},[56,642,643,646],{},[31,644,645],{},"Composants :"," définissez les agents et les étapes de votre workflow",[56,648,649,652],{},[31,650,651],{},"Prompts :"," configurez le comportement et les instructions du modèle d'IA",[56,654,655,658],{},[31,656,657],{},"Routeurs :"," contrôlez le flow entre les composants",[56,660,661,664],{},[31,662,663],{},"Set d'outils :"," indiquez quels outils de l'API GitLab les agents peuvent utiliser",[263,666,668],{"id":667},"exemple-de-flow-personnalisé-yaml","Exemple de flow personnalisé YAML",[12,670,671,674],{},[31,672,673],{},"Contexte :"," cet exemple montre un flow d'implémentation de fonctionnalité pour une plateforme de réservation de voyages. Lorsqu'un développeur crée un ticket avec des exigences de fonctionnalité, il peut déclencher ce flow pour analyser automatiquement les exigences, examiner le code source, implémenter la solution et créer une merge request, le tout sans intervention manuelle.",[12,676,677],{},"Voici la configuration YAML :",[530,679,683],{"className":680,"code":681,"language":682,"meta":536,"style":536},"language-yaml shiki shiki-themes github-light","version: \"v1\"\nenvironment: ambient\ncomponents:\n  - name: \"implement_feature\"\n    type: AgentComponent\n    prompt_id: \"implementation_prompt\"\n    inputs:\n      - from: \"context:goal\"\n        as: \"user_goal\"\n      - from: \"context:project_id\"\n        as: \"project_id\"\n    toolset:\n      - \"get_issue\"\n      - \"get_repository_file\"\n      - \"list_repository_tree\"\n      - \"find_files\"\n      - \"blob_search\"\n      - \"create_file\"\n      - \"create_commit\"\n      - \"create_merge_request\"\n      - \"create_issue_note\"\n    ui_log_events:\n      - \"on_agent_final_answer\"\n      - \"on_tool_execution_success\"\n      - \"on_tool_execution_failed\"\n\nprompts:\n  - name: \"Cheapflights Feature Implementation\"\n    prompt_id: \"implementation_prompt\"\n    unit_primitives: []\n    prompt_template:\n      system: |\n        You are an expert full-stack developer specializing in travel booking platforms, specifically Cheapflights.\n\n        Your task is to:\n        1. Extract the issue IID from the goal (look for \"Issue IID: XX\")\n        2. Use get_issue with project_id={{project_id}} and issue_iid to retrieve issue details\n        3. Analyze the requirements for the flight search feature\n        4. Review the existing codebase using list_repository_tree, find_files, and get_repository_file\n        5. Design and implement the solution following Cheapflights best practices\n        6. Create all necessary code files using create_file (call multiple times for multiple files)\n        7. Commit the changes using create_commit\n        8. Create a merge request using create_merge_request\n        9. Post a summary comment to the issue using create_issue_note with the MR link\n\n        Cheapflights Domain Expertise:\n        - Flight search and booking systems (Amadeus, Sabre, Skyscanner APIs)\n        - Fare comparison and pricing strategies\n        - Real-time availability and inventory management\n        - Travel industry UX patterns\n        - Performance optimization for high-traffic flight searches\n\n        Code Standards:\n        - Clean, maintainable code (TypeScript/JavaScript/Python/React)\n        - Proper state management for React components\n        - RESTful API endpoints with comprehensive error handling\n        - Mobile-first responsive design\n        - Proper timezone handling (use moment-timezone or date-fns-tz)\n        - WCAG 2.1 accessibility compliance\n\n        Flight-Specific Best Practices:\n        - Accurate fare calculations (base fare + taxes + fees + surcharges)\n        - Flight duration calculations across timezones\n        - Search filter logic (price range, number of stops, airlines, departure/arrival times)\n        - Sort algorithms (best value, fastest, cheapest)\n        - Handle edge cases: date line crossing, daylight saving time, red-eye flights\n        - Currency amounts use proper decimal handling (avoid floating point errors)\n        - Dates use ISO 8601 format\n        - Flight codes follow IATA standards (3-letter airport codes)\n\n        Implementation Requirements:\n        - No TODOs or placeholder comments\n        - All functions must be fully implemented\n        - Include proper TypeScript types or Python type hints\n        - Add JSDoc/docstring comments for all functions\n        - Comprehensive error handling and input validation\n        - Basic unit tests for critical functions\n        - Performance considerations for handling large result sets\n\n        CRITICAL - Your final comment on the issue MUST include:\n        - **Implementation Summary**: Brief description of what was implemented\n        - **Files Created/Modified**: List of all files with descriptions\n        - **Key Features**: Bullet points of main functionality\n        - **Technical Approach**: Brief explanation of architecture/patterns used\n        - **Testing Notes**: How to test the implementation\n        - **Merge Request Link**: Direct link to the created MR (format: [View Merge Request](MR_URL))\n\n        IMPORTANT TOOL USAGE:\n        - Extract the issue IID from the goal first (e.g., \"Issue IID: 12\" means issue_iid=12)\n        - Use get_issue with project_id={{project_id}} and issue_iid=\u003Cextracted_iid>\n        - Create multiple files by calling create_file multiple times (once per file)\n        - Use create_commit to commit all files together with a descriptive commit message\n        - Use create_merge_request to create the MR and capture the MR URL from the response\n        - Use create_issue_note with project_id={{project_id}}, noteable_id=\u003Cissue_iid>, and body=\u003Cyour complete summary with MR link>\n        - Make sure to include the MR link in the comment body so users can easily access it\n\n      user: |\n        Goal: {{user_goal}}\n        Project ID: {{project_id}}\n\n        Please complete the following steps:\n        1. Extract the issue IID and retrieve full issue details\n        2. Analyze the requirements thoroughly\n        3. Review the existing codebase structure and patterns\n        4. Implement the feature with production-ready code\n        5. Create all necessary files (components, APIs, tests, documentation)\n        6. Commit all changes with a clear commit message\n        7. Create a merge request\n        8. Post a detailed summary comment to the issue including the MR link\n\n      placeholder: history\n    params:\n      timeout: 300\n\nrouters:\n  - from: \"implement_feature\"\n    to: \"end\"\n\nflow:\n  entry_point: \"implement_feature\"\n","yaml",[482,684,685,698,709,718,732,743,754,762,776,787,799,809,817,825,833,841,849,857,865,873,881,889,897,905,913,921,928,936,948,957,966,974,986,992,997,1003,1009,1015,1021,1027,1033,1039,1045,1051,1057,1062,1068,1074,1080,1086,1092,1098,1103,1109,1115,1121,1127,1133,1139,1145,1150,1156,1162,1168,1174,1180,1186,1192,1198,1204,1209,1215,1221,1227,1233,1239,1245,1251,1257,1262,1268,1274,1280,1286,1292,1298,1304,1309,1315,1321,1327,1333,1339,1345,1351,1357,1362,1372,1378,1384,1389,1395,1401,1407,1413,1419,1425,1431,1437,1443,1448,1459,1467,1479,1484,1492,1503,1514,1519,1527],{"__ignoreMap":536},[571,686,687,691,695],{"class":573,"line":574},[571,688,690],{"class":689},"shJU0","version",[571,692,694],{"class":693},"sgsFI",": ",[571,696,697],{"class":580},"\"v1\"\n",[571,699,701,704,706],{"class":573,"line":700},2,[571,702,703],{"class":689},"environment",[571,705,694],{"class":693},[571,707,708],{"class":580},"ambient\n",[571,710,712,715],{"class":573,"line":711},3,[571,713,714],{"class":689},"components",[571,716,717],{"class":693},":\n",[571,719,721,724,727,729],{"class":573,"line":720},4,[571,722,723],{"class":693},"  - ",[571,725,726],{"class":689},"name",[571,728,694],{"class":693},[571,730,731],{"class":580},"\"implement_feature\"\n",[571,733,735,738,740],{"class":573,"line":734},5,[571,736,737],{"class":689},"    type",[571,739,694],{"class":693},[571,741,742],{"class":580},"AgentComponent\n",[571,744,746,749,751],{"class":573,"line":745},6,[571,747,748],{"class":689},"    prompt_id",[571,750,694],{"class":693},[571,752,753],{"class":580},"\"implementation_prompt\"\n",[571,755,757,760],{"class":573,"line":756},7,[571,758,759],{"class":689},"    inputs",[571,761,717],{"class":693},[571,763,765,768,771,773],{"class":573,"line":764},8,[571,766,767],{"class":693},"      - ",[571,769,770],{"class":689},"from",[571,772,694],{"class":693},[571,774,775],{"class":580},"\"context:goal\"\n",[571,777,779,782,784],{"class":573,"line":778},9,[571,780,781],{"class":689},"        as",[571,783,694],{"class":693},[571,785,786],{"class":580},"\"user_goal\"\n",[571,788,790,792,794,796],{"class":573,"line":789},10,[571,791,767],{"class":693},[571,793,770],{"class":689},[571,795,694],{"class":693},[571,797,798],{"class":580},"\"context:project_id\"\n",[571,800,802,804,806],{"class":573,"line":801},11,[571,803,781],{"class":689},[571,805,694],{"class":693},[571,807,808],{"class":580},"\"project_id\"\n",[571,810,812,815],{"class":573,"line":811},12,[571,813,814],{"class":689},"    toolset",[571,816,717],{"class":693},[571,818,820,822],{"class":573,"line":819},13,[571,821,767],{"class":693},[571,823,824],{"class":580},"\"get_issue\"\n",[571,826,828,830],{"class":573,"line":827},14,[571,829,767],{"class":693},[571,831,832],{"class":580},"\"get_repository_file\"\n",[571,834,836,838],{"class":573,"line":835},15,[571,837,767],{"class":693},[571,839,840],{"class":580},"\"list_repository_tree\"\n",[571,842,844,846],{"class":573,"line":843},16,[571,845,767],{"class":693},[571,847,848],{"class":580},"\"find_files\"\n",[571,850,852,854],{"class":573,"line":851},17,[571,853,767],{"class":693},[571,855,856],{"class":580},"\"blob_search\"\n",[571,858,860,862],{"class":573,"line":859},18,[571,861,767],{"class":693},[571,863,864],{"class":580},"\"create_file\"\n",[571,866,868,870],{"class":573,"line":867},19,[571,869,767],{"class":693},[571,871,872],{"class":580},"\"create_commit\"\n",[571,874,876,878],{"class":573,"line":875},20,[571,877,767],{"class":693},[571,879,880],{"class":580},"\"create_merge_request\"\n",[571,882,884,886],{"class":573,"line":883},21,[571,885,767],{"class":693},[571,887,888],{"class":580},"\"create_issue_note\"\n",[571,890,892,895],{"class":573,"line":891},22,[571,893,894],{"class":689},"    ui_log_events",[571,896,717],{"class":693},[571,898,900,902],{"class":573,"line":899},23,[571,901,767],{"class":693},[571,903,904],{"class":580},"\"on_agent_final_answer\"\n",[571,906,908,910],{"class":573,"line":907},24,[571,909,767],{"class":693},[571,911,912],{"class":580},"\"on_tool_execution_success\"\n",[571,914,916,918],{"class":573,"line":915},25,[571,917,767],{"class":693},[571,919,920],{"class":580},"\"on_tool_execution_failed\"\n",[571,922,924],{"class":573,"line":923},26,[571,925,927],{"emptyLinePlaceholder":926},true,"\n",[571,929,931,934],{"class":573,"line":930},27,[571,932,933],{"class":689},"prompts",[571,935,717],{"class":693},[571,937,939,941,943,945],{"class":573,"line":938},28,[571,940,723],{"class":693},[571,942,726],{"class":689},[571,944,694],{"class":693},[571,946,947],{"class":580},"\"Cheapflights Feature Implementation\"\n",[571,949,951,953,955],{"class":573,"line":950},29,[571,952,748],{"class":689},[571,954,694],{"class":693},[571,956,753],{"class":580},[571,958,960,963],{"class":573,"line":959},30,[571,961,962],{"class":689},"    unit_primitives",[571,964,965],{"class":693},": []\n",[571,967,969,972],{"class":573,"line":968},31,[571,970,971],{"class":689},"    prompt_template",[571,973,717],{"class":693},[571,975,977,980,982],{"class":573,"line":976},32,[571,978,979],{"class":689},"      system",[571,981,694],{"class":693},[571,983,985],{"class":984},"sD7c4","|\n",[571,987,989],{"class":573,"line":988},33,[571,990,991],{"class":580},"        You are an expert full-stack developer specializing in travel booking platforms, specifically Cheapflights.\n",[571,993,995],{"class":573,"line":994},34,[571,996,927],{"emptyLinePlaceholder":926},[571,998,1000],{"class":573,"line":999},35,[571,1001,1002],{"class":580},"        Your task is to:\n",[571,1004,1006],{"class":573,"line":1005},36,[571,1007,1008],{"class":580},"        1. Extract the issue IID from the goal (look for \"Issue IID: XX\")\n",[571,1010,1012],{"class":573,"line":1011},37,[571,1013,1014],{"class":580},"        2. Use get_issue with project_id={{project_id}} and issue_iid to retrieve issue details\n",[571,1016,1018],{"class":573,"line":1017},38,[571,1019,1020],{"class":580},"        3. Analyze the requirements for the flight search feature\n",[571,1022,1024],{"class":573,"line":1023},39,[571,1025,1026],{"class":580},"        4. Review the existing codebase using list_repository_tree, find_files, and get_repository_file\n",[571,1028,1030],{"class":573,"line":1029},40,[571,1031,1032],{"class":580},"        5. Design and implement the solution following Cheapflights best practices\n",[571,1034,1036],{"class":573,"line":1035},41,[571,1037,1038],{"class":580},"        6. Create all necessary code files using create_file (call multiple times for multiple files)\n",[571,1040,1042],{"class":573,"line":1041},42,[571,1043,1044],{"class":580},"        7. Commit the changes using create_commit\n",[571,1046,1048],{"class":573,"line":1047},43,[571,1049,1050],{"class":580},"        8. Create a merge request using create_merge_request\n",[571,1052,1054],{"class":573,"line":1053},44,[571,1055,1056],{"class":580},"        9. Post a summary comment to the issue using create_issue_note with the MR link\n",[571,1058,1060],{"class":573,"line":1059},45,[571,1061,927],{"emptyLinePlaceholder":926},[571,1063,1065],{"class":573,"line":1064},46,[571,1066,1067],{"class":580},"        Cheapflights Domain Expertise:\n",[571,1069,1071],{"class":573,"line":1070},47,[571,1072,1073],{"class":580},"        - Flight search and booking systems (Amadeus, Sabre, Skyscanner APIs)\n",[571,1075,1077],{"class":573,"line":1076},48,[571,1078,1079],{"class":580},"        - Fare comparison and pricing strategies\n",[571,1081,1083],{"class":573,"line":1082},49,[571,1084,1085],{"class":580},"        - Real-time availability and inventory management\n",[571,1087,1089],{"class":573,"line":1088},50,[571,1090,1091],{"class":580},"        - Travel industry UX patterns\n",[571,1093,1095],{"class":573,"line":1094},51,[571,1096,1097],{"class":580},"        - Performance optimization for high-traffic flight searches\n",[571,1099,1101],{"class":573,"line":1100},52,[571,1102,927],{"emptyLinePlaceholder":926},[571,1104,1106],{"class":573,"line":1105},53,[571,1107,1108],{"class":580},"        Code Standards:\n",[571,1110,1112],{"class":573,"line":1111},54,[571,1113,1114],{"class":580},"        - Clean, maintainable code (TypeScript/JavaScript/Python/React)\n",[571,1116,1118],{"class":573,"line":1117},55,[571,1119,1120],{"class":580},"        - Proper state management for React components\n",[571,1122,1124],{"class":573,"line":1123},56,[571,1125,1126],{"class":580},"        - RESTful API endpoints with comprehensive error handling\n",[571,1128,1130],{"class":573,"line":1129},57,[571,1131,1132],{"class":580},"        - Mobile-first responsive design\n",[571,1134,1136],{"class":573,"line":1135},58,[571,1137,1138],{"class":580},"        - Proper timezone handling (use moment-timezone or date-fns-tz)\n",[571,1140,1142],{"class":573,"line":1141},59,[571,1143,1144],{"class":580},"        - WCAG 2.1 accessibility compliance\n",[571,1146,1148],{"class":573,"line":1147},60,[571,1149,927],{"emptyLinePlaceholder":926},[571,1151,1153],{"class":573,"line":1152},61,[571,1154,1155],{"class":580},"        Flight-Specific Best Practices:\n",[571,1157,1159],{"class":573,"line":1158},62,[571,1160,1161],{"class":580},"        - Accurate fare calculations (base fare + taxes + fees + surcharges)\n",[571,1163,1165],{"class":573,"line":1164},63,[571,1166,1167],{"class":580},"        - Flight duration calculations across timezones\n",[571,1169,1171],{"class":573,"line":1170},64,[571,1172,1173],{"class":580},"        - Search filter logic (price range, number of stops, airlines, departure/arrival times)\n",[571,1175,1177],{"class":573,"line":1176},65,[571,1178,1179],{"class":580},"        - Sort algorithms (best value, fastest, cheapest)\n",[571,1181,1183],{"class":573,"line":1182},66,[571,1184,1185],{"class":580},"        - Handle edge cases: date line crossing, daylight saving time, red-eye flights\n",[571,1187,1189],{"class":573,"line":1188},67,[571,1190,1191],{"class":580},"        - Currency amounts use proper decimal handling (avoid floating point errors)\n",[571,1193,1195],{"class":573,"line":1194},68,[571,1196,1197],{"class":580},"        - Dates use ISO 8601 format\n",[571,1199,1201],{"class":573,"line":1200},69,[571,1202,1203],{"class":580},"        - Flight codes follow IATA standards (3-letter airport codes)\n",[571,1205,1207],{"class":573,"line":1206},70,[571,1208,927],{"emptyLinePlaceholder":926},[571,1210,1212],{"class":573,"line":1211},71,[571,1213,1214],{"class":580},"        Implementation Requirements:\n",[571,1216,1218],{"class":573,"line":1217},72,[571,1219,1220],{"class":580},"        - No TODOs or placeholder comments\n",[571,1222,1224],{"class":573,"line":1223},73,[571,1225,1226],{"class":580},"        - All functions must be fully implemented\n",[571,1228,1230],{"class":573,"line":1229},74,[571,1231,1232],{"class":580},"        - Include proper TypeScript types or Python type hints\n",[571,1234,1236],{"class":573,"line":1235},75,[571,1237,1238],{"class":580},"        - Add JSDoc/docstring comments for all functions\n",[571,1240,1242],{"class":573,"line":1241},76,[571,1243,1244],{"class":580},"        - Comprehensive error handling and input validation\n",[571,1246,1248],{"class":573,"line":1247},77,[571,1249,1250],{"class":580},"        - Basic unit tests for critical functions\n",[571,1252,1254],{"class":573,"line":1253},78,[571,1255,1256],{"class":580},"        - Performance considerations for handling large result sets\n",[571,1258,1260],{"class":573,"line":1259},79,[571,1261,927],{"emptyLinePlaceholder":926},[571,1263,1265],{"class":573,"line":1264},80,[571,1266,1267],{"class":580},"        CRITICAL - Your final comment on the issue MUST include:\n",[571,1269,1271],{"class":573,"line":1270},81,[571,1272,1273],{"class":580},"        - **Implementation Summary**: Brief description of what was implemented\n",[571,1275,1277],{"class":573,"line":1276},82,[571,1278,1279],{"class":580},"        - **Files Created/Modified**: List of all files with descriptions\n",[571,1281,1283],{"class":573,"line":1282},83,[571,1284,1285],{"class":580},"        - **Key Features**: Bullet points of main functionality\n",[571,1287,1289],{"class":573,"line":1288},84,[571,1290,1291],{"class":580},"        - **Technical Approach**: Brief explanation of architecture/patterns used\n",[571,1293,1295],{"class":573,"line":1294},85,[571,1296,1297],{"class":580},"        - **Testing Notes**: How to test the implementation\n",[571,1299,1301],{"class":573,"line":1300},86,[571,1302,1303],{"class":580},"        - **Merge Request Link**: Direct link to the created MR (format: [View Merge Request](MR_URL))\n",[571,1305,1307],{"class":573,"line":1306},87,[571,1308,927],{"emptyLinePlaceholder":926},[571,1310,1312],{"class":573,"line":1311},88,[571,1313,1314],{"class":580},"        IMPORTANT TOOL USAGE:\n",[571,1316,1318],{"class":573,"line":1317},89,[571,1319,1320],{"class":580},"        - Extract the issue IID from the goal first (e.g., \"Issue IID: 12\" means issue_iid=12)\n",[571,1322,1324],{"class":573,"line":1323},90,[571,1325,1326],{"class":580},"        - Use get_issue with project_id={{project_id}} and issue_iid=\u003Cextracted_iid>\n",[571,1328,1330],{"class":573,"line":1329},91,[571,1331,1332],{"class":580},"        - Create multiple files by calling create_file multiple times (once per file)\n",[571,1334,1336],{"class":573,"line":1335},92,[571,1337,1338],{"class":580},"        - Use create_commit to commit all files together with a descriptive commit message\n",[571,1340,1342],{"class":573,"line":1341},93,[571,1343,1344],{"class":580},"        - Use create_merge_request to create the MR and capture the MR URL from the response\n",[571,1346,1348],{"class":573,"line":1347},94,[571,1349,1350],{"class":580},"        - Use create_issue_note with project_id={{project_id}}, noteable_id=\u003Cissue_iid>, and body=\u003Cyour complete summary with MR link>\n",[571,1352,1354],{"class":573,"line":1353},95,[571,1355,1356],{"class":580},"        - Make sure to include the MR link in the comment body so users can easily access it\n",[571,1358,1360],{"class":573,"line":1359},96,[571,1361,927],{"emptyLinePlaceholder":926},[571,1363,1365,1368,1370],{"class":573,"line":1364},97,[571,1366,1367],{"class":689},"      user",[571,1369,694],{"class":693},[571,1371,985],{"class":984},[571,1373,1375],{"class":573,"line":1374},98,[571,1376,1377],{"class":580},"        Goal: {{user_goal}}\n",[571,1379,1381],{"class":573,"line":1380},99,[571,1382,1383],{"class":580},"        Project ID: {{project_id}}\n",[571,1385,1387],{"class":573,"line":1386},100,[571,1388,927],{"emptyLinePlaceholder":926},[571,1390,1392],{"class":573,"line":1391},101,[571,1393,1394],{"class":580},"        Please complete the following steps:\n",[571,1396,1398],{"class":573,"line":1397},102,[571,1399,1400],{"class":580},"        1. Extract the issue IID and retrieve full issue details\n",[571,1402,1404],{"class":573,"line":1403},103,[571,1405,1406],{"class":580},"        2. Analyze the requirements thoroughly\n",[571,1408,1410],{"class":573,"line":1409},104,[571,1411,1412],{"class":580},"        3. Review the existing codebase structure and patterns\n",[571,1414,1416],{"class":573,"line":1415},105,[571,1417,1418],{"class":580},"        4. Implement the feature with production-ready code\n",[571,1420,1422],{"class":573,"line":1421},106,[571,1423,1424],{"class":580},"        5. Create all necessary files (components, APIs, tests, documentation)\n",[571,1426,1428],{"class":573,"line":1427},107,[571,1429,1430],{"class":580},"        6. Commit all changes with a clear commit message\n",[571,1432,1434],{"class":573,"line":1433},108,[571,1435,1436],{"class":580},"        7. Create a merge request\n",[571,1438,1440],{"class":573,"line":1439},109,[571,1441,1442],{"class":580},"        8. Post a detailed summary comment to the issue including the MR link\n",[571,1444,1446],{"class":573,"line":1445},110,[571,1447,927],{"emptyLinePlaceholder":926},[571,1449,1451,1454,1456],{"class":573,"line":1450},111,[571,1452,1453],{"class":689},"      placeholder",[571,1455,694],{"class":693},[571,1457,1458],{"class":580},"history\n",[571,1460,1462,1465],{"class":573,"line":1461},112,[571,1463,1464],{"class":689},"    params",[571,1466,717],{"class":693},[571,1468,1470,1473,1475],{"class":573,"line":1469},113,[571,1471,1472],{"class":689},"      timeout",[571,1474,694],{"class":693},[571,1476,1478],{"class":1477},"sYu0t","300\n",[571,1480,1482],{"class":573,"line":1481},114,[571,1483,927],{"emptyLinePlaceholder":926},[571,1485,1487,1490],{"class":573,"line":1486},115,[571,1488,1489],{"class":689},"routers",[571,1491,717],{"class":693},[571,1493,1495,1497,1499,1501],{"class":573,"line":1494},116,[571,1496,723],{"class":693},[571,1498,770],{"class":689},[571,1500,694],{"class":693},[571,1502,731],{"class":580},[571,1504,1506,1509,1511],{"class":573,"line":1505},117,[571,1507,1508],{"class":689},"    to",[571,1510,694],{"class":693},[571,1512,1513],{"class":580},"\"end\"\n",[571,1515,1517],{"class":573,"line":1516},118,[571,1518,927],{"emptyLinePlaceholder":926},[571,1520,1522,1525],{"class":573,"line":1521},119,[571,1523,1524],{"class":689},"flow",[571,1526,717],{"class":693},[571,1528,1530,1533,1535],{"class":573,"line":1529},120,[571,1531,1532],{"class":689},"  entry_point",[571,1534,694],{"class":693},[571,1536,731],{"class":580},[12,1538,1539,1542],{},[31,1540,1541],{},"Ce que fait ce flow :"," ce flow orchestre un agent d'IA pour implémenter automatiquement une fonctionnalité en analysant les exigences du ticket, en examinant le code source, en écrivant du code prêt pour la production avec une expertise métier, et en créant une merge request avec un commentaire de synthèse détaillé.",[12,1544,1545],{},"Pour obtenir une documentation complète et des exemples, consultez les pages suivantes :",[53,1547,1548,1554],{},[56,1549,1550],{},[19,1551,1553],{"href":236,"rel":1552},[],"Documentation relative aux flows personnalisables",[56,1555,1556],{},[19,1557,1560],{"href":1558,"rel":1559},"https://gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/-/blob/main/docs/flow_registry/v1.md",[],"Framework de dépôt des flows (schéma YAML)",[40,1562,1564],{"id":1563},"exécution-des-flows","Exécution des flows",[12,1566,1567],{},"Les flows s'exécutent sur le système de calcul de la plateforme GitLab. Lorsqu'ils sont déclenchés par un événement (mention, assignation ou clic sur un bouton), une session est créée et le flow commence à s'exécuter.",[263,1569,1571],{"id":1570},"variables-denvironnement-disponibles","Variables d'environnement disponibles",[12,1573,1574],{},"Les flows ont accès à des variables d'environnement qui fournissent le contexte sur le déclencheur et l'objet GitLab :",[53,1576,1577,1586,1594],{},[56,1578,1579,1585],{},[31,1580,1581,1584],{},[482,1582,1583],{},"AI_FLOW_CONTEXT"," :"," contexte sérialisé en JSON qui inclut les diffs des merge requests, les descriptions des tickets, les commentaires et les fils de discussion",[56,1587,1588,1593],{},[31,1589,1590,1584],{},[482,1591,1592],{},"AI_FLOW_INPUT"," le texte du prompt ou du commentaire de l'utilisateur qui a déclenché le flow",[56,1595,1596,1601,1602,1605,1606,1605,1609,1612],{},[31,1597,1598,1584],{},[482,1599,1600],{},"AI_FLOW_EVENT"," le type d'événement qui a déclenché le flow (",[482,1603,1604],{},"mention",", ",[482,1607,1608],{},"assign",[482,1610,1611],{},"assign_reviewer",")",[12,1614,1615],{},"Ces variables permettent à votre flow de comprendre ce qui l'a déclenché et d'accéder aux données GitLab pertinentes pour effectuer sa tâche.",[263,1617,1619],{"id":1618},"flows-multi-agents","Flows multi-agents",[12,1621,1622],{},"Les flows personnalisés peuvent inclure plusieurs composants d'agents qui travaillent ensemble de manière séquentielle. La configuration YAML du flow définit :",[53,1624,1625,1631,1636],{},[56,1626,1627,1630],{},[31,1628,1629],{},"Les composants :"," un ou plusieurs agents (AgentComponent) ou étapes déterministes",[56,1632,1633,1635],{},[31,1634,657],{}," définissent le flow entre les composants (par exemple, du composant A au composant B jusqu'à la fin)",[56,1637,1638,1640],{},[31,1639,651],{}," configurent le comportement et le modèle de chaque agent",[12,1642,1643],{},"Par exemple, un flow de revue de code pourrait avoir un agent de sécurité, puis un agent de qualité, puis un agent d'approbation, avec des routeurs qui les connectent en séquence.",[263,1645,1647],{"id":1646},"surveillance-de-lexécution-des-flows","Surveillance de l'exécution des flows",[12,1649,1650],{},"Pour afficher les flows en cours d'exécution pour votre projet :",[487,1652,1653,1659,1662],{},[56,1654,1655,1656,261],{},"Accédez à ",[31,1657,1658],{},"Automatisation → Sessions",[56,1660,1661],{},"Sélectionnez une session pour afficher plus de détails.",[56,1663,1664,1665,1668],{},"L'onglet ",[31,1666,1667],{},"Détails"," affiche un lien vers les logs du job CI/CD.",[12,1670,1671],{},"Les sessions affichent des informations détaillées qui incluent la progression étape par étape, les outils invoqués, le raisonnement et le processus de prise de décision.",[263,1673,1675],{"id":1674},"quand-utiliser-les-flows","Quand utiliser les flows",[53,1677,1678,1681,1684,1687,1690,1693],{},[56,1679,1680],{},"Tâches complexes multi-étapes",[56,1682,1683],{},"Automatisation en arrière-plan",[56,1685,1686],{},"Workflows basés sur les événements",[56,1688,1689],{},"Modifications multi-fichiers",[56,1691,1692],{},"Tâches chronophages",[56,1694,1695],{},"Revues/vérifications automatisées",[40,1697,1699],{"id":1698},"prochaines-étapes","Prochaines étapes",[12,1701,1702,1703,1707],{},"Vous connaissez maintenant les flows et savez comment les créer et quand les utiliser par rapport aux agents. Dans la ",[19,1704,1706],{"href":1705},"/blog/ai-catalog-discover-and-share-agents/","Partie 5 : découvrir le catalogue d'IA",", vous apprendrez à créer et à partager des agents et des flows dans votre organisation. Explorez le catalogue d'IA pour connaître les flows et agents disponibles, les ajouter à vos projets, et publier vos propres agents et flows.",[40,1709,1711],{"id":1710},"ressources","Ressources",[53,1713,1714,1721,1727,1732,1739,1746],{},[56,1715,1716],{},[19,1717,1720],{"href":1718,"rel":1719},"https://docs.gitlab.com/user/duo_agent_platform/flows/",[],"Flows de GitLab Duo Agent Platform",[56,1722,1723],{},[19,1724,1726],{"href":216,"rel":1725},[],"Documentation relative aux flows de base",[56,1728,1729],{},[19,1730,1553],{"href":236,"rel":1731},[],[56,1733,1734],{},[19,1735,1738],{"href":1736,"rel":1737},"https://docs.gitlab.com/user/duo_agent_platform/flows/execution/",[],"Configuration d'exécution des flows",[56,1740,1741],{},[19,1742,1745],{"href":1743,"rel":1744},"https://docs.gitlab.com/ci/variables/",[],"Guide des variables CI/CD de GitLab",[56,1747,1748],{},[19,1749,1752],{"href":1750,"rel":1751},"https://docs.gitlab.com/user/profile/service_accounts/",[],"Comptes de service",[1754,1755],"hr",{},[12,1757,1758,1761,1762],{},[31,1759,1760],{},"Article suivant :"," ",[19,1763,1706],{"href":1705},[12,1765,1766,1761,1769],{},[31,1767,1768],{},"Article précédent :",[19,1770,1772],{"href":1771},"/fr-fr/blog/understanding-agents-foundational-custom-external/","Partie 3 : comprendre les agents",[1774,1775,1776],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":536,"searchDepth":700,"depth":700,"links":1778},[1779,1780,1781,1782,1785,1792,1798,1799],{"id":42,"depth":700,"text":43},{"id":91,"depth":700,"text":92},{"id":186,"depth":700,"text":187},{"id":250,"depth":700,"text":251,"children":1783},[1784],{"id":265,"depth":711,"text":266},{"id":405,"depth":700,"text":406,"children":1786},[1787,1788,1789,1790,1791],{"id":432,"depth":711,"text":433},{"id":476,"depth":711,"text":477},{"id":518,"depth":711,"text":519},{"id":621,"depth":711,"text":622},{"id":667,"depth":711,"text":668},{"id":1563,"depth":700,"text":1564,"children":1793},[1794,1795,1796,1797],{"id":1570,"depth":711,"text":1571},{"id":1618,"depth":711,"text":1619},{"id":1646,"depth":711,"text":1647},{"id":1674,"depth":711,"text":1675},{"id":1698,"depth":700,"text":1699},{"id":1710,"depth":700,"text":1711},"ai","2026-01-21","Découvrez les flows de GitLab Duo Agent Platform : maîtrisez les flows de base, créez des workflows personnalisés et explorez les modèles d'orchestration.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png",{},"/fr-fr/blog/understanding-flows-multi-agent-workflows",{"config":1810,"description":1802,"title":5},{"noIndex":1805},"understanding-flows-multi-agent-workflows","fr-fr/blog/understanding-flows-multi-agent-workflows",[1814,1815,1816,1817],"AI","product","features","tutorial","BlogPost","gJqj2edToElL_7wgCFwgG6xNwrElKJX6eOrwQX3Pnbc",{"logo":1821,"freeTrial":1826,"sales":1831,"login":1836,"items":1841,"search":2168,"minimal":2203,"duo":2222,"switchNav":2231,"pricingDeployment":2242},{"config":1822},{"href":1823,"dataGaName":1824,"dataGaLocation":1825},"/fr-fr/","gitlab logo","header",{"text":1827,"config":1828},"Commencer un essai gratuit",{"href":1829,"dataGaName":1830,"dataGaLocation":1825},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":1832,"config":1833},"Demander une démo",{"href":1834,"dataGaName":1835,"dataGaLocation":1825},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":1837,"config":1838},"Connexion",{"href":1839,"dataGaName":1840,"dataGaLocation":1825},"https://gitlab.com/users/sign_in/","sign in",[1842,1871,1972,1977,2090,2146],{"text":1843,"config":1844,"menu":1846},"Plateforme",{"dataNavLevelOne":1845},"platform",{"type":1847,"columns":1848},"cards",[1849,1855,1863],{"title":1843,"description":1850,"link":1851},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":1852,"config":1853},"Explorer notre plateforme",{"href":1854,"dataGaName":1845,"dataGaLocation":1825},"/fr-fr/platform/",{"title":1856,"description":1857,"link":1858},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":1859,"config":1860},"Découvrir GitLab Duo",{"href":1861,"dataGaName":1862,"dataGaLocation":1825},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1864,"description":1865,"link":1866},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":1867,"config":1868},"En savoir plus",{"href":1869,"dataGaName":1870,"dataGaLocation":1825},"/fr-fr/why-gitlab/","why gitlab",{"text":1872,"left":926,"config":1873,"menu":1875},"Produit",{"dataNavLevelOne":1874},"solutions",{"type":1876,"link":1877,"columns":1881,"feature":1952},"lists",{"text":1878,"config":1879},"Voir toutes les solutions",{"href":1880,"dataGaName":1874,"dataGaLocation":1825},"/fr-fr/solutions/",[1882,1907,1930],{"title":1883,"description":1884,"link":1885,"items":1890},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":1886},{"icon":1887,"href":1888,"dataGaName":1889,"dataGaLocation":1825},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[1891,1895,1898,1903],{"text":1892,"config":1893},"CI/CD",{"href":1894,"dataGaLocation":1825,"dataGaName":1892},"/fr-fr/solutions/continuous-integration/",{"text":1856,"config":1896},{"href":1861,"dataGaLocation":1825,"dataGaName":1897},"gitlab duo agent platform - product menu",{"text":1899,"config":1900},"Gestion du code source",{"href":1901,"dataGaLocation":1825,"dataGaName":1902},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":1904,"config":1905},"Livraison de logiciels automatisée",{"href":1888,"dataGaLocation":1825,"dataGaName":1906},"Automated software delivery",{"title":1908,"description":1909,"link":1910,"items":1915},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":1911},{"href":1912,"dataGaName":1913,"dataGaLocation":1825,"icon":1914},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1916,1920,1925],{"text":1917,"config":1918},"Tests de sécurité des applications",{"href":1912,"dataGaName":1919,"dataGaLocation":1825},"Application security testing",{"text":1921,"config":1922},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":1923,"dataGaLocation":1825,"dataGaName":1924},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":1926,"config":1927},"Conformité logicielle",{"href":1928,"dataGaName":1929,"dataGaLocation":1825},"/fr-fr/solutions/software-compliance/","software compliance",{"title":1931,"link":1932,"items":1937},"Mesures",{"config":1933},{"icon":1934,"href":1935,"dataGaName":1936,"dataGaLocation":1825},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[1938,1942,1947],{"text":1939,"config":1940},"Visibilité et mesures",{"href":1935,"dataGaLocation":1825,"dataGaName":1941},"Visibility and Measurement",{"text":1943,"config":1944},"Gestion de la chaîne de valeur",{"href":1945,"dataGaLocation":1825,"dataGaName":1946},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":1948,"config":1949},"Analyses et informations",{"href":1950,"dataGaLocation":1825,"dataGaName":1951},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":224,"type":1876,"items":1953},[1954,1960,1966],{"text":1955,"config":1956},"Entreprises",{"icon":1957,"href":1958,"dataGaLocation":1825,"dataGaName":1959},"Building","/fr-fr/enterprise/","enterprise",{"text":1961,"config":1962},"Pour les PME",{"icon":1963,"href":1964,"dataGaLocation":1825,"dataGaName":1965},"Work","/fr-fr/small-business/","small business",{"text":1967,"config":1968},"Pour le secteur public",{"icon":1969,"href":1970,"dataGaLocation":1825,"dataGaName":1971},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":1973,"config":1974},"Tarifs",{"href":1975,"dataGaName":1976,"dataGaLocation":1825,"dataNavLevelOne":1976},"/fr-fr/pricing/","pricing",{"text":1711,"config":1978,"menu":1980},{"dataNavLevelOne":1979},"resources",{"type":1876,"link":1981,"columns":1985,"feature":2079},{"text":1982,"config":1983},"Afficher toutes les ressources",{"href":1984,"dataGaName":1979,"dataGaLocation":1825},"/fr-fr/resources/",[1986,2019,2046],{"title":1987,"items":1988},"Premiers pas",[1989,1994,1999,2004,2009,2014],{"text":1990,"config":1991},"Installation",{"href":1992,"dataGaName":1993,"dataGaLocation":1825},"/fr-fr/install/","install",{"text":1995,"config":1996},"Guides de démarrage",{"href":1997,"dataGaName":1998,"dataGaLocation":1825},"/fr-fr/get-started/","quick setup checklists",{"text":2000,"config":2001},"Apprentissage",{"href":2002,"dataGaLocation":1825,"dataGaName":2003},"https://university.gitlab.com/","learn",{"text":2005,"config":2006},"Documentation",{"href":2007,"dataGaName":2008,"dataGaLocation":1825},"https://docs.gitlab.com/","product documentation",{"text":2010,"config":2011},"Vidéos sur les bonnes pratiques",{"href":2012,"dataGaName":2013,"dataGaLocation":1825},"/fr-fr/getting-started-videos/","best practice videos",{"text":2015,"config":2016},"Intégrations",{"href":2017,"dataGaName":2018,"dataGaLocation":1825},"/fr-fr/integrations/","integrations",{"title":2020,"items":2021},"Découvrir",[2022,2027,2032,2037,2041],{"text":2023,"config":2024},"Témoignages clients",{"href":2025,"dataGaName":2026,"dataGaLocation":1825},"/fr-fr/customers/","customer success stories",{"text":2028,"config":2029},"Blog",{"href":2030,"dataGaName":2031,"dataGaLocation":1825},"/fr-fr/blog/","blog",{"text":2033,"config":2034},"Demo Hub",{"href":2035,"dataGaName":2036,"dataGaLocation":1825},"/fr-fr/demo-hub/","demo hub",{"text":2038,"config":2039},"The Source",{"href":2040,"dataGaName":2031,"dataGaLocation":1825},"/fr-fr/the-source/",{"text":2042,"config":2043},"Travail à distance",{"href":2044,"dataGaName":2045,"dataGaLocation":1825},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":2047,"items":2048},"Connecter",[2049,2054,2059,2064,2069,2074],{"text":2050,"config":2051},"Services GitLab",{"href":2052,"dataGaName":2053,"dataGaLocation":1825},"/fr-fr/services/","services",{"text":2055,"config":2056},"Contribuer",{"href":2057,"dataGaName":2058,"dataGaLocation":1825},"https://contributors.gitlab.com","contribute",{"text":2060,"config":2061},"Communauté",{"href":2062,"dataGaName":2063,"dataGaLocation":1825},"/community/","community",{"text":2065,"config":2066},"Forum",{"href":2067,"dataGaName":2068,"dataGaLocation":1825},"https://forum.gitlab.com/","forum",{"text":2070,"config":2071},"Événements",{"href":2072,"dataGaName":2073,"dataGaLocation":1825},"/events/","events",{"text":2075,"config":2076},"Partenaires",{"href":2077,"dataGaName":2078,"dataGaLocation":1825},"/fr-fr/partners/","partners",{"config":2080,"title":2083,"text":2084,"link":2085},{"background":2081,"textColor":2082},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Nouveautés de GitLab","Découvrez les dernières fonctionnalités et améliorations.",{"text":2086,"config":2087},"Lire les articles les plus récents",{"href":2088,"dataGaName":2089,"dataGaLocation":1825},"/fr-fr/whats-new/","whats new",{"text":2091,"config":2092,"menu":2094},"Société",{"dataNavLevelOne":2093},"company",{"type":1876,"columns":2095},[2096],{"items":2097},[2098,2103,2109,2111,2116,2121,2126,2131,2136,2141],{"text":2099,"config":2100},"À propos",{"href":2101,"dataGaName":2102,"dataGaLocation":1825},"/fr-fr/company/","about",{"text":2104,"config":2105,"footerGa":2108},"Carrières",{"href":2106,"dataGaName":2107,"dataGaLocation":1825},"/jobs/","jobs",{"dataGaName":2107},{"text":2070,"config":2110},{"href":2072,"dataGaName":2073,"dataGaLocation":1825},{"text":2112,"config":2113},"Leadership",{"href":2114,"dataGaName":2115,"dataGaLocation":1825},"/company/team/e-group/","leadership",{"text":2117,"config":2118},"Manuel",{"href":2119,"dataGaName":2120,"dataGaLocation":1825},"https://handbook.gitlab.com/","handbook",{"text":2122,"config":2123},"Relations avec les investisseurs",{"href":2124,"dataGaName":2125,"dataGaLocation":1825},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2127,"config":2128},"Trust Center",{"href":2129,"dataGaName":2130,"dataGaLocation":1825},"/fr-fr/security/","trust center",{"text":2132,"config":2133},"Centre pour la transparence de l'IA",{"href":2134,"dataGaName":2135,"dataGaLocation":1825},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":2137,"config":2138},"Newsletter",{"href":2139,"dataGaName":2140,"dataGaLocation":1825},"/company/contact/#contact-forms","newsletter",{"text":2142,"config":2143},"Presse",{"href":2144,"dataGaName":2145,"dataGaLocation":1825},"/press/","press",{"text":2147,"config":2148,"menu":2149},"Nous contacter",{"dataNavLevelOne":2093},{"type":1876,"columns":2150},[2151],{"items":2152},[2153,2158,2163],{"text":2154,"config":2155},"Contacter l'équipe commerciale",{"href":2156,"dataGaName":2157,"dataGaLocation":1825},"/fr-fr/sales/","talk to sales",{"text":2159,"config":2160},"Assistance GitLab",{"href":2161,"dataGaName":2162,"dataGaLocation":1825},"https://support.gitlab.com/hc/en-us","support portal",{"text":2164,"config":2165},"Portail clients GitLab",{"href":2166,"dataGaName":2167,"dataGaLocation":1825},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2169,"login":2170,"suggestions":2177},"Fermer",{"text":2171,"link":2172},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":2173,"config":2174},"GitLab.com",{"href":1839,"dataGaName":2175,"dataGaLocation":2176},"search login","search",{"text":2178,"default":2179},"Suggestions",[2180,2182,2187,2189,2194,2199],{"text":1856,"config":2181},{"href":1861,"dataGaName":37,"dataGaLocation":2176},{"text":2183,"config":2184},"Suggestions de code (IA)",{"href":2185,"dataGaName":2186,"dataGaLocation":2176},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1892,"config":2188},{"href":1894,"dataGaName":1892,"dataGaLocation":2176},{"text":2190,"config":2191},"GitLab sur AWS",{"href":2192,"dataGaName":2193,"dataGaLocation":2176},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":2195,"config":2196},"GitLab sur Google Cloud",{"href":2197,"dataGaName":2198,"dataGaLocation":2176},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":2200,"config":2201},"Pourquoi utiliser GitLab ?",{"href":1869,"dataGaName":2202,"dataGaLocation":2176},"Why GitLab?",{"freeTrial":2204,"mobileIcon":2209,"desktopIcon":2214,"secondaryButton":2217},{"text":2205,"config":2206},"Commencer votre essai gratuit",{"href":2207,"dataGaName":1830,"dataGaLocation":2208},"https://gitlab.com/-/trials/new/","nav",{"altText":2210,"config":2211},"Icône GitLab",{"src":2212,"dataGaName":2213,"dataGaLocation":2208},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2210,"config":2215},{"src":2216,"dataGaName":2213,"dataGaLocation":2208},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2218,"config":2219},"Commencer",{"href":2220,"dataGaName":2221,"dataGaLocation":2208},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":2223,"mobileIcon":2227,"desktopIcon":2229},{"text":2224,"config":2225},"En savoir plus sur GitLab Duo",{"href":1861,"dataGaName":2226,"dataGaLocation":2208},"gitlab duo",{"altText":2210,"config":2228},{"src":2212,"dataGaName":2213,"dataGaLocation":2208},{"altText":2210,"config":2230},{"src":2216,"dataGaName":2213,"dataGaLocation":2208},{"button":2232,"mobileIcon":2237,"desktopIcon":2239},{"text":2233,"config":2234},"/switch",{"href":2235,"dataGaName":2236,"dataGaLocation":2208},"#contact","switch",{"altText":2210,"config":2238},{"src":2212,"dataGaName":2213,"dataGaLocation":2208},{"altText":2210,"config":2240},{"src":2241,"dataGaName":2213,"dataGaLocation":2208},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2243,"mobileIcon":2248,"desktopIcon":2250},{"text":2244,"config":2245},"Retour aux tarifs",{"href":1975,"dataGaName":2246,"dataGaLocation":2208,"icon":2247},"back to pricing","GoBack",{"altText":2210,"config":2249},{"src":2212,"dataGaName":2213,"dataGaLocation":2208},{"altText":2210,"config":2251},{"src":2216,"dataGaName":2213,"dataGaLocation":2208},{"title":2253,"button":2254,"config":2258},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":1867,"config":2255},{"href":2256,"dataGaName":2257,"dataGaLocation":1825},"/fr-fr/gitlab-orbit/","orbit",{"layout":2259,"disabled":1805},"release",{"data":2261},{"text":2262,"source":2263,"edit":2269,"contribute":2274,"config":2278,"items":2283,"minimal":2491},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":2264,"config":2265},"Afficher le code source de la page",{"href":2266,"dataGaName":2267,"dataGaLocation":2268},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2270,"config":2271},"Modifier cette page",{"href":2272,"dataGaName":2273,"dataGaLocation":2268},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2055,"config":2275},{"href":2276,"dataGaName":2277,"dataGaLocation":2268},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2279,"facebook":2280,"youtube":2281,"linkedin":2282},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2284,2330,2383,2426,2458],{"title":1973,"links":2285,"subMenu":2300},[2286,2290,2295],{"text":2287,"config":2288},"Voir les forfaits",{"href":1975,"dataGaName":2289,"dataGaLocation":2268},"view plans",{"text":2291,"config":2292},"GitLab Premium",{"href":2293,"dataGaName":2294,"dataGaLocation":2268},"/fr-fr/pricing/premium/","why premium",{"text":2296,"config":2297},"GitLab Ultimate",{"href":2298,"dataGaName":2299,"dataGaLocation":2268},"/fr-fr/pricing/ultimate/","why ultimate",[2301],{"title":2147,"links":2302},[2303,2305,2307,2310,2315,2320,2325],{"text":2154,"config":2304},{"href":2156,"dataGaName":1835,"dataGaLocation":2268},{"text":2159,"config":2306},{"href":2161,"dataGaName":2162,"dataGaLocation":2268},{"text":2308,"config":2309},"Portail clients",{"href":2166,"dataGaName":2167,"dataGaLocation":2268},{"text":2311,"config":2312},"Statut",{"href":2313,"dataGaName":2314,"dataGaLocation":2268},"https://status.gitlab.com/","status",{"text":2316,"config":2317},"Conditions d'utilisation",{"href":2318,"dataGaName":2319,"dataGaLocation":2268},"/terms/","terms of use",{"text":2321,"config":2322},"Politique de confidentialité",{"href":2323,"dataGaName":2324,"dataGaLocation":2268},"/fr-fr/privacy/","privacy statement",{"text":2326,"config":2327},"Gestion des cookies",{"dataGaName":2328,"dataGaLocation":2268,"id":2329,"isOneTrustButton":926},"cookie preferences","ot-sdk-btn",{"title":1872,"links":2331,"subMenu":2340},[2332,2336],{"text":2333,"config":2334},"Plateforme DevSecOps",{"href":1854,"dataGaName":2335,"dataGaLocation":2268},"devsecops platform",{"text":2337,"config":2338},"Développement assisté par l'IA",{"href":1861,"dataGaName":2339,"dataGaLocation":2268},"ai-assisted development",[2341],{"title":2342,"links":2343},"Thèmes",[2344,2348,2353,2358,2363,2368,2373,2378],{"text":1892,"config":2345},{"href":2346,"dataGaName":2347,"dataGaLocation":2268},"/fr-fr/topics/ci-cd/","cicd",{"text":2349,"config":2350},"GitOps",{"href":2351,"dataGaName":2352,"dataGaLocation":2268},"/fr-fr/topics/gitops/","gitops",{"text":2354,"config":2355},"DevOps",{"href":2356,"dataGaName":2357,"dataGaLocation":2268},"/fr-fr/topics/devops/","devops",{"text":2359,"config":2360},"Contrôle de version",{"href":2361,"dataGaName":2362,"dataGaLocation":2268},"/fr-fr/topics/version-control/","version control",{"text":2364,"config":2365},"DevSecOps",{"href":2366,"dataGaName":2367,"dataGaLocation":2268},"/fr-fr/topics/devsecops/","devsecops",{"text":2369,"config":2370},"Cloud-native",{"href":2371,"dataGaName":2372,"dataGaLocation":2268},"/fr-fr/topics/cloud-native/","cloud native",{"text":2374,"config":2375},"IA pour la programmation",{"href":2376,"dataGaName":2377,"dataGaLocation":2268},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":2379,"config":2380},"IA agentique",{"href":2381,"dataGaName":2382,"dataGaLocation":2268},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":2384,"links":2385},"Solutions",[2386,2389,2391,2396,2399,2402,2405,2408,2410,2413,2416,2421],{"text":1917,"config":2387},{"href":1912,"dataGaName":2388,"dataGaLocation":2268},"Application Security Testing",{"text":1904,"config":2390},{"href":1888,"dataGaName":1889,"dataGaLocation":2268},{"text":2392,"config":2393},"Développement Agile",{"href":2394,"dataGaName":2395,"dataGaLocation":2268},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":1899,"config":2397},{"href":1901,"dataGaName":2398,"dataGaLocation":2268},"source code management",{"text":1892,"config":2400},{"href":1894,"dataGaName":2401,"dataGaLocation":2268},"continuous integration & delivery",{"text":1943,"config":2403},{"href":1945,"dataGaName":2404,"dataGaLocation":2268},"value stream management",{"text":2349,"config":2406},{"href":2407,"dataGaName":2352,"dataGaLocation":2268},"/fr-fr/solutions/gitops/",{"text":1955,"config":2409},{"href":1958,"dataGaName":1959,"dataGaLocation":2268},{"text":2411,"config":2412},"PME",{"href":1964,"dataGaName":1965,"dataGaLocation":2268},{"text":2414,"config":2415},"Secteur public",{"href":1970,"dataGaName":1971,"dataGaLocation":2268},{"text":2417,"config":2418},"Éducation",{"href":2419,"dataGaName":2420,"dataGaLocation":2268},"/fr-fr/solutions/education/","education",{"text":2422,"config":2423},"Services financiers",{"href":2424,"dataGaName":2425,"dataGaLocation":2268},"/fr-fr/solutions/finance/","financial services",{"title":1711,"links":2427},[2428,2430,2432,2434,2437,2439,2442,2444,2446,2448,2450,2452,2454,2456],{"text":1990,"config":2429},{"href":1992,"dataGaName":1993,"dataGaLocation":2268},{"text":1995,"config":2431},{"href":1997,"dataGaName":1998,"dataGaLocation":2268},{"text":2000,"config":2433},{"href":2002,"dataGaName":2003,"dataGaLocation":2268},{"text":2005,"config":2435},{"href":2007,"dataGaName":2436,"dataGaLocation":2268},"docs",{"text":2028,"config":2438},{"href":2030,"dataGaName":2031,"dataGaLocation":2268},{"text":2440,"config":2441},"Nouveautés",{"href":2088,"dataGaName":2089,"dataGaLocation":2268},{"text":2023,"config":2443},{"href":2025,"dataGaName":2026,"dataGaLocation":2268},{"text":2042,"config":2445},{"href":2044,"dataGaName":2045,"dataGaLocation":2268},{"text":2050,"config":2447},{"href":2052,"dataGaName":2053,"dataGaLocation":2268},{"text":2055,"config":2449},{"href":2057,"dataGaName":2058,"dataGaLocation":2268},{"text":2060,"config":2451},{"href":2062,"dataGaName":2063,"dataGaLocation":2268},{"text":2065,"config":2453},{"href":2067,"dataGaName":2068,"dataGaLocation":2268},{"text":2070,"config":2455},{"href":2072,"dataGaName":2073,"dataGaLocation":2268},{"text":2075,"config":2457},{"href":2077,"dataGaName":2078,"dataGaLocation":2268},{"title":2091,"links":2459},[2460,2462,2464,2466,2468,2470,2475,2480,2482,2484,2486],{"text":2099,"config":2461},{"href":2101,"dataGaName":2093,"dataGaLocation":2268},{"text":2104,"config":2463},{"href":2106,"dataGaName":2107,"dataGaLocation":2268},{"text":2112,"config":2465},{"href":2114,"dataGaName":2115,"dataGaLocation":2268},{"text":2117,"config":2467},{"href":2119,"dataGaName":2120,"dataGaLocation":2268},{"text":2122,"config":2469},{"href":2124,"dataGaName":2125,"dataGaLocation":2268},{"text":2471,"config":2472},"Développement durable",{"href":2473,"dataGaName":2474,"dataGaLocation":2268},"/sustainability/","Sustainability",{"text":2476,"config":2477},"Diversité, inclusion et appartenance (DIB)",{"href":2478,"dataGaName":2479,"dataGaLocation":2268},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2127,"config":2481},{"href":2129,"dataGaName":2130,"dataGaLocation":2268},{"text":2137,"config":2483},{"href":2139,"dataGaName":2140,"dataGaLocation":2268},{"text":2142,"config":2485},{"href":2144,"dataGaName":2145,"dataGaLocation":2268},{"text":2487,"config":2488},"Déclaration de transparence sur l'esclavage moderne",{"href":2489,"dataGaName":2490,"dataGaLocation":2268},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2492},[2493,2495,2497],{"text":2316,"config":2494},{"href":2318,"dataGaName":2319,"dataGaLocation":2268},{"text":2326,"config":2496},{"dataGaName":2328,"dataGaLocation":2268,"id":2329,"isOneTrustButton":926},{"text":2321,"config":2498},{"href":2323,"dataGaName":2324,"dataGaLocation":2268},[2500],{"id":2501,"title":7,"body":1804,"config":2502,"content":2504,"description":1804,"extension":2508,"meta":2509,"navigation":926,"path":2510,"seo":2511,"stem":2512,"__hash__":2513},"blogAuthors/en-us/blog/authors/itzik-gan-baruch.yml",{"template":2503},"BlogAuthor",{"name":7,"config":2505},{"headshot":2506,"ctfId":2507},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658921/Blog/Author%20Headshots/iganbaruch-headshot.jpg","iganbaruch","yml",{},"/en-us/blog/authors/itzik-gan-baruch",{},"en-us/blog/authors/itzik-gan-baruch","bz9VMiTQ1ixvnoxUFk0jiUcnLG3oQsymgXNCqyRqfsk",[2515,2523,2531],{"title":2516,"description":2517,"heroImage":2518,"category":1800,"date":2519,"authors":2520,"slug":2522,"externalUrl":1804},"Moderniser Java avec Cursor et GitLab","Ce tutoriel commence par la correction ciblée de tests, introduit des murs qualité et met en œuvre des modifications de code en tenant compte du contexte du cycle de développement, des tests et des preuves de revue.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-08-12",[2521],"Michael Friedrich","modernize-java-with-cursor-and-gitlab",{"title":2524,"description":2525,"heroImage":2526,"category":1800,"date":2527,"authors":2528,"slug":2530,"externalUrl":1804},"Comment utiliser des agents d'IA pour migrer la limitation de débit de GitLab","Découvrez comment notre équipe composée de trois personnes a utilisé GitLab Duo Agent Platform, ainsi que d'autres outils d'IA, pour migrer avec succès le système de limitation de débit et les leçons que nous en avons tirées.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1773075582/yiosxfhwk8rfkulrtchv.png","2026-08-10",[2529],"Sam Wiskow","ai-agents-for-migrating-rate-limiting-system",{"title":2532,"description":2533,"heroImage":2534,"category":1800,"date":2535,"authors":2536,"slug":2538,"externalUrl":1804},"Codage agentique : le contexte fait la différence","Les agents de codage accélèrent le développement. Grâce au contexte dans GitLab, les entreprises évitent les correctifs superficiels et raccourcissent les cycles de revue.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1773856365/gsx2c0vqlswox3ldmq88.jpg","2026-08-03",[2537],"Jessica Taylor","agentic-coding-only-as-good-as-context",{"promotions":2540},[2541,2554,2565,2577],{"id":2542,"categories":2543,"header":2544,"text":2545,"button":2546,"image":2551},"ai-modernization",[1800],"L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":2547,"config":2548},"Obtenez votre score de maturité IA",{"href":2549,"dataGaName":2550,"dataGaLocation":2031},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":2552},{"src":2553},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2555,"categories":2556,"header":2557,"text":2545,"button":2558,"image":2562},"devops-modernization",[1815,2367],"Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":2559,"config":2560},"Obtenez votre score de maturité DevOps",{"href":2561,"dataGaName":2550,"dataGaLocation":2031},"/fr-fr/assessments/devops-modernization-assessment/",{"config":2563},{"src":2564},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2566,"categories":2567,"header":2569,"text":2545,"button":2570,"image":2574},"security-modernization",[2568],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":2571,"config":2572},"Obtenez votre score de maturité en matière de sécurité",{"href":2573,"dataGaName":2550,"dataGaLocation":2031},"/fr-fr/assessments/security-modernization-assessment/",{"config":2575},{"src":2576},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2578,"paths":2579,"header":2582,"text":2583,"button":2584,"image":2589},"github-azure-migration",[2580,2581],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Votre équipe est-elle prête pour la migration de GitHub vers Azure ?","GitHub a déjà commencé sa migration vers Azure. Découvrez ce que cela signifie pour vous.",{"text":2585,"config":2586},"Découvrez les différences entre GitLab et GitHub",{"href":2587,"dataGaName":2588,"dataGaLocation":2031},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2590},{"src":2564},{"header":2592,"blurb":2593,"button":2594,"secondaryButton":2598},"Commencez à développer plus rapidement dès aujourd'hui","Découvrez ce que votre équipe peut accomplir avec la plateforme d'orchestration intelligente pour le DevSecOps.\n",{"text":1827,"config":2595},{"href":2596,"dataGaName":1830,"dataGaLocation":2597},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":2154,"config":2599},{"href":2156,"dataGaName":1835,"dataGaLocation":2597},1786803785160]