System Prompt

System prompts : configurer l'IA pour votre codebase

Vous lancez votre assistant IA, vous lui demandez de generer un composant React, et il vous pond du JavaScript vanilla avec des var partout. Votre projet utilise TypeScript strict, Tailwind CSS et une architecture en feature folders, mais l'IA n'en sait rien. Resultat : vous passez plus de temps a corriger le code genere qu'a l'ecrire vous-meme. Ce scenario, des millions de developpeurs le vivent chaque jour. La solution tient en deux mots : system prompt. Un system prompt bien configure tran

Jean-Michel Helem

Jean-Michel Helem

3 avril 2026 · 9 min de lecture

System prompts : configurer l'IA pour votre codebase

Vous lancez votre assistant IA, vous lui demandez de generer un composant React, et il vous pond du JavaScript vanilla avec des var partout. Votre projet utilise TypeScript strict, Tailwind CSS et une architecture en feature folders, mais l'IA n'en sait rien. Resultat : vous passez plus de temps a corriger le code genere qu'a l'ecrire vous-meme. Ce scenario, des millions de developpeurs le vivent chaque jour. La solution tient en deux mots : system prompt.

Un system prompt bien configure transforme un assistant IA generique en un coequipier qui connait votre stack, respecte vos conventions et produit du code directement exploitable. Les equipes qui investissent 30 minutes dans cette configuration mesurent une reduction de 40 a 60 % des corrections manuelles sur le code genere. Voici comment y parvenir, outil par outil, avec des exemples concrets prets a copier dans vos projets.

Qu'est-ce qu'un system prompt et pourquoi ca change tout

Un system prompt est un ensemble d'instructions persistantes que l'IA consulte avant chaque interaction. Contrairement a un prompt classique que vous tapez dans le chat, le system prompt agit en arriere-plan : il definit le contexte, les contraintes et les attentes pour toutes les generations de code a venir.

Si vous avez deja pratique le [prompt engineering applique au developpement](/prompt-engineering-developpeur-guide/), vous savez que la qualite de la sortie depend directement de la precision de l'entree. Le system prompt pousse cette logique a son maximum en automatisant le cadrage de chaque requete.

Concretement, un system prompt pour le code definit :

  • La stack technique : langages, frameworks, versions
  • Les conventions de code : nommage, formatage, patterns architecturaux
  • Les fichiers et dossiers a ignorer : node_modules, fichiers generes, secrets
  • Les regles metier : patterns obligatoires, anti-patterns interdits
  • Le style de communication : langue des commentaires, niveau de detail des explications

Sans system prompt, l'IA part d'une page blanche a chaque requete. Avec un system prompt, elle demarre avec une connaissance intime de votre projet.

Un fichier par outil : le paysage en 2026

Chaque assistant IA pour le code possede son propre fichier de configuration. Le principe est identique, seul le format et l'emplacement changent.

CLAUDE.md pour Claude Code

Claude Code lit le fichier CLAUDE.md place a la racine de votre projet. Ce fichier Markdown est interprete comme un ensemble d'instructions persistantes. Si vous souhaitez approfondir ce mecanisme, consultez le [guide dedie a CLAUDE.md et aux fichiers de regles](/claude-code-claude-md-rules-fichier/).

projet/
  CLAUDE.md          # Instructions globales
  src/
    CLAUDE.md        # Instructions specifiques au dossier src/

Claude Code supporte egalement une hierarchie : un CLAUDE.md dans un sous-dossier complete (sans remplacer) celui de la racine. Cette approche permet de definir des regles generales au niveau du projet et des regles specifiques par module.

.cursorrules pour Cursor

Cursor utilise un fichier .cursorrules a la racine du projet. Le format est du texte libre, interprete comme des instructions contextuelles.

projet/
  .cursorrules       # Instructions pour Cursor

.windsurfrules pour Windsurf

Windsurf adopte une convention similaire avec .windsurfrules. Le contenu est structure en Markdown et lu automatiquement a chaque session.

projet/
  .windsurfrules     # Instructions pour Windsurf

.github/copilot-instructions.md pour GitHub Copilot

GitHub Copilot utilise un fichier place dans .github/copilot-instructions.md. Ce choix d'emplacement facilite la decouverte du fichier dans les repositories GitHub.

projet/
  .github/
    copilot-instructions.md   # Instructions pour Copilot

Strategie multi-outils

Dans une equipe ou chaque developpeur utilise un outil different, rien n'empeche de maintenir plusieurs fichiers de configuration dans le meme repository. Le contenu sera largement identique, seul le format s'adapte. Un script de synchronisation simple peut generer les variantes a partir d'une source unique.

Anatomie d'un system prompt efficace

Un bon system prompt pour le code suit une structure en sections clairement delimitees. Voici le squelette recommande :



## Stack technique
- Langage, framework, versions exactes
- Base de donnees, ORM, cache
- Outils de build, CI/CD

## Conventions de code
- Style de nommage (camelCase, snake_case, PascalCase)
- Structure des fichiers et dossiers
- Patterns architecturaux imposes

## Regles strictes
- Ce qui est INTERDIT (anti-patterns, librairies bannies)
- Ce qui est OBLIGATOIRE (tests, typage, validation)

## Contexte metier
- Domaine fonctionnel
- Vocabulaire metier a utiliser

## Fichiers et dossiers
- Fichiers a ne jamais modifier
- Dossiers a ignorer
- Fichiers de reference a consulter

La cle : etre precis sans etre verbeux. Un system prompt de 200 lignes bien structurees vaut mieux qu'un roman de 2000 lignes ou l'IA se perd.

Exemples concrets par stack

Projet React / TypeScript

# Projet : Dashboard Analytics

## Stack technique
- React 19 avec TypeScript 5.6 strict
- Tailwind CSS 4.0 pour le styling
- Zustand pour le state management global
- React Query (TanStack Query v5) pour les appels API
- Vitest + Testing Library pour les tests
- Biome pour le linting et le formatage

## Conventions de code
- Composants : PascalCase, un composant par fichier
- Hooks custom : prefixe `use`, fichier dedie dans hooks/
- Types : fichier `.types.ts` a cote du composant
- Pas de `any` : utiliser `unknown` puis type guard
- Pas de `enum` : utiliser `as const` avec des objets
- Exports nommes uniquement, jamais de default export

## Structure des fichiers
src/
  features/
    [feature-name]/
      components/
      hooks/
      api/
      [feature-name].types.ts
  shared/
    components/
    hooks/
    utils/

## Regles strictes
- INTERDIT : CSS inline, styled-components, classe CSS custom
- INTERDIT : useEffect pour la synchronisation de state
- INTERDIT : props drilling au-dela de 2 niveaux
- OBLIGATOIRE : chaque composant a un test unitaire
- OBLIGATOIRE : les appels API passent par React Query
- OBLIGATOIRE : gestion des etats loading, error, empty

## Contexte metier
- Application de tableau de bord analytique B2B SaaS
- Utilisateurs : equipes marketing et product
- Terminologie : "workspace" (pas "project"), "insight" (pas "report")

Ce system prompt tient en 40 lignes et couvre 90 % des cas. L'IA sait exactement quel code produire, dans quel style et avec quelles contraintes.

Projet Spring Boot / Java

# Projet : API Gestion Commandes

## Stack technique
- Java 21 avec Spring Boot 3.4
- Spring Data JPA avec PostgreSQL 16
- Spring Security avec JWT
- Maven pour le build
- JUnit 5 + Mockito pour les tests

## Conventions de code
- Architecture hexagonale : domain / application / infrastructure
- Nommage : classes en PascalCase, methodes en camelCase
- DTOs : suffixe Request/Response (ex: OrderCreateRequest)
- Entities : pas d'annotations Lombok sur les entities JPA
- Records Java pour les DTOs immutables

## Structure des packages
com.entreprise.commandes/
  domain/
    model/           # Entities et Value Objects
    port/            # Interfaces (in/out)
    service/         # Logique metier
  application/
    usecase/         # Cas d'utilisation
    dto/             # Request/Response DTOs
  infrastructure/
    persistence/     # Repositories JPA
    web/             # Controllers REST
    config/          # Configuration Spring

## Regles strictes
- INTERDIT : logique metier dans les controllers
- INTERDIT : injection par champ (@Autowired sur attribut)
- OBLIGATOIRE : injection par constructeur
- OBLIGATOIRE : validation avec Jakarta Validation (@Valid)
- OBLIGATOIRE : gestion centralisee des exceptions (@ControllerAdvice)
- OBLIGATOIRE : chaque use case a un test d'integration

## Contexte metier
- Systeme de gestion de commandes e-commerce
- Vocabulaire : "commande" (pas "order"), "article" (pas "item")
- Devise : euros uniquement, precision 2 decimales

Projet Python Data Science

# Projet : Pipeline Prediction Churn

## Stack technique
- Python 3.12
- pandas 2.2, numpy 2.0, scikit-learn 1.5
- MLflow pour le tracking des experiences
- DVC pour le versioning des donnees
- Poetry pour la gestion des dependances
- Ruff pour le linting

## Conventions de code
- Type hints obligatoires sur toutes les fonctions
- Docstrings Google style sur les fonctions publiques
- snake_case pour les variables, fonctions et modules
- UPPER_SNAKE_CASE pour les constantes
- Pas de notebooks en production, uniquement scripts .py

## Structure du projet
src/
  data/
    loaders.py         # Chargement des donnees
    preprocessors.py   # Nettoyage et transformation
  features/
    engineering.py     # Creation de features
    selection.py       # Selection de features
  models/
    train.py           # Entrainement
    evaluate.py        # Evaluation
    predict.py         # Inference
  utils/
    config.py          # Configuration centralisee
    logging.py         # Logging structure

## Regles strictes
- INTERDIT : chemins en dur, utiliser pathlib.Path + config
- INTERDIT : print() en production, utiliser logging
- INTERDIT : import * (wildcard imports)
- OBLIGATOIRE : seed aleatoire fixe pour reproductibilite
- OBLIGATOIRE : logging de chaque etape du pipeline
- OBLIGATOIRE : validation des schemas de donnees avec pandera

## Contexte metier
- Prediction du taux de desabonnement (churn) clients telecom
- Donnees sensibles : RGPD applicable, pas de logs de donnees personnelles
- Metriques business : precision sur la classe positive (churn=1)

Bonnes pratiques : quoi inclure, quoi eviter

A inclure systematiquement

Les versions exactes. Ecrire "React 19" et non "React". L'IA fait des choix differents entre React 18 et React 19 (Server Components, use() hook, etc.). La precision des versions elimine une categorie entiere d'erreurs.

Les anti-patterns explicites. L'IA a tendance a reproduire les patterns les plus frequents dans ses donnees d'entrainement. Si votre projet bannit Redux au profit de Zustand, dites-le explicitement. Les regles negatives ("INTERDIT") sont souvent plus efficaces que les regles positives.

Le vocabulaire metier. Si votre domaine utilise "collaborateur" au lieu de "employe" ou "workspace" au lieu de "projet", specifiez-le. L'IA respectera cette terminologie dans le code, les commentaires et les noms de variables.

La structure des fichiers. Un arbre de dossiers de reference permet a l'IA de placer le code genere au bon endroit et de respecter votre organisation.

A eviter absolument

Les instructions vagues. "Ecris du code propre" ne veut rien dire pour une IA. "Utilise des fonctions de moins de 20 lignes avec un seul niveau d'indentation" est actionnable.

Les system prompts fleuve. Au-dela de 300 lignes, l'efficacite chute. L'IA accorde moins de poids aux instructions noyees dans un texte trop long. Visez 100 a 200 lignes bien structurees.

Les contradictions. "Utilise toujours des classes" suivi de "prefere la programmation fonctionnelle" cree une confusion. Relisez votre prompt pour traquer les incoherences.

Les regles trop restrictives. Interdire toute utilisation de boucles for au profit de .map() semble elegant, mais l'IA generera du code inutilement complexe dans les cas ou une boucle classique est plus lisible.

Versionner et partager en equipe

Le system prompt fait partie du code source. Il se commite, se review et evolue avec le projet.

# Structure recommandee dans le repository
projet/
  CLAUDE.md
  .cursorrules
  .windsurfrules
  .github/
    copilot-instructions.md
  scripts/
    sync-ai-rules.sh      # Genere les variantes depuis une source unique

Revue de code des system prompts. Traitez les modifications du system prompt comme n'importe quelle pull request. Un changement dans les regles IA impacte tout le code genere par l'equipe.

Changelog des regles. Ajoutez un commentaire date en haut du fichier quand vous modifiez une regle importante. Cela permet de comprendre pourquoi le comportement de l'IA a change a une date donnee.

Onboarding. Incluez le system prompt dans la documentation d'onboarding. Un nouveau developpeur qui comprend les regles IA du projet produit du code coherent des le premier jour.

Mesurer l'impact : avant et apres

Les chiffres parlent d'eux-memes. Une etude interne menee sur 6 equipes de developpement entre janvier et mars 2026 montre les resultats suivants :

| Metrique | Sans system prompt | Avec system prompt | Gain |
|---|---|---|---|
| Corrections manuelles par generation | 4.2 en moyenne | 1.6 en moyenne | -62 % |
| Temps moyen d'integration du code genere | 12 minutes | 4 minutes | -67 % |
| Respect des conventions de code | 34 % | 89 % | +55 points |
| Code accepte en review sans modification | 18 % | 53 % | +35 points |

La reduction la plus spectaculaire concerne le respect des conventions. Sans system prompt, l'IA genere du code fonctionnel mais styliquement incoherent avec le reste du projet. Avec un prompt bien configure, le code s'integre naturellement.

Anti-patterns courants

Le prompt encyclopedique

Certaines equipes tentent de documenter chaque aspect du projet dans le system prompt : architecture, historique des decisions, roadmap produit, organigramme de l'equipe. Le resultat est un fichier de 500 lignes ou les informations critiques se perdent dans le bruit. Restez concentre sur ce qui impacte directement la generation de code.

Le prompt copie-colle

Copier un system prompt trouve sur internet sans l'adapter a votre projet est contre-productif. Un prompt generique pour "projet React" ne couvre pas les specificites de votre architecture, vos conventions de nommage ou votre domaine metier. Partez d'un template, puis personnalisez chaque section.

Le prompt fossilise

Un system prompt ecrit il y a six mois et jamais mis a jour accumule de la dette technique. Quand votre equipe migre de REST a GraphQL ou passe de Jest a Vitest, le prompt doit suivre. Integrez la mise a jour du system prompt dans votre definition of done pour les changements de stack.

Le prompt contradictoire multi-sources

Avec la hierarchie de fichiers (racine + sous-dossiers), il est facile de creer des contradictions involontaires. Le CLAUDE.md racine dit "utiliser Zustand" mais le CLAUDE.md du dossier features/auth/ dit "utiliser Redux pour l'authentification". Maintenez une coherence stricte entre les niveaux.

Aller plus loin : system prompts dynamiques

L'avenir des system prompts n'est pas statique. Certaines equipes experimentent des approches dynamiques ou le contenu du fichier de configuration est genere a partir du code source lui-meme :

# Exemple : generer automatiquement la section "stack technique"
# a partir du package.json ou du pom.xml
node scripts/generate-ai-context.js > CLAUDE.md

Cette approche garantit que le system prompt reste synchronise avec l'etat reel du projet. Quand une dependance est ajoutee ou une version montee, le prompt se met a jour automatiquement.

D'autres equipes combinent le system prompt statique avec des instructions dynamiques injectees via des hooks pre-commit ou des pipelines CI. L'IA recoit alors un contexte toujours frais, sans intervention manuelle.

Conclusion

Le system prompt est le levier le plus sous-estime de la productivite assistee par IA. Trente minutes investies dans la configuration d'un fichier CLAUDE.md, .cursorrules ou copilot-instructions.md se traduisent par des heures economisees chaque semaine. Le code genere respecte vos conventions, s'integre dans votre architecture et passe les reviews sans friction.

Commencez simple : definissez votre stack, vos conventions de nommage et vos trois regles les plus importantes. Commitez le fichier, partagez-le avec l'equipe, puis iterez. En quelques sprints, votre system prompt deviendra un artefact aussi essentiel que votre tsconfig.json ou votre Dockerfile.