Installation
Le SDK regroupe un binaire Claude Code natif pour votre plateforme en tant que dépendance optionnelle telle que
@anthropic-ai/claude-agent-sdk-darwin-arm64. La plupart des installations n’ont pas besoin d’installation Claude Code séparée. La version du SDK suit la version du binaire Claude Code fourni. Le SDK v0.3.191 regroupe Claude Code v2.1.191, donc une fonctionnalité sur cette page qui nécessite une version Claude Code a besoin de la version du SDK avec le même numéro de correctif ou ultérieur. Si votre gestionnaire de paquets ignore les dépendances optionnelles, le SDK lève Native CLI binary for <platform>-<arch> not found ; définissez pathToClaudeCodeExecutable sur un binaire claude installé séparément à la place.Si votre gestionnaire de paquets n’applique pas le champ libc de npm, comme Yarn 1.x ne le fait pas, vous obtenez à la fois les packages de plateforme glibc et musl sur Linux, ce qui double à peu près la taille d’installation. Sur Agent SDK v0.2.141 ou ultérieur, le SDK lance toujours la variante correcte. Pour récupérer l’espace dans une image conteneur, supprimez le package de plateforme qui ne correspond pas au libc où votre application s’exécute ; pour un runtime glibc sur x64, c’est rm -rf node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl. Sur une machine de développement, la suppression est temporaire, car Yarn réinstalle le package lors du prochain changement de dépendance.Compiler en un seul exécutable
Lorsque vous compilez votre application en un exécutable à fichier unique avecbun build --compile, le SDK ne peut pas résoudre le binaire CLI fourni au moment de l’exécution. require.resolve ne fonctionne pas à l’intérieur du système de fichiers virtuel $bunfs de l’exécutable compilé, donc le SDK lève Native CLI binary for <platform>-<arch> not found.
Pour contourner ce problème, intégrez le binaire de plateforme en tant que ressource de fichier, extrayez-le vers un chemin réel au démarrage avec extractFromBunfs(), et transmettez ce chemin à pathToClaudeCodeExecutable.
L’assistant extractFromBunfs() nécessite @anthropic-ai/claude-agent-sdk v0.3.144 ou ultérieur. L’exemple ci-dessous compile pour macOS sur Apple Silicon :
extractFromBunfs() copie le binaire intégré hors du système de fichiers virtuel de l’exécutable compilé vers un répertoire temporaire par utilisateur et retourne le chemin réel. En dehors d’un exécutable compilé, il retourne le chemin d’entrée inchangé, donc le même code s’exécute en développement sans modification.
Chaque exécutable compilé intègre le binaire d’une seule plateforme. Faites correspondre le package de plateforme dans l’importation à votre --target :
- Pour la compilation croisée, installez le package de plateforme non correspondant, par exemple
npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force. - Sur Windows, le sous-chemin binaire est
claude.exe, par exemple@anthropic-ai/claude-agent-sdk-win32-x64/claude.exe.
Importer l’entrée /core lors du regroupement du SDK Agent
Si votre application regroupe le SDK Agent avec ses propres dépendances, importez depuis @anthropic-ai/claude-agent-sdk/core au lieu de la racine du package. L’entrée /core nécessite le SDK Agent TypeScript v0.3.282 ou ultérieur, et ses types nécessitent TypeScript 5.0 ou ultérieur.
L’entrée /core exporte les mêmes query(), startup(), tool(), createSdkMcpServer(), et resolveSettings() que l’entrée racine, ainsi que les fonctions qui renomment, balisent et suppriment les sessions, AbortError, les constantes d’exécution, et tous les types. Elle n’ajoute aucun nom qui lui soit propre. Pour garder le code que votre application charge petit, /core omet certaines exportations racine, y compris prewarm(), la classe InMemorySessionStore, et les assistants qui listent, lisent, bifurquent, importent et résument les sessions. Si vous en avez besoin, utilisez l’entrée racine à la place.
L’entrée racine intègre ses propres copies de zod et @modelcontextprotocol/sdk. L’entrée /core les importe depuis votre node_modules aux plages que les peerDependencies du SDK Agent déclarent, donc un regroupement qui les inclut déjà ne porte pas une deuxième copie. Importez depuis l’entrée racine ou /core dans un processus donné, pas les deux : ce sont des regroupements séparés, et charger les deux vous donne deux copies des classes et de l’état du SDK Agent.
Fonctions
query()
La fonction principale pour interagir avec Claude Code. Crée un générateur asynchrone qui diffuse les messages en streaming au fur et à mesure de leur arrivée.
Paramètres
Retours
Retourne un objetQuery qui étend AsyncGenerator<SDKMessage, void> avec des méthodes supplémentaires.
startup()
Préconfigure le sous-processus CLI en le générant et en complétant la poignée de main d’initialisation avant qu’un prompt soit disponible. Le handle WarmQuery retourné accepte un prompt plus tard et l’écrit dans un processus déjà prêt, de sorte que le premier appel query() se résout sans payer le coût de génération et d’initialisation du sous-processus en ligne. Si vous ne connaissez pas encore le répertoire de travail de la session, utilisez prewarm() à la place.
Paramètres
Retours
Retourne unePromise<WarmQuery> qui se résout une fois que le sous-processus a été généré et a complété sa poignée de main d’initialisation.
Exemple
Appelezstartup() tôt, par exemple au démarrage de l’application, puis appelez .query() sur le handle retourné une fois qu’un prompt est prêt. Cela déplace la génération du sous-processus et l’initialisation en dehors du chemin critique.
prewarm()
Alpha. Démarre un processus Claude Code en tant que spare avant de savoir quelle session il servira, de sorte que vous puissiez le lier à une session plus tard avec claim(). Utilisez-le dans une application qui démarre avant que l’utilisateur ne choisisse un dossier. Nécessite TypeScript Agent SDK v0.3.282 ou ultérieur.
prewarm() complète la même poignée de main d’initialisation que startup(), avec le processus en attente dans options.cwd quand vous le définissez et sinon dans un répertoire temporaire privé sous votre répertoire de configuration Claude Code. Le répertoire de travail de la session, ses hooks SessionStart, ses serveurs MCP stdio, et son contexte CLAUDE.md et git attendent la réclamation. Un spare occupe environ 230 à 260 Mo de mémoire en attente. Si votre spawnClaudeCodeProcess exécute Claude Code sur une autre machine ou dans un conteneur, définissez options.cwd sur un répertoire qui existe là-bas pour que le spare attende.
options et initializeTimeoutMs signifient la même chose que pour startup(), sauf que options.cwd définit uniquement le répertoire dans lequel le spare attend. La promesse se résout avec un SpareProcess une fois que le processus a complété sa poignée de main d’initialisation. prewarm() lève une exception si options définit resume, continue, ou forkSession, car un spare n’a pas encore de session. Tout ce qu’une réclamation ne peut pas définir, comme mcpServers, hooks, canUseTool, settingSources, systemPrompt, et plugins, est fixé pour la durée de vie du spare, donc gardez un spare par ensemble distinct de ces options et préchauffez à nouveau quand ils changent.
Exemple
Préchauffez au démarrage de l’application, puis réclamez le spare quand l’utilisateur démarre une session :tool()
Crée une définition d’outil MCP type-safe pour une utilisation avec les serveurs MCP du SDK.
Paramètres
ToolAnnotations
Définie dans @modelcontextprotocol/sdk/types.js. Tous les champs sont des indices optionnels ; les clients ne doivent pas s’y fier pour les décisions de sécurité.
createSdkMcpServer()
Crée une instance de serveur MCP qui s’exécute dans le même processus que votre application.
Paramètres
listSessions()
Découvre et répertorie les sessions passées avec des métadonnées légères. Filtrez par répertoire de projet ou répertoriez les sessions dans tous les projets.
Paramètres
Type de retour : SDKSessionInfo
Exemple
Imprimez les 10 sessions les plus récentes pour un projet. Les résultats sont triés parlastModified décroissant, donc le premier élément est le plus récent. Omettez dir pour rechercher dans tous les projets.
getSessionMessages()
Lit les messages utilisateur et assistant à partir d’une transcription de session passée.
Paramètres
Type de retour : SessionMessage
Exemple
getSessionInfo()
Lit les métadonnées d’une seule session par ID sans analyser le répertoire de projet complet.
Paramètres
Retourne
SDKSessionInfo, ou undefined si la session n’est pas trouvée.
renameSession()
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.
Paramètres
tagSession()
Étiquette une session. Passez null pour effacer l’étiquette. Les appels répétés sont sûrs ; l’étiquette la plus récente gagne.
Paramètres
forkSession()
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 upToMessageId.
Paramètres
Retourne
{ sessionId }, 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 d’origine, vous ne pouvez donc pas le rembobiner jusqu’à un checkpoint capturé avant le fork.
forkSession() lève une exception lorsque :
sessionIdn’est pas un UUID- la session est introuvable ou ne contient aucun message
upToMessageIdne correspond à aucun message de la transcription
resolveSettings()
Résout les paramètres Claude Code effectifs pour un répertoire donné en utilisant le même moteur de fusion que l’interface CLI, sans générer l’interface CLI Claude. Utilisez-le pour inspecter quelle configuration un appel query() verrait avant d’en invoquer un.
Cette fonction est en version alpha et son API peut changer avant la stabilisation.
query() en direct applique :
policyHelper:resolveSettings()lit les sources MDM, y compris la liste de propriétés macOS et Windows HKLM/HKCU, mais n’exécute pas le sous-processuspolicyHelperconfiguré par l’administrateur.- Paramètres gérés par le serveur :
resolveSettings()ne récupère pas les paramètres gérés par le serveur. Passez-les commeoptions.serverManagedSettingspour les inclure. defaultMode: l’instantané retournepermissions.defaultModetel quel de chaque niveau, de sorte qu’il peut inclure les valeurs'auto'et'bypassPermissions'des paramètres de projet et locaux, que une session en direct ignore.
Paramètres
resolveSettings() accepte un seul objet d’options. Tous les champs sont optionnels.
Type de retour : ResolvedSettings
resolveSettings() retourne un objet décrivant les paramètres fusionnés et la source qui a contribué à chaque clé.
Exemple
L’exemple ci-dessous résout les paramètres pour un répertoire de projet et imprime la source qui contrôle la période de nettoyage. Sur une machine où aucun fichier de paramètres ne définitcleanupPeriodDays, les deux lignes imprimées affichent undefined pour la valeur, ce qui est le résultat attendu plutôt qu’une erreur.
Types
Options
Objet de configuration pour la fonction query().
Gérer les réponses d’API lentes ou bloquées
Le sous-processus CLI lit plusieurs variables d’environnement qui contrôlent les délais d’expiration de l’API et la détection des blocages. Transmettez-les via l’optionenv :
-
API_TIMEOUT_MS: délai d’expiration 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 maximal de nouvelles tentatives d’API. Valeur par défaut10, plafonnée à15. Chaque nouvelle tentative dispose de 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: cette variable réessaie indéfiniment en cas d’erreurs de capacité transitoires et, sur Claude Code v2.1.199 ou ultérieur, porte la valeur par défaut à300pour les autres erreurs transitoires et supprime le plafond de cette variable. -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog de blocage pour les sous-agents. Tant que le watchdog de flux est actif, la valeur par défaut estCLAUDE_STREAM_IDLE_TIMEOUT_MSplus 5 minutes, soit600000sauf si vous augmentez cette variable. Lorsque le watchdog de flux est désactivé, la valeur par défaut est600000. Avant v2.1.257, la valeur par défaut était toujours600000. Le minuteur est réinitialisé à chaque événement de flux. En cas de blocage, Claude Code interrompt 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: watchdog de flux qui interrompt la requête lorsque les en-têtes sont arrivés mais que le corps de la réponse cesse d’être transmis. Le watchdog est activé par défaut pour tous les fournisseurs ; définissezCLAUDE_ENABLE_STREAM_WATCHDOG=0pour le désactiver.CLAUDE_STREAM_IDLE_TIMEOUT_MSvaut300000par défaut et ne peut pas descendre en dessous de ce minimum. Après l’interruption, Nouvelles tentatives automatiques décrit ce que fait Claude Code, selon l’avancement de la réponse. Pendant que le watchdog attend une réponse qu’une passerelle derrièreANTHROPIC_BASE_URLmaintient ouverte avec des pings keep-alive, un hôte qui définitincludePartialMessagescontinue de recevoir des événements de fluxping; interprétez donc ces trames comme des signes d’activité plutôt que de faire expirer la session en cas de silence. Avant v2.1.257, les trames s’arrêtaient 5 minutes après le dernier véritable événement de flux.
Objet Query
Interface renvoyée par la fonction query().
Méthodes
applyFlagSettings()
Modifie les paramètres d’une session en cours sans redémarrer la requête. Utilisez-la lorsqu’un paramètre dépourvu de setter dédié doit changer en cours de session, par exemple pour resserrer permissions après que l’agent a lu une entrée non fiable. setModel() et setPermissionMode() sont des setters dédiés pour ces deux clés ; applyFlagSettings() est la forme générale qui accepte n’importe quel sous-ensemble des clés de paramètres, et passer model ici se comporte de la même manière que setModel().
Seules certaines clés prennent effet en cours de session :
- Appliquées au tour suivant :
effortLevel,ultracode,permissions,hooks,skillOverrides,fastMode,agent. Changer d’agentapplique également le remplacement de modèle et les hooks de cet agent au tour suivant. Son prompt système s’applique au tour suivant ou, dans une session qui réutilise un prompt système enregistré, une fois la session compactée. - Appliquée pendant le tour en cours :
model. Si vous changez demodelpendant que Claude travaille sur un tour, la réponse que Claude est déjà en train de générer se termine avec l’ancien modèle, et le reste du tour, à partir du prochain appel que Claude Code adresse au modèle, utilise le nouveau. Les sous-agents conservent leur propre modèle. Avant v2.1.212, un changement en cours de tour attendait le tour suivant. - Sans effet en cours de session : les options du prompt système. Elles sont résolues une seule fois au démarrage, de sorte que la session en cours conserve la valeur d’origine même si l’appel réussit. Pour les modifier, démarrez une nouvelle session.
effortLevel accepte un nom de niveau d’effort. Il accepte également "ultracode", qui demande un effort xhigh avec ultracode activé. applyFlagSettings() déclare effortLevel sans cette valeur ; en TypeScript, passez donc { ultracode: true, effortLevel: "xhigh" } pour obtenir le même résultat, ou la clé ultracode seule pour activer ultracode au niveau d’effort actuel de la session. La valeur ultracode nécessite Claude Code v2.1.203 ou ultérieure et n’est acceptée que par applyFlagSettings(), et non par la clé effortLevel d’un fichier de paramètres. Avant v2.1.284, la clé ultracode seule définissait également le niveau sur xhigh.
Les valeurs sont écrites dans la couche de paramètres de flag, fusionnées par-dessus ce que l’option inline settings de query() a défini au démarrage. Il s’agit du même niveau que celui que la section sur la priorité de cette page appelle options programmatiques.
Les appels successifs fusionnent superficiellement les clés de premier niveau. Un second appel avec { permissions: {...} } remplace l’intégralité de l’objet permissions de l’appel précédent au lieu de le fusionner en profondeur.
Pour effacer une clé définie avec applyFlagSettings(), passez null pour cette clé. La plupart des clés se rabattent alors d’abord sur une valeur définie au démarrage par l’option settings de query(), puis sur des sources de priorité inférieure. Un model effacé revient au modèle par défaut de Claude Code, même lorsqu’un fichier de paramètres définit model. Passer undefined n’a aucun effet, car la sérialisation JSON le supprime.
Trois clés en plus de model réinitialisent l’état de la session au lieu de se rabattre sur une autre valeur :
effortLevel: nullramène la session au niveau d’effort par défaut du modèle, et non à l’optioneffortdequery()ni à uneffortLevelprovenant d’un fichier de paramètres.agent: nullexécute le thread principal sans agent à partir du tour suivant, au lieu de restaurer l’optionagentdequery()ou unagentprovenant d’un fichier de paramètres. Si l’agent effacé avait appliqué son propre modèle, la session revient au modèle résolu au démarrage.ultracode: nulldésactive ultracode, commefalse, au lieu de restaurer une valeurultracodeprovenant d’un fichier de paramètres. La session conserve son niveau d’effort actuel ; passez donceffortLeveldans le même appel pour le modifier.
setModel() et setPermissionMode().
L’exemple ci-dessous change le modèle actif en cours de session, puis efface le remplacement afin que le modèle revienne au modèle par défaut de Claude Code.
applyFlagSettings() est disponible uniquement en TypeScript. Le SDK Python n’expose pas de méthode équivalente.updateSettings()
Écrit une clé autorisée dans un fichier de paramètres sur disque, afin que la valeur persiste pour les sessions ultérieures qui chargent cette source. Chaque source accepte une clé, avec une valeur de type chaîne :
"localSettings": accepteoutputStyleet le fusionne dans le fichier de paramètres locaux du projet,.claude/settings.local.json. Le nouveau style prend effet à la prochaine requête de la session."userSettings": accepteeffortLevelet l’enregistre comme niveau d’effort par défaut pour le modèle actuel de la session, sousmodelSettingsdans votre fichier de paramètres utilisateur. Passermaxn’écrit rien, carmaxest limité à la session. La session en cours conserve son niveau d’effort actuel dans tous les cas ; appelez doncapplyFlagSettings()si vous souhaitez également le modifier. Cette source nécessite TypeScript SDK v0.3.277 ou ultérieure, qui inclut Claude Code v2.1.277.
settingSources de la session excluent la source que vous indiquez. La suppression d’une clé n’est pas prise en charge.
toggleMcpServer()
Désactiver un serveur le déconnecte et retire ses outils de la session. Pour les serveurs que vous avez ajoutés en cours de session et pour les serveurs in-process, cela dépend de votre version de Claude Code :
- Un serveur stdio, SSE ou HTTP que vous avez ajouté en cours de session avec
setMcpServers(): le retrait de ses outils nécessite Claude Code v2.1.285 ou ultérieure. - Un serveur in-process que vous avez créé avec
createSdkMcpServer(), que vous l’ayez passé dansmcpServersou avecsetMcpServers(): sa déconnexion et le retrait de ses outils nécessitent Claude Code v2.1.286 ou ultérieure. La désactivation d’un tel serveur fait également échouer ses appels d’outils encore en cours, de sorte que Claude reçoit immédiatement un résultat d’erreur pour chacun d’eux, sans attendre le retour de votre handler.
WarmQuery
Handle renvoyé par startup(). Le sous-processus est déjà lancé et initialisé, de sorte qu’appeler query() sur ce handle écrit le prompt directement dans un processus prêt, sans latence de démarrage.
Méthodes
WarmQuery implémente AsyncDisposable, il peut donc être utilisé avec await using pour un nettoyage automatique.
SpareProcess
Alpha. Handle renvoyé par prewarm() : un processus Claude Code démarré qui n’est pas encore lié à une session et qui peut être réclamé une seule fois. Nécessite TypeScript Agent SDK v0.3.282 ou ultérieure.
Membres
options.cwd est requis. Une réclamation peut également définir additionalDirectories, model, permissionMode, maxThinkingTokens, une surcouche de paramètres de flag dans settings, appendSystemPrompt, title, agents et des jetons propres à la session dans env.
Claude Code peut refuser une réclamation, par exemple pour un dossier qui n’existe pas ou dont les paramètres de projet définissent env, agent ou model. Après un refus, un prompt que claim() a déjà envoyé reçoit un résultat d’erreur dont le texte commence par not_claimed, puis la requête renvoyée lève une exception. Encapsulez la boucle de la requête dans un bloc try pour continuer au-delà de l’exception. Lorsque claimed est rejetée avec un message commençant par option_not_applied, la session s’exécute sans le model ou le maxThinkingTokens que vous avez demandé. Après tout autre rejet, votre prompt n’a pas été exécuté ; démarrez donc plutôt la session avec query().
SDKControlInitializeResponse
Type de retour de initializationResult(). Contient les données d’initialisation de la session.
hooks_applied indique si Claude Code a enregistré les hooks que contenait la requête initialize. Le SDK envoie cette requête une fois au démarrage de la session, puis à chaque appel à reinitialize(). Le champ nécessite Agent SDK v0.3.238 ou ultérieure.
Claude Code omet le champ lorsque la requête ne contenait aucun hook. Lorsque la requête contenait des hooks, la valeur dépend du fait que la requête soit ou non le premier initialize de la session et, pour un initialize répété, de la manière dont elle a atteint la session :
true: Claude Code a enregistré les hooks. Le premier initialize d’une session renvoie cette valeur. Un initialize répété envoyé via le stdin de la CLI renvoie égalementtrue. Dans ce cas, les hooks de la nouvelle requête remplacent ceux enregistrés précédemment.false: Claude Code a ignoré les hooks. Un initialize répété envoyé à une session distante renvoie cette valeur, de sorte qu’un second client qui rejoint une session ne peut pas remplacer les hooks enregistrés par le premier client.
hooks à chaque initialize répété.
Le champ sdkMcpServerManifests de la requête et le champ sdk_mcp_manifests_parked de la réponse concernent les serveurs MCP SDK in-process que vous avez créés avec createSdkMcpServer(). Votre application ne définit ni ne lit aucun de ces champs.
claude_code_version est la version de Claude Code du processus qui exécute les tours de la session. Il s’agit de la même valeur que celle du message init SDKSystemMessage, ce qui vous permet de lire la version de la CLI avant le premier tour.
- Ce champ nécessite Agent SDK v0.3.296 ou ultérieur, qui inclut Claude Code v2.1.296.
- Si le champ vaut
undefinedet que vous définissezpathToClaudeCodeExecutable, faites-le pointer vers Claude Code v2.1.296 ou ultérieur.
fast_mode_state, et lorsqu’un élément bloque le mode rapide, fast_mode_disabled_reason fournit le code de raison en complément, afin que vous puissiez expliquer l’état bloqué au lieu de redéduire la disponibilité. Ces deux comportements nécessitent Claude Code v2.1.219 ou ultérieure. Avant v2.1.219, la réponse omettait fast_mode_state lorsque le mode rapide n’était pas disponible et ne fournissait jamais de raison. Pour les codes de raison et leur signification, consultez fast_mode_disabled_reason dans le message de résultat.
Le wrapper de réponse de contrôle d’un initialize réussi contient également un tableau pending_permission_requests. Le champ se trouve sur le wrapper de réponse lui-même, et non dans le payload SDKControlInitializeResponse ci-dessus. Chaque entrée est un message control_request complet, avec la même forme { type: "control_request", request_id, request } que celle des demandes de permission que la session diffuse en flux pendant son exécution.
Le tableau liste les demandes de permission que ce processus Claude Code a émises et qui ne sont pas encore résolues. Le SDK lit le tableau pour vous et distribue chaque entrée à votre callback canUseTool, la même redistribution que celle déclenchée par reinitialize() après une interruption du transport. Traitez les ID de requête répétés de manière idempotente, car une entrée peut répéter une requête que le callback a déjà reçue avant la perte de connexion.
Le tableau est toujours présent dans une réponse initialize réussie et il est vide lorsque ce processus n’a aucune demande de permission non résolue. Nécessite Claude Code v2.1.268 ou ultérieure. Les versions antérieures pouvaient omettre le champ ; si vous analysez vous-même le protocole filaire, considérez donc un champ manquant comme le signe d’une CLI plus ancienne plutôt que comme la preuve que rien n’est en attente.
SDKControlInterruptResponse
Le reçu d’interruption : la valeur avec laquelle interrupt() se résout sur une CLI qui annonce la capacité interrupt_receipt_v1 dans SDKSystemMessage.capabilities. Nécessite Claude Code v2.1.205 ou ultérieure. Les CLI antérieures répondent à l’interruption avec un payload de succès vide, de sorte que interrupt() se résout en undefined.
still_queued liste les UUID des messages utilisateur qui étaient en attente lorsque l’interruption est arrivée : les messages encore dans la file d’attente, ainsi que les messages que Claude Code avait déjà retirés de la file pour le tour suivant. Une fois le premier tour de la session commencé, Claude Code traite les messages listés après l’interruption, sauf si vous les annulez d’abord, et peut en fusionner plusieurs en un seul tour. Si vous interrompez avant le début du premier tour, Claude Code interrompt ce tour dès qu’il commence, et les messages listés dans ce tour ne reçoivent aucune réponse.
Utilisez le reçu pour décider s’il faut renvoyer quelque chose. Un message listé que vous n’annulez pas entre dans la conversation, qu’il reçoive une réponse ou non ; le renvoyer le transmet donc deux fois à Claude.
Interprétez la liste en tenant compte des réserves suivantes :
- Seuls les messages mis en file d’attente avec un UUID apparaissent. Un tableau vide ne signifie pas que rien d’autre ne s’exécutera.
- Seuls les messages du thread principal sont listés. Les messages adressés à un sous-agent sont hors du périmètre.
- La liste peut inclure des UUID que votre client n’a jamais envoyés, comme les déclencheurs de tâches planifiées. Ignorez les UUID que vous ne reconnaissez pas au lieu de les traiter comme une erreur.
interrupt(), peut définir cancel_queued: true sur la requête de contrôle interrupt. Claude Code v2.1.219 et versions ultérieures annoncent la prise en charge avec la capacité interrupt_cancel_queued_v1 dans SDKSystemMessage.capabilities ; les CLI plus anciennes ignorent le champ et laissent les messages en file d’attente s’exécuter normalement. Une telle interruption annule également tous les messages qui seraient sinon listés sous still_queued : le reçu les liste sous cancelled à la place, still_queued est vide, et aucun d’eux ne s’exécute.
La liste cancelled comporte les mêmes réserves que still_queued. La méthode interrupt() n’envoie jamais cancel_queued, de sorte que les reçus avec lesquels elle se résout ne contiennent pas cancelled.
Le reçu est un instantané pris au moment où l’interruption est traitée et, lors d’une interruption propre, il arrive avant le SDKResultMessage du tour interrompu. Lisez le reçu plutôt que d’inspecter la file d’attente après ce résultat : la boucle démarre immédiatement le tour suivant en file d’attente, de sorte que la file que vous inspectez après le résultat a déjà changé.
SDKControlGetContextUsageResponse
Type de retour de getContextUsage(). Avec la valeur par défaut de detail, il s’agit du même payload que celui que Claude Code affiche pour la commande /context dans une session interactive ; en plus des nombres de tokens, il contient donc des champs d’affichage tels que color et gridRows que Claude Code utilise pour dessiner la grille d’utilisation de /context.
L’argument optionnel detail de la méthode détermine la manière dont Claude Code compte chaque catégorie. L’argument detail nécessite Agent SDK v0.3.257 ou ultérieure.
'full': la valeur par défaut. Claude Code compte chaque catégorie avec des requêtes API de comptage de tokens. Ces requêtes n’apparaissent pas dans le flux de messages, de sorte que 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é.'summary': passez{ detail: 'summary' }pour obtenir plutôt une réponse basée sur l’utilisation de la dernière réponse et sur des estimations locales. Aucune requête de comptage de tokens n’est envoyée, et les nombres par catégorie sont approximatifs.
/context comme prompt au lieu d’appeler la méthode, Claude Code joint un payload SDKContextUsage au champ context_usage du message assistant qui délivre le résultat. Ce champ nécessite Agent SDK v0.3.232 ou ultérieure.
categoriescontient les totaux par catégorie. Lekindde chaque entrée classe la ligne avec les mêmes valeurs queSDKContextUsageCategory. Classez les lignes selon ce champ plutôt que selon lenamed’affichage. Le champ nécessite Agent SDK v0.3.268 ou ultérieure.mcpToolsetagentsattribuent les tokens à des outils MCP et à des sous-agents individuels.memoryFilesliste chaque fichier de mémoire chargé avec son coût.skills.skillFrontmatterattribue les tokens de la liste des skills à chaque skill inclus. Les nombres par skill mesurent l’entrée de chaque skill dans la liste telle que Claude Code l’envoie réellement, qui peut être plus courte que le frontmatter complet du skill. Comparezskills.totalSkillsàskills.includedSkillspour vérifier si chaque skill découvert figure dans la liste.
totalTokens représente l’utilisation actuelle du contexte de la session, et maxTokens 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 lorsqu’elle s’applique. rawMaxTokens contient la même valeur que maxTokens, et percentage correspond à totalTokens exprimé en pourcentage arrondi de cette fenêtre. apiUsage contient l’utilisation issue de la dernière réponse de l’API, et non un total cumulé pour la session.
Claude Code laisse non définis les diagnostics optionnels deferredBuiltinTools, systemTools et systemPromptSections ; attendez-vous donc à ce qu’ils soient absents, même si le type les déclare.
SDKControlReadFileResponse
Type de retour de readFile().
contents contient le texte du fichier, ou des données base64 lorsque vous avez demandé encoding: 'base64' ; le champ encoding de la réponse est alors défini sur 'base64'. absPath est le chemin absolu résolu. truncated est défini lorsque le fichier dépassait la limite maxBytes et que le contenu a été tronqué à cette limite.
Ce que readFile() peut lire
readFile() sert un ensemble de fichiers plus restreint que l’outil Read :
- Un fichier ordinaire situé dans l’un des répertoires de travail de la session, tels que
cwdetadditionalDirectories - Quelques fichiers propres à Claude Code pour la session, tels que les résultats d’outils
Read bloquent toujours un chemin correspondant, et une règle d’autorisation Read large n’ouvre pas le reste du système de fichiers à readFile(). Pour tout autre fichier, l’appel se résout avec null.
SDKControlReloadPluginsResponse
Type de retour de reloadPlugins().
commands,agentsetmcpServers: les commandes, les sous-agents et l’état des serveurs MCP de la session, sous les mêmes formes que celles renvoyées parsupportedCommands(),supportedAgents()etmcpServerStatus().supportedAgents()continue de renvoyer la liste capturée lors de l’initialisation ; lisez doncagentsici pour obtenir l’ensemble après un rechargementplugins: chaque plugin chargé avec sonnameet sonpathd’installation.versionreprend ce que déclare le manifeste du plugin et est contrôlé par l’auteur du plugin ; validez-le donc avant de vous y fier. Il est omis lorsque le manifeste n’en déclare aucuneerror_count: le nombre d’erreurs survenues lors du chargement des plugins
{ holdOnCacheImpact: true } à reloadPlugins() pour suspendre un rechargement qui invaliderait le cache de prompts de la conversation au lieu de l’appliquer. Claude Code effectue la vérification que réalise la commande interactive /reload-plugins avant d’avertir du coût pour le cache. L’option nécessite Agent SDK v0.3.268 ou ultérieure. Un exécutable Claude Code antérieur à v2.1.268, comme celui vers lequel vous faites pointer pathToClaudeCodeExecutable, ignore l’option et applique le rechargement.
Lorsque vous passez l’option, lisez held pour savoir ce qui s’est passé :
true: le rechargement n’a pas été appliqué, et les champs de collection décrivent la session telle qu’elle est toujours.cache_impactindique ce que l’application changerait. Pour appliquer malgré tout, appelez de nouveaureloadPlugins()sans l’option.false: la vérification n’a trouvé aucun impact sur le cache, et le rechargement a été appliqué.- Absent : vous n’avez pas passé l’option, ou l’exécutable Claude Code est antérieur à v2.1.268 et a appliqué le rechargement.
cache_impact n’est présent qu’avec held: true. mcp_servers_added et mcp_servers_removed nomment les serveurs MCP de plugins que le rechargement enregistrerait ou supprimerait, sous forme de noms à portée plugin:<plugin>:<server>. Les noms sont définis par les auteurs des plugins ; validez-les donc avant de les afficher. lsp_tool_change indique si l’application ajouterait ou retirerait l’outil LSP, ou vaut null si elle ne ferait ni l’un ni l’autre. Les formes may- signifient que la vérification n’a pas pu voir entièrement l’ensemble des plugins en attente.
SDKControlReloadSkillsResponse
Type de retour de reloadSkills().
skills liste les skills disponibles après le rechargement, sous la même forme SlashCommand que celle renvoyée par supportedCommands().
SDKControlReloadOutputStylesResponse
Type de retour de reloadOutputStyles().
available_output_styles liste les noms des styles de sortie intégrés et personnalisés disponibles après le rechargement.
SDKControlMcpReadResourceResponse
Type de retour de readMcpResource(), contenant le résultat resources/read du serveur MCP. Nécessite TypeScript Agent SDK v0.3.280 ou ultérieure.
readMcpResource() le nom du serveur tel que le signale mcpServerStatus() et un URI ui://, comme le ui.resourceUri qu’un outil déclare dans son _meta. L’appel est rejeté pour tout autre schéma d’URI, pour un serveur MCP SDK que votre application héberge elle-même, et pour un serveur qui n’est pas connecté. Il est disponible lorsque les capabilities du message d’initialisation incluent mcp_read_resource_v1.
Chaque entrée de contents est un élément de contenu tel que le serveur l’a envoyé, sans les clés _meta sous le préfixe com.anthropic/, qui est réservé à Claude Code. blob contient des données base64 pour un élément binaire, et _meta est le _meta propre à l’élément, où un serveur MCP Apps place les ui.csp et ui.permissions de la ressource.
Le contenu est du HTML tiers non fiable ; affichez-le donc dans un sandbox.
AgentDefinition
Configuration d’un sous-agent défini par programmation.
AgentMcpServerSpec
Spécifie les serveurs MCP disponibles pour un sous-agent. Peut être un nom de serveur (chaîne référençant un serveur de la configuration mcpServers du parent) ou un enregistrement de configuration de serveur en ligne associant des noms de serveurs à des configurations.
McpServerConfigForProcessTransport est McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.
SettingSource
Contrôle les sources de configuration basées sur le système de fichiers à partir desquelles le SDK charge les paramètres.
Comportement par défaut
LorsquesettingSources est omis ou undefined, query() charge les mêmes paramètres du système de fichiers que la CLI Claude Code : utilisateur, projet et local. Consultez Ce que settingSources ne contrôle pas pour connaître les entrées lues indépendamment de cette option, et comment les désactiver.
Pourquoi utiliser settingSources
Désactiver les paramètres du système de fichiers :"project" dans settingSources. Consultez Modifier les prompts système pour savoir comment le chargement de CLAUDE.md interagit avec les options du prompt système.
Priorité des paramètres
Lorsque plusieurs sources sont chargées, les paramètres sont fusionnés selon cet ordre de 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, allowedTools et settings remplacent les paramètres utilisateur, projet et locaux du système de fichiers. Les paramètres de politique gérés ont priorité sur les options programmatiques.
PermissionMode
CanUseTool
Type de fonction de permission personnalisée pour contrôler l’utilisation des outils.
La fonction est le remplacement, dans le SDK, de la demande de permission interactive : elle n’est invoquée que lorsque le flux d’évaluation des permissions aboutit à une demande. Les appels d’outils déjà approuvés par une entrée allowedTools, une règle d’autorisation des paramètres ou le mode de permission, comme 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 ; consultez Comment les permissions sont évaluées pour savoir lesquelles atteignent le callback et ce qui se passe en mode dontAsk et auto.
Le callback résout normalement la requête en renvoyant un
PermissionResult, que le SDK réécrit sur son transport en tant que control_response. Renvoyez null uniquement lorsque votre application a déjà envoyé la control_response pour cette requête via son propre canal, en reprenant requestId ; le SDK ignore alors l’écriture de la réponse sur son transport. Renvoyer null dans tout autre cas bloque indéfiniment l’appel d’outil, car aucune control_response n’est jamais envoyée et les demandes de permission n’expirent pas.
L’option requestId et la valeur de retour null nécessitent Claude Code v2.1.199 ou ultérieur.
PermissionResult
Résultat d’une vérification de permission.
ToolConfig
Configuration du comportement des outils intégrés.
McpServerConfig
Configuration des serveurs MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfigWithInstance
McpClaudeAIProxyServerConfig
SdkPluginConfig
Configuration pour le chargement de plugins dans le SDK.
Exemple :
Types de messages
SDKMessage
Type union de tous les messages possibles retournés par la requête.
SDKAssistantMessage
Message de réponse de l’assistant.
message est un BetaMessage du SDK Anthropic. Il inclut des champs comme id, content, model, stop_reason et usage.
SDKAssistantMessageError est l’un des suivants : 'authentication_failed', 'oauth_org_not_allowed', 'account_on_hold', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens', 'cloud_credential_error', ou 'unknown'. Quatre de ces valeurs signifient plus que leurs noms ne l’indiquent :
'model_not_found': le modèle sélectionné n’existe pas ou n’est pas disponible pour votre compte ou déploiement'overloaded': l’API a retourné un 529 parce que le serveur est à capacité, contrairement à'rate_limit', qui est un 429 contre votre quota'account_on_hold': votre compte est suspendu'cloud_credential_error': Claude Code n’a pas pu obtenir des identifiants AWS ou Google Cloud utilisables sur la machine sur laquelle il s’exécute, donc aucune requête n’a atteint le fournisseur cloud. La cause habituelle est une connexion cloud qui a expiré ou n’a jamais été complétée sur cette machine, bien qu’un service d’identifiants brièvement inaccessible rapporte la même valeur. Voir Impossible de charger les identifiants AWS ou Google Cloud. Nécessite TypeScript Agent SDK v0.3.267 ou ultérieur, qui regroupe Claude Code v2.1.267
aborted est true quand une interruption ou un abandon a tronqué le message de l’assistant avant la fin du flux : le message n’a pas de stop_reason et le contenu peut se terminer au milieu d’un mot. Le champ est absent sur les messages normalement complétés. Il nécessite Agent SDK v0.3.214 ou ultérieur.
agent_id identifie le sous-agent qui a produit le message et est absent des messages du fil principal. Sa valeur est égale au task_id présent dans l’événement task_started et les autres événements de tâche de ce sous-agent, et reste inchangée lorsque le sous-agent est repris. Le champ nécessite l’Agent SDK v0.3.292 ou ultérieur.
Associez les messages d’un sous-agent à ses événements de tâche via agent_id plutôt qu’en appariant le parent_tool_use_id d’un message au tool_use_id d’un événement de tâche. Lorsqu’un appel d’outil reprend le sous-agent, les événements de tâche portent le tool_use_id de cet appel, tandis que les messages conservent le parent_tool_use_id de l’appel d’outil qui a démarré le sous-agent à l’origine, de sorte que les deux ne correspondent plus.
Claude Code définit user_message_uuid et user_message_uuids sur le premier message de l’assistant du tour, dans les conditions décrites dans user_message_uuid. Lorsque le tour poursuit un tour qu’un redémarrage a interrompu, les messages de l’assistant qui portent ces champs portent également resume_reason.
timestamp est l’heure ISO 8601 à laquelle le contenu du message a fini de générer sur le processus qui l’a produit. La valeur provient de l’horloge de cette machine, donc utilisez-la uniquement pour l’affichage et ne triez pas les messages par elle. Un tour API peut produire plusieurs messages d’assistant qui partagent un message.id, chacun avec son propre timestamp. Quand le champ est absent, revenez à l’heure à laquelle vous avez reçu le message.
context_usage est une copie structurée du rapport /context, typée comme SDKContextUsage, et nécessite Agent SDK v0.3.232 ou ultérieur. Quand vous envoyez /context comme prompt, Claude Code livre le rapport comme un message d’assistant dont message.content contient le tableau markdown, et attache context_usage à ce même message. Claude Code ne définit le champ sur aucun autre message d’assistant, et les versions antérieures livrent le tableau /context sans lui, donc lisez la ventilation du champ quand il est présent et revenez au texte markdown quand il ne l’est pas.
usage_report est une copie structurée du rapport /usage, typée SDKUsageReport, et nécessite l’Agent SDK v0.3.273 ou ultérieure. Lorsque vous envoyez /usage comme prompt, Claude Code livre le rapport sous la forme d’un message de l’assistant dont le message.content contient le texte. Il n’attache usage_report à ce même message que lorsque la session remplit toutes ces conditions :
- La session s’authentifie avec des identifiants claude.ai
- Les identifiants indiquent un type de forfait connu ou portent le scope
user:profile - Le compte n’est pas en facturation à l’usage
claude setup-token transmis via CLAUDE_CODE_OAUTH_TOKEN ne remplit pas les conditions par défaut, car il ne porte que le scope user:inference. Les autres sessions, comme les sessions avec clé API, livrent le texte sans le champ, tout comme les versions antérieures. Lisez le rapport depuis le champ lorsqu’il est présent et rabattez-vous sur le texte dans le cas contraire.
SDKUserMessage
Message d’entrée utilisateur.
pasted_content pour envoyer du contenu que l’utilisateur a collé dans votre interface de prompt plutôt que tapé, une entrée par collage, chacune étant une chaîne ou un tableau de blocs de contenu. Claude Code ajoute le texte de chaque entrée après le texte tapé, dans l’ordre, et peut envelopper chaque collage dans des balises <pasted_content>. Les blocs autres que le texte sont ignorés, donc envoyez les images et les documents dans message.content. Nécessite Agent SDK v0.3.277 ou ultérieur.
Définissez inline_pastes pour indiquer à Claude Code quelles parties de message.content l’utilisateur a collées plutôt que tapées, avec une chaîne par collage. Le texte du prompt reste là où l’utilisateur l’a placé. Claude Code peut encadrer chaque collage listé de balises <pasted_content> à l’endroit où il se trouve, afin que Claude puisse distinguer le contenu collé des propres mots de l’utilisateur. Seuls les collages situés dans le dernier bloc de texte du prompt sont encadrés. Nécessite TypeScript Agent SDK v0.3.280 ou version ultérieure.
Chaque champ de collage a une limite de taille :
pasted_content: si les entrées et les blocs de contenu qu’elles contiennent dépassent 1 000 au total, Claude Code ignore l’ensemble du champ.inline_pastes: Claude Code utilise les 100 premières entrées non vides et ignore le reste.
shouldQuery, client_composed ou priority pour modifier la façon dont Claude Code traite un message que vous envoyez :
shouldQuery: définissez-le àfalsepour ajouter le message à la transcription sans déclencher un tour d’assistant. Le message est conservé et fusionné dans le prochain message utilisateur qui déclenche un tour. Utilisez ceci pour injecter du contexte, comme la sortie d’une commande que vous avez exécutée hors bande, sans dépenser un appel de modèle pour cela.client_composed: définissez-le àtruepour que Claude Code livre le texte du message tel qu’écrit. Claude Code n’étend alors pas les mentions@pathou@server:resource, et n’exécute pas le texte qui commence par/comme une commande. Tandis que l’optionverbatimPromptsest activée, le SDK définit le champ sur chaque message. Nécessite TypeScript Agent SDK v0.3.280 ou ultérieur et Claude Code v2.1.248 ou ultérieur.priority: contrôle le moment où un message que vous envoyez pendant un tour en cours parvient à Claude :'next', ou aucun champpriority: Claude lit le message dans le même tour, dès que les appels d’outils en cours se terminent. Si le tour se termine avant, le message démarre le tour suivant.'later': Claude Code conserve le message jusqu’à la fin du tour et l’envoie comme un nouveau tour.'now'avecorigin: { kind: "human" }: sur Claude Code v2.1.286 ou version ultérieure, le travail qui peut se poursuivre en arrière-plan y est déplacé, et Claude lit le message dans le même tour. Le travail déplaçable comprend les commandes shell, les sous-agents et les appels d’outils MCP. Sur v2.1.287 ou version ultérieure, il comprend également les appels WebFetch et WebSearch. Lorsque Claude est seulement en train de rédiger une réponse, ou que le travail en cours ne peut pas être déplacé, Claude Code interrompt plutôt le tour et Claude lit le message ensuite.'now'sans cette origine : Claude Code interrompt le tour et Claude lit le message ensuite.
tool_result de l’un de ses propres appels d’outils, porte agent_id. Consultez SDKAssistantMessage, qui définit ce champ et la version requise.
Sur un message qui porte un bloc tool_result, tool_use_result est l’objet de sortie structurée de l’outil plutôt que le texte envoyé au modèle. Sa forme dépend de l’outil nommé par le bloc tool_use correspondant : le champ est donc typé unknown ; les formes intégrées sont répertoriées sous Types de sortie d’outils. Ces résultats nécessitent un traitement qui va au-delà de leur forme répertoriée :
- L’outil
Agent:tool_use_resultestAgentOutput. Effectuez le rendu à partir de celui-ci plutôt que d’analyser le texte dutool_result. Lecontentd’un résultatcompletedcontient le rapport du sous-agent ou, pour un sous-agent dont le rapport passe par un appel d’outilSubagentHandback, une courte note sur cette remise à la place du rapport. En mode auto sur Claude Code v2.1.271 ou version ultérieure, tout sous-agent qui produit un résultatcompletedfait son rapport de cette façon, sauf s’il s’agit d’un fork, et Claude reçoit le rapport sous la forme d’un message distinct provenant du sous-agent. - Un appel WebFetch ou WebSearch que Claude Code a déplacé en arrière-plan pour livrer un message
'now': le message utilisateur qui porte letool_resultde cet appel atool_use_resultdéfini sur{ detachedToolCall: true }. L’appel est toujours en cours et Claude reçoit son résultat une fois qu’il est terminé. Aucun secondtool_resultpour cetool_use_idne suit : si votre application affiche une ligne pour chaque appel d’outil, marquez donc cette ligne comme déplacée en arrière-plan lorsque ce message arrive. Nécessite Claude Code v2.1.287 ou version ultérieure. - Un outil MCP dont le résultat contient des blocs
resource_link:tool_use_resultest un objet doté d’un tableauresourceLinksd’entréesSDKMcpResourceLink. Claude reçoit chaque lien sous la forme d’une ligne de texte dans le bloctool_result: lisez doncresourceLinkspour afficher les fichiers renvoyés par le serveur au lieu d’analyser ce texte. Claude Code ometresourceLinkslorsque le résultat ne contient aucun lien ainsi que sur les résultats provenant de sous-agents, conserve au maximum 50 liens par résultat et cesse d’ajouter des liens une fois que le tableau atteint 64 Kio de JSON sérialisé.resourceLinksnécessite Agent SDK v0.3.257 ou version ultérieure. - Un outil MCP qui renvoie
structuredContent:tool_use_resultest un objet dont le membrestructuredContentcontient ce que le serveur a envoyé et dont le membrecontentcontient la valeurMcpOutput. Les résultats provenant de sous-agents ne portent passtructuredContent. - Un outil MCP dont le
structuredContentse sérialise en plus de 1 048 576 caractères de JSON : Claude Code ometstructuredContentdetool_use_resultet définit à la placestructuredContentOmitted: true, afin que votre application puisse distinguer un objet abandonné d’un outil qui n’en a envoyé aucun. Les autres membres, commecontentetresourceLinks, sont conservés, et ce que Claude reçoit ne change pas. Claude Code v2.1.287 ou une version ultérieure applique ce plafond. Deux types d’outils font exception :- Les outils provenant de serveurs SDK en processus en sont exemptés et transmettent l’objet entier.
- Un outil dont l’entrée
tools/listdéclare une ressource MCP Appsui://a une limite de 8 388 608 caractères avec Claude Code v2.1.295 ou une version ultérieure, et les versions antérieures à v2.1.295 l’en exemptent.
SDKUserMessageReplay
Message utilisateur rejoué avec UUID requis.
origin est de type peer ou channel, arrive sur le flux comme un rejeu qu’il ait été livré pendant un tour actif ou ait démarré un nouveau tour alors que la session était inactive. Avant v2.1.207, un tour injecté livré alors que la session était inactive ne produisait aucun message sur le flux et n’apparaissait que quand vous relisiez la transcription.
SDKResultMessage
Message de résultat final.
subtype :
api_error_status: le code de statut HTTP de l’erreur API qui a terminé la conversation. Absent ounullquand le tour s’est terminé sans erreur API.ttft_ms: temps jusqu’au premier token en millisecondes, mesuré quand le premier message d’assistant complet arrive. Présent sur le bras de succès uniquement.ttft_stream_ms: temps en millisecondes jusqu’au premier événement de fluxmessage_start, quand le flux de réponse s’ouvre. Inférieur àttft_ms; l’écart entre les deux est le temps passé à diffuser en streaming le premier message. Présent sur le bras de succès uniquement.user_message_uuid: l’uuiddu message que vous avez envoyé auquel ce tour a répondu. Voiruser_message_uuidpour savoir quels résultats le portent.user_message_uuids: lesuuids de chaque message que vous avez envoyé auquel Claude Code a répondu dans ce tour. Voiruser_message_uuids.resume_reason: la raison pour laquelle ce tour poursuit un tour qu’un redémarrage a interrompu. Présent dans les deux branches. Consultezresume_reason.local_command: le nom de la commande que le tour a envoyée, sur le résultat de succès d’un tour qu’une commande a complété sans entrer dans la boucle d’agent, comme/compact. Le nom est converti en lettres minuscules et traits de soulignement, donc/reload-pluginsrapportereload_plugins. Une commande qu’un serveur MCP fournit, et le/mcpintégré, rapportentmcp. Une commande que vous avez définie vous-même rapportecustom. Les arguments ne sont jamais inclus. Absent sur chaque tour qui est entré dans la boucle d’agent et sur les envois qui n’ont exécuté aucune commande. Nécessite Agent SDK v0.3.268 ou ultérieur.request_sent_wall_ms: millisecondes d’époque auxquelles Claude Code a envoyé la requête API, pour les jointures avec les horodatages côté serveur. Présent uniquement avecuser_message_uuid, sur un résultat de succès avecis_errorfalse dont le tour a envoyé une requête API.first_content_frame_ms: temps en millisecondes jusqu’au premier événement de fluxcontent_block_startoucontent_block_delta, en comptant les blocs de réflexion comme du contenu. Présent sur le bras de succès uniquement, quandis_errorest false. Nécessite Agent SDK v0.3.260 ou ultérieur.first_stream_post_ms,first_stream_post_ack_ms,first_stream_post_wall_ms: chronométrages pour le téléversement du premier événement de flux du tour. Claude Code les enregistre uniquement dans les sessions qu’il diffuse en streaming vers claude.ai, comme les sessions cloud, et les résultats quequery()produit ne les portent pas. Nécessite Agent SDK v0.3.260 ou ultérieur.usage: boucle d’agent principal uniquement. Exclut les appels de sous-agent et de modèle auxiliaire, et est par tour dans les sessions d’entrée en streaming. PréférezmodelUsagepour la comptabilité des tokens/coûts.modelUsage: totaux par modèle pour chaque appel de modèle effectué via le pipeline de requête pendant cet appelquery(), y compris 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, comme le classifieur de permissions et les requêtes de comptage de tokens, sont exclus. Un appel qui reprend une session compte également les totaux par modèle restaurés à partir des appels antérieurs de la session. Dans les sessions d’entrée en streaming, les totaux sont cumulatifs entre les tours, donc lisez le dernier résultat plutôt que de faire la somme entre les résultats. 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 mis à zéro.total_cost_usd: coût estimé cumulatif en USD, couvrant les mêmes appels quemodelUsageet réinitialisé aux mêmes points. Un appel qui reprend une session compte également les totaux restaurés à partir des appels antérieurs de la session. C’est une estimation, pas un relevé de facturation. Voir Suivre le coût et l’utilisation pour les avertissements de précision.queued_turn_count: le nombre de messages que vous avez envoyés avecorigin: { kind: "human" }qui attendent toujours quand Claude Code a produit le résultat. Voirqueued_turn_countpour ce que0et un champ absent vous indiquent.result_index: où ce résultat se situe dans l’ordre de livraison de l’exécution, en comptant à partir de 0 sur chaque résultat que le processus écrit. Présent sur les deux bras. Un résultat dont l’écriture échoue consomme toujours son numéro, donc un écart dans la séquence signifie qu’un résultat a été perdu. Nécessite Agent SDK v0.3.268 ou ultérieur.startup_failure_reason: pourquoi Claude Code a refusé de démarrer, sur le résultaterror_during_executionqu’il écrit avant de quitter sur une défaillance de démarrage connue. Voirstartup_failure_reasonpour les valeurs et quelles défaillances le portent. Nécessite Agent SDK v0.3.274 ou ultérieur.terminal_reason: pourquoi la boucle s’est terminée. L’un de"completed","max_turns","tool_deferred","aborted_streaming","aborted_tools","hook_stopped","stop_hook_prevented","background_requested","blocking_limit","rapid_refill_breaker","prompt_too_long","image_error","model_error","api_error","malformed_tool_use_exhausted","budget_exhausted","structured_output_retry_exhausted","tool_deferred_unavailable", ou"turn_setup_failed".fast_mode_state: l’un de"on","off", ou"cooldown".fast_mode_disabled_reason: pourquoi le mode rapide n’est pas disponible en ce moment. Absent quand rien ne bloque le mode rapide, bien qu’une requête puisse toujours s’exécuter à vitesse standard. Pendant le refroidissement après une limite de débit du mode rapide, Claude Code rapportefast_mode_state: "cooldown"sans code de raison et réactive le mode rapide quand le refroidissement expire. Nécessite Claude Code v2.1.219 ou ultérieur.
La même paire de champs apparaît sur
SDKSystemMessage et sur SDKControlInitializeResponse, donc vous pouvez lire l’état du mode rapide avant le premier tour.
Le champ origin transmet le SDKMessageOrigin du message utilisateur qui a déclenché ce résultat. Quand le SDK injecte un tour de suivi synthétique, comme pour une tâche en arrière-plan terminée, le SDKResultMessage résultant porte origin: { kind: "task-notification" }. Les routines dont le déclencheur s’est déclenché et les messages vérifiés par le serveur provenant de vos autres sessions arrivent aussi avec ce type, chacun avec le subkind décrit dans Sous-types de notification de tâche. Vérifiez kind pour distinguer les résultats qui répondent à votre prompt des suivis injectés avant de les router ou de les supprimer. Si votre application déclare des exécutions planifiées, leurs résultats portent aussi kind: "task-notification", donc ne supprimez pas sur la base de kind seul.
Quand plusieurs complétions de tâches en arrière-plan sont mises en file d’attente ensemble, Claude Code peut y répondre en un seul tour plutôt qu’en un tour chacune. Chaque complétion produit toujours son propre résultat avec cette origine. Toutes les complétions auxquelles Claude Code répond ensemble, sauf la dernière, produisent des résultats vides avec num_turns: 0, dans l’ordre, et le résultat de la dernière porte le tour qui répond à toutes.
Le champ est absent pour les résultats émis avant tout tour utilisateur, comme les erreurs de démarrage.
Quand un hook PreToolUse retourne permissionDecision: "defer", le résultat a stop_reason: "tool_deferred" et deferred_tool_use porte l’id, le name et l’input de l’outil en attente. Lisez ce champ pour afficher la demande dans votre propre interface utilisateur, puis reprenez avec le même session_id pour continuer. Voir Différer un appel d’outil pour plus tard pour le trajet complet.
user_message_uuid
L’uuid du SDKUserMessage auquel le tour répond, renvoyé en écho pour que vous puissiez faire correspondre la réponse de Claude Code au message que vous avez envoyé. Claude Code renvoie un uuid uniquement si vous en définissez un sur le message. Le champ est optionnel sur SDKUserMessage, et un prompt sous forme de chaîne passé à query() n’en porte aucun.
Le message de votre part auquel un tour répond dépend de la façon dont le tour a commencé :
- Un message régulier que vous avez envoyé, c’est-à-dire sans
isSynthetic: true: le tour répond à ce message pour toute sa durée. Quand vous envoyez plusieurs messages rapprochés, Claude Code peut les fusionner en un seul tour, et le champ porte alors uniquement l’uuiddu dernier message. Pour faire correspondre la réponse à l’un des messages fusionnés, utilisezuser_message_uuids. - Un message que vous avez envoyé avec
isSynthetic: true: le tour répond d’abord à ce message. Si Claude Code prend en compte un message régulier de votre part entre les appels d’outils, le tour répond à ce message à partir de là. Renvoyer l’uuidd’un message synthétique nécessite Agent SDK v0.3.265 ou ultérieur ; les versions antérieures ne renvoient rien sur les tours synthétiques. - Le prompt que Claude Code génère pour poursuivre un tour interrompu sous
CLAUDE_CODE_RESUME_INTERRUPTED_TURN: lorsque le dernier prompt du tour interrompu est un message ordinaire que vous avez envoyé, qu’il ait ouvert le tour ou que Claude Code l’ait pris en compte pendant le tour, le tour poursuivi répond d’abord à ce message.resume_reasondistingue les trames du tour poursuivi de celles de la tentative interrompue. Lorsque le dernier prompt n’est pas l’un de vos messages ordinaires, le tour poursuivi ne répond d’abord à aucun de vos messages. Si Claude Code prend en compte un de vos messages ordinaires entre deux appels d’outils, le tour répond dès lors au message pris en compte. Le renvoi du prompt du tour interrompu nécessite le SDK Agent v0.3.268 ou ultérieur. - Tout autre prompt que Claude Code a généré lui-même : le tour ne répond d’abord à aucun message de votre part et ses cadres ne portent aucun écho. Si Claude Code prend en compte un message régulier de votre part entre les appels d’outils, le tour répond à ce message à partir de là. L’écho de prise en compte nécessite Agent SDK v0.3.265 ou ultérieur ; les versions antérieures ne renvoient rien sur ces tours.
uuid du message auquel il répond sur trois types de cadre :
- Le résultat : chaque résultat d’un tour qui a répondu à un message que vous avez envoyé. Chacun de ces résultats le porte sur Agent SDK v0.3.265 ou ultérieur. Avant v0.3.265, le résultat de succès d’un tour démarré par un message régulier ne le portait pas quand le tour n’envoyait aucune requête API ou se terminait par un appel d’outil différé. Avant v0.3.246, les résultats d’erreur ne le portaient pas non plus, et avant v0.3.216 aucun résultat ne le portait.
- La première réponse du tour : le premier message d’assistant et, avec
includePartialMessages, également le premier événement de flux dontevent.typen’est pasping, pour que vous puissiez lier la réponse avant l’arrivée du résultat. L’écho de première réponse nécessite Agent SDK v0.3.246 ou ultérieur. Avant v0.3.269, avecincludePartialMessages, Claude Code le définissait uniquement sur ce premier événement de flux, ou sur le premier message d’assistant quand le tour ne diffusait rien en streaming. Quand le message auquel le tour répond change en cours de tour, la première réponse après le changement porte aussi le champ, sur Agent SDK v0.3.265 ou ultérieur ; les versions antérieures le définissent sur un seul cadre de réponse par tour. - Chaque cadre
thinking_tokensdu tour : pour que vous puissiez attribuer la progression de la réflexion au message que vous avez envoyé sans attendre la première réponse du tour. Nécessite Agent SDK v0.3.260 ou ultérieur.
- Cadres de réponse autres que ces premières réponses
- Cadres de sous-agent
- Tours qui ne répondent à aucun message de votre part, ou répondent à un message que vous avez envoyé sans
uuid - Résultats qui ne répondent à aucun message que vous avez envoyé, comme le résultat mis à zéro après un crash du processus worker
user_message_uuids
Les uuids de chaque message que vous avez envoyé auquel Claude Code a répondu dans ce tour. Quand vous envoyez plusieurs messages rapprochés, Claude Code peut les fusionner en un seul tour, et user_message_uuid nomme alors uniquement le dernier d’entre eux. Pour faire correspondre la réponse à l’un des messages fusionnés, cherchez l’uuid de ce message n’importe où dans cette liste. Nécessite Agent SDK v0.3.259 ou ultérieur.
Claude Code définit la liste avec user_message_uuid sur chaque cadre de réponse qui porte ce champ et sur le résultat. Pour l’ensemble complet des cadres du tour qui renvoient l’uuid du message auquel il est répondu, et la version que chacun nécessite, voir user_message_uuid. La liste contient toujours user_message_uuid et contient au maximum 64 entrées.
Quand Claude Code prend en compte un message régulier que vous avez envoyé pendant qu’un tour s’exécutait, il ajoute l’uuid de ce message à la liste du résultat.
Quand une première réponse ou un résultat porte user_message_uuid sans la liste, il provient d’une version antérieure de Claude Code, donc revenez au champ unique.
resume_reason
La raison pour laquelle ce tour poursuit un tour qu’un redémarrage a interrompu. Claude Code définit ce champ sur un tour qui poursuit un tour interrompu sous CLAUDE_CODE_RESUME_INTERRUPTED_TURN, afin que vous puissiez distinguer la réponse et le résultat du tour poursuivi de ceux de la tentative interrompue. Nécessite le SDK Agent v0.3.268 ou ultérieur.
Claude Code définit le champ sur deux types de cadre :
- Le résultat du tour poursuivi : dans la branche de succès comme dans la branche d’erreur, que le résultat porte ou non
user_message_uuid. - Les trames de réponse du tour poursuivi : celles qui portent
user_message_uuid.
interrupted_turn.
queued_turn_count
Le nombre de messages que vous avez envoyés avec origin: { kind: "human" } qui attendent toujours dans la file de commandes quand Claude Code a produit le résultat. Nécessite Agent SDK v0.3.242 ou ultérieur.
Ce que 0 et un champ absent vous indiquent :
0: Claude Code ne compte pas les messages que vous avez envoyés sans cetorigin, et ne compte pas les notifications de tâche, donc un tour peut toujours suivre.- Absent : le résultat final que Claude Code émet après un crash ou une erreur de démarrage fatale omet le champ, et peut porter des totaux mis à zéro.
startup_failure_reason
Pourquoi Claude Code a refusé de démarrer, pour que votre application puisse proposer la correction au lieu d’une nouvelle tentative. Claude Code le définit sur le résultat error_during_execution qu’il écrit avant de quitter sur une défaillance de démarrage connue. Ce résultat porte des totaux mis à zéro, et son tableau errors porte le même texte que stderr. Le champ est absent sur tous les autres résultats. Nécessite Agent SDK v0.3.274 ou ultérieur.
Définissez CLAUDE_CODE_STARTUP_FAILURE_RESULTS à 1 dans env pour recevoir ce résultat pour chaque valeur SDKStartupFailureReason. Sans cette variable, Claude Code écrit le résultat uniquement pour ces défaillances, et les autres se terminent par une sortie stderr, un code de sortie non nul et aucun message de résultat :
- Une reprise que Claude Code arrête parce qu’il ne peut pas ramener la session dans son worktree, avec
worktree_unverifiedouworktree_resume_refused. Cette section indique quelle erreur porte quelle valeur. - Un
continuerefusé d’une conversation détenue par une session en arrière-plan, avecsession_held_by_background. Pour unresumerefusé d’une telle conversation, Claude Code écrit le résultat uniquement quand la variable est définie.
SDKSystemMessage
Message d’initialisation du système.
fast_mode_state rapporte l’état du mode rapide de la session. Quand quelque chose bloque le mode rapide, fast_mode_disabled_reason nomme la vérification qui l’a bloqué ; le champ nécessite Claude Code v2.1.219 ou ultérieur. Pour les codes de raison et leurs significations, voir fast_mode_disabled_reason sur le message de résultat.
terminal_slash_commands nomme les entrées dans slash_commands dont l’interface est liée au terminal local, comme exit. Vous pouvez les envoyer comme n’importe quelle autre entrée dans slash_commands ; le champ existe pour qu’un client distant ou mobile puisse les masquer de ses menus de commandes. Le champ est présent uniquement quand il n’est pas vide, et nécessite Agent SDK v0.3.229 ou ultérieur.
sourcesur chaque entréemcp_servers: d’où provient la définition du serveur, avec les mêmes valeurs quesourcedeMcpServerStatus. Nécessite Agent SDK v0.3.274 ou ultérieur.effort: le niveau d’effort que Claude Code envoie sur la prochaine requête de la session, ounullquand il n’en envoie aucun. Claude Code définit le champ uniquement sur le message d’initialisation qu’il envoie aux clients Remote Control, et l’omet du message d’initialisation que votre application lit. Nécessite Agent SDK v0.3.234 ou ultérieur.
capabilities nomme les comportements de protocole que cette CLI implémente, pour que vous puissiez faire de la détection de fonctionnalités au lieu de comparer les chaînes claude_code_version. C’est un ensemble ouvert : ignorez les valeurs que vous ne reconnaissez pas, et vérifiez la capacité spécifique dont vous dépendez du comportement. Le champ nécessite Claude Code v2.1.205 ou ultérieur et est absent sur les CLI antérieures.
Le tableau
plugin_errors liste les défaillances de chargement de plugin. Une entrée décrit soit un plugin qui n’a pas été chargé et est absent de plugins, soit un plugin qui a été chargé sans l’une de ses parties, comme son fichier de hooks. La clé est omise quand rien n’a échoué. SDKSystemMessage déclare plugin_errors dans Agent SDK v0.3.283 ou ultérieur.
Quand un répertoire ou une archive de votre option plugins échoue lui-même à se charger, le champ plugin de l’entrée contient une balise positionnelle comme inline[0] au lieu d’un nom de plugin. Cela se produit, par exemple, quand le chemin n’existe pas ou que le manifeste est invalide. Faites correspondre une telle entrée à votre option par son champ path.
Le tableau ci-dessous liste les champs de chaque entrée plugin_errors.
SDKPartialAssistantMessage
Message partiel en streaming (uniquement lorsque includePartialMessages vaut true).
Le champ parent_tool_use_id est toujours null : les événements de flux ne sont émis que pour la session principale. Pour l’attribution aux sous-agents, utilisez les messages complets, qui portent agent_id et parent_tool_use_id, ou activez forwardSubagentText pour recevoir le texte et la réflexion des sous-agents sous forme de messages complets.
user_message_uuid et user_message_uuids sur le premier événement de flux du tour qui n’est pas un ping, puis de nouveau lorsque le message auquel le tour répond change, dans les conditions décrites dans user_message_uuid. Lorsque le tour poursuit un tour qu’un redémarrage a interrompu, les événements de flux qui portent ces champs portent également resume_reason.
SDKCompactBoundaryMessage
Message indiquant une limite de compaction de conversation.
SDKInformationalMessage
Bannière de texte générique émise par la boucle. Porte les avertissements, les avis et autres lignes d’état non-erreur que Claude Code émet, ainsi que les retours de hook comme la raison du blocage d’un hook UserPromptSubmit.
Sur Claude Code v2.1.227 ou ultérieur, le systemMessage d’un hook peut arriver comme ce message, avec chaque ligne préfixée par le nom du hook, comme PostToolUse:Bash says:. Chaque section d’événement sur la page des hooks indique comment la sortie s’affiche.
Rendez content comme texte brut au level donné.
SDKWorkerShuttingDownMessage
Émis lors d’un arrêt propre du worker pour que les clients distants puissent montrer pourquoi le worker s’est arrêté au lieu d’attendre l’expiration du délai de heartbeat. La reason est une courte chaîne snake_case définie par la CLI hôte, comme "host_exit" ou "remote_control_disabled". Agissez sur ceci uniquement lors du streaming en direct. Une session reprise rejoue les instances passées de ce message, donc ignorez-les dans ce cas.
SDKPluginInstallMessage
Événement de progression d’installation de plugin. Émis quand CLAUDE_CODE_SYNC_PLUGIN_INSTALL est défini, pour que votre application Agent SDK puisse suivre l’installation des plugins de marketplace avant le premier tour. Les statuts started et completed encadrent l’installation globale. Les statuts installed et failed rapportent les marketplaces individuelles et incluent name.
SDKPermissionDeniedMessage
Événement de flux émis quand le système de permissions refuse un appel d’outil sans demande de permission interactive. Utilisez-le pour afficher le refus dans votre interface utilisateur au moment où il se produit, plutôt que d’observer uniquement le résultat d’outil is_error qui suit. Les refus qu’il rapporte dépendent de la façon dont l’exécution gère les demandes de permission :
- Avec un callback
canUseToolet lepermissionPrompts: 'host'par défaut : les demandes de permission vont à votre callback, et cet événement rapporte les refus que Claude Code décide par lui-même sans l’appeler. - Sans l’un ni l’autre : une exécution
-pnue, ou unquery()qui ne définit nicanUseToolnipermissionPromptToolName, refuse tout appel d’outil qui aurait déclenché une demande, à moins qu’un hookPermissionRequestne l’autorise, et cet événement signale ces refus ainsi que ceux que Claude Code décide de lui-même. Avant v2.1.223, Claude Code n’émettait pas cet événement dans les exécutions sans callback. - Avec un outil de demande de permission MCP, défini avec
permissionPromptToolNameou le flag--permission-prompt-tool, et lepermissionPrompts: 'host'par défaut : Claude Code n’émet pas du tout cet événement, pas même pour les refus de règle qu’il décide par lui-même. - Avec
permissionPrompts: 'none': Claude Code refuse les appels qui auraient déclenché une demande de permission, même quandcanUseToolou un outil de demande de permission MCP est aussi défini, et cet événement rapporte ces refus ainsi que ceux que Claude Code décide par lui-même. Nécessite Claude Code v2.1.259 ou ultérieur.
PreToolUse, que le hook ait refusé l’appel lui-même ou qu’une règle de refus ait remplacé la décision d’autorisation ou de demande du hook. L’événement est aussi fourni au mieux : occasionnellement, Claude Code enregistre un refus sans émettre cet événement, donc permission_denials sur le message de résultat est le registre faisant autorité.
SDKPermissionDenial
Information sur un usage d’outil refusé.
SDKContextUsage
Forme structurée du rapport /context, portée comme context_usage sur le SDKAssistantMessage qui livre un résultat /context. Agent SDK v0.3.232 et ultérieur exportent le type. Contrairement à SDKControlGetContextUsageResponse, il porte uniquement les données nécessaires pour rendre la ventilation d’utilisation, sans champs d’affichage comme color et gridRows. Claude Code calcule le rapport avec des requêtes API de comptage de tokens qui n’apparaissent pas dans le flux de messages ; voir comment ces requêtes sont gérées.
model à over_limit décrivent la session dans son ensemble, et les champs de collection attribuent les tokens aux éléments individuels.
over_limit.kind enregistre comment Claude Code a résolu la fenêtre, pas si l’API accepte la prochaine requête :
hard_limit: la fenêtre est ce que Claude Code croit être la limite propre du modèle, au-delà de laquelle l’API refuse les requêtescompaction_window: la fenêtre est une fenêtre de politique de compaction, qui peut ou non coïncider avec la limite du modèle
SDKContextUsageCategory
Une ligne de la ventilation d’utilisation par catégorie de /context.
Chaque valeur
kind indique ce que sont les tokens de la ligne :
used: contenu qui occupe la fenêtre de contextefree: la fenêtre restantebuffer: la réserve de compactiondeferred: schémas d’outils que Claude Code tient hors de la fenêtre et exclut du calcul d’utilisation, listés à titre informatif
SDKUsageReport
Forme structurée du rapport /usage, transportée en tant que usage_report sur le SDKAssistantMessage qui livre un résultat /usage. L’Agent SDK v0.3.273 et ultérieures exportent ce type. Le type est expérimental : sa forme peut changer.
session et rate_limits :
session: les totaux courants de coût et d’utilisation de Claude Code, lus dans le même registre quetotal_cost_usdetmodelUsagesurSDKResultMessage. Chaque entrée demodel_usageest unModelUsage.rate_limits: les lignes d’utilisation du forfait danslimitset les dépenses en crédits d’utilisation dansextra_usage. Vautnulllorsque Claude Code n’a pas pu obtenir l’utilisation du forfait, par exemple lorsque le jeton OAuth de la session ne dispose pas du scopeuser:profile.
session.total_cost_usd localement à partir du nombre de tokens : il s’agit donc d’une estimation, et non de ce que facture votre forfait. Les dépenses en crédits d’utilisation signalées par le serveur figurent dans le bloc distinct extra_usage. Consultez Suivre les coûts et l’utilisation pour les réserves concernant la précision.
limits contient les lignes d’utilisation du serveur telles que le serveur les a envoyées : les compteurs applicables, leur portée, leurs libellés, leur gravité et leur ordre relèvent du serveur, affichez donc les lignes telles quelles.
- Un tableau vide signifie que le serveur n’a signalé aucun compteur.
nullsignifie que Claude Code n’a aucune ligne à signaler.
limits décrit un compteur d’utilisation :
Avant l’Agent SDK v0.3.277, le type déclarait
severity et is_active comme facultatifs et nullables, et une ligne pouvait arriver sans eux.
extra_usage correspond aux dépenses et au plafond de crédits d’utilisation pour la période de facturation tels que le serveur les signale, présent lorsque le forfait dispose de crédits d’utilisation. Les montants sont exprimés dans les sous-unités de currency, les cents pour l’USD.
monthly_limitvautnulllorsque ce compte n’a pas de plafond de dépenses propre. Sur les forfaits Team et Enterprise, n’affichez pasnullcomme illimité.is_enabledvautfalsetant que les crédits d’utilisation ne peuvent pas payer les requêtes.
SDKMessageOrigin
Provenance d’un message de rôle utilisateur. Ceci apparaît comme origin sur SDKUserMessage et est transféré sur le SDKResultMessage correspondant pour que vous puissiez savoir ce qui a déclenché un tour donné.
Sous-types de notification de tâche
Quand Claude Code livre une notification de tâche dans une session, il définitsubkind sur l’origin de la notification si les serveurs Anthropic ont vérifié d’où provenait cette notification. Il définit aussi subkind quand votre application déclare elle-même le message comme une exécution planifiée, ce qui nécessite TypeScript Agent SDK v0.3.280 ou ultérieur. subkind nécessite Claude Code v2.1.213 ou ultérieur, et prend l’une de deux valeurs :
scheduled-trigger: la notification est le prompt stocké d’une routine, livré parce que l’un des déclencheurs de la routine s’est déclenché : sa planification, son déclencheur API, son déclencheur GitHub, ou Exécuter maintenant. Un prompt que votre application déclare comme une exécution planifiée porte aussi cette valeur. Claude Code présente ces notifications au modèle comme la tâche assignée de la session, avec un avis différent de l’avis que portent les autres notifications de tâche.peer-send-message: la notification est un message qu’une autre de vos sessions a envoyé avec l’outil côté serveursend_messageque les sessions cloud utilisent pour s’envoyer des messages, et non l’outilSendMessageentre sessions, et les serveurs Anthropic ont vérifié que les deux sessions appartiennent au même groupe privé de sessions. Nécessite Claude Code v2.1.224 ou ultérieur. Une livraisonsend_messageque les serveurs n’ont pas vérifiée de cette façon n’obtient pas de subkind.
subkind. Cela inclut l’activité PR livrée dans une session et les événements en arrière-plan comme une tâche terminée. Les messages de l’outil SendMessage entre sessions ne sont pas du tout des notifications de tâche : qu’ils proviennent d’une session sur la même machine ou, via les serveurs Anthropic, d’une autre machine, Claude Code leur donne kind: "peer" et les champs d’origine pair.
fireReason indique pourquoi une notification scheduled-trigger s’est déclenchée, sous la forme d’un court jeton en minuscules comme scheduled, manual, retry, catch_up, ou api. Les serveurs Anthropic le définissent sur les livraisons d’une routine, et votre application le définit quand elle déclare une exécution planifiée. Il est absent quand ni l’un ni l’autre n’en a envoyé. Nécessite TypeScript Agent SDK v0.3.280 ou ultérieur.
Une tâche en arrière-plan peut s’exécuter plusieurs fois sous le même task_id, par exemple lorsque Claude reprend un sous-agent. Chaque exécution possède son propre run_id. Lorsque la notification d’une exécution atteint votre session sous forme de message utilisateur, runId sur l’origine task-notification de ce message contient la même valeur. Une notification peut arriver après le démarrage de l’exécution suivante de la tâche, et elle porte toujours l’ID de l’exécution précédente. Pour savoir à quelle exécution appartient un tour, comparez runId, et non task_id. Nécessite le SDK Agent TypeScript v0.3.292 ou une version ultérieure.
Déclarer une exécution planifiée
Si votre application exécute des prompts selon sa propre planification, déclarez chaque exécution pour que Claude Code présente le tour au modèle comme une tâche planifiée plutôt que comme une entrée en direct de l’utilisateur. Démarrez la session avecCLAUDE_CODE_HOST_SCHEDULED_RUN défini à 1 dans env, puis envoyez le SDKUserMessage de l’exécution avec origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" } et sans isSynthetic. Claude Code ignore la déclaration dans un processus démarré sans cette variable. Il l’ignore aussi dans un processus dont l’environnement porte CLAUDECODE ou CLAUDE_CODE_CHILD_SESSION. Claude Code conserve fireReason uniquement quand la valeur est composée de 1 à 32 lettres minuscules ou traits de soulignement. Nécessite TypeScript Agent SDK v0.3.280 ou ultérieur.
Champs d’origine pair
Une originepeer identifie quel agent a envoyé le message : un coéquipier en processus envoyant à main avec SendMessage, ou un pair entre sessions, une autre de vos sessions Claude Code. Les pairs entre sessions nécessitent Claude Code v2.1.224 ou ultérieur sur macOS et Linux ; voir disponibilité de la messagerie entre sessions pour l’exigence Windows native. Un pair entre sessions peut s’exécuter sur la même machine, ou sur une autre de vos machines ou dans le cloud quand son message arrive via Remote Control. Les deux types d’expéditeur remplissent les champs différemment :
from: le nom du coéquipier, ou l’adresse de l’expéditeur pour un pair entre sessions. Pour un message entre machines unidirectionnel, l’expéditeur n’a pas d’adresse de réponse etfromest"unknown". La valeur est rédigée par l’expéditeur ;verifiedPeerPidest l’identité vérifiée.fromMode: la classe de permission de la session d’envoi,bypassouprompting, déclarée par un hôte qui relaie un message pair entre vos sessions, comme l’application de bureau. Claude Code la lit dans la session de réception quand il applique les contrôles entrants. Nécessite Agent SDK v0.3.234 ou ultérieur.senderTaskId: l’ID de tâche du coéquipier. Absent pour un pair entre sessions.name: le nom d’affichage de l’expéditeur, normalisé par Claude Code : il supprime les points de code Unicode de contrôle, de format, de substitut et de séparateur de ligne ou de paragraphe, puis élague le résultat et le limite à 64 points de code avec une ellipse. Nécessite Claude Code v2.1.205 ou ultérieur.body: le corps du message décodé, sans l’enveloppe de pair, identique octet pour octet à ce que voit le modèle. Présent pour un message de coéquipier unique, absent lorsque plusieurs sont fusionnés ; pour un pair inter-sessions, présent uniquement lorsque le tour correspond exactement à une enveloppe de pair formée par Claude Code. Afficheznameetbodyau lieu d’analyser à nouveau le texte du message. Avant la v2.1.299, les messages fusionnés conservaient lebodydu premier message. Nécessite Claude Code v2.1.205 ou ultérieur.fromSession: l’ID de session de l’expéditeur ouvrable par l’hôte, défini par l’hôte de l’expéditeur pour que votre interface utilisateur puisse renvoyer vers la session d’envoi. Commefrom, il est déclaré par l’expéditeur : utilisez-le uniquement comme cible de navigation, et ne le traitez pas comme une preuve de l’identité de l’expéditeur. Nécessite Claude Code v2.1.216 ou ultérieur.verifiedPeerPid: l’ID du processus qui s’est connecté au socket de messagerie entre sessions de cette session, vérifié par le noyau et lu à partir de la connexion elle-même, jamais à partir du payload. Utilisez-le, et nonfrom, pour identifier l’expéditeur :frompeut être falsifié par n’importe quel processus du même utilisateur. Le champ est absent quand Claude Code ne peut pas le vérifier, comme sur Windows ou pour une entrée hors socket, donc une valeur absente signifie que l’expéditeur n’est pas vérifié. Pour le trafic relayé, il identifie le relais plutôt que l’auteur du message, et les ID de processus sont recyclables, donc traitez-le comme une indication de provenance plutôt que comme un jeton d’authentification. Nécessite Claude Code v2.1.216 ou ultérieur.
Types de hook
Pour un guide complet sur l’utilisation des hooks avec des exemples et des modèles courants, voir le guide des hooks.HookEvent
Événements de hook disponibles.
HookCallback
Type de fonction de rappel de hook.
HookCallbackMatcher
Configuration de hook avec matcher optionnel.
HookInput
Type union de tous les types d’entrée de hook.
BaseHookInput
Interface de base que tous les types d’entrée de hook étendent.
prompt_id est un UUID identifiant l’invite utilisateur actuellement traitée. Il correspond à l’attribut prompt.id sur les événements OpenTelemetry et est absent jusqu’à la première entrée utilisateur. Nécessite Claude Code v2.1.196 ou ultérieur.
PreToolUseHookInput
mcp_server est présent quand l’outil provient d’un serveur MCP ; voir McpServerProvenance. Les entrées PostToolUse, PostToolUseFailure, PermissionRequest et PermissionDenied portent le même champ. Le champ nécessite Agent SDK v0.3.274 ou ultérieur.
PostToolUseHookInput
PostToolUseFailureHookInput
PostToolBatchHookInput
S’exécute une fois après que chaque appel d’outil dans un lot ait été résolu, avant la prochaine demande de modèle. tool_response porte le contenu tool_result sérialisé que le modèle voit ; la forme diffère de l’objet Output structuré de PostToolUseHookInput.
PermissionDeniedHookInput
NotificationHookInput
UserPromptSubmitHookInput
UserPromptExpansionHookInput
SessionStartHookInput
SessionEndHookInput
StopHookInput
StopFailureHookInput
SubagentStartHookInput
SubagentStopHookInput
PreCompactHookInput
PostCompactHookInput
PreModelSwitchHookInput
S’exécute avant qu’un changement de modèle demandé ne prenne effet. context_tokens et les champs qui le suivent estiment le coût de renvoi de la conversation au nouveau modèle. Pour les descriptions complètes des champs et la sémantique de blocage, voir PreModelSwitch.
PostModelSwitchHookInput
S’exécute après que le modèle de la session change. Il porte les mêmes champs que PreModelSwitchHookInput, avec deux valeurs source supplémentaires. Voir PostModelSwitch.
PermissionRequestHookInput
SetupHookInput
TeammateIdleHookInput
TaskCreatedHookInput
TaskCompletedHookInput
ElicitationHookInput
ElicitationResultHookInput
ConfigChangeHookInput
InstructionsLoadedHookInput
DirectoryAddedHookInput
directory est le chemin absolu du répertoire qui a été ajouté. source est "slash_command" quand /add-dir l’a ajouté et "register_repo_root" quand la demande de contrôle du SDK l’a fait.
WorktreeCreateHookInput
WorktreeRemoveHookInput
CwdChangedHookInput
FileChangedHookInput
MessageDisplayHookInput
HookJSONOutput
Valeur de retour du hook.
AsyncHookJSONOutput
SyncHookJSONOutput
Types d’entrée d’outil
Documentation des schémas d’entrée pour les outils Claude Code intégrés. Ces types sont exportés depuis@anthropic-ai/claude-agent-sdk/sdk-tools et peuvent être utilisés pour les interactions d’outils type-safe.
ToolInputSchemas
Union de types d’entrée d’outil exportée depuis @anthropic-ai/claude-agent-sdk/sdk-tools ; les membres incluent :
Agent
Nom de l’outil :Agent. Le nom précédent Task est toujours accepté comme alias, et le tableau tools dans le message d’initialisation SDKSystemMessage répertorie actuellement cet outil comme Task pour la compatibilité rétroactive.
Le champ
mode est déprécié et ignoré sur Claude Code v2.1.212 ou version ultérieure. Un sous-agent s’exécute soit en mode de permission de la session parent, soit en mode de sa définition permissionMode, et les règles d’héritage des sous-agents décident lequel.AskUserQuestion
Nom de l’outil :AskUserQuestion
Bash
Nom de l’outil :Bash
Monitor
Nom de l’outil :Monitor
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. La source ws nécessite Claude Code v2.1.195 ou version ultérieure.
timeout_ms est la date limite de la surveillance en millisecondes. Elle est par défaut 300 000 et accepte les valeurs jusqu’à 3 600 000. La date limite effective est au maximum 1 800 000, soit 30 minutes, donc une valeur acceptée plus grande est raccourcie à cela. À la date limite, la surveillance se termine et Claude reçoit un avis pour qu’il puisse démarrer une nouvelle surveillance s’il en a toujours besoin.
Le type exporté marque timeout_ms comme requis car le schéma remplit la valeur par défaut ; un appel qui l’omet valide.
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. Voir la référence de l’outil Monitor pour le comportement et la disponibilité du fournisseur.
TaskOutput
Supprimé dans Claude Code v2.1.277, ainsi que son typeTaskOutputInput. Récupérait précédemment la sortie d’une tâche en arrière-plan en cours d’exécution ou terminée ; Claude lit le fichier de sortie d’une tâche en arrière-plan avec Read à la place.
Une entrée disallowedTools ou une règle de refus qui nomme toujours TaskOutput est ignorée sans avertissement.
Edit
Nom de l’outil :Edit
Read
Nom de l’outil :Read
- Utilisez
pagespour les plages de pages PDF (par exemple,"1-5"). allow_largepermet à Claude de lire un fichier texte au-delà des limites de taille habituelles lorsque la fenêtre de contexte de la session a de la place. Il nécessite Agent SDK v0.3.296 ou version ultérieure, qui intègre Claude Code v2.1.296.
tool_result de l’appel Read. Une lecture qui retourne la sortie pdf porte un bloc text de résumé suivi d’un bloc document. Une qui retourne la sortie parts porte le bloc text de résumé suivi d’un bloc par page extraite : un bloc image, ou un bloc text nommant la page lorsque Claude Code n’a pas pu la rendre en tant qu’image. Avant Agent SDK v0.3.242, Claude Code livrait le contenu du fichier en tant que message user séparé après le résultat de l’outil.
Write
Nom de l’outil :Write
Glob
Nom de l’outil :Glob
Grep
Nom de l’outil :Grep
TaskStop
Nom de l’outil :TaskStop
task_id accepte également un coéquipier d’équipe d’agents ou un agent en arrière-plan nommé par ID d’agent ou nom.
NotebookEdit
Nom de l’outil :NotebookEdit
WebFetch
Nom de l’outil :WebFetch
offset est le nombre de caractères à ignorer depuis le début de la page. Claude le définit pour poursuivre la lecture d’une page longue. Le champ nécessite Agent SDK v0.3.290 ou version ultérieure.
WebSearch
Nom de l’outil :WebSearch
Workflow
Nom de l’outil :Workflow
Workflow est disponible dans Agent SDK v0.3.149 et versions ultérieures. Au moins l’un de script, name ou scriptPath est requis.
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
TaskUpdate
Nom de l’outil :TaskUpdate
status à "deleted" pour la supprimer.
TaskGet
Nom de l’outil :TaskGet
null lorsque l’ID n’est pas trouvé.
TaskList
Nom de l’outil :TaskList
ExitPlanMode
Nom de l’outil :ExitPlanMode
allowedPrompts est déprécié et ignoré ; Claude Code l’accepte toujours pour que les appelants existants et les transcriptions se valident. Avant v2.1.205, il demandait des permissions Bash basées sur les prompts pour implémenter le plan.
ListMcpResources
Nom de l’outil :ListMcpResourcesTool
ReadMcpResource
Nom de l’outil :ReadMcpResourceTool
EnterWorktree
Nom de l’outil :EnterWorktree
path pour basculer dans un worktree existant au lieu d’en créer un nouveau. À la première entrée, la cible doit être un worktree enregistré du dépôt actuel ou, dans un espace de travail multi-dépôt, d’un dépôt imbriqué à l’intérieur ; depuis une session worktree, elle doit être sous .claude/worktrees/ du dépôt de la session. name et path s’excluent mutuellement.
ExitWorktree
Nom de l’outil :ExitWorktree
keep laisse le worktree et la branche sur le disque, tandis que remove supprime les deux. discard_changes doit être true lors de la suppression d’un worktree qui a des fichiers non commités ou des commits non fusionnés.
EnterPlanMode
Nom de l’outil :EnterPlanMode
CronCreate
Nom de l’outil :CronCreate
recurring à false pour se déclencher une seule fois à la prochaine correspondance. Les tâches sont limitées à la session par défaut, et reprendre avec --resume ou --continue restaure les tâches qui n’ont pas expiré. Voir Tâches planifiées.
Définir durable à true demande la persistance vers .claude/scheduled_tasks.json pour que la tâche survive aux redémarrages. La planification durable n’est pas disponible dans chaque session : lorsqu’elle ne l’est pas, Claude Code accepte durable: true mais crée la tâche en session uniquement. Lisez le champ durable de la sortie pour voir si la tâche a persisté.
CronDelete
Nom de l’outil :CronDelete
CronCreate.
CronList
Nom de l’outil :CronList
.claude/scheduled_tasks.json et les tâches en session uniquement de la session actuelle.
ScheduleWakeup
Nom de l’outil :ScheduleWakeup
/loop à rythme personnel. Le runtime limite delaySeconds entre 60 et 3 600 secondes. Les champs delaySeconds, reason, prompt et noop sont requis sauf si stop est true. noop: true signale un réveil où rien n’a changé. Définir stop: true annule le réveil en attente et termine le /loop à rythme personnel. Le champ stop nécessite Claude Code v2.1.202 ou version ultérieure. Voir la ligne ScheduleWakeup dans la référence des outils.
RemoteTrigger
Nom de l’outil :RemoteTrigger
/schedule. trigger_id est requis pour les actions get, update, run et list_runs. body est requis pour create, update et create_webhook_trigger, et optionnel pour run.
create_webhook_trigger attache une source d’événement à une routine existante, telle qu’un événement GitHub qui la déclenche. Le body nomme la source, les événements et la routine à déclencher. Nécessite Claude Code v2.1.225 ou version ultérieure.
list_runs répertorie les exécutions récentes d’une routine, et get_run_log lit le journal d’une exécution. session_id nomme l’exécution à lire, à partir d’un résultat list_runs, et cursor pagine à travers les résultats de l’une ou l’autre action. Les deux actions nécessitent Claude Code v2.1.227 ou version ultérieure.
Cet outil n’est disponible que lorsque la session est authentifiée avec un compte claude.ai sur un plan avec Routines activées, et est absent lorsque la politique de votre organisation désactive les sessions cloud. Sur Claude Code v2.1.227 ou version ultérieure, l’outil est également absent lorsqu’un propriétaire a désactivé les routines pour l’organisation. Avant v2.1.227, une session avec seulement le basculement des routines désactivé affichait toujours l’outil, et le serveur refusait ses appels.
PushNotification
Nom de l’outil :PushNotification
message sous 200 caractères car les systèmes d’exploitation mobiles tronquent le texte plus long. Voir la ligne PushNotification dans la référence des outils pour la disponibilité du fournisseur ; la livraison push s’effectue via l’infrastructure hébergée par Anthropic qui n’est pas accessible depuis Amazon Bedrock, Claude Platform sur AWS, Google Cloud’s Agent Platform ou Microsoft Foundry.
REPL
Supprimé dans v2.1.275. Jusqu’à v2.1.274, un outilREPL expérimental pouvait être activé avec CLAUDE_CODE_REPL=1 dans l’option env.
ReportFindings
Nom de l’outil :ReportFindings
level est optionnel et contient le niveau d’effort que Claude indique pour la revue. Claude Code ne le compare pas au niveau auquel la revue s’est exécutée, les deux peuvent donc différer.
Chaque résultat porte ces champs :
file: chemin relatif au dépôt où se trouve le résultat. Lelineoptionnel est la ligne indexée à 1 à laquelle il s’ancre.summary: déclaration d’une phrase du défaut.failure_scenariodécrit les entrées concrètes et l’état qui mènent à la sortie incorrecte ou au crash.short_summary: étiquette compressée optionnelle d’au maximum 60 caractères pour l’affichage compact. Nécessite Claude Code v2.1.212 ou version ultérieure.category: slug kebab-case court optionnel du type de résultat, tel quecorrectnessoutest-coverage. Nécessite Claude Code v2.1.199 ou version ultérieure.verdict: défini lorsqu’une passe de vérification s’est exécutée ; absent sur les revues en ligne uniquement.outcome: défini uniquement lors de la signalisation après l’application des correctifs.
Artifact
Nom de l’outil :Artifact
.html ou .md local en tant que page d’artefact hébergée, ou répertorie les artefacts publiés de l’utilisateur. Omettez action ou passez "publish" pour publier file_path, qui est requis pour l’action de publication. Chaque champ ci-dessous s’applique à une publication :
icon: un mot générique court pour l’icône de l’onglet du navigateur de l’artefact, tel quechartoumap. Claude l’inclut à la première publication et l’omet à une mise à jour, ce qui conserve l’icône stockée de l’artefact.favicon: déprécié, et Claude l’omet.title: nomme la page publiée dans l’onglet du navigateur et la galerie lorsque le fichier HTML n’a pas de balise<title>.url: cible un artefact existant à mettre à jour sur place au lieu de créer un nouveau.
force est un dernier recours qui écrase une version plus récente qu’une autre session a publiée. En cas de conflit, la publication échouée retourne le contenu plus récent ; Claude fusionne ses modifications sur ce contenu, ou relit l’artefact, et publie à nouveau. Passez force uniquement lorsque l’utilisateur demande explicitement de rejeter cette version.
Passez "list" pour énumérer les artefacts publiés de l’utilisateur ; seuls limit et scope peuvent l’accompagner. scope par défaut à "mine", qui répertorie les artefacts que l’utilisateur possède ; "shared" répertorie les artefacts que d’autres personnes ont partagés avec l’utilisateur, et "all" répertorie les deux.
limit définit le nombre maximal d’artefacts qu’une liste retourne, de 1 à 200. Un limit supérieur à 50 nécessite Agent SDK v0.3.292 ou version ultérieure. Sans limit, une liste retourne jusqu’à 25 artefacts.
capabilities: les capacités d’exécution que la page publiée utilise, indexées par nom de capacité, telles que les connecteurs que la page peut appeler. Le service d’artefact valide la déclaration et rejette une publication qui nomme une capacité que le compte ne peut pas utiliser ou en donne une configuration invalide. Passez{}pour effacer une déclaration stockée, et omettez le champ lors d’un redéploiement pour la conserver. Nécessite Agent SDK v0.3.235 ou version ultérieure.contract: la version d’exécution contre laquelle la page publiée s’exécute. Omettez-la pour conserver la version actuelle de l’artefact, passez"latest"pour mettre à niveau, ou passez une version spécifique pour épingler ou revenir en arrière. Nécessite Agent SDK v0.3.235 ou version ultérieure.
Projects
Nom de l’outil :Projects
method :
project_info: retourne les métadonnées du projet et la liste des documents.project_read: lit un document parpath.project_search: interroge la base de connaissances du projet avecquery.nlimite les résultats et vaut par défaut5.project_write: crée ou remplace un document àpathà partir d’exactement l’un decontent, qui porte du texte en ligne, oulocal_path, qui nomme un fichier dans le répertoire de travail.present_to_user: truemarque le document écrit comme le livrable que l’utilisateur doit voir.project_delete: supprime un document parpath.
ReadMcpResourceDir
Nom de l’outil :ReadMcpResourceDirTool
resources vide et le champ error signale que la liste des répertoires n’est pas activée.
RefreshMcpTools
Nom de l’outil :RefreshMcpTools
CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 dans l’option env, et uniquement dans les sessions avec au moins un serveur MCP. Nécessite Claude Code v2.1.211 ou version ultérieure.
ShowOnboardingRolePicker
Nom de l’outil :ShowOnboardingRolePicker
McpInput
Nom de l’outil : noms d’outils MCP dynamiques de la formemcp__<server>__<tool>
Types de sortie d’outils
Documentation des schémas de sortie pour les outils Claude Code intégrés. Ces types sont exportés depuis@anthropic-ai/claude-agent-sdk/sdk-tools et représentent les données de réponse réelles renvoyées par chaque outil.
ToolOutputSchemas
Union des types de sortie d’outils exportés depuis @anthropic-ai/claude-agent-sdk/sdk-tools ; les membres incluent :
Agent
Nom de l’outil :Agent. Le nom précédent Task est toujours accepté comme alias, et le tableau tools dans le message d’initialisation SDKSystemMessage liste actuellement cet outil comme Task pour la compatibilité rétroactive.
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.
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 async_launched, il nomme le modèle en cours d’utilisation lorsque la tâche est passée en arrière-plan.
modelsUsed énumère les modèles utilisés par le sous-agent, dans l’ordre. Le champ n’est présent que lorsqu’un changement de modèle en cours d’exécution s’est produit, et un modèle réapparaît lorsque l’exécution a basculé vers lui. Sur async_launched, la liste couvre les modèles utilisés avant la mise en arrière-plan. À la fois modelsUsed et le comportement de mise en arrière-plan de resolvedModel nécessitent Claude Code v2.1.212 ou ultérieur.
Si Claude Code a conservé le worktree isolé du sous-agent, worktreePath sur le résultat completed indique où le trouver. worktreeBranch est sa branche, présente lorsque Claude Code a créé le worktree avec git.
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, donc usage.service_tier est la chaîne de niveau de service que l’API a signalée sur cette requête. Lorsqu’il est présent, usage.output_tokens_details.thinking_tokens est le nombre de tokens de sortie de cette requête qui étaient des tokens de réflexion. Le champ output_tokens_details nécessite TypeScript SDK v0.3.228 ou ultérieur, qui regroupe Claude Code v2.1.228. Le champ fallback_credit nécessite TypeScript SDK v0.3.285 ou ultérieur, qui regroupe Claude Code v2.1.285.
usage.output_tokens_details correspond à Usage.output_tokens_details en signification, limité à cette dernière requête, mais chaque niveau est optionnel ici. Protégez à la fois l’objet et le champ, par exemple usage.output_tokens_details?.thinking_tokens ?? 0, plutôt que de le lire directement.
Avant v2.1.207, le type publié était plus étroit. Il omettait worktreePath, worktreeBranch, citations, toolStats.frameCount, et les champs d’utilisation inference_geo, speed et iterations, et il tapait service_tier comme "standard" | "priority" | "batch". Les champs que le type marque comme optionnels peuvent être absents sur les résultats enregistrés par les versions antérieures.
AskUserQuestion
Nom de l’outil :AskUserQuestion
response est défini lorsque l’utilisateur a tapé une réponse libre au lieu de répondre aux questions structurées ; lorsqu’il est présent, Claude reçoit « L’utilisateur a répondu : … » au lieu de la liste de réponses par question.
Bash
Nom de l’outil :Bash
stdout, stderr et backgroundTaskId contiennent :
timedOutAfterMs est le délai d’expiration en millisecondes, défini lorsque la commande a atteint son délai d’expiration et s’est déplacée en arrière-plan plutôt que de démarrer explicitement. backgroundCwdHint est défini lorsque la commande mise en arrière-plan contenait un builtin de changement de répertoire tel que cd, pushd, popd ou chdir, et note que le répertoire de travail de la session n’a pas changé. Les deux champs nécessitent Claude Code v2.1.210 ou ultérieur.
Lorsqu’un sous-agent s’exécutant au premier plan possède une commande mise en arrière-plan, la commande se termine lorsque l’exécution de ce sous-agent se termine. Claude Code définit backgroundEndsWithFinalResponse à true sur de telles commandes, et omet le champ lorsque la commande survit au tour, comme les commandes démarrées par la conversation principale ou par les sous-agents en arrière-plan. Le champ nécessite Claude Code v2.1.227 ou ultérieur.
Claude Code définit gitOperation.commit.branch sur la branche nommée dans la ligne de résumé du commit git, et l’omet pour un commit effectué sur un HEAD détaché. Le champ nécessite Agent SDK v0.3.227 ou ultérieur. Claude Code signale une commande gh pr reopen comme l’action PR reopened, ce qui nécessite Agent SDK v0.3.234 ou ultérieur.
Monitor
Nom de l’outil :Monitor
TaskStop pour annuler la surveillance plus tôt.
Edit
Nom de l’outil :Edit
Read
Nom de l’outil :Read
type.
Write
Nom de l’outil :Write
originalFile et structuredPatch contiennent dépend de l’écriture :
- Pour un fichier nouvellement créé,
originalFileest null etstructuredPatchest vide - Sur une réécriture,
originalFilecontient le contenu précédent, sauf lorsque ce contenu est plus grand qu’environ 10 Mo : Claude Code omet alors le diff et retourneoriginalFilenull etstructuredPatchvide structuredPatchest également vide lorsque l’écriture n’a rien changé ou que le diff a expiré
Glob
Nom de l’outil :Glob
totalMatches et countIsComplete nécessitent Claude Code v2.1.191 ou ultérieur. totalMatches signale le nombre de fichiers correspondants avant la troncature. Lorsque countIsComplete est false, totalMatches est une limite inférieure car la recherche sous-jacente a tronqué sa propre sortie.
Grep
Nom de l’outil :Grep
mode : liste de fichiers, contenu avec correspondances, ou comptages de correspondances. En mode count, numFiles et numMatches sont des totaux sur l’ensemble des résultats, pas la tranche paginée. Avant v2.1.208, une head_limit ou un offset qui tronquait les entrées listées tronquait également ces totaux.
totalFiles nécessite Claude Code v2.1.208 ou ultérieur et signale le nombre total de résultats avant la pagination head_limit et offset en mode files_with_matches. totalLines nécessite Claude Code v2.1.210 ou ultérieur et signale le nombre total de lignes avant la pagination en mode content.
TaskStop
Nom de l’outil :TaskStop
NotebookEdit
Nom de l’outil :NotebookEdit
WebFetch
Nom de l’outil :WebFetch
artifactRead est le propre enregistrement de Claude Code d’une lecture d’artefact, présent uniquement lorsque Claude a récupéré un artefact que la session peut publier. Claude Code le relit lorsqu’une session reprend afin qu’une publication ultérieure s’appuie sur la bonne version ; votre code n’a pas besoin d’agir dessus. slug nomme l’artefact, ver est la version que la lecture a enregistrée et est absent lorsqu’elle n’en a enregistré aucune, et seeded: false marque une lecture dont la source complète n’a pas atteint Claude. Le champ seeded nécessite Agent SDK v0.3.239 ou ultérieur.
WebSearch
Nom de l’outil :WebSearch
Workflow
Nom de l’outil :Workflow
error avant de traiter l’exécution comme démarrée : un script qui échoue sa vérification de syntaxe retourne status: "async_launched" avec error défini, et ne s’exécute jamais.
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
TaskUpdate
Nom de l’outil :TaskUpdate
TaskGet
Nom de l’outil :TaskGet
null lorsque l’ID n’est pas trouvé.
TaskList
Nom de l’outil :TaskList
ExitPlanMode
Nom de l’outil :ExitPlanMode
ListMcpResources
Nom de l’outil :ListMcpResourcesTool
ReadMcpResource
Nom de l’outil :ReadMcpResourceTool
EnterWorktree
Nom de l’outil :EnterWorktree
ExitWorktree
Nom de l’outil :ExitWorktree
EnterPlanMode
Nom de l’outil :EnterPlanMode
CronCreate
Nom de l’outil :CronCreate
CronDelete
Nom de l’outil :CronDelete
CronList
Nom de l’outil :CronList
.claude/scheduled_tasks.json et les travaux de session uniquement de la session actuelle. Un travail de session uniquement porte durable: false ; les travaux lus à partir du disque omettent le champ.
ScheduleWakeup
Nom de l’outil :ScheduleWakeup
stopped est true lorsque l’appel a terminé la boucle avec stop: true. Il nécessite Claude Code v2.1.202 ou ultérieur. Le champ cancelledWakeups compte combien de réveils en attente un appel stop: true a annulés. Une valeur de 0 signifie que rien n’était en attente, et un cron /loop récurrent n’est pas annulé par stop: true. Il nécessite Claude Code v2.1.206 ou ultérieur.
RemoteTrigger
Nom de l’outil :RemoteTrigger
PushNotification
Nom de l’outil :PushNotification
ReportFindings
Nom de l’outil :ReportFindings
level transmise par Claude, et les résultats renvoyés pour le corps du résultat. Nécessite Claude Code v2.1.196 ou ultérieur. Le champ short_summary renvoyé nécessite Claude Code v2.1.212 ou ultérieur.
Artifact
Nom de l’outil :Artifact
url de la page publiée et le path local qui a été publié pour l’action de publication, avec updated défini à true lorsque la publication a redéployé un artefact existant, et warnings contenant tous les avis au moment de la publication. L’action de liste retourne les lignes artifacts à la place, avec truncated défini lorsque plus d’artefacts existent que la limite demandée. Sur les listes dont la portée n’est pas "mine", chaque ligne porte rel marquant si l’utilisateur possède l’artefact ou s’il lui a été partagé, et la scope de la sortie enregistre quelle portée non-défaut a produit la liste ; les deux sont absents sur les listes par défaut.
Un résultat de liste signale également total, le nombre d’artefacts correspondant à la portée listée, y compris ceux au-delà de limit. Lorsque total_at_least est défini, ce nombre est une limite inférieure et d’autres artefacts peuvent exister. Les deux champs nécessitent Agent SDK v0.3.292 ou ultérieur.
Projects
Nom de l’outil :Projects
method, reflétant l’entrée. project_read retourne les petits documents texte en ligne dans content et écrit les documents plus volumineux dans un chemin local_file à la place ; project_search retourne les hits RAG avec rag: true lorsque l’index du projet est disponible et revient à une liste de chemin docs sinon.
ReadMcpResourceDir
Nom de l’outil :ReadMcpResourceDirTool
"inode/directory" ; error contient un message lisible par l’homme lorsque le serveur n’a pas pu lister le répertoire.
RefreshMcpTools
Nom de l’outil :RefreshMcpTools
refreshed signifie que la liste d’outils réinterrogée a été appliquée, error signifie que la réinterrogation a échoué et l’ensemble d’outils précédent a été conservé, et not_connected signifie que le serveur n’a pas de connexion active pour interroger.
ShowOnboardingRolePicker
Nom de l’outil :ShowOnboardingRolePicker
role lorsqu’il a choisi une puce de rôle ou en a tapé une, et dismissed: true lorsqu’il a fermé le sélecteur. Un objet vide signifie que l’utilisateur a approuvé l’appel sans choisir de rôle.
McpOutput
Nom de l’outil : noms d’outils MCP dynamiques de la formemcp__<server>__<tool>
structuredContent ou des liens de ressources, consultez tool_use_result, qui contient cette valeur dans son membre content. À l’exécution, la valeur peut également être undefined, bien que le type exporté ne modélise pas cela.
Types de permission
PermissionUpdate
Opérations pour mettre à jour les permissions.
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
Autres types
ApiKeySource
D’où provient la clé API pour les requêtes de la session, signalée comme apiKeySource sur le message d’initialisation SDKSystemMessage.
Agent SDK v0.3.234 et versions ultérieures listent ces quatre valeurs dans le type. Le type conserve également
user, project, org, temporary et oauth afin que le code plus ancien soit toujours compilé, et Claude Code ne les signale pas.
SdkBeta
Les fonctionnalités bêta disponibles qui peuvent être activées via l’option betas. Consultez En-têtes bêta pour plus d’informations.
SlashCommand
Informations sur une commande disponible.
builtin est true sur une ligne lorsque la commande est celle de Claude Code et que taper /name l’exécute. Elle est absente pour une commande définie par un utilisateur, un projet, un plugin ou un serveur MCP, et pour une commande groupée que l’un de ceux-ci remplace par nom. Nécessite Agent SDK v0.3.277 ou version ultérieure.
ModelInfo
Informations sur un modèle disponible.
AgentInfo
Informations sur un sous-agent disponible qui peut être invoqué via l’outil Agent.
McpServerProvenance
Le serveur MCP qui sert un outil mcp__*, et d’où provient la définition de ce serveur. Les entrées de hook PreToolUse, PostToolUse, PostToolUseFailure, PermissionRequest et PermissionDenied le portent comme mcp_server, et les options CanUseTool le portent comme mcpServer. Les deux l’omettent pour les outils qui ne proviennent pas d’un serveur MCP.
source prend l’une des valeurs suivantes. L’ensemble est ouvert, donc traitez une valeur que vous ne reconnaissez pas comme une source configurée, jamais comme sdk :
sdk: un serveur en processus que votre application a enregistré. Seule l’application hôte du SDK peut en enregistrer un, donc un serveur configuré ne signale jamaissdk, quel que soit son nom.plugin: un serveur qu’un plugin fournit. Sonnameest la formeplugin:<plugin-name>:<server-name>délimitée décrite sous serveurs MCP fournis par plugin.- Une portée de configuration :
user,project,local,dynamic,managed,enterprise,claudeaiouagent. Un serveur.mcp.jsonsignaleproject, et les portées d’installation MCP définissentlocal,projectetuser. Les serveurs que votre application transmet dans l’optionmcpServers, autres que les serveurs SDK en processus, signalentdynamic.
source, pas sur name ou le préfixe du nom d’outil mcp__<server>__. Pour toute source autre que sdk, name est du texte non fiable : échappez-le avant l’affichage.
McpServerProvenance et les champs qui le portent nécessitent Agent SDK v0.3.274 ou version ultérieure.
McpServerStatus
État d’un serveur MCP connecté.
source indique d’où provient la définition du serveur, avec les mêmes valeurs et règle de confiance que le source de McpServerProvenance. Le champ nécessite Agent SDK v0.3.274 ou version ultérieure et est absent sur les versions antérieures.
_meta sur une entrée tools porte les membres MCP Apps de _meta de cet outil, afin que votre application puisse trouver la ressource ui:// à rendre avec readMcpResource(). Claude Code transmet l’objet ui et la chaîne ui/resourceUri plate dépréciée, et retient toute autre clé. À l’intérieur de ui, resourceUri est une chaîne ui:// et visibility un tableau de "model" et "app" lorsque le serveur les définit, et tout autre membre passe inchangé. Claude Code supprime l’une ou l’autre clé lorsque la valeur est malformée, et omet _meta d’un outil qui ne déclare ni l’une ni l’autre. Le champ est présent uniquement lorsque les capabilities du message d’initialisation incluent mcp_tool_ui_meta_v1, et nécessite TypeScript Agent SDK v0.3.280 ou version ultérieure.
McpServerStatusConfig
La configuration d’un serveur MCP telle que signalée par mcpServerStatus(). C’est l’union de tous les types de transport de serveur MCP.
McpServerConfig pour les détails sur chaque type de transport.
AccountInfo
Informations de compte pour l’utilisateur authentifié.
ModelUsage
Statistiques d’utilisation par modèle renvoyées dans les messages de résultat. La valeur costUSD est une estimation côté client. Consultez Suivre le coût et l’utilisation pour les avertissements de facturation.
thinkingTokens compte les tokens de réflexion que ce modèle a générés. outputTokens les inclut déjà, donc n’additionnez pas les deux. Le champ est absent jusqu’à ce qu’un tour s’exécute sur une version de Claude Code qui l’enregistre, donc une session reprise qui a commencé sur une version antérieure signale un décompte partiel. thinkingTokens nécessite Agent SDK v0.3.257 ou version ultérieure.
Les champs canonicalModel et provider nécessitent Claude Code v2.1.218 ou version ultérieure. canonicalModel est l’ID de modèle canonique que la recherche de prix utilise ; il peut différer de la chaîne de modèle brute qui sert de clé à l’entrée, par exemple lorsque cette chaîne est un ID spécifique au fournisseur ou un alias.
provider nomme le backend API qui a servi le modèle, tel que firstParty, bedrock, vertex, foundry, anthropicAws, mantle ou gateway.
costBasis nomme la table de prix qui a tarifé la dernière requête du modèle : list pour le prix catalogue, managed pour une table modelPricing, ou unknown lorsqu’aucune ne correspondait à l’ID du modèle. Le champ nécessite Claude Code v2.1.246 ou version ultérieure.
ConfigScope
NonNullableUsage
Une version de Usage avec tous les champs nullables rendus non-nullables, sauf fallback_credit, qui peut toujours être null.
Usage
Statistiques d’utilisation des tokens. C’est le type BetaUsage de @anthropic-ai/sdk.
BetaServerToolUsage, BetaIterationsUsage, BetaOutputTokensDetails et BetaFallbackCreditUsage sont définis dans @anthropic-ai/sdk.
output_tokens_details décompose la sortie facturée par catégorie. Il porte actuellement un champ, thinking_tokens: number, comptant les tokens de sortie que le modèle a générés comme raisonnement interne, y compris les délimiteurs de bloc de réflexion. Le champ output_tokens_details nécessite TypeScript SDK v0.3.228 ou version ultérieure, qui regroupe Claude Code v2.1.228.
- Facturation : lisez la décomposition pour l’observabilité, pas pour la facturation.
output_tokensreste le total faisant autorité, etoutput_tokens - thinking_tokensapproxime la sortie sans raisonnement. - Ce que le décompte couvre : le raisonnement brut que le modèle a produit, qui peut être plus long que le texte de réflexion renvoyé dans le corps de la réponse. L’API le calcule en retokenisant ce texte brut, donc il peut différer du décompte de génération exact du modèle de quelques tokens.
- Streaming : sur les messages d’assistant diffusés en streaming, cette décomposition, comme
output_tokens, est un espace réservémessage_startet ne porte aucun décompte réel, donc lisez-la à partir duusagedu message de résultat comme Lire les tokens de sortie du message de résultat le décrit. Sur le message de résultat,thinking_tokensvaut0lorsque le modèle ou le fournisseur ne signale aucune décomposition. - Cas
null:output_tokens_detailslui-même estnullsur les messages d’assistant que Claude Code synthétise, tels que les messages d’erreur API.
fallback_credit dans Usage dépend de la version de @anthropic-ai/sdk que vous avez installée, qui l’a ajouté dans la version 0.115.0.
CallToolResult
Type de résultat d’outil MCP (de @modelcontextprotocol/sdk/types.js). structuredContent est un objet JSON qui peut être renvoyé aux côtés de content, y compris les blocs d’image. Consultez Retourner des données structurées.
SDKMcpResourceLink
Un fichier qu’un outil MCP a renvoyé par référence. Claude Code construit chaque entrée à partir d’un bloc resource_link dans le résultat de l’outil et livre la liste comme resourceLinks sur SDKUserMessage.tool_use_result, ou comme resource_links sur SDKTaskNotificationMessage lorsque l’appel s’est terminé en arrière-plan. Nécessite Agent SDK v0.3.257 ou version ultérieure.
uri ou name n’est pas une chaîne, et omet un champ optionnel dont la valeur n’est pas du type listé.
ThinkingConfig
Contrôle le comportement de réflexion/raisonnement de Claude. A priorité sur le maxThinkingTokens déprécié.
display contrôle si le texte de réflexion est renvoyé "summarized" ou "omitted". Sur Claude Opus 4.7 et versions ultérieures, la valeur par défaut de l’API est "omitted", donc définissez "summarized" pour recevoir le contenu de réflexion dans les blocs thinking. Claude Code ne transmet pas votre valeur display à certains fournisseurs, tels qu’Amazon Bedrock et la plateforme Agent de Google Cloud. Sur ces fournisseurs, Opus 4.7 et versions ultérieures renvoient des blocs thinking vides même lorsque vous définissez display sur "summarized".
SpawnedProcess
Interface pour la génération de processus personnalisée (utilisée avec l’option spawnClaudeCodeProcess). ChildProcess satisfait déjà cette interface.
SpawnOptions
Options transmises à la fonction de génération personnalisée.
Le champ
signal indique à votre fonction de génération quand arrêter le processus. Transmettez-le comme l’option signal au spawn() de Node, ou transmettez-le à votre gestionnaire d’arrêt de VM ou de conteneur.Ce signal ne se déclenche pas à l’instant où Options.abortController s’arrête. Le SDK ferme d’abord stdin du processus et attend environ deux secondes pour que l’interface de ligne de commande s’arrête proprement, puis arrête ce signal. Pour réagir au moment où l’appelant s’arrête, écoutez votre propre Options.abortController.signal, que votre fonction de génération peut référencer à partir de sa portée englobante.McpSetServersResult
Résultat d’une opération setMcpServers().
setMcpServers(), Claude Code applique ces règles :
- Serveurs que l’appel ne nomme pas : en dehors d’une session cloud, Claude Code déconnecte les serveurs qu’un appel
setMcpServers()antérieur a ajoutés ainsi que les serveurs SDK en processus, et les liste dansremoved. Les autres serveurs continuent de s’exécuter et ne sont pas listés dansremoved, parmi lesquels les serveurs stdio, HTTP et SSE de l’optionmcpServers, les serveurs des fichiers de paramètres et les serveurs fournis par plugin. - Serveurs que l’appel nomme : Claude Code remplace un serveur stdio, HTTP ou SSE qu’un appel
setMcpServers()antérieur a ajouté uniquement lorsque sa configuration diffère de celle que vous avez transmise. Un serveur SDK en processus déjà enregistré sous ce nom reste tel quel ; pour en remplacer un, omettez-le d’un appel et ajoutez-le dans le suivant. - Serveurs intégrés que l’interface de ligne de commande a démarrés au démarrage : si l’appel en nomme un, Claude Code supprime cette entrée et la signale dans
errors.
added liste les serveurs que Claude Code a ajoutés ou remplacés, qu’ils se soient connectés ou non. Un serveur qui n’a pas pu se connecter apparaît à la fois dans added et errors, avec le texte d’échec sous errors et une ligne failed dans mcpServerStatus(). Avant Claude Code v2.1.257, un serveur dont la tentative de connexion a levé une exception était signalé uniquement sous errors.
RewindFilesResult
Résultat d’une opération rewindFiles().
skippedLinks compte les chemins suivis que le rembobinage a refusé de restaurer ou de supprimer pour la sécurité des liens : un lien symbolique, un lien physique ou un autre fichier non régulier au chemin suivi, un répertoire parent qui ne se résout plus à l’endroit où il pointait lorsque le checkpoint a été pris, ou une sauvegarde qui n’a pas pu être lue en toute sécurité. Le champ nécessite Claude Code v2.1.216 ou version ultérieure. Un appel d’aperçu avec rewindFiles(userMessageId, { dryRun: true }) ne le définit jamais.
SDKStatusMessage
Message de mise à jour d’état (par exemple, compactage).
SDKTaskNotificationMessage
Notification lorsqu’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. Pour les champs run_id et ambient, consultez SDKTaskStartedMessage, qui les définit ainsi que leurs exigences de version.
reason est défini lorsqu’une tâche se termine pour une cause autre que sa propre complétion, son échec ou son arrêt, et nécessite Agent SDK v0.3.273 ou version ultérieure. Claude Code le définit uniquement dans les sessions qui se connectent via claude.ai : les sessions cloud, y compris celles sur des runners auto-hébergés, et les sessions Remote Control. Un appel query() local ne le définit jamais. Son unique valeur, worker_restart, signifie que le processus Claude Code qui exécutait la tâche a redémarré. La notification porte l’état "stopped" ; ne traitez donc la tâche ni comme terminée ni comme échouée.
Lorsque Claude Code déplace un long appel d’outil MCP en arrière-plan, le bloc tool_result pour cet appel ne contient qu’un espace réservé et le résultat réel de l’appel arrive dans cette notification. Faites correspondre la notification à l’appel avec tool_use_id. Sur une notification completed, resource_links liste les fichiers que l’outil a renvoyés par référence comme entrées SDKMcpResourceLink, avec les mêmes limites de 50 liens et 64 KiB que tool_use_result.resourceLinks. Claude Code omet resource_links lorsque 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. resource_links nécessite Agent SDK v0.3.257 ou version ultérieure.
Claude Code ajoute un avis à chaque notification de tâche qu’il envoie au modèle, sauf les livraisons estampillées avec le sous-type scheduled-trigger, qui portent plutôt un cadrage de tâche assignée. L’avis indique qu’aucune entrée humaine n’a eu lieu, donc le modèle ne traite pas la notification comme une instruction ou une approbation de l’utilisateur.
Pour détecter un tour de notification de tâche, vérifiez origin.kind === "task-notification" sur SDKUserMessage ou SDKResultMessage plutôt que de faire correspondre le texte de l’avis. Lisez subkind à partir du même champ si vous avez besoin de savoir ce qui l’a soulevé. Avant v2.1.205, Claude Code laissait l’avis hors des notifications qui arrivaient pendant que la session était inactive.
SDKToolUseSummaryMessage
Résumé de l’utilisation des outils dans une conversation.
SDKHookStartedMessage
Émis lorsqu’un hook commence à s’exécuter.
Claude Code livre ce message, SDKHookProgressMessage et SDKHookResponseMessage au flux de messages immédiatement, y compris pendant qu’un hook SessionStart ou Setup s’exécute toujours au démarrage de la session. Claude Code v2.1.169 à v2.1.203 livrait ces messages en un lot après qu’un hook SessionStart ou Setup se soit terminé ; v2.1.204 a restauré la livraison en direct.
SDKHookProgressMessage
Émis pendant qu’un hook s’exécute, avec la sortie stdout/stderr.
SDKHookResponseMessage
Émis lorsqu’un hook termine son exécution.
SDKToolProgressMessage
Émis périodiquement pendant qu’un outil s’exécute pour indiquer la progression.
tool_progress toutes les 30 secondes avec heartbeat: true. Chaque battement porte le nom de l’outil et les secondes écoulées, afin que vous puissiez distinguer un appel de longue durée d’une session bloquée. Claude Code n’émet pas de battements pour les appels d’outil à l’intérieur d’un sous-agent. Le champ heartbeat nécessite Agent SDK v0.3.214 ou version ultérieure. Avant v2.1.257, Claude Code n’émettait pas non plus de battements pour un appel d’outil Agent au premier plan.
Sur les messages tool_progress pour l’outil Agent autres que les battements, subagent_type nomme le type de sous-agent en cours d’exécution, tel que general-purpose. subagent_retry est présent pendant que ce sous-agent attend un backoff d’erreur API, tel qu’une limite de débit ou une surcharge, avec un message par nouvelle tentative. Les deux champs nécessitent Agent SDK v0.3.214 ou version ultérieure.
Pour rendre un indicateur de nouvelle tentative à partir de subagent_retry :
- Suivez l’indicateur par
parent_tool_use_id, qui est unique par sous-agent.tool_use_idest partagé par les sous-agents parallèles d’un tour d’assistant, donc le suivi par celui-ci laisserait la mise à jour d’un sous-agent effacer l’indicateur d’un autre. - Effacez l’indicateur lorsqu’un
tool_progressultérieur pour le mêmeparent_tool_use_idarrive sanssubagent_retryniheartbeat: true, ou lorsque le message de résultat de l’outil arrive. Les cadres avecheartbeat: truene signalent que la vivacité, donc conservez l’indicateur lorsqu’un arrive.attemptpeut dépassermax_retriessous une nouvelle tentative persistante, donc ne dérivez pas l’effacement des compteurs. - Traitez
error_categorycomme un jeton pour choisir votre propre texte de message, pas comme du texte d’affichage. Les valeurs sontrate_limit,overloaded,authentication_failed,server_error,cloud_credential_erroretunknown. Gérez une valeur que vous ne reconnaissez pas de la même manière que vous gérezunknown, car les versions ultérieures peuvent ajouter des valeurs.
SDKAuthStatusMessage
Émis pendant les flux d’authentification.
SDKTaskStartedMessage
Émis lorsqu’une tâche commence. Le champ task_type est "local_bash" pour les commandes Bash et les surveillances Monitor, "local_agent" pour les sous-agents, ou "remote_agent".
run_id identifie une exécution de la tâche. Lorsqu’une tâche s’exécute de nouveau sous le même task_id, comme un sous-agent que Claude reprend, la nouvelle exécution reçoit un nouveau run_id. Le champ nécessite Agent SDK v0.3.292 ou version ultérieure. Utilisez-le pour distinguer les exécutions d’une même tâche :
- Associer les messages à une exécution : les messages
task_started,task_progress,task_updatedettask_notificationd’une même exécution portent le mêmerun_id. L’entrée de l’exécution dans chaqueSDKBackgroundTasksChangedMessagele porte également, tout comme lerunIdsur l’origine du message utilisateur qui livre la notification de l’exécution. - Détecter un message tardif : comparés comme de simples chaînes, les ID d’exécution d’une tâche se trient dans l’ordre de démarrage des exécutions ; un message dont le
run_idse trie avant l’exécution que vous affichez provient donc d’une exécution antérieure. Traitez la valeur comme opaque en dehors de cette comparaison. - Se rabattre sur
task_id: lorsqu’un message ne porte aucunrun_id, comme letask_notificationqu’une session reprise émet pour clôturer une tâche que le processus précédent avait démarrée, attribuez-le partask_id.
task_started partagent un task_id, et la notification qui a mis fin à la première exécution porte l’ID de la première exécution :
ambient est true pour les tâches qui ne font pas partie du travail de la session, telles que les tâches que Claude Code exécute pour son propre fonctionnement. Les surveillances de mise à jour en direct sont également ambiantes, y compris les surveillances que l’utilisateur a demandées. Excluez les tâches ambiantes des indicateurs d’activité. Le champ nécessite Agent SDK v0.3.247 ou version ultérieure.
ambient apparaît également sur SDKTaskNotificationMessage et sur les entrées SDKBackgroundTasksChangedMessage.
is_backgrounded et spawn_depth décrivent comment Claude Code a démarré la tâche. Les deux champs nécessitent Agent SDK v0.3.238 ou version ultérieure.
is_backgrounded: Claude Code le définit sur les tâches"local_agent"et"local_bash".truesignifie que la tâche s’exécute en arrière-plan.falsesignifie que la tâche s’exécute au premier plan, et l’appel d’outil qui l’a démarrée reste bloqué jusqu’à ce que la tâche se termine ou se déplace en arrière-plan.spawn_depth: Claude Code le définit uniquement sur les tâches"local_agent". Un sous-agent que le thread principal a généré a une profondeur1. Un sous-agent qu’un sous-agent de profondeur1a généré a une profondeur2, et ainsi de suite.
is_backgrounded: true, car Claude Code exécute chaque sous-agent repris en arrière-plan. Lorsqu’une tâche au premier plan se déplace en arrière-plan plus tard, Claude Code signale la nouvelle valeur is_backgrounded dans un message task_updated plutôt que d’envoyer un second task_started.
parent_task_id contient le task_id du sous-agent qui a lancé cette tâche. Utilisez-le pour regrouper chaque tâche sous le sous-agent qui l’a démarrée. Claude Code le définit sur les tâches de sous-agent, Bash et Monitor. Le champ nécessite Agent SDK v0.3.292 ou version ultérieure. Il est absent lorsque :
- Le thread principal a lancé la tâche
- Claude Code ne suit plus la tâche parente
- Un coéquipier ou un agent à l’intérieur d’un workflow a lancé la tâche
SDKTaskProgressMessage
Émis périodiquement pendant qu’un sous-agent ou une tâche en arrière-plan s’exécute. Pour le champ run_id, consultez SDKTaskStartedMessage, qui le définit ainsi que son exigence de version.
Pour une tâche de sous-agent, le champ summary porte un résumé de progression généré par le modèle et n’est rempli que lorsque agentProgressSummaries est activé. Pour un appel d’outil MCP mis en arrière-plan, summary porte le dernier progrès signalé par le serveur MCP et ne dépend pas de cette option.
SDKTaskUpdatedMessage
Émis lorsque l’état d’une tâche en arrière-plan change, par exemple lorsqu’elle passe de running à completed. Fusionnez patch dans votre carte de tâches locale indexée par task_id. Le champ end_time est un horodatage d’époque Unix en millisecondes, comparable avec Date.now(). Pour le champ run_id, consultez SDKTaskStartedMessage, qui le définit ainsi que son exigence de version.
SDKBackgroundTasksChangedMessage
Émis chaque fois que l’ensemble des tâches en arrière-plan en direct change : une tâche démarre, se termine ou est tuée ; un agent au premier plan est mis en arrière-plan ; ou le champ description, ambient ou parent_task_id d’une tâche change. Pour les champs run_id et parent_task_id de chaque entrée, consultez SDKTaskStartedMessage, qui les définit ainsi que leurs exigences de version.
Le tableau tasks est l’ensemble en direct complet. Remplacez tout ensemble mis en cache par chaque payload au lieu d’appairer les événements task_started et task_notification, afin que le prochain changement d’appartenance corrige tout événement que vous avez manqué.
Lorsqu’une tâche se termine, ses messages task_updated et task_notification arrivent avant le background_tasks_changed qui la retire de la liste. L’ordre relatif aux événements par tâche n’est sinon pas spécifié.
Rien n’est émis au démarrage. Réinitialisez à un ensemble vide chaque fois que le processus CLI de la session démarre ou redémarre et laissez le prochain changement d’appartenance le repeupler.
Lorsque vous envoyez une demande de contrôle initialize répétée à une session en cours d’exécution, par exemple avec reinitialize() après une interruption du transport, Claude Code fait suivre la réponse d’un instantané de l’ensemble en direct actuel, même lorsqu’il est vide. Un hôte qui se reconnecte apprend donc ce qui s’exécute sans attendre le prochain changement d’appartenance. Avant Agent SDK v0.3.239, Claude Code n’envoyait aucun instantané après un initialize répété.
Nécessite Claude Code v2.1.203 ou version ultérieure.
subagent_type nomme le type de sous-agent sur les entrées dont le task_type est "local_agent", tel que general-purpose ou le nom d’un sous-agent personnalisé. Le champ nécessite Agent SDK v0.3.293 ou version ultérieure.
SDKThinkingTokensMessage
Émis pendant que Claude produit un bloc de réflexion, y compris un bloc expurgé. estimated_tokens est une estimation en cours des tokens de réflexion générés jusqu’à présent dans le bloc actuel, et estimated_tokens_delta est l’incrément porté par ce cadre. Utilisez ces estimations pour l’affichage de la progression.
Lorsque le modèle ou le fournisseur signale une décomposition, le décompte final pour la boucle d’agent de haut niveau est le usage.output_tokens_details.thinking_tokens du message de résultat, qui n’inclut pas les tokens de sous-agent.
Nécessite Claude Code v2.1.153 ou version ultérieure.
SDKSessionStateChangedMessage
Émis lorsque Claude Code signale l’état de la session. Pour recevoir ces messages, définissez CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1. Claude Code peut signaler le même état plus d’une fois ; lisez donc un message comme l’état actuel de la session plutôt que comme une transition.
Le champ state porte l’une de ces valeurs :
running: la session est en train de travailler.idle: Claude Code attend votre prochain prompt.requires_action: la session est bloquée en attente d’une réponse à une demande qu’elle a envoyée à votre hôte, telle qu’une demande de permission.
idle d’un tour et son message result peuvent arriver dans n’importe quel ordre. Pour modifier le fait que idle attende ou non le travail en arrière-plan, tel qu’un sous-agent en arrière-plan ou une exécution de workflow, consultez CLAUDE_CODE_BG_TASKS_REPORT_RUNNING.
SDKFilesPersistedEvent
Émis lorsque les checkpoints de fichiers sont persistés sur le disque.
SDKRateLimitEvent
Émis lorsque la session rencontre une limite de débit.
errorCode est "credits_required", le rejet provient d’un abonnement claude.ai dont l’utilisation incluse est épuisée, et la session ne peut pas continuer jusqu’à ce que l’utilisateur achète des crédits d’utilisation. canUserPurchaseCredits indique si l’utilisateur authentifié peut acheter des crédits pour le compte, et hasChargeableSavedPaymentMethod indique si une méthode de paiement enregistrée est en dossier. Les trois champs sont absents sur les événements de limite de débit qui ne sont pas des rejets de crédits requis. Nécessite Claude Code v2.1.181 ou version ultérieure.
SDKLocalCommandOutputMessage
Claude Code n’émet pas ce type de message. Lorsque vous envoyez une commande telle que /context ou /usage comme prompt, sa sortie arrive comme SDKAssistantMessage.
SDKCommandsChangedMessage
Émis lorsque l’ensemble des commandes disponibles change en milieu de session, par exemple lorsque Claude Code découvre des skills à mesure que l’agent entre dans un sous-répertoire. Le tableau commands est la liste complète mise à jour, donc remplacez tout cache de liste de commandes par ce payload. L’appel de supportedCommands() après ce message renvoie la même liste mise à jour, car la méthode suit le dernier push ; cela nécessite Agent SDK v0.3.216 ou version ultérieure. Dans les versions antérieures du SDK, supportedCommands() renvoie l’instantané capturé à l’initialisation et ne reflète jamais les changements en milieu de session.
Claude Code émet également ce message lorsque les prompts d’un serveur MCP rejoignent ou quittent la liste, par exemple lorsqu’un serveur termine de se connecter après le démarrage de la session. Cela nécessite Claude Code v2.1.281 ou version ultérieure.
SDKPromptSuggestionMessage
Émis après un tour lorsque promptSuggestions est activé et que Claude Code a généré une suggestion pour ce tour. Contient le prochain prompt utilisateur prédit. Pour les tours qui n’en reçoivent pas, consultez Quand Claude Code ignore les suggestions.
SDKConversationResetMessage
Émis lorsque la conversation de la session est remplacée sans terminer la session. Dans un appel query(), seul /clear et ses alias produisent ce message. Montez une transcription vide sous new_conversation_id et jetez tout titre de session mis en cache.
trigger: ce qui a supprimé la conversation. Réinitialisez votre transcription sur chaque messageconversation_reset, y compris celui où ce champ est absent ou porte une valeur que vous ne reconnaissez pas.user_message_uuid: l’uuiddu message utilisateur qui portait le/clear. Utilisez-le pour faire correspondre la réinitialisation à ce message.timestamp: quand la réinitialisation s’est produite, sous forme de chaîne ISO 8601 en UTC. Utilisez-le pour l’affichage, pas pour l’ordre des messages.
trigger, user_message_uuid et timestamp nécessitent Claude Code v2.1.281 ou version ultérieure.
Les typages publiés du SDK déclarent SDKConversationResetMessage dans Claude Code v2.1.203 et versions ultérieures. Avant v2.1.203, SDKMessage référençait le type sans le déclarer, donc le rétrécissement sur type === "conversation_reset" échouait à la vérification de type lorsque skipLibCheck était désactivé.
AbortError
Classe d’erreur personnalisée pour les opérations d’arrêt.
AbortError est la seule classe d’erreur dans l’API typée du SDK. Les autres défaillances, telles que la sortie ou l’échec du lancement du processus Claude Code, rejettent l’itération de message avec des erreurs qui ne portent aucune classe SDK à laquelle se référer. Dépannage répertorie ces erreurs par message, avec la cause et la correction pour chacune.
Configuration du sandbox
SandboxSettings
Configuration du comportement du sandbox. Utilisez ceci pour activer le sandboxing des commandes et configurer les restrictions réseau par programmation.
Le sandbox dépend du support de la plateforme et, sur Linux, d’outils comme
bubblewrap et socat. Lorsque enabled est true et que le sandbox ne peut pas démarrer, query() signale un message result avec subtype: "error_during_execution" et la raison dans errors. Pour un seul appel query(), le SDK lance une exception après avoir cédé 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.Pour s’exécuter sans sandbox à la place, définissez failIfUnavailable: false.Exemple d’utilisation
SandboxNetworkConfig
Configuration spécifique au réseau pour le mode sandbox. Ces paramètres s’appliquent aux commandes Bash sandboxées lorsque 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
allowedDomains en fonction du nom d’hôte demandé et ne termine ni n’inspecte 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.SandboxFilesystemConfig
Configuration spécifique au système de fichiers pour le mode sandbox.
Système de permissions de secours pour les commandes non sandboxées
LorsqueallowUnsandboxedCommands 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 de l’outil. Ces demandes reviennent au système de permissions existant, ce qui signifie que votre gestionnaire canUseTool est invoqué, vous permettant de mettre en œuvre une logique d’autorisation personnalisée.
Vos entrées excludedCommands prennent plutôt un appel en dehors du sandbox sans intervention du modèle ; sandbox.excludedCommands couvre le moment où une entrée s’applique.
Dans l’exemple ci-dessous, isCommandAuthorized représente une vérification d’autorisation que vous définissez.
Voir aussi
- Aperçu du SDK - Concepts généraux du SDK
- Référence du SDK Python - Documentation du SDK Python
- Référence CLI - Interface de ligne de commande
- Flux de travail courants - Guides étape par étape