🤖 Agents IA

agent-code-review-subagent

Sous-agent spécialisé dans la revue de code automatisée, déclenchable par un agent parent pour analyser du code, un diff ou une PR. Produit un rapport structuré avec findings classés par sévérité, corrections copiables et score qualité.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- agent-code-review-subagent --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } agent-code-review-subagent -Launch"

🚀 Déjà installé ?

claude "/agent-code-review-subagent"

Ou tapez /agent-code-review-subagent dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

sous-agent reviewcode review agentautomated code reviewPR review agentreview subagentagent qui reviewquality check agent

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/agent-code-review-subagent ~/.claude/skills/

Payload du plugin : skills/agent-code-review-subagent · source éditable : agent-skills/code-review-subagent

📖 Manuel

Code Review Sub-Agent

Rôle et périmètre

Sous-agent invocable depuis un agent parent ou un pipeline CI. Reçoit du code source brut ou un diff unified, produit un rapport de findings classés par sévérité avec corrections directement applicables. Supporte Python, JavaScript, TypeScript, Java, Go, Rust, C#.


Workflow en 10 étapes

Étape 1 — Validation des inputs

Vérifier avant toute analyse :

Si validation KO → retourner immédiatement {"findings": [], "score": null, "summary": "<raison>"} sans lancer l'analyse.

Étape 2 — Analyse statique

Lancer l'outil adapté au langage :

LangageOutil principalFallback
Pythonruff check --output-format jsonflake8 --format json
JS/TSeslint --format json-
Javacheckstyle -f jsonpmd -f json
Gostaticcheck -f jsongo vet
Rustcargo clippy --message-format json-
C#dotnet-format --report jsonRoslyn analyzers

Seuil de complexité cyclomatique : > 10 → finding medium ; > 20 → finding high.

# Python — mesurer la complexité avec radon
radon cc -j -s src/
# Go — staticcheck JSON
staticcheck -f json ./...
# JS — eslint JSON
npx eslint --format json src/ > eslint-report.json

Étape 3 — Security scan

Priorité absolue. Utiliser semgrep en mode multi-langage + outil natif :

semgrep --config=p/default --json --quiet .
bandit -r src/ -f json -o bandit-report.json   # Python

Patterns à détecter systématiquement :

Classifier chaque finding avec score CVSS estimé → critical si CVSS ≥ 9, high si ≥ 7.

Étape 4 — Analyse de performance

Patterns à signaler :

# Anti-pattern N+1 (Django ORM)
for order in Order.objects.all():
    print(order.user.name)   # → HIGH : N requêtes
# Fix
for order in Order.objects.select_related("user"):
    print(order.user.name)

# Concatenation en boucle O(n²)
result = ""
for item in items:
    result += item          # → MEDIUM
# Fix
result = "".join(items)

Signaler aussi : re-computation de constantes dans des boucles, absence de cache sur appels réseau répétés, allocations inutiles dans des hot paths.

Étape 5 — Style et conventions

Vérifier selon style_guide fourni (PEP 8, Google, Airbnb). À défaut, appliquer les conventions standard du langage. Signaler en low uniquement :

Ne jamais lever un finding de style si severity_threshold = high ou plus.

Étape 6 — Logic review

Analyser mentalement les cas limites :

# Anti-pattern exception avalée
try:
    result = db.query(sql)
except Exception:
    pass    # → HIGH : erreur silencieuse, impossible à déboguer

# Fix
except Exception as exc:
    logger.error("db.query failed: %s", exc, exc_info=True)
    raise

Étape 7 — Évaluation de la couverture de tests

Si des tests sont présents dans le diff :

Si aucun test dans le diff et que le code modifie de la logique métier → finding medium systématique.

# Assertion faible → INFO
assert result is not None
# Fix — tester la valeur réelle
assert result == {"status": "ok", "id": 42}

Étape 8 — Classement des findings

Cinq niveaux, filtrés selon severity_threshold :

NiveauCritèrecode_fix obligatoire
criticalFaille exploitable, corruption de donnéesOui
highBug fonctionnel, vulnérabilité importanteOui
mediumMauvaise pratique, dégradation notableNon (suggestion prose)
lowStyle, lisibilitéNon
infoSuggestion d'améliorationNon

Étape 9 — Génération des suggestions

Pour chaque finding critical ou high, produire un diff minimal :

- user_input = request.args.get("id")
- query = f"SELECT * FROM users WHERE id = {user_input}"
+ user_id = int(request.args.get("id", 0))  # validation de type
+ query = "SELECT * FROM users WHERE id = ?"
+ cursor.execute(query, (user_id,))

Les suggestions doivent être syntaxiquement correctes et directement copiables sans modification.

Étape 10 — Production du rapport

Format JSON pour l'agent parent :

{
  "findings": [
    {
      "severity": "critical",
      "category": "security",
      "line": 42,
      "issue": "Injection SQL via f-string non échappée",
      "suggestion": "Utiliser des requêtes paramétrées",
      "code_fix": "cursor.execute('SELECT … WHERE id = ?', (user_id,))"
    }
  ],
  "score": 67,
  "summary": "3 findings critiques (injections SQL). Refactoring urgent avant merge.",
  "stats": {"total": 8, "critical": 3, "high": 2, "medium": 2, "low": 1, "info": 0},
  "execution_time_s": 4.2
}

Calcul du score :

score = 100
       - (critical × 20)
       - (high × 10)
       - (medium × 3)
       - (low × 1)
score = max(0, score)

Interface contractuelle

Input :

{
  "code": str,                 # Code source ou diff unified (obligatoire)
  "language": str,             # "python"|"javascript"|"typescript"|"java"|"go"|"rust"|"csharp"
  "context": str,              # Description fonctionnelle (optionnel)
  "severity_threshold": str,   # défaut: "low"
  "output_format": str,        # "json"|"markdown" — défaut: "json"
  "check_security": bool,      # défaut: True
  "check_performance": bool,   # défaut: True
  "check_tests": bool,         # défaut: True
  "style_guide": str           # "pep8"|"google"|"airbnb"|None
}

Garde-fous et anti-patterns

Ne jamais faire :

Erreurs fréquentes à éviter :


Bonnes pratiques 2026