Les invites système définissent le comportement, les capacités et le style de réponse de Claude. Commencez par le préréglage claude_code pour les outils de codage de type CLI ou IDE où un humain observe et dirige le travail. Écrivez votre propre invite pour les agents ayant une surface, une identité ou un modèle de permissions différents.
Cette page couvre :
Fonctionnement des invites système
Une invite système est l’ensemble initial d’instructions qui façonne le comportement de Claude tout au long d’une conversation. Le SDK Agent dispose de trois points de départ pour celle-ci :
- Défaut minimal : lorsque vous ne définissez pas
systemPrompt en TypeScript ou system_prompt en Python, le SDK utilise une invite minimale qui couvre l’appel d’outils mais omet les directives de codage de Claude Code, le style de réponse et le contexte du projet. Cela diffère de claude -p, qui utilise l’invite complète de Claude Code par défaut. Si vous migrez depuis la CLI et souhaitez un comportement correspondant, définissez le préréglage claude_code.
- Préréglage
claude_code : l’invite système complète que la CLI Claude Code utilise, avec les instructions d’utilisation des outils, les directives de style et de formatage du code, les règles de ton et de verbosité des réponses, les instructions de sécurité et de sûreté, et le contexte du répertoire de travail et de l’environnement. Définissez systemPrompt: { type: "preset", preset: "claude_code" } en TypeScript ou system_prompt={"type": "preset", "preset": "claude_code"} en Python, éventuellement avec append pour ajouter vos propres instructions à la fin.
- Chaîne personnalisée : une invite que vous écrivez vous-même. Le SDK envoie uniquement ce que vous fournissez.
Décider d’un point de départ
Le facteur décisif est la proximité de votre agent avec Claude Code : un agent de codage opérant dans un référentiel, avec un humain regardant la sortie en continu et dirigeant le travail. Plus votre produit s’éloigne de cela, plus vous voudrez écrire votre propre invite.
| Vous construisez | Utiliser | Ce que vous obtenez |
|---|
| Un outil de codage de type CLI ou IDE où un humain regarde et dirige, et les valeurs par défaut de Claude Code sont ce que vous voulez | Préréglage claude_code | L’invite complète de Claude Code : guidance des outils, règles de sécurité, réponses adaptées au terminal, sensibilisation aux conventions du référentiel |
| Le même type d’outil, plus des règles spécifiques au produit comme les normes de codage, le format de sortie ou le contexte du domaine | Préréglage claude_code avec append | Tout ce qui précède, avec vos instructions ajoutées après le préréglage. Rien n’est supprimé, donc c’est la personnalisation à risque le plus faible |
| Un agent avec une surface, une identité ou un modèle de permission différent, ou un agent non-codage | Chaîne d’invite personnalisée | Uniquement ce que vous écrivez. Vous êtes responsable du remplacement de la guidance des outils et des instructions de sécurité dont votre agent a toujours besoin |
| Une boucle d’appel d’outils mince sans persona d’agent, où vous fournissez tout le comportement dans l’invite utilisateur | Pas d’option systemPrompt | Le défaut minimal : support d’appel d’outils et rien d’autre |
« Différent de Claude Code » signifie généralement l’un des éléments suivants :
- Surface différente : la sortie n’est pas lue dans un terminal par la personne qui l’a déclenchée. Les interfaces de chat, les consommateurs de sortie structurée et l’automatisation non-codage ont chacun besoin d’une invite qui correspond à la façon dont leur sortie est rendue et examinée. L’automatisation de codage sans surveillance, comme un travail CI qui corrige les erreurs de lint ou examine les diffs, s’adapte toujours au préréglage car le travail lui-même est ce pour lequel le préréglage est écrit.
- Identité différente : l’agent ne devrait pas se présenter comme Claude Code. Un bot d’assistance, un assistant d’analyse de données ou tout agent spécifique à un domaine a besoin de son propre nom, portée et persona.
- Modèle de permission différent : l’agent s’exécute de manière autonome sans qu’un humain n’approuve chaque étape, ou opère sur un ensemble étroit de ressources. L’invite de Claude Code suppose qu’un humain est dans la boucle avec accès à un ensemble complet d’outils.
- Tâches non-codage : la plupart de l’invite de Claude Code est une guidance de codage. Pour les agents de recherche, de contenu ou d’opérations, cette guidance entre en concurrence avec les instructions dont vous avez réellement besoin.
Le tableau de comparaison montre ce que chaque méthode de personnalisation préserve.
Personnaliser le comportement de l’agent
Les styles de sortie, append, et une chaîne d’invite personnalisée modifient chacun directement l’invite système. CLAUDE.md emprunte un chemin différent : le SDK le lit et injecte son contenu dans la conversation en tant que contexte du projet, non dans l’invite système, donc il façonne le comportement aux côtés de n’importe quelle configuration d’invite système que vous choisissez. Les Skills, les hooks, et les permissions façonnent également le comportement en dehors de l’invite système et sont couverts sur leurs propres pages.
Fichiers CLAUDE.md pour les instructions au niveau du projet
Les fichiers CLAUDE.md donnent à Claude un contexte et des instructions persistants au niveau du projet. Le SDK injecte leur contenu dans la conversation, non dans l’invite système, donc ils fonctionnent avec n’importe quelle configuration d’invite système. Pour savoir quoi mettre dans CLAUDE.md, où le placer, et comment écrire des instructions efficaces, consultez Comment Claude se souvient de votre projet. Cette section couvre ce qui est spécifique au SDK : comment CLAUDE.md se charge.
Le SDK lit CLAUDE.md lorsque la source de paramètre correspondante est activée : 'project' charge CLAUDE.md ou .claude/CLAUDE.md à partir du répertoire de travail, et 'user' charge ~/.claude/CLAUDE.md. Les options query() par défaut activent les deux sources, donc CLAUDE.md se charge automatiquement. Si vous définissez settingSources en TypeScript ou setting_sources en Python explicitement, incluez les sources dont vous avez besoin. Le chargement de CLAUDE.md est contrôlé par les sources de paramètres, non par le préréglage claude_code.
Charger CLAUDE.md avec le SDK
Pour charger CLAUDE.md, définissez settingSources pour inclure le niveau où votre CLAUDE.md se trouve. L’exemple ci-dessous charge un CLAUDE.md au niveau du projet aux côtés du préréglage claude_code, donc Claude a à la fois l’invite complète de l’agent de codage et les conventions de votre projet :
import { query } from "@anthropic-ai/claude-agent-sdk";
const messages = [];
for await (const message of query({
prompt: "Add a new React component for user profiles",
options: {
systemPrompt: {
type: "preset",
preset: "claude_code" // Use Claude Code's system prompt
},
settingSources: ["project"] // Loads CLAUDE.md from project
}
})) {
messages.push(message);
}
// Now Claude has access to your project guidelines from CLAUDE.md
CLAUDE.md est persistant dans toutes les sessions d’un projet, partagé avec votre équipe via git, et découvert automatiquement sans modifications de code. Il n’est pas chargé si vous passez un tableau settingSources vide.
Styles de sortie pour les configurations persistantes
Les styles de sortie sont des configurations enregistrées qui modifient l’invite système de Claude. Ils sont stockés sous forme de fichiers markdown et peuvent être réutilisés dans les sessions et les projets.
Créer un style de sortie
Un style de sortie est un fichier markdown avec un frontmatter pour les métadonnées, suivi du contenu de l’invite. Enregistrez-le dans ~/.claude/output-styles/ pour un style au niveau de l’utilisateur disponible dans chaque projet, ou .claude/output-styles/ dans votre référentiel pour un style au niveau du projet que vous pouvez valider et partager avec votre équipe.
Par défaut, un style de sortie personnalisé remplace les instructions d’ingénierie logicielle du préréglage claude_code par les vôtres. Pour les conserver et superposer vos instructions par-dessus, définissez keep-coding-instructions: true dans le frontmatter. Conservez-les lorsque votre agent effectue toujours du travail d’ingénierie logicielle. Omettez-les lorsque vous remplacez entièrement le rôle.
L’exemple ci-dessous définit une persona d’examen de code qui conserve les instructions de codage, car l’examen du code bénéficie toujours des conseils en matière de sécurité et de qualité du code de Claude Code. Enregistrez-le sous ~/.claude/output-styles/code-reviewer.md pour le rendre disponible dans tous les projets :
~/.claude/output-styles/code-reviewer.md
---
name: Code Reviewer
description: Thorough code review assistant
keep-coding-instructions: true
---
You are an expert code reviewer.
For every code submission:
1. Check for bugs and security issues
2. Evaluate performance
3. Suggest improvements
4. Rate code quality (1-10)
Activer un style de sortie
Une fois créés, activez les styles de sortie via :
- CLI : exécutez
/config et sélectionnez un style de sortie
- Paramètres : définissez
outputStyle dans .claude/settings.local.json
- SDK TypeScript : définissez
outputStyle dans l’objet settings en ligne passé à query(), ou pointez settings vers un fichier de paramètres qui le définit. outputStyle n’est pas un champ Options de niveau supérieur
Le SDK Python n’a pas d’option pour sélectionner un style de sortie par programmation. Pour les déploiements basés sur le code où vous ne pouvez pas écrire dans .claude/settings.local.json, utilisez append ou une chaîne d’invite personnalisée à la place.
Remarque pour les utilisateurs du SDK : Les styles de sortie sont chargés lorsque vous incluez settingSources: ['user'] ou settingSources: ['project'] (TypeScript) / setting_sources=["user"] ou setting_sources=["project"] (Python) dans vos options.
Ajouter au préréglage claude_code
Vous pouvez utiliser le préréglage Claude Code avec une propriété append pour ajouter vos instructions personnalisées tout en préservant toutes les fonctionnalités intégrées.
import { query } from "@anthropic-ai/claude-agent-sdk";
const messages = [];
for await (const message of query({
prompt: "Help me write a Python function to calculate fibonacci numbers",
options: {
systemPrompt: {
type: "preset",
preset: "claude_code",
append: "Always include detailed docstrings and type hints in Python code."
}
}
})) {
messages.push(message);
if (message.type === "assistant") {
console.log(message.message.content);
}
}
Améliorer la mise en cache des invites entre les utilisateurs et les machines
Par défaut, deux sessions qui utilisent le même préréglage claude_code et le même texte append ne peuvent toujours pas partager une entrée de cache d’invite si elles s’exécutent à partir de répertoires de travail différents. C’est parce que le préréglage intègre le contexte par session dans l’invite système avant votre texte append : le répertoire de travail, qu’il s’agisse d’un référentiel git, la plateforme, le shell actif, la version du système d’exploitation, et les chemins de mémoire automatique. Toute différence dans ce contexte produit une invite système différente et un cache miss. Le contenu de CLAUDE.md n’affecte pas le cache d’invite système car le SDK l’injecte dans la conversation, non dans l’invite système.
Pour rendre l’invite système identique dans les sessions, définissez excludeDynamicSections: true en TypeScript ou "exclude_dynamic_sections": True en Python. Le contexte par session se déplace dans le premier message utilisateur, laissant uniquement le préréglage statique et votre texte append dans l’invite système afin que les configurations identiques partagent une entrée de cache dans les utilisateurs et les machines.
excludeDynamicSections nécessite @anthropic-ai/claude-agent-sdk v0.2.98 ou ultérieur, ou claude-agent-sdk v0.1.58 ou ultérieur pour Python. Il s’applique uniquement à la forme d’objet préréglé et n’a aucun effet lorsque systemPrompt est une chaîne.
L’exemple suivant associe un bloc append partagé avec excludeDynamicSections afin qu’une flotte d’agents s’exécutant à partir de répertoires différents puisse réutiliser la même invite système mise en cache :
import { query } from "@anthropic-ai/claude-agent-sdk";
for await (const message of query({
prompt: "Triage the open issues in this repo",
options: {
systemPrompt: {
type: "preset",
preset: "claude_code",
append: "You operate Acme's internal triage workflow. Label issues by component and severity.",
excludeDynamicSections: true
}
}
})) {
// ...
}
Compromis : le répertoire de travail, l’indicateur de référentiel git, la plateforme, le shell actif, la version du système d’exploitation, et les chemins de mémoire automatique atteignent toujours Claude, mais comme faisant partie du premier message utilisateur plutôt que de l’invite système. Les instructions dans le message utilisateur ont un poids légèrement inférieur au même texte dans l’invite système, donc Claude peut s’y fier moins fortement lorsqu’il raisonne sur le répertoire actuel ou les chemins de mémoire automatique. Activez cette option lorsque la réutilisation du cache entre sessions est plus importante que le contexte d’environnement maximalement autoritaire.
Pour l’indicateur équivalent en mode CLI non interactif, consultez --exclude-dynamic-system-prompt-sections.
Invites système personnalisées
Vous pouvez fournir une chaîne personnalisée comme systemPrompt pour remplacer entièrement la valeur par défaut par vos propres instructions.
import { query } from "@anthropic-ai/claude-agent-sdk";
const customPrompt = `You are a Python coding specialist.
Follow these guidelines:
- Write clean, well-documented code
- Use type hints for all functions
- Include comprehensive docstrings
- Prefer functional programming patterns when appropriate
- Always explain your code choices`;
const messages = [];
for await (const message of query({
prompt: "Create a data processing pipeline",
options: {
systemPrompt: customPrompt
}
})) {
messages.push(message);
if (message.type === "assistant") {
console.log(message.message.content);
}
}
Comparaison des quatre approches
Les quatre méthodes de personnalisation diffèrent par leur emplacement, la façon dont elles sont partagées et ce qu’elles préservent de la présélection claude_code.
| Fonctionnalité | CLAUDE.md | Styles de sortie | systemPrompt avec append | systemPrompt personnalisé |
|---|
| Persistance | Fichier par projet | Enregistré sous forme de fichiers | Session uniquement | Session uniquement |
| Réutilisabilité | Par projet | Entre les projets | Duplication de code | Duplication de code |
| Gestion | Sur le système de fichiers | CLI + fichiers | Dans le code | Dans le code |
| Outils par défaut | Préservés | Préservés | Préservés | Perdus (sauf s’ils sont inclus) |
| Sécurité intégrée | Maintenue | Maintenue | Maintenue | Doit être ajoutée |
| Contexte d’environnement | Automatique | Automatique | Automatique | Doit être fourni |
| Niveau de personnalisation | Ajouts uniquement | Remplacer la valeur par défaut ou l’étendre | Ajouts uniquement | Contrôle complet |
| Contrôle de version | Avec le projet | Oui | Avec le code | Avec le code |
| Portée | Spécifique au projet | Utilisateur ou projet | Session de code | Session de code |
« Avec append » signifie utiliser systemPrompt: { type: "preset", preset: "claude_code", append: "..." } en TypeScript ou system_prompt={"type": "preset", "preset": "claude_code", "append": "..."} en Python. CLAUDE.md ne modifie pas le message système lui-même : le SDK injecte son contenu dans la conversation en tant que contexte du projet.
Cas d’utilisation et meilleures pratiques
Quand utiliser CLAUDE.md
Utilisez CLAUDE.md pour les instructions qui doivent s’appliquer à chaque session dans un projet, indépendamment du système prompt utilisé par la session : normes de codage, commandes courantes, contexte d’architecture et conventions d’équipe. CLAUDE.md est validé dans votre référentiel, il reste donc synchronisé avec le code qu’il décrit. Consultez Quand ajouter à CLAUDE.md pour des conseils complets.
Les fichiers CLAUDE.md se chargent lorsque la source de paramètre project est activée, ce qui est le cas pour les options query() par défaut. Si vous définissez explicitement settingSources en TypeScript ou setting_sources en Python, incluez 'project' pour continuer à charger CLAUDE.md au niveau du projet.
Quand utiliser les styles de sortie
Les styles de sortie sont destinés aux personas que vous souhaitez réutiliser dans l’interface de ligne de commande et le SDK sans modifier le code de l’application. Comme ils résident sous forme de fichiers dans .claude/output-styles, le même persona est disponible à partir de /config dans l’interface de ligne de commande et à partir de toute session SDK qui charge la source de paramètre correspondante.
Idéal pour :
- Les modifications de comportement persistantes dans les sessions
- Les configurations partagées par l’équipe
- Les assistants spécialisés comme un examinateur de code, un data scientist ou un assistant DevOps
- Les modifications d’invite complexes qui nécessitent une gestion de version
Exemples :
- Créer un assistant dédié d’optimisation SQL
- Construire un examinateur de code axé sur la sécurité
- Développer un assistant pédagogique avec une pédagogie spécifique
Quand utiliser systemPrompt avec append
Utilisez append lorsque le préréglage claude_code convient déjà à votre produit et que vous avez seulement besoin d’ajouter des instructions supplémentaires. Vous conservez les conseils d’outils du préréglage, les règles de sécurité et les conventions de codage sans les réimplémenter.
Idéal pour :
- Ajouter des normes ou des préférences de codage spécifiques
- Personnaliser le formatage de la sortie
- Ajouter des connaissances spécifiques au domaine
- Modifier la verbosité des réponses
- Améliorer le comportement par défaut de Claude Code sans perdre les instructions des outils
Quand utiliser systemPrompt personnalisé
Utilisez une invite personnalisée lorsque la surface, l’identité ou le modèle de permission de votre agent diffère de celui de Claude Code, comme décrit dans Décider d’un point de départ. Vous définissez l’ensemble complet des instructions, y compris tout conseil d’outils et toute règle de sécurité dont votre agent a besoin.
Idéal pour :
- Contrôle complet du comportement de Claude
- Les tâches spécialisées d’une seule session
- Tester de nouvelles stratégies d’invite
- Les situations où les outils par défaut ne sont pas nécessaires
- Construire des agents spécialisés avec un comportement unique
Combiner les approches
Ces méthodes se composent. Un style de sortie persistant ou CLAUDE.md définit le comportement à long terme, et append superpose les instructions spécifiques à la session sans modifier la configuration enregistrée.
Combiner un style de sortie avec des ajouts spécifiques à la session
L’exemple ci-dessous suppose qu’un style de sortie Code Reviewer est déjà actif. Le bloc append superpose les domaines de focus spécifiques à la session sur la persona, de sorte qu’une seule session de révision peut prioriser OAuth et le stockage des tokens sans modifier le style de sortie enregistré :
import { query } from "@anthropic-ai/claude-agent-sdk";
// Assuming "Code Reviewer" output style is active (via /config or settings)
// Add session-specific focus areas
const messages = [];
for await (const message of query({
prompt: "Review this authentication module",
options: {
systemPrompt: {
type: "preset",
preset: "claude_code",
append: `
For this review, prioritize:
- OAuth 2.0 compliance
- Token storage security
- Session management
`
}
}
})) {
messages.push(message);
}
Voir aussi
- Styles de sortie : créer, gérer et partager les styles de sortie pour la CLI, y compris le format de fichier et les emplacements de stockage
- Comment Claude se souvient de votre projet : ce qu’il faut mettre dans CLAUDE.md, où le placer et comment rédiger des instructions de projet efficaces
- Référence du SDK TypeScript : le type
Options complet, y compris systemPrompt, settingSources et settings
- Référence du SDK Python : le type
ClaudeAgentOptions complet, y compris system_prompt et setting_sources
- Paramètres : la référence
settings.json, y compris où les styles de sortie et autres configurations sont stockés