L’IA n’est plus un simple outil de suggestion : c’est devenu un véritable coéquipier de développement.

Voici comment nous avons construit Claude Agent, un service autonome qui exécute des tâches de développement sur commande.

Le contexte Z&V

Initialement, notre écosystème était composé de plusieurs repositories, ce qui ne facilite pas la vue globale de la code-base.

Autant pour un être humain la segmentation a du sens (séparation des responsabilités - notamment sur le scope front-end / backend)

Autant désormais, pour un agent, l’objectif est plutôt de partir sur un meta repo, qui contient l’ensemble de la code-base permettant ainsi une compréhension totale et générale du projet.

Notre écosystème technique actuel comprend quatre dépôts git que nous avons mutualisés en submodules dans un repository workspace, chacun avec sa stack :

  • nuxt/ : Frontend Nuxt 3 avec 200+ composants Vue
  • magento/ : Backend Magento 2 avec nos extensions custom
  • lambda/ : 24 services Node.js en Lambda AWS
  • infra/ : Infrastructure-as-Code Terraform + Docker

Le tout sert un site multi-pays et multi-région, ~15 millions de visiteurs mensuels, et une équipe de 3 développeurs qui jonglent entre ces univers. Avec l’introduction de l’IA dans notre process de développement (Cursor -> Windsurf -> Claude Code), la code review devenait un goulot d’étranglement, et les questions du métier sur la code-base consommaient un temps précieux.

L’architecture agent

Notre solution : un microservice Node.js 22 + Express qui orchestre Claude Code CLI en tant qu’agent autonome.

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   GitLab    │     │    Slack    │     │    Jira     │
│  Webhooks   │     │  Commands   │     │  Webhooks   │
└──────┬──────┘     └──────┬──────┘     └──────┬──────┘
       │                   │                   │
       └───────────────────┼───────────────────┘

                    ┌──────▼──────┐
                    │   Express   │
                    │  Validator  │
                    └──────┬──────┘

                    ┌──────▼──────┐
                    │   AWS SQS   │
                    │    Queue    │
                    └──────┬──────┘

                    ┌──────▼──────┐     ┌─────────────┐
                    │ Claude Code │────▶│     PVC     │
                    │    Worker   │◀────│  Codebase   │
                    └──────┬──────┘     └─────────────┘

       ┌───────────────────┼───────────────────┐
       │                   │                   │
┌──────▼──────┐     ┌──────▼──────┐     ┌──────▼──────┐
│   GitLab    │     │    Slack    │     │    Jira     │
│  Comments   │     │  Messages   │     │   Updates   │
└─────────────┘     └─────────────┘     └─────────────┘

Le flux est simple mais robuste : un événement arrive (webhook ou commande Slack), le service valide la signature, enqueue le message dans SQS, puis un worker dédié synchronise les submodules et exécute Claude Code avec le contexte complet.

Les 5 tâches automatisées

Notre agent gère cinq types de tâches, chacune auto-enregistrée via un pattern Task Registry :

// Exemple du pattern Task Registry
import { z } from 'zod';
import { TaskRegistry } from './registry';

const CodeReviewSchema = z.object({
  type: z.literal('code-review'),
  mergeRequestUrl: z.string().url(),
  projectPath: z.string(),
  sourceBranch: z.string(),
  targetBranch: z.string(),
  diffContent: z.string().optional()
});

TaskRegistry.register({
  type: 'code-review',
  schema: CodeReviewSchema,
  handler: async (payload) => {
    // Spawn Claude Code avec contexte MR
    return spawnClaudeCode({
      prompt: buildCodeReviewPrompt(payload),
      addDirs: ['nuxt', 'lambda', 'magento', 'infra']
    });
  }
});

1. Code Review

À chaque Merge Request sur GitLab, l’agent analyse le diff, identifie les patterns problématiques, vérifie la cohérence avec nos conventions, et poste des commentaires inline. Un filtre intelligent ignore les updates de metadata (labels, assignees) pour ne déclencher que sur les vrais changements de code.

MR approuvée par ZV Bot

MR rejetée avec feedback

2. Feature Development

La commande /claude-dev ZV-1234 récupère le ticket Jira, analyse les specs, et implémente la feature dans une branche dédiée. L’agent pousse le code et crée la MR automatiquement.

MR créée par /claude-dev

3. Codebase Q&A

Besoin de comprendre comment fonctionne le système de cache produit ? /claude-ask "Comment fonctionne le cache des pages produit dans Nuxt ?" interroge l’agent qui a accès aux 4 submodules et répond avec les fichiers et lignes de code pertinents.

Réponse à une question sur la codebase

4. Ticket Creation

/claude-ticket "Crée un ticket pour la mise en place d'un blog technique sur Astro 5" crée un ticket Jira enrichi par l’IA : bloc d’info du besoin, todo technique clairement explicité, QA steps intégrés.

Ticket Jira créé par l'agent

5. Daily Standup

Chaque matin à 9h, l’agent agrège les commits, MRs mergées, et tickets en cours pour générer un résumé Slack de l’activité de l’équipe.

Standup quotidien généré par l'agent

L’intégration Slack

Slack est le hub d’interaction quotidien. Chaque commande suit le même pattern UX :

  1. Réponse immédiate (< 3 secondes, obligation Slack)
  2. Traitement asynchrone via SQS
  3. Update du message original via message_ts une fois terminé
# Exemples d'utilisation
/claude-review https://gitlab.com/zv/nuxt/-/merge_requests/847
/claude-dev ZV-9523
/claude-ask "Quels sont les délais de livraison sur le site ?"
/claude-ticket "Feature: ajouter le support Apple Pay sur checkout mobile"
/claude-standup

Les développeurs n’ont plus besoin de quitter leur flow - l’agent travaille en background et notifie quand c’est prêt, n’importe qui peut directement trigger un développement au besoin depuis Slack.

Commande /claude-dev dans Slack

Résultats et métriques

Après 3 semaines de production :

MétriqueAvantAprèsDelta
Pipelines en échec post-merge12%4%-67%
MRs mergées par semaine1927+42%
Issues détectées en pre-review8%31%+287%
Incidents sécurité (code)1/mois0-100%

*Sur le nouveau code uniquement

Les défis techniques

Prompt engineering multi-contexte

Chaque submodule a son propre univers : Vue/TypeScript (Nuxt3) pour le front, Node.js/AWS pour lambda, PHP/Magento pour le backend, Terraform pour infra. Nos prompts système incluent le CLAUDE.md spécifique au projet détecté dans le diff.

Le gamebreaker assez récent (ajouté à Claude code sur la version v2.1.20 - 26 janvier 2026) :

CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude \
    --add-dir nuxt \
    --add-dir lambda \
    --add-dir magento \
    --add-dir infra

Cette commande permet de charger l’ensemble des fichiers CLAUDE.md de chaque dossier, avec chacun leurs spécificités.

Ces derniers doivent être parfaitement optimisés pour éviter de charger trop de contexte, dans tous les cas l’efficience est là et le modèle a une connaissance globale de toute la code-base.

Le workflow idéal : séparation des contextes

L’un des enseignements clés de notre utilisation : la qualité vient de la séparation des tâches.

  1. Création du ticket - Claude a accès à toute la code-base. Il sait exactement ce qu’il faut faire, quels fichiers sont impactés, et génère un ticket Jira parfaitement détaillé techniquement.

  2. Développement - Claude repart avec un contexte vide, mais un ticket précis. Pas de bruit, pas d’hypothèses : il implémente exactement ce qui est spécifié.

  3. Code review - Évaluation finale du rendu technique. Approbation ou rejet avec feedback actionnable.

Cette séparation évite les hallucinations et garantit une traçabilité complète : chaque décision technique est documentée dans le ticket avant l’implémentation.

Gestion de la fenêtre de contexte

L’agent charge les 4 submodules via --add-dir, lui donnant accès à l’intégralité de la code-base (~300K lignes). Mais chaque tâche démarre avec une conversation vide : pas d’historique pollué, pas de contexte résiduel.

Ce reset systématique :

  • Évite les confusions entre tâches successives
  • Garantit des réponses déterministes
  • Permet de tourner 24/7 sans dégradation de qualité

La suite

  • Automatiser la QA : pour tenir le rythme et la vélocité globale, c’est désormais le principal gouleau d’étrenglement.
  • Intégrer une connexion directe avec Teams
  • Ajouter d’autres cas d’usages automatisables

“Claude Agent ne remplace pas notre expertise — il amplifie notre capacité à l’appliquer. On passe moins de temps sur le code trivial et plus sur l’architecture qui compte.” — L’équipe Tech Z&V