Installation
Installez le package dans un environnement virtuel. Sur les installations récentes de Debian, Ubuntu et Homebrew Python, l’exécution depip install contre le Python système échoue avec error: externally-managed-environment.
Choisir entre query() et ClaudeSDKClient
Le SDK Python offre deux façons d’interagir avec Claude Code :
Utilisez
ClaudeSDKClient pour les applications interactives telles que les interfaces de chat, ou quand l’action suivante dépend de la réponse de Claude.
Fonctions
Les blocs de signature et les fragments
async for / async with nus sur cette page sont illustratifs. Pour les exécuter, enveloppez le corps dans async def main(): ... et appelez asyncio.run(main()).query()
Crée une nouvelle session pour chaque interaction avec Claude Code par défaut. Retourne un itérateur asynchrone qui produit les messages au fur et à mesure qu’ils arrivent. Chaque appel à query() recommence à zéro sans mémoire des interactions précédentes, sauf si vous passez continue_conversation=True ou resume dans ClaudeAgentOptions. Voir Sessions.
Paramètres
Retours
Retourne unAsyncIterator[Message] qui produit les messages de la conversation.
Exemple - Avec options
tool()
Décorateur pour définir des outils MCP avec sécurité des types.
Paramètres
Options de schéma d’entrée
-
Mappage de type simple (recommandé) :
-
Format JSON Schema (pour la validation complexe) :
-
Classe TypedDict : un schéma typé dont les clés
NotRequiredsont exclues derequired.- Python 3.11 et ultérieur : importez
TypedDictetNotRequireddepuistyping. - Python 3.10 :
typingne fournit pasNotRequired. ImportezTypedDictetNotRequireddepuistyping_extensions, que le SDK installe sous Python 3.10.
- Python 3.11 et ultérieur : importez
Annotated[type, "description"] pour définir la description du champ.
Retours
Une fonction décorateur qui enveloppe l’implémentation de l’outil et retourne une instanceSdkMcpTool.
Exemple
ToolAnnotations
Indices comportementaux pour un outil, passés comme argument annotations de tool(). ToolAnnotations étend mcp.types.ToolAnnotations du SDK MCP avec un champ maxResultSizeChars, et vous pouvez écrire chaque indice en camelCase ou snake_case : ToolAnnotations(readOnlyHint=True) et ToolAnnotations(read_only_hint=True) sont équivalents. Pour relire un indice depuis l’objet, utilisez l’orthographe déclarée par votre package mcp installé : .readOnlyHint sur mcp 1.x et .read_only_hint sur 2.x, tandis que .maxResultSizeChars fonctionne sur les deux. Vous pouvez également passer un mcp.types.ToolAnnotations simple partout où le SDK accepte des annotations.
Les noms snake_case et le champ typé maxResultSizeChars nécessitent Python Agent SDK 0.2.140 ou ultérieur. Les versions 0.1.31 à 0.2.139 réexportent mcp.types.ToolAnnotations inchangé. Sur les versions 0.1.55 à 0.2.139, vous pouvez toujours passer maxResultSizeChars comme argument de mot-clé : la classe MCP accepte les champs supplémentaires, et le SDK transmet la valeur à Claude Code.
Tous les champs sont optionnels. Les clients ne doivent pas s’y fier pour les décisions de sécurité.
create_sdk_mcp_server()
Crée un serveur MCP en processus qui s’exécute dans votre application Python.
Paramètres
Retours
Retourne un objetMcpSdkServerConfig qui peut être passé à ClaudeAgentOptions.mcp_servers.
Exemple
list_sessions()
Liste les sessions passées avec métadonnées. Filtrez par répertoire de projet ou listez les sessions dans tous les projets. Synchrone ; retourne immédiatement.
Paramètres
Type de retour : SDKSessionInfo
Exemple
Affiche les 10 sessions les plus récentes pour un projet. Les résultats sont triés parlast_modified décroissant, donc le premier élément est le plus récent. Omettez directory pour rechercher dans tous les projets.
get_session_messages()
Récupère les messages d’une session passée. Synchrone ; retourne immédiatement.
Paramètres
Type de retour : SessionMessage
Exemple
get_session_info()
Lit les métadonnées d’une seule session par ID sans scanner le répertoire de projet complet. Synchrone ; retourne immédiatement.
Paramètres
Retourne
SDKSessionInfo, ou None si la session n’est pas trouvée.
Exemple
Recherchez les métadonnées d’une seule session sans scanner le répertoire de projet. Utile quand vous avez déjà un ID de session d’une exécution précédente.rename_session()
Renomme une session en ajoutant une entrée de titre personnalisé. Les appels répétés sont sûrs ; le titre le plus récent gagne. Synchrone.
Paramètres
Lève
ValueError si session_id n’est pas un UUID valide ou si title est vide ; FileNotFoundError si la session ne peut pas être trouvée.
Exemple
Renommez la session la plus récente pour qu’elle soit plus facile à trouver plus tard. Le nouveau titre apparaît dansSDKSessionInfo.custom_title lors des lectures ultérieures.
tag_session()
Étiquette une session. Passez None pour effacer l’étiquette. Les appels répétés sont sûrs ; l’étiquette la plus récente gagne. Synchrone.
Paramètres
Lève
ValueError si session_id n’est pas un UUID valide ou si tag est vide après nettoyage ; FileNotFoundError si la session ne peut pas être trouvée.
Exemple
Étiquetez une session, puis filtrez par cette étiquette lors d’une lecture ultérieure. PassezNone pour effacer une étiquette existante.
fork_session()
Copie la transcription d’une session dans une nouvelle session afin que vous puissiez orienter la conversation dans une autre direction tout en laissant l’originale inchangée. Pour créer une branche à partir d’un point antérieur de la conversation, passez up_to_message_id. Synchrone.
Paramètres
Retourne un
ForkSessionResult dont le session_id est l’UUID de la nouvelle session. Passez-le comme resume pour poursuivre le fork. Le fork n’inclut pas les checkpoints de fichiers de la session originale, vous ne pouvez donc pas le ramener à un checkpoint capturé avant le fork.
fork_session() lève :
ValueError:session_idouup_to_message_idn’est pas un UUID valideValueError: la session ne contient aucun message, ouup_to_message_idne correspond à aucun message de la transcriptionFileNotFoundError: la session ne peut pas être trouvée
Exemple
Forkez la session la plus récente sous un nouveau titre, puis reprenez le fork. La session originale conserve son propre historique.Classes
ClaudeSDKClient
Maintient une session de conversation sur plusieurs échanges. C’est l’équivalent Python de la façon dont la fonction query() du SDK TypeScript fonctionne en interne - elle crée un objet client qui peut continuer les conversations. Voir la comparaison avec query().
Méthodes
Support du gestionnaire de contexte
Le client peut être utilisé comme un gestionnaire de contexte asynchrone pour la gestion automatique de la connexion :
Important : Lors de l’itération sur les messages, évitez d’utiliser break pour quitter tôt car cela peut causer des problèmes de nettoyage asyncio. À la place, laissez l’itération se terminer naturellement ou utilisez des drapeaux pour suivre quand vous avez trouvé ce que vous cherchiez.
Exemple - Continuer une conversation
Exemple - Entrée en streaming avec ClaudeSDKClient
query() accepte également un itérable asynchrone de dicts de messages utilisateur, vous permettant d’assembler le prompt au moment de l’envoi ou d’inclure des blocs de contenu tels que des images. Claude Code commence à répondre au premier message cédé dès qu’il arrive, sans attendre que l’itérable se termine, et receive_response() s’arrête au ResultMessage qui termine cette réponse. Mettez tout ce que Claude doit lire avant de répondre dans un seul message, comme le fait ce générateur, et associez chaque appel query() à sa propre boucle receive_response().
Exemple - Utiliser les interruptions
Comportement du buffer après interruption :
interrupt() envoie un signal d’arrêt mais ne vide pas le buffer de messages. Les messages déjà produits par la tâche interrompue, incluant son ResultMessage, restent dans le flux. Vous devez les vider avec receive_response() avant de lire la réponse à une nouvelle requête. Si vous envoyez une nouvelle requête immédiatement après interrupt() et appelez receive_response() une seule fois, vous recevrez les messages de la tâche interrompue, pas la réponse de la nouvelle requête.Exemple - Contrôle avancé des permissions
Types
@dataclass vs TypedDict : Ce SDK utilise deux types de classes. Les classes décorées avec @dataclass (telles que ResultMessage, AgentDefinition, TextBlock) sont des instances d’objets à l’exécution et supportent l’accès par attribut : msg.result. Les classes définies avec TypedDict (telles que ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput) sont des dicts simples à l’exécution et nécessitent l’accès par clé : config["budget_tokens"], pas config.budget_tokens. La syntaxe d’appel ClassName(field=value) fonctionne pour les deux, mais seules les dataclasses produisent des objets avec des attributs.SdkMcpTool
Définition d’un outil MCP SDK créé avec le décorateur @tool.
Transport
Classe de base abstraite pour les implémentations de transport personnalisées. Utilisez ceci pour communiquer avec le processus Claude sur un canal personnalisé (par exemple, une connexion distante au lieu d’un sous-processus local).
Import :
from claude_agent_sdk import Transport
ClaudeAgentOptions
Dataclass de configuration pour les requêtes Claude Code.
Gérer les réponses API lentes ou bloquées
Le sous-processus CLI lit plusieurs variables d’environnement qui contrôlent les délais d’attente de l’API et la détection de blocage. Transmettez-les viaClaudeAgentOptions.env :
-
API_TIMEOUT_MS: délai d’attente par requête sur le client Anthropic, en millisecondes. Par défaut600000. S’applique à la boucle principale et à tous les sous-agents. -
CLAUDE_CODE_MAX_RETRIES: nombre maximum de nouvelles tentatives d’API. Par défaut10, plafonné à15. Chaque tentative obtient sa propre fenêtreAPI_TIMEOUT_MS. Pour les exécutions sans surveillance qui doivent attendre la fin de pannes plus longues, définissezCLAUDE_CODE_RETRY_WATCHDOG=1: il réessaie les erreurs de capacité transitoires indéfiniment et, sur Claude Code v2.1.199 ou ultérieur, augmente la valeur par défaut pour les autres erreurs transitoires à300et supprime le plafond sur cette variable. -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: chien de garde de blocage pour les sous-agents. Pendant que le chien de garde de flux est activé, la valeur par défaut estCLAUDE_STREAM_IDLE_TIMEOUT_MSplus 5 minutes, ce qui donne600000sauf si vous augmentez cette variable. Avec le chien de garde de flux désactivé, la valeur par défaut est600000. Avant v2.1.257, la valeur par défaut était toujours600000. Le minuteur se réinitialise à chaque événement de flux. En cas de blocage, Claude Code abandonne le sous-agent et signale le blocage au parent. Pour un sous-agent en arrière-plan, il marque également la tâche comme échouée et joint tout résultat partiel. -
CLAUDE_ENABLE_STREAM_WATCHDOGavecCLAUDE_STREAM_IDLE_TIMEOUT_MS: chien de garde de flux qui abandonne la requête quand les en-têtes sont arrivés mais que le corps de la réponse cesse d’être envoyé en streaming. Le chien de garde est activé par défaut pour tous les fournisseurs ; définissezCLAUDE_ENABLE_STREAM_WATCHDOG=0pour le désactiver.CLAUDE_STREAM_IDLE_TIMEOUT_MSvaut par défaut300000et est limité à ce minimum. Après l’abandon, Nouvelles tentatives automatiques décrit ce que fait Claude Code, en fonction de la progression de la réponse. Pendant que le chien de garde attend une réponse qu’une passerelle derrièreANTHROPIC_BASE_URLmaintient ouverte avec des pings de maintien de connexion, un hôte qui définitinclude_partial_messagescontinue de recevoir des messagesStreamEventdeping. Interprétez ces frames comme un signe d’activité plutôt que de faire expirer la session en cas de silence. Avant v2.1.257, les frames s’arrêtaient 5 minutes après le dernier événement de flux réel.
OutputFormat
Configuration pour la validation de sortie structurée. Passez ceci en tant que dict au champ output_format sur ClaudeAgentOptions :
SystemPromptPreset
Configuration pour utiliser le prompt système prédéfini de Claude Code avec des additions optionnelles.
SystemPromptCustom
Un prompt système personnalisé sous forme d’objet, équivalent à passer une chaîne en tant que system_prompt, qui peut également définir snapshot. Nécessite claude-agent-sdk v0.2.153 ou ultérieur.
SystemPromptFile
Configuration pour charger un prompt système personnalisé à partir d’un fichier au lieu de le passer en tant que chaîne. Le SDK mappe ceci au flag CLI --system-prompt-file. Utilisez la forme fichier quand le prompt est volumineux : le SDK transmet un system_prompt chaîne sur l’argv du sous-processus CLI, qui est soumis aux limites de longueur de ligne de commande du système d’exploitation avant que le SDK n’envoie une requête API. Sur Linux, un seul argument plus long qu’environ 128 KB échoue au lancement du processus avec Argument list too long. Sur Windows, la ligne de commande entière est plafonnée à environ 32 KB, donc la forme chaîne échoue à un seuil inférieur.
SettingSource
Contrôle à partir de quelles sources de configuration basées sur le système de fichiers le SDK charge les paramètres.
Comportement par défaut
Quandsetting_sources est omis ou None et skills n’est pas défini, query() charge les mêmes paramètres du système de fichiers que le CLI Claude Code : utilisateur, projet et local. Avec skills défini, la ligne setting_sources décrit la valeur par défaut actuelle. La politique gérée par le point de terminaison est chargée dans tous les cas ; les paramètres gérés par le serveur sont récupérés quand la session s’authentifie avec des identifiants d’organisation sur une configuration éligible. Pour plus d’informations, voir Ce que settingSources ne contrôle pas.
Pourquoi utiliser setting_sources
Désactiver les paramètres du système de fichiers :Dans Python SDK 0.1.59 et antérieur, une liste vide était traitée de la même manière que l’omission de l’option, donc
setting_sources=[] ne désactivait pas les paramètres du système de fichiers. Mettez à niveau vers une version plus récente si vous avez besoin qu’une liste vide prenne effet. Le SDK TypeScript n’est pas affecté."project" dans setting_sources. Voir Modifier les prompts système pour savoir comment le chargement de CLAUDE.md interagit avec les options de prompt système.
Priorité des paramètres
Quand plusieurs sources sont chargées, les paramètres sont fusionnés selon cette priorité (de la plus haute à la plus basse) :- Paramètres locaux (
.claude/settings.local.json) - Paramètres de projet (
.claude/settings.json) - Paramètres utilisateur (
~/.claude/settings.json)
agents, allowed_tools, et settings remplacent les paramètres du système de fichiers utilisateur, projet et local. Les paramètres de politique gérée ont priorité sur les options programmatiques.
AgentDefinition
Configuration pour un sous-agent défini par programmation.
Les noms de champs
AgentDefinition utilisent camelCase, tels que disallowedTools, permissionMode, et maxTurns. Ces noms correspondent directement au format de fil partagé avec le SDK TypeScript. Cela diffère de ClaudeAgentOptions, qui utilise Python snake_case pour les champs de niveau supérieur équivalents tels que disallowed_tools et permission_mode. Parce que AgentDefinition est une dataclass, passer un mot-clé snake_case lève une TypeError au moment de la construction.PermissionMode
Modes de permission pour contrôler l’exécution des outils.
EffortLevel
Niveaux d’effort pour guider la profondeur de réflexion.
CanUseTool
Alias de type pour les fonctions de rappel de permission d’outil.
tool_name: Nom de l’outil appeléinput_data: Les paramètres d’entrée de l’outilcontext: UnToolPermissionContextavec des informations supplémentaires
PermissionResult (soit PermissionResultAllow soit PermissionResultDeny).
Le rappel est le remplacement SDK de la demande de permission interactive : il est invoqué uniquement quand le flux d’évaluation des permissions aboutit à une demande de permission. Les appels d’outils déjà approuvés par une entrée allowed_tools, une règle d’autorisation des paramètres, ou le mode de permission, tel que acceptEdits ou bypassPermissions, ne l’invoquent jamais. Pour contrôler chaque appel d’outil, utilisez plutôt un hook PreToolUse.
Une règle d’autorisation ne pré-approuve pas les actions qu’aucun mode n’approuve automatiquement ; voir Comment les permissions sont évaluées pour savoir lesquelles d’entre elles atteignent le rappel et ce qui se passe en mode dontAsk et auto.
ToolPermissionContext
Informations de contexte transmises aux rappels de permission d’outil.
PermissionResult
Type union pour les résultats de rappel de permission.
PermissionResultAllow
Résultat indiquant que l’appel d’outil doit être autorisé.
PermissionResultDeny
Résultat indiquant que l’appel d’outil doit être refusé.
PermissionUpdate
Configuration pour mettre à jour les permissions par programmation.
PermissionRuleValue
Une règle à ajouter, remplacer ou supprimer dans une mise à jour de permission.
ToolsPreset
Configuration des outils prédéfinis pour utiliser l’ensemble d’outils par défaut de Claude Code.
ThinkingConfig
Contrôle le comportement de la réflexion étendue. Une union de trois configurations :
Le champ
display optionnel contrôle si le texte de réflexion est retourné "summarized" ou "omitted". Sur Claude Opus 4.7 et ultérieur, la valeur par défaut de l’API est "omitted", donc définissez "summarized" pour recevoir le contenu de réflexion dans les sorties ThinkingBlock. Claude Code ne transmet pas votre valeur display à certains fournisseurs, tels qu’Amazon Bedrock et Agent Platform de Google Cloud. Sur ces fournisseurs, Opus 4.7 et ultérieur retournent des sorties ThinkingBlock vides même quand vous définissez display à "summarized".
Parce que ce sont des classes TypedDict, ce sont des dicts simples à l’exécution. Construisez-les soit comme des littéraux dict soit appelez la classe comme un constructeur ; les deux produisent un dict. Accédez aux champs avec config["budget_tokens"], pas config.budget_tokens :
TaskBudget
Budget de tâche côté API en tokens, utilisé avec le champ task_budget dans ClaudeAgentOptions.
Parce que c’est un
TypedDict, passez-le comme un dict simple, tel que ClaudeAgentOptions(task_budget={"total": 50000}).
SdkBeta
Type littéral pour les fonctionnalités bêta du SDK.
betas dans ClaudeAgentOptions pour activer les fonctionnalités bêta.
McpSdkServerConfig
Configuration pour les serveurs MCP SDK créés avec create_sdk_mcp_server().
McpServerConfig
Type union pour les configurations de serveur MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpServerStatusConfig
La configuration d’un serveur MCP telle que signalée par get_mcp_status(). Ceci est l’union de toutes les variantes de transport McpServerConfig plus une variante de sortie uniquement claudeai-proxy pour les serveurs proxifiés via claude.ai.
McpSdkServerConfigStatus est la forme sérialisable de McpSdkServerConfig avec uniquement les champs type ("sdk") et name (str) ; l’instance en processus est omise. McpClaudeAIProxyServerConfig a les champs type ("claudeai-proxy"), url (str), et id (str).
McpStatusResponse
Réponse de ClaudeSDKClient.get_mcp_status(). Enveloppe la liste des statuts de serveur sous la clé mcpServers.
McpServerStatus
Statut d’un serveur MCP connecté, contenu dans McpStatusResponse.
ContextUsageResponse
Réponse de ClaudeSDKClient.get_context_usage(). Ceci est la même charge utile que Claude Code rend pour la commande /context dans une session interactive, donc aux côtés des comptages de tokens elle porte des champs d’affichage tels que color et gridRows que Claude Code utilise pour dessiner la grille d’utilisation /context.
Claude Code construit cette charge utile en envoyant plusieurs requêtes à l’API de comptage de tokens. Ces requêtes n’apparaissent pas dans le flux de messages, donc le suivi des coûts qui lit le flux ne les verra pas. Sur l’API Anthropic, le comptage de tokens n’est pas facturé.
ContextUsageCategory porte name, tokens, color, et un flag optionnel isDeferred. totalTokens est l’utilisation de contexte actuelle de la session, et maxTokens est la fenêtre par rapport à laquelle cette utilisation est mesurée. Cette fenêtre est la fenêtre de contexte du modèle, ou la fenêtre de compaction automatique inférieure quand elle s’applique, et rawMaxTokens porte la même valeur que maxTokens. apiUsage contient l’utilisation de la dernière réponse API, pas un total cumulé pour la session. Claude Code laisse les clés optionnelles deferredBuiltinTools, systemTools, et systemPromptSections non définies, donc attendez-vous à ce qu’elles soient absentes même si le type les déclare.
SdkPluginConfig
Configuration pour charger les plugins dans le SDK.
Exemple :
Types de messages
Message
Type union de tous les messages possibles.
UserMessage
Message d’entrée utilisateur.
Le SDK transmet
tool_use_result inchangé depuis le CLI. Pour un outil sur un serveur MCP externe dont le résultat contient des blocs resource_link, le dict a une clé resourceLinks contenant une liste de dicts avec les clés du type TypeScript SDKMcpResourceLink. Claude reçoit chaque lien sous forme de ligne de texte dans le résultat de l’outil. Pour afficher les fichiers que le serveur a retournés, lisez resourceLinks au lieu d’analyser ce texte. La clé resourceLinks nécessite Python Agent SDK 0.2.150 ou ultérieur et Claude Code v2.1.257 ou ultérieur ; le CLI fourni avec cette version du SDK satisfait l’exigence de Claude Code.
Le CLI omet la clé quand le résultat n’a pas de liens et sur les résultats des sous-agents. Le CLI conserve au maximum 50 liens par résultat et arrête d’ajouter des liens une fois que la liste atteint 64 KiB de JSON sérialisé. Un outil que vous définissez en processus avec tool() ne produit jamais la clé, car le SDK aplatit ses blocs resource_link en texte avant que le CLI ne voie le résultat.
AssistantMessage
Message de réponse d’assistant avec blocs de contenu.
AssistantMessageError
Types d’erreur possibles pour les messages d’assistant.
max_output_tokens. Le SDK transmet la valeur inchangée, donc traitez les chaînes en dehors de cette liste de la même manière que vous traitez unknown. Le type TypeScript SDKAssistantMessageError liste l’ensemble complet des valeurs que le CLI peut émettre.
SystemMessage
Message système avec métadonnées.
SystemMessage. Pour suivre la session entre les tours, définissez CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1 et lisez message.data["state"] sur chaque message dont le subtype est session_state_changed. SDKSessionStateChangedMessage liste les états qu’il peut porter. Itérez avec receive_messages() pour les lire : receive_response() s’arrête au ResultMessage, et un message session_state_changed peut suivre ce résultat.
ResultMessage
Message de résultat final avec informations de coût et d’utilisation.
subtype détermine quels autres champs sont remplis. C’est l’un de "success", "error_during_execution", "error_max_turns", "error_max_budget_usd", ou "error_max_structured_output_retries". La dataclass Python aplatit toutes les variantes en une seule forme, donc les champs qui ne s’appliquent pas au sous-type retourné sont None.
Plusieurs champs portent des détails de diagnostic sur la façon dont la conversation s’est terminée :
is_error:Truequand la conversation s’est terminée dans un état d’erreur. ToujoursTruesur les sous-typeserror_*. Sursubtype="success"c’estTruequand la dernière requête de modèle a échoué, ce qui signifie que la boucle d’agent s’est terminée mais le dernier appel API a retourné une erreur.api_error_status: le code de statut HTTP de l’erreur API terminale.Nonequand le tour s’est terminé sans une. Rempli uniquement sursubtype="success".result: texte du message d’assistant final sursubtype="success", ouNonesur les sous-typeserror_*. Quandsubtype="success"etis_error=True, ceci contient la chaîne d’erreur API si une est disponible mais peut être vide, donc vérifiezapi_error_statuset le contenuAssistantMessageprécédent pour plus de détails.errors: chaînes d’erreur au niveau de la boucle telles que le message max-turns. Rempli uniquement sur les sous-typeserror_*.terminal_reason: pourquoi la boucle de requête s’est terminée, telle que"completed","max_turns","api_error","aborted_streaming", ou"aborted_tools". Une valeur de"aborted_streaming"ou"aborted_tools"signifie que le tour a été interrompu avant de se terminer. Les causes courantes sontinterrupt()et un rappel de permission retournantPermissionResultDenyavecinterrupt=True.Nonesur les versions CLI qui précèdent le champ, sur les résultats des commandes locales telles que/voiceou/usage, qui contournent la boucle de requête, ou sur les résultats d’erreur synthétisés émis quand la session échoue fatalement. Reflète leSDKResultMessage.terminal_reasondu SDK TypeScript, qui liste l’ensemble complet des valeurs.origin: origine du message utilisateur qui a déclenché ce tour. En mode d’entrée en streaming, vérifiez ceci pour distinguer le résultat de votre propre prompt, oùoriginestNoneou{"kind": "human"}, du résultat d’un tour injecté tel qu’une notification de tâche en arrière-plan. Nécessite Python Agent SDK 0.2.137 ou ultérieur.
ResultMessage par notification, dans l’ordre, chacun avec un origin dont le kind est "task-notification". Tous sauf le dernier ont num_turns défini à 0 et un result vide, et le dernier porte le tour qui répond à toutes.
Le dict usage couvre uniquement la boucle d’agent principal et exclut les sous-agents et autres appels de modèle imbriqués ou auxiliaires. En mode d’entrée en streaming, les valeurs sont par tour. Préférez model_usage pour la comptabilité des tokens et des coûts. Le dict usage contient les clés suivantes quand présentes :
Le dict
model_usage mappe les noms de modèles à l’utilisation par modèle. Il couvre chaque appel de modèle effectué via le pipeline de requête : la boucle principale, les sous-agents, et les appels internes tels que la compaction et les agents Workflow. Les appels d’assistance en dehors de ce pipeline, tels que le classificateur de permission et les requêtes de comptage de tokens, sont exclus de model_usage. Traitez model_usage comme une estimation, pas une déclaration de facturation.
En mode d’entrée en streaming, model_usage et total_cost_usd sont cumulatifs entre les tours, donc lisez le dernier résultat plutôt que de faire la somme entre les résultats. Un appel qui reprend une session compte également les totaux restaurés à partir des appels antérieurs de la session. Voir Suivre les coûts en mode d’entrée en streaming pour les réinitialisations et Récupérer les totaux après un crash de session pour les résultats remis à zéro.
Chaque valeur dans model_usage est un TypedDict ModelUsage, importé via from claude_agent_sdk.types import ModelUsage. Ses clés utilisent camelCase car le SDK transmet la valeur inchangée du processus CLI sous-jacent, correspondant au type TypeScript ModelUsage :
StreamEvent
Événement de flux pour les mises à jour de messages partiels pendant le streaming. Reçu uniquement quand include_partial_messages=True dans ClaudeAgentOptions. Importez via from claude_agent_sdk.types import StreamEvent.
RateLimitEvent
Émis quand le statut de limite de débit change (par exemple, de "allowed" à "allowed_warning"). Utilisez ceci pour avertir les utilisateurs avant qu’ils ne frappent une limite dure, ou pour reculer quand le statut est "rejected".
RateLimitInfo
État de limite de débit porté par RateLimitEvent.
ConversationResetMessage
Émis quand la conversation est remplacée sans terminer la connexion, par exemple après /clear. Voir Suivre les coûts en mode d’entrée en streaming pour la façon dont une réinitialisation affecte les totaux en cours d’exécution sur les objets ResultMessage ultérieurs. Nécessite Python Agent SDK 0.2.137 ou ultérieur.
TaskStartedMessage
Émis quand une tâche en arrière-plan démarre. Une tâche en arrière-plan est tout ce qui est suivi en dehors du tour principal : une commande Bash en arrière-plan, une surveillance Monitor, un sous-agent généré via l’outil Agent, ou un agent distant. Le champ task_type vous dit lequel. Ce nommage n’est pas lié au renommage de l’outil Task-à-Agent.
TaskUsage
Données de tokens et de timing pour une tâche en arrière-plan.
TaskProgressMessage
Émis périodiquement avec les mises à jour de progression pour une tâche en arrière-plan en cours d’exécution.
TaskNotificationMessage
Émis quand une tâche en arrière-plan se termine, échoue, ou est arrêtée. Les tâches en arrière-plan incluent les commandes Bash run_in_background, les surveillances Monitor, et les sous-agents en arrière-plan.
Quand le CLI déplace un long appel d’outil MCP en arrière-plan, le résultat de l’outil pour cet appel ne contient qu’un espace réservé et le résultat réel de l’appel arrive dans ce message. Sur une notification
"completed" pour un tel appel, le CLI ajoute une clé resource_links listant les fichiers que l’outil a retournés par référence, avec les mêmes entrées et limites que la clé resourceLinks sur UserMessage.tool_use_result. La clé resource_links nécessite Python Agent SDK 0.2.150 ou ultérieur et Claude Code v2.1.257 ou ultérieur ; le CLI fourni avec cette version du SDK satisfait l’exigence de Claude Code.
La dataclass n’a pas de champ pour resource_links. Lisez-le à partir du dict data que le message hérite de SystemMessage : message.data.get("resource_links"). Faites correspondre la notification à l’appel avec tool_use_id. Le CLI omet la clé quand le résultat n’avait pas de liens et sur les notifications pour les tâches qui ne sont pas des appels d’outil MCP.
Types de blocs de contenu
ContentBlock
Type union de tous les blocs de contenu.
TextBlock
Bloc de contenu texte.
ThinkingBlock
Bloc de contenu de réflexion (pour les modèles avec capacité de réflexion).
ToolUseBlock
Bloc de requête d’utilisation d’outil.
ToolResultBlock
Bloc de résultat d’exécution d’outil.
Types d’erreur
Les types ci-dessous définissent ce que votre code capture. Pour les entrées associées aux messages d’erreur que ces types lèvent, avec la cause et la correction pour chacun, consultez Dépannage.ClaudeSDKError
Classe d’exception de base pour toutes les erreurs du SDK.
query() unique se termine par un résultat d’erreur, par exemple une erreur de limite de tours, le SDK lève une ResultError.
CLINotFoundError
Levée quand Claude Code CLI n’est pas installé ou introuvable.
CLIConnectionError
Levée quand la connexion à Claude Code échoue.
ProcessError
Levée quand le processus Claude Code échoue.
ResultError
Levée quand le processus Claude Code se termine parce que l’exécution s’est terminée par un message de résultat d’erreur, comme une erreur de limite de tours ou une erreur API. ResultError est une sous-classe de ProcessError, donc un gestionnaire except ProcessError existant la capture également. Ses attributs portent les champs de ce message de résultat, vous pouvez donc adapter votre logique selon la raison de l’échec de l’exécution sans analyser le texte du message. Nécessite Python Agent SDK 0.2.140 ou version ultérieure.
terminal_reason avant subtype. Quand la requête finale échoue, par exemple sur une erreur API, Claude Code rapporte subtype "success" avec la cause dans terminal_reason, par exemple "api_error" ; quand une limite que vous avez définie termine l’exécution, comme max_turns ou max_budget_usd, il rapporte un sous-type error_*.
CLIJSONDecodeError
Levée quand l’analyse JSON échoue.
Types de hooks
Pour un guide complet sur l’utilisation des hooks avec des exemples et des modèles courants, voir le guide Hooks.HookEvent
Types d’événements de hook supportés.
Le SDK TypeScript supporte des événements de hook supplémentaires non encore disponibles en Python. Voir le tableau de disponibilité des hooks pour le support par SDK.
HookCallback
Définition de type pour les fonctions de callback de hook.
input: Entrée de hook fortement typée avec unions discriminées basées surhook_event_name(voirHookInput)tool_use_id: Identifiant d’utilisation d’outil optionnel (pour les hooks liés aux outils)context: Contexte de hook avec des informations supplémentaires
HookJSONOutput.
HookContext
Informations de contexte passées aux callbacks de hook.
HookMatcher
Configuration pour faire correspondre les hooks à des événements ou des outils spécifiques.
HookInput
Type union de tous les types d’entrée de hook. Le type réel dépend du champ hook_event_name.
BaseHookInput
Champs de base présents dans tous les types d’entrée de hook.
PreToolUseHookInput
Données d’entrée pour les événements de hook PreToolUse.
PostToolUseHookInput
Données d’entrée pour les événements de hook PostToolUse.
PostToolUseFailureHookInput
Données d’entrée pour les événements de hook PostToolUseFailure. Appelé quand l’exécution d’un outil échoue.
UserPromptSubmitHookInput
Données d’entrée pour les événements de hook UserPromptSubmit.
StopHookInput
Données d’entrée pour les événements de hook Stop.
SubagentStopHookInput
Données d’entrée pour les événements de hook SubagentStop.
PreCompactHookInput
Données d’entrée pour les événements de hook PreCompact.
NotificationHookInput
Données d’entrée pour les événements de hook Notification.
SubagentStartHookInput
Données d’entrée pour les événements de hook SubagentStart.
PermissionRequestHookInput
Données d’entrée pour les événements de hook PermissionRequest. Permet aux hooks de gérer les décisions de permission programmatiquement.
HookJSONOutput
Type union pour les valeurs de retour de callback de hook.
SyncHookJSONOutput
Sortie de hook synchrone avec champs de contrôle et de décision.
Utilisez
continue_ (avec trait de soulignement) dans le code Python. Il est automatiquement converti en continue quand envoyé au CLI.HookSpecificOutput
Une union discriminée de types de sortie spécifiques à l’événement TypedDict. Le champ hookEventName détermine quels champs sont valides. Pour les détails complets sur les champs disponibles par événement de hook, voir Contrôler l’exécution avec les hooks.
AsyncHookJSONOutput
Sortie de hook asynchrone qui diffère l’exécution du hook.
Utilisez
async_ (avec trait de soulignement) dans le code Python. Il est automatiquement converti en async quand envoyé au CLI.Exemple d’utilisation de hook
Cet exemple enregistre deux hooks : l’un qui bloque les commandes Bash dangereuses commerm -rf /, et un autre qui journalise toute l’utilisation d’outils pour l’audit. Le hook de sécurité s’exécute uniquement sur les commandes Bash (via le matcher), tandis que le hook de journalisation s’exécute sur tous les outils.
Types d’entrée/sortie d’outil
Documentation des schémas d’entrée/sortie pour les outils Claude Code intégrés. Bien que le SDK Python n’exporte pas ceux-ci en tant que types, ils représentent la structure des entrées et sorties d’outils dans les messages. Chaque sortie affichée est la valeur que vous lisez à partir deUserMessage.tool_use_result pour cet outil. Les noms de clés apparaissent exactement comme Claude Code les émet. Une clé annotée | None avec un commentaire « présent quand » ou « optionnel » est omise quand elle ne s’applique pas.
Agent
Nom de l’outil :Agent. Le nom précédent Task est toujours accepté comme alias, et la liste tools dans le SystemMessage d’initialisation rapporte cet outil comme Task pour la compatibilité rétroactive.
Entrée :
"completed") :
"async_launched") :
"remote_launched") :
status : "completed" pour les tâches terminées, "async_launched" pour les tâches en arrière-plan, et "remote_launched" pour les tâches que Claude Code a envoyées à une session cloud, où sessionUrl renvoie à cette session et taskId l’identifie. Si Claude Code a conservé la worktree isolée du sous-agent, worktreePath sur la variante completed est l’endroit où la trouver, et worktreeBranch est sa branche lorsque Claude Code a créé la worktree avec git.
Sur la variante completed, resolvedModel nomme le modèle sur lequel le sous-agent a démarré, qui peut différer du model d’entrée demandé lorsque availableModels ou une autre substitution s’applique. Ce champ nécessite Claude Code v2.1.174 ou ultérieur. Sur la variante async_launched, resolvedModel nomme le modèle en cours d’utilisation lorsque l’agent s’est déplacé en arrière-plan, donc un échange qui s’est produit avant la mise en arrière-plan est reflété là. Le champ modelsUsed sur les deux variantes répertorie les modèles utilisés dans l’ordre, avec les répétitions consécutives réduites ; il est défini uniquement lorsque le modèle a été échangé en cours d’exécution. modelsUsed et le comportement resolvedModel au moment de la mise en arrière-plan nécessitent Claude Code v2.1.212 ou ultérieur.
Claude Code remplit usage et totalTokens à partir de la dernière requête API du sous-agent, pas de l’ensemble de l’exécution. Lorsqu’il est présent, thinking_tokens sous output_tokens_details dans usage est le nombre de tokens de sortie de cette requête qui étaient des tokens de réflexion. La clé output_tokens_details nécessite le SDK Python v0.2.136 ou ultérieur, qui regroupe Claude Code v2.1.228. La clé fallback_credit nécessite le SDK Python v0.2.162 ou ultérieur, qui regroupe Claude Code v2.1.285.
AskUserQuestion
Nom de l’outil :AskUserQuestion
Pose des questions de clarification à l’utilisateur pendant l’exécution. Voir Gérer les approbations et les entrées utilisateur pour les détails d’utilisation.
Entrée :
Bash
Nom de l’outil :Bash
Pour ce qui définit le plafond au premier plan, voir Limites de délai d’attente et de sortie. Pour la limite de temps en arrière-plan, voir Limite de temps pour les commandes en arrière-plan.
Entrée :
Monitor
Nom de l’outil :Monitor
Exécute une source de fond et livre chaque événement à Claude pour qu’il puisse réagir sans interrogation : command exécute un script et émet un événement par ligne stdout, et ws ouvre une WebSocket et émet un événement par trame texte. Fournissez exactement l’un de command ou ws.
Lorsque Monitor exécute une commande, il suit les mêmes règles de permission que Bash ; une surveillance WebSocket demande une approbation séparément. La source ws nécessite Claude Code v2.1.195 ou ultérieur. Voir la référence de l’outil Monitor pour le comportement et la disponibilité du fournisseur.
Entrée :
Edit
Nom de l’outil :Edit
Entrée :
Read
Nom de l’outil :Read
Entrée :
type pour les distinguer.
Sortie (type : "text") :
"image") :
"notebook") :
"pdf") :
"parts") :
"file_unchanged") :
Write
Nom de l’outil :Write
Entrée :
Glob
Nom de l’outil :Glob
Entrée :
totalMatches et countIsComplete nécessitent Claude Code v2.1.191 ou ultérieur.
Grep
Nom de l’outil :Grep
Entrée :
output_mode.
totalFiles nécessite Claude Code v2.1.208 ou ultérieur. totalLines nécessite Claude Code v2.1.210 ou ultérieur.
NotebookEdit
Nom de l’outil :NotebookEdit
Entrée :
WebFetch
Nom de l’outil :WebFetch
Entrée :
WebSearch
Nom de l’outil :WebSearch
Entrée :
TodoWrite
Nom de l’outil :TodoWrite
Les outils suivants sont disponibles par défaut uniquement sur Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5 et les modèles antérieurs. Sur tous les autres modèles, y compris les identifiants de modèle que Claude Code ne reconnaît pas, ils ne sont pas disponibles sauf si vous les activez :
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite à la place lorsque vous définissez CLAUDE_CODE_ENABLE_TASKS=0.Cet ensemble par défaut s’applique dans Claude Code v2.1.268 et versions ultérieures, que le SDK TypeScript Agent regroupe à partir de v0.3.268.Voir Disponibilité du modèle pour vous inscrire.TaskCreate
Nom de l’outil :TaskCreate
Entrée :
TaskUpdate
Nom de l’outil :TaskUpdate
Entrée :
TaskGet
Nom de l’outil :TaskGet
Entrée :
TaskList
Nom de l’outil :TaskList
Entrée :
TaskOutput
Supprimé dans Claude Code v2.1.277. Récupérait auparavant la sortie d’une tâche en arrière-plan en cours d’exécution ou terminée, avecBashOutput accepté comme alias ; Claude lit le fichier de sortie d’une tâche en arrière-plan avec Read à la place.
Une entrée disallowed_tools ou une règle de refus qui nomme toujours l’un ou l’autre nom est ignorée sans avertissement.
TaskStop
Nom de l’outil :TaskStop. Les noms précédents KillShell et KillBash sont toujours acceptés comme alias.
Entrée :
ExitPlanMode
Nom de l’outil :ExitPlanMode
Entrée :
ListMcpResources
Nom de l’outil :ListMcpResourcesTool
Entrée :
tool_use_result contient une list pour cet outil.
Sortie :
ReadMcpResource
Nom de l’outil :ReadMcpResourceTool
Entrée :
Construire une interface de conversation continue
L’exemple suivant maintient un seulClaudeSDKClient connecté à travers les tours, afin que Claude se souvienne des messages antérieurs. Tapez new pour vous déconnecter et vous reconnecter pour une nouvelle session, ou exit pour terminer la conversation.
Gestion des erreurs
L’exemple suivant encapsule un appelquery() dans des gestionnaires pour quatre des types d’erreurs que le SDK lève.
Cet exemple capture ResultError, qui nécessite Python Agent SDK 0.2.140 ou version ultérieure.
Configuration du sandbox
SandboxSettings
Configuration pour le comportement du sandbox. Utilisez ceci pour activer le sandboxing des commandes et configurer les restrictions réseau programmatiquement.
Le sandbox dépend du support de la plateforme et, sur Linux, d’outils comme
bubblewrap et socat. Par défaut, quand enabled est True mais que le sandbox ne peut pas démarrer, les commandes s’exécutent sans sandbox avec un avertissement sur stderr. Ce comportement par défaut diffère du SDK TypeScript, où failIfUnavailable est par défaut true.Définissez "failIfUnavailable": True dans vos paramètres de sandbox pour arrêter à la place. Le SDK transmet failIfUnavailable à Claude Code avec les champs déclarés de SandboxSettings. query() rapporte alors un ResultMessage avec subtype="error_during_execution" et la raison dans errors. Comme il s’agit d’un appel query() unique, le SDK lève une exception après avoir produit ce résultat d’erreur, donc enveloppez la boucle dans un bloc try pour continuer au-delà. Voir Gérer le résultat pour le contrat d’erreur.denyWrite dans vos paramètres de sandbox, par exemple "filesystem": {"denyWrite": ["/home/user/project/.env"]}. Le SDK transmet filesystem à Claude Code avec les champs déclarés de SandboxSettings. Une fois le sandbox démarré, il bloque les écritures vers chaque chemin absolu indiqué.
Exemple d’utilisation
SandboxNetworkConfig
Configuration spécifique au réseau pour le mode sandbox. Ces paramètres s’appliquent aux commandes Bash en sandbox quand enabled est True dans le parent SandboxSettings. Ils ne restreignent pas l’outil WebFetch, qui utilise à la place des règles de permission.
Le proxy sandbox intégré applique la liste blanche réseau en fonction du nom d’hôte demandé et ne termine pas ou n’inspecte pas le trafic TLS, donc des techniques telles que le domain fronting peuvent potentiellement le contourner. Voir Limitations de sécurité du sandboxing pour les détails et Déploiement sécurisé pour configurer un proxy qui termine TLS.
SandboxIgnoreViolations
Configuration pour ignorer les violations de sandbox spécifiques.
Fallback de permissions pour les commandes sans sandbox
QuandallowUnsandboxedCommands est activé, le modèle peut demander l’exécution de commandes en dehors du sandbox en définissant dangerouslyDisableSandbox: True dans l’entrée d’outil. Ces requêtes reviennent au système de permissions existant, ce qui signifie que votre gestionnaire can_use_tool sera invoqué, vous permettant d’implémenter une logique d’autorisation personnalisée.
Vos entrées excludedCommands prennent à la place une sortie du sandbox sans implication du modèle ; sandbox.excludedCommands couvre quand une entrée s’applique.
L’exemple suivant enregistre chaque requête sans sandbox et la refuse sauf si votre propre logique d’autorisation l’autorise :
Voir aussi
- Vue d’ensemble du SDK - Concepts généraux du SDK
- Référence du SDK TypeScript - Documentation du SDK TypeScript
- Outils personnalisés - Définir des outils MCP en processus pour que Claude appelle
- Référence CLI - Interface de ligne de commande
- Flux de travail courants - Guides étape par étape