Passer au contenu principal

Installation

npm install @anthropic-ai/claude-agent-sdk
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. Vous n’avez pas besoin d’installer Claude Code séparément. Si votre gestionnaire de paquets ignore les dépendances optionnelles, le SDK lève Native CLI binary for <platform> not found ; définissez pathToClaudeCodeExecutable sur un binaire claude installé séparément à la place.

Compiler en un seul exécutable

Lorsque vous compilez votre application en un exécutable à fichier unique avec bun 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> 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 :
import binPath from "@anthropic-ai/claude-agent-sdk-darwin-arm64/claude" with { type: "file" };
import { extractFromBunfs } from "@anthropic-ai/claude-agent-sdk/extract";
import { query } from "@anthropic-ai/claude-agent-sdk";

const cliPath = extractFromBunfs(binPath);

for await (const message of query({
  prompt: "Hello",
  options: { pathToClaudeCodeExecutable: cliPath },
})) {
  console.log(message);
}
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.

Fonctions

query()

La fonction principale pour interagir avec Claude Code. Crée un générateur asynchrone qui diffuse les messages au fur et à mesure de leur arrivée.
function query({
  prompt,
  options
}: {
  prompt: string | AsyncIterable<SDKUserMessage>;
  options?: Options;
}): Query;

Paramètres

ParamètreTypeDescription
promptstring | AsyncIterable<SDKUserMessage>L’invite d’entrée sous forme de chaîne ou d’itérable asynchrone pour le mode de diffusion
optionsOptionsObjet de configuration optionnel (voir le type Options ci-dessous)

Retours

Retourne un objet Query 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’une invite soit disponible. Le handle WarmQuery retourné accepte une invite 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.
function startup(params?: {
  options?: Options;
  initializeTimeoutMs?: number;
}): Promise<WarmQuery>;

Paramètres

ParamètreTypeDescription
optionsOptionsObjet de configuration optionnel. Identique au paramètre options de query()
initializeTimeoutMsnumberTemps maximum en millisecondes à attendre pour l’initialisation du sous-processus. Par défaut 60000. Si l’initialisation ne se termine pas à temps, la promesse est rejetée avec une erreur de délai d’expiration

Retours

Retourne une Promise<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

Appelez startup() tôt, par exemple au démarrage de l’application, puis appelez .query() sur le handle retourné une fois qu’une invite est prête. Cela déplace la génération du sous-processus et l’initialisation en dehors du chemin critique.
import { startup } from "@anthropic-ai/claude-agent-sdk";

// Payez le coût de démarrage à l'avance
const warm = await startup({ options: { maxTurns: 3 } });

// Plus tard, quand une invite est prête, c'est immédiat
for await (const message of warm.query("What files are here?")) {
  console.log(message);
}

tool()

Crée une définition d’outil MCP type-safe pour une utilisation avec les serveurs MCP du SDK.
function tool<Schema extends AnyZodRawShape>(
  name: string,
  description: string,
  inputSchema: Schema,
  handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,
  extras?: { annotations?: ToolAnnotations }
): SdkMcpToolDefinition<Schema>;

Paramètres

ParamètreTypeDescription
namestringLe nom de l’outil
descriptionstringUne description de ce que fait l’outil
inputSchemaSchema extends AnyZodRawShapeSchéma Zod définissant les paramètres d’entrée de l’outil (supporte Zod 3 et Zod 4)
handler(args, extra) => Promise<CallToolResult>Fonction asynchrone qui exécute la logique de l’outil
extras{ annotations?: ToolAnnotations }Annotations MCP optionnelles fournissant des indices comportementaux aux clients

ToolAnnotations

Réexportée depuis @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é.
ChampTypePar défautDescription
titlestringundefinedTitre lisible par l’homme pour l’outil
readOnlyHintbooleanfalseSi true, l’outil ne modifie pas son environnement
destructiveHintbooleantrueSi true, l’outil peut effectuer des mises à jour destructrices (uniquement significatif quand readOnlyHint est false)
idempotentHintbooleanfalseSi true, les appels répétés avec les mêmes arguments n’ont aucun effet supplémentaire (uniquement significatif quand readOnlyHint est false)
openWorldHintbooleantrueSi true, l’outil interagit avec des entités externes (par exemple, recherche web). Si false, le domaine de l’outil est fermé (par exemple, un outil de mémoire)
import { tool } from "@anthropic-ai/claude-agent-sdk";
import { z } from "zod";

const searchTool = tool(
  "search",
  "Search the web",
  { query: z.string() },
  async ({ query }) => {
    return { content: [{ type: "text", text: `Results for: ${query}` }] };
  },
  { annotations: { readOnlyHint: true, openWorldHint: true } }
);

createSdkMcpServer()

Crée une instance de serveur MCP qui s’exécute dans le même processus que votre application.
function createSdkMcpServer(options: {
  name: string;
  version?: string;
  tools?: Array<SdkMcpToolDefinition<any>>;
}): McpSdkServerConfigWithInstance;

Paramètres

ParamètreTypeDescription
options.namestringLe nom du serveur MCP
options.versionstringChaîne de version optionnelle
options.toolsArray<SdkMcpToolDefinition>Tableau de définitions d’outils créées avec tool()

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.
function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;

Paramètres

ParamètreTypePar défautDescription
options.dirstringundefinedRépertoire pour lequel répertorier les sessions. Lorsqu’il est omis, retourne les sessions dans tous les projets
options.limitnumberundefinedNombre maximum de sessions à retourner
options.includeWorktreesbooleantrueQuand dir est à l’intérieur d’un référentiel git, inclure les sessions de tous les chemins worktree

Type de retour : SDKSessionInfo

PropriétéTypeDescription
sessionIdstringIdentifiant de session unique (UUID)
summarystringTitre d’affichage : titre personnalisé, résumé généré automatiquement ou première invite
lastModifiednumberHeure de dernière modification en millisecondes depuis l’époque
fileSizenumber | undefinedTaille du fichier de session en octets. Rempli uniquement pour le stockage JSONL local
customTitlestring | undefinedTitre de session défini par l’utilisateur (via /rename)
firstPromptstring | undefinedPremière invite utilisateur significative dans la session
gitBranchstring | undefinedBranche Git à la fin de la session
cwdstring | undefinedRépertoire de travail pour la session
tagstring | undefinedÉtiquette de session définie par l’utilisateur (voir tagSession())
createdAtnumber | undefinedHeure de création en millisecondes depuis l’époque, à partir de l’horodatage de la première entrée

Exemple

Imprimez les 10 sessions les plus récentes pour un projet. Les résultats sont triés par lastModified décroissant, donc le premier élément est le plus récent. Omettez dir pour rechercher dans tous les projets.
import { listSessions } from "@anthropic-ai/claude-agent-sdk";

const sessions = await listSessions({ dir: "/path/to/project", limit: 10 });

for (const session of sessions) {
  console.log(`${session.summary} (${session.sessionId})`);
}

getSessionMessages()

Lit les messages utilisateur et assistant à partir d’une transcription de session passée.
function getSessionMessages(
  sessionId: string,
  options?: GetSessionMessagesOptions
): Promise<SessionMessage[]>;

Paramètres

ParamètreTypePar défautDescription
sessionIdstringrequisUUID de session à lire (voir listSessions())
options.dirstringundefinedRépertoire de projet pour trouver la session. Lorsqu’il est omis, recherche dans tous les projets
options.limitnumberundefinedNombre maximum de messages à retourner
options.offsetnumberundefinedNombre de messages à ignorer à partir du début

Type de retour : SessionMessage

PropriétéTypeDescription
type"user" | "assistant"Rôle du message
uuidstringIdentifiant de message unique
session_idstringSession à laquelle ce message appartient
messageunknownCharge utile de message brute de la transcription
parent_tool_use_idstring | nullPour les messages de sous-agent, le tool_use_id de l’appel d’outil Agent qui l’a généré. null pour les messages de session principale et les sessions plus anciennes

Exemple

import { listSessions, getSessionMessages } from "@anthropic-ai/claude-agent-sdk";

const [latest] = await listSessions({ dir: "/path/to/project", limit: 1 });

if (latest) {
  const messages = await getSessionMessages(latest.sessionId, {
    dir: "/path/to/project",
    limit: 20
  });

  for (const msg of messages) {
    console.log(`[${msg.type}] ${msg.uuid}`);
  }
}

getSessionInfo()

Lit les métadonnées d’une seule session par ID sans analyser le répertoire de projet complet.
function getSessionInfo(
  sessionId: string,
  options?: GetSessionInfoOptions
): Promise<SDKSessionInfo | undefined>;

Paramètres

ParamètreTypePar défautDescription
sessionIdstringrequisUUID de la session à rechercher
options.dirstringundefinedChemin du répertoire de projet. Lorsqu’il est omis, recherche dans tous les répertoires de projet
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.
function renameSession(
  sessionId: string,
  title: string,
  options?: SessionMutationOptions
): Promise<void>;

Paramètres

ParamètreTypePar défautDescription
sessionIdstringrequisUUID de la session à renommer
titlestringrequisNouveau titre. Doit être non vide après suppression des espaces blancs
options.dirstringundefinedChemin du répertoire de projet. Lorsqu’il est omis, recherche dans tous les répertoires de projet

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.
function tagSession(
  sessionId: string,
  tag: string | null,
  options?: SessionMutationOptions
): Promise<void>;

Paramètres

ParamètreTypePar défautDescription
sessionIdstringrequisUUID de la session à étiqueter
tagstring | nullrequisChaîne d’étiquette, ou null pour effacer
options.dirstringundefinedChemin du répertoire de projet. Lorsqu’il est omis, recherche dans tous les répertoires de projet

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. Elle lit les sources MDM, y compris la liste de propriétés macOS et Windows HKLM/HKCU, pour la parité avec le démarrage de l’interface CLI, mais n’exécute pas le sous-processus policyHelper configuré par l’administrateur. Le champ permissions.defaultMode est retourné tel quel de tous les niveaux, y compris les paramètres de projet. Le filtre de confiance que l’interface CLI applique avant d’honorer les modes de permission croissants n’est pas appliqué.
function resolveSettings(
  options?: ResolveSettingsOptions
): Promise<ResolvedSettings>;

Paramètres

resolveSettings() accepte un seul objet d’options. Tous les champs sont optionnels.
ParamètreTypePar défautDescription
options.cwdstringprocess.cwd()Répertoire pour résoudre les paramètres de projet et locaux par rapport à
options.settingSourcesSettingSource[]Toutes les sourcesQuelles sources du système de fichiers charger. Passez [] pour ignorer les paramètres utilisateur, projet et locaux. Les paramètres de politique gérée se chargent dans tous les cas
options.managedSettingsSettingsundefinedParamètres de politique restrictive fournis par l’hôte d’intégration. Supprimés par défaut quand un niveau géré déployé par l’administrateur est présent ; fusionnés sous ce niveau quand parentSettingsBehavior est "merge". Les clés non restrictives telles que model sont silencieusement supprimées pour que cette option puisse renforcer la politique gérée mais pas l’assouplir
options.serverManagedSettingsSettingsundefinedCharge utile de paramètres gérés par le serveur depuis /api/claude_code/settings. Les clés non restrictives passent sans filtre

Type de retour : ResolvedSettings

resolveSettings() retourne un objet décrivant les paramètres fusionnés et la source qui a contribué à chaque clé.
PropriétéTypeDescription
effectiveSettingsParamètres fusionnés après application de toutes les sources activées dans l’ordre de précédence
provenancePartial<Record<keyof Settings, ProvenanceEntry>>Pour chaque clé de niveau supérieur dans effective, quelle source a fourni la valeur
sourcesArray<{ source, settings, path?, policyOrigin? }>Paramètres bruts par source, ordonnés de la plus basse à la plus haute précédence

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.
import { resolveSettings } from "@anthropic-ai/claude-agent-sdk";

const { effective, provenance } = await resolveSettings({
  cwd: "/path/to/project",
  settingSources: ["user", "project", "local"],
});

console.log(`Cleanup period: ${effective.cleanupPeriodDays} days`);
console.log(`Set by: ${provenance.cleanupPeriodDays?.source}`);

Types

Options

Objet de configuration pour la fonction query().
PropriétéTypePar défautDescription
abortControllerAbortControllernew AbortController()Contrôleur pour annuler les opérations
additionalDirectoriesstring[][]Répertoires supplémentaires auxquels Claude peut accéder
agentstringundefinedNom de l’agent pour le thread principal. L’agent doit être défini dans l’option agents ou dans les paramètres
agentsRecord<string, [AgentDefinition](#agentdefinition)>undefinedDéfinir programmatiquement les sous-agents
agentProgressSummariesbooleanfalseQuand true, générer des résumés de progression d’une ligne pour les sous-agents et les transférer sur les événements task_progress via le champ summary. S’applique aux sous-agents de premier plan et d’arrière-plan
allowDangerouslySkipPermissionsbooleanfalseActiver le contournement des permissions. Requis lors de l’utilisation de permissionMode: 'bypassPermissions'
allowedToolsstring[][]Outils à approuver automatiquement sans demander. Cela ne restreint pas Claude à seulement ces outils ; les outils non répertoriés passent à permissionMode et canUseTool. Utilisez disallowedTools pour bloquer les outils. Voir Permissions
betasSdkBeta[][]Activer les fonctionnalités bêta
canUseToolCanUseToolundefinedFonction de permission personnalisée pour l’utilisation des outils
continuebooleanfalseContinuer la conversation la plus récente
cwdstringprocess.cwd()Répertoire de travail actuel
debugbooleanfalseActiver le mode débogage pour le processus Claude Code
debugFilestringundefinedÉcrire les journaux de débogage dans un chemin de fichier spécifique. Active implicitement le mode débogage
disallowedToolsstring[][]Outils à refuser. Un nom simple tel que "Bash" supprime l’outil du contexte de Claude. Une règle délimitée telle que "Bash(rm *)" laisse l’outil disponible et refuse les appels correspondants dans chaque mode de permission, y compris bypassPermissions. Voir Permissions
effort'low' | 'medium' | 'high' | 'xhigh' | 'max''high'Contrôle l’effort que Claude met dans sa réponse. Fonctionne avec la réflexion adaptative pour guider la profondeur de réflexion
enableFileCheckpointingbooleanfalseActiver le suivi des modifications de fichiers pour le rembobinage. Voir Sauvegarde de fichiers
envRecord<string, string | undefined>process.envVariables d’environnement. Quand défini, cela remplace l’environnement du sous-processus au lieu de fusionner avec process.env, donc passez { ...process.env, YOUR_VAR: 'value' } pour conserver les variables héritées comme PATH. Voir Gérer les réponses API lentes ou bloquées pour un exemple de ce modèle, et Variables d’environnement pour les variables que la CLI sous-jacente lit. Définissez CLAUDE_AGENT_SDK_CLIENT_APP pour identifier votre application dans l’en-tête User-Agent
executable'bun' | 'deno' | 'node'Détection automatiqueRuntime JavaScript à utiliser
executableArgsstring[][]Arguments à passer à l’exécutable
extraArgsRecord<string, string | null>{}Arguments supplémentaires
fallbackModelstringundefinedModèle à utiliser si le principal échoue
forkSessionbooleanfalseLors de la reprise avec resume, bifurquer vers un nouvel ID de session au lieu de continuer la session d’origine
forwardSubagentTextbooleanfalseTransférer les blocs de texte et de réflexion des sous-agents en tant que messages assistant et utilisateur avec parent_tool_use_id défini, pour que les consommateurs puissent afficher une transcription imbriquée. Par défaut, seuls les blocs tool_use et tool_result des sous-agents sont émis
hooksPartial<Record<HookEvent, HookCallbackMatcher[]>>{}Rappels de hook pour les événements
includeHookEventsbooleanfalseInclure les événements du cycle de vie du hook dans le flux de messages en tant que SDKHookStartedMessage, SDKHookProgressMessage, et SDKHookResponseMessage
includePartialMessagesbooleanfalseInclure les événements de message partiel
loadTimeoutMsnumber60000Alpha. Délai d’expiration en millisecondes pour chaque appel sessionStore.load() et sessionStore.listSubkeys() lors de la matérialisation de la reprise. Si l’adaptateur ne se règle pas dans cette fenêtre, la requête échoue au lieu de rester bloquée. Ignoré quand sessionStore n’est pas défini
managedSettingsSettingsundefinedParamètres de niveau politique fournis par le processus parent qui génère. Supprimés quand un niveau de paramètres gérés contrôlé par l’informatique existe déjà sur la machine, sauf si cet administrateur accepte avec parentSettingsBehavior: 'merge'. Filtrés aux clés restrictives uniquement
maxBudgetUsdnumberundefinedArrêter la requête quand l’estimation du coût côté client atteint cette valeur en USD. Comparé à la même estimation que total_cost_usd ; voir Suivi des coûts et de l’utilisation pour les avertissements de précision
maxThinkingTokensnumberundefinedDéprécié : Utilisez thinking à la place. Tokens maximum pour le processus de réflexion
maxTurnsnumberundefinedTours agentiques maximum (allers-retours d’utilisation d’outils)
mcpServersRecord<string, [McpServerConfig](#mcpserverconfig)>{}Configurations de serveur MCP
modelstringPar défaut de CLIModèle Claude à utiliser
onElicitation(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>undefinedRappel pour gérer les demandes d’élicitation MCP. Appelé quand un serveur MCP demande une entrée utilisateur et aucun hook ne la gère en premier. Quand non fourni, les demandes d’élicitation non gérées sont automatiquement refusées
outputFormat{ type: 'json_schema', schema: JSONSchema }undefinedDéfinir le format de sortie pour les résultats de l’agent. Voir Sorties structurées pour les détails
outputStylestringundefinedPas un champ Options. Définissez outputStyle dans l’objet settings en ligne ou un fichier de paramètres à la place. Voir Activer un style de sortie
pathToClaudeCodeExecutablestringRésolu automatiquement à partir du binaire natif groupéChemin vers l’exécutable Claude Code. Nécessaire uniquement si les dépendances optionnelles ont été ignorées lors de l’installation ou si votre plateforme ne figure pas dans l’ensemble pris en charge
permissionModePermissionMode'default'Mode de permission pour la session
permissionPromptToolNamestringundefinedNom de l’outil MCP pour les invites de permission
persistSessionbooleantrueQuand false, désactive la persistance de session sur disque. Les sessions ne peuvent pas être reprises plus tard
planModeInstructionsstringundefinedInstructions de flux de travail personnalisées pour le mode plan. Quand permissionMode est 'plan', cette chaîne remplace le corps du flux de travail du mode plan par défaut. La CLI l’enveloppe toujours avec le préambule d’application en lecture seule et le pied de page du protocole ExitPlanMode
pluginsSdkPluginConfig[][]Charger les plugins personnalisés à partir de chemins locaux. Voir Plugins pour les détails
promptSuggestionsbooleanfalseActiver les suggestions d’invite. Émet un message prompt_suggestion après chaque tour avec une invite utilisateur suivante prédite
resumestringundefinedID de session à reprendre
resumeSessionAtstringundefinedReprendre la session à un UUID de message spécifique
sandboxSandboxSettingsundefinedConfigurer le comportement du sandbox par programmation. Voir Paramètres du sandbox pour les détails
sessionIdstringGénéré automatiquementUtiliser un UUID spécifique pour la session au lieu d’en générer un automatiquement
sessionStoreSessionStoreundefinedRefléter les transcriptions de session vers un backend externe pour que n’importe quel hôte puisse les reprendre. Voir Persister les sessions vers un stockage externe
sessionStoreFlush'batched' | 'eager''batched'Alpha. Mode de vidage pour sessionStore. Ignoré quand sessionStore n’est pas défini
settingsstring | SettingsundefinedObjet paramètres en ligne ou chemin vers un fichier de paramètres. Remplit la couche de paramètres d’indicateur dans l’ordre de précédence. Modifiez à l’exécution avec applyFlagSettings()
settingSourcesSettingSource[]Paramètres par défaut de CLI (toutes les sources)Contrôler les paramètres du système de fichiers à charger. Passez [] pour désactiver les paramètres utilisateur, projet et locaux. Les paramètres de politique gérée se chargent indépendamment. Voir Utiliser les fonctionnalités Claude Code
skillsstring[] | 'all'undefinedCompétences disponibles pour la session. Passez 'all' pour activer chaque compétence découverte, ou une liste de noms de compétences. Quand défini, le SDK active l’outil Skill automatiquement sans le lister dans allowedTools. Voir Compétences
spawnClaudeCodeProcess(options: SpawnOptions) => SpawnedProcessundefinedFonction personnalisée pour générer le processus Claude Code. Utilisez pour exécuter Claude Code dans des VM, des conteneurs ou des environnements distants
stderr(data: string) => voidundefinedRappel pour la sortie stderr
strictMcpConfigbooleanfalseUtiliser uniquement les serveurs passés dans mcpServers et ignorer le projet .mcp.json, les paramètres utilisateur, les serveurs MCP fournis par les plugins, et les connecteurs claude.ai
systemPromptstring | { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }undefined (invite minimale)Configuration de l’invite système. Passez une chaîne pour une invite personnalisée, ou { type: 'preset', preset: 'claude_code' } pour utiliser l’invite système de Claude Code. Lors de l’utilisation de la forme d’objet prédéfini, ajoutez append pour l’étendre avec des instructions supplémentaires, et définissez excludeDynamicSections: true pour déplacer le contexte par session dans le premier message utilisateur pour une meilleure réutilisation du cache d’invite sur les machines
taskBudget{ total: number }undefinedAlpha. Budget de tâche côté API en tokens. Quand défini, le modèle est informé de son budget de tokens restant pour qu’il puisse adapter l’utilisation des outils et terminer avant la limite
thinkingThinkingConfig{ type: 'adaptive' } pour les modèles pris en chargeContrôle le comportement de réflexion/raisonnement de Claude. Voir ThinkingConfig pour les options
titlestringundefinedTitre d’affichage pour la session. Lors de la reprise via resume ou continue, le titre persistant de la session reprise a la priorité ; utilisez renameSession() pour renommer une session existante
toolAliasesRecord<string, string>undefinedMapper les noms d’outils intégrés aux noms d’outils MCP pour que Claude appelle votre implémentation MCP à la place de l’intégrée. Par exemple, { Bash: 'mcp__workspace__bash' }
toolConfigToolConfigundefinedConfiguration pour le comportement des outils intégrés. Voir ToolConfig pour les détails
toolsstring[] | { type: 'preset'; preset: 'claude_code' }undefinedConfiguration des outils. Passez un tableau de noms d’outils ou utilisez le prédéfini pour obtenir les outils par défaut de Claude Code

Gérer les réponses API lentes ou bloquées

Le sous-processus CLI lit plusieurs variables d’environnement qui contrôlent les délais d’expiration de l’API et la détection de blocage. Transmettez-les via l’option env :
const result = query({
  prompt: "Analyze this code",
  options: {
    env: {
      ...process.env,
      API_TIMEOUT_MS: "120000",
      CLAUDE_CODE_MAX_RETRIES: "2",
      CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: "120000",
    },
  },
});
  • API_TIMEOUT_MS : délai d’expiration par requête sur le client Anthropic, en millisecondes. Par défaut 600000. S’applique à la boucle principale et à tous les sous-agents.
  • CLAUDE_CODE_MAX_RETRIES : tentatives API maximales. Par défaut 10. Chaque tentative obtient sa propre fenêtre API_TIMEOUT_MS, donc le pire cas de temps mural est approximativement API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) plus le backoff.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS : chien de garde de blocage pour les sous-agents lancés avec run_in_background. Par défaut 600000. Réinitialise à chaque événement de flux ; en cas de blocage, il abandonne le sous-agent, marque la tâche comme échouée et expose l’erreur au parent avec tout résultat partiel. Ne s’applique pas aux sous-agents synchrones.
  • CLAUDE_ENABLE_STREAM_WATCHDOG=1 avec CLAUDE_STREAM_IDLE_TIMEOUT_MS : abandonne la requête quand les en-têtes sont arrivés mais que le corps de la réponse cesse de diffuser. Désactivé par défaut. CLAUDE_STREAM_IDLE_TIMEOUT_MS par défaut à 300000 et est limité à ce minimum. La requête abandonnée passe par le chemin de tentative normal.

Objet Query

Interface retournée par la fonction query().
interface Query extends AsyncGenerator<SDKMessage, void> {
  interrupt(): Promise<void>;
  rewindFiles(
    userMessageId: string,
    options?: { dryRun?: boolean }
  ): Promise<RewindFilesResult>;
  setPermissionMode(mode: PermissionMode): Promise<void>;
  setModel(model?: string): Promise<void>;
  setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;
  applyFlagSettings(settings: { [K in keyof Settings]?: Settings[K] | null }): Promise<void>;
  initializationResult(): Promise<SDKControlInitializeResponse>;
  supportedCommands(): Promise<SlashCommand[]>;
  supportedModels(): Promise<ModelInfo[]>;
  supportedAgents(): Promise<AgentInfo[]>;
  mcpServerStatus(): Promise<McpServerStatus[]>;
  accountInfo(): Promise<AccountInfo>;
  reconnectMcpServer(serverName: string): Promise<void>;
  toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;
  setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;
  streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;
  stopTask(taskId: string): Promise<void>;
  close(): void;
}

Méthodes

MéthodeDescription
interrupt()Interrompt la requête (disponible uniquement en mode d’entrée en diffusion)
rewindFiles(userMessageId, options?)Restaure les fichiers à leur état au message utilisateur spécifié. Passez { dryRun: true } pour prévisualiser les modifications. Nécessite enableFileCheckpointing: true. Voir Sauvegarde de fichiers
setPermissionMode()Change le mode de permission (disponible uniquement en mode d’entrée en diffusion)
setModel()Change le modèle (disponible uniquement en mode d’entrée en diffusion)
setMaxThinkingTokens()Déprécié : Utilisez l’option thinking à la place. Change les tokens de réflexion maximum
applyFlagSettings(settings)Fusionne les paramètres dans la couche de paramètres d’indicateur de la session à l’exécution (disponible uniquement en mode d’entrée en diffusion). Voir applyFlagSettings()
initializationResult()Retourne le résultat d’initialisation complet incluant les commandes prises en charge, les modèles, les informations de compte et la configuration du style de sortie
supportedCommands()Retourne les commandes slash disponibles
supportedModels()Retourne les modèles disponibles avec les informations d’affichage
supportedAgents()Retourne les sous-agents disponibles en tant que AgentInfo[]
mcpServerStatus()Retourne l’état des serveurs MCP connectés
accountInfo()Retourne les informations de compte
reconnectMcpServer(serverName)Reconnecter un serveur MCP par nom
toggleMcpServer(serverName, enabled)Activer ou désactiver un serveur MCP par nom
setMcpServers(servers)Remplacer dynamiquement l’ensemble des serveurs MCP pour cette session. Retourne des informations sur les serveurs ajoutés, supprimés et les erreurs
streamInput(stream)Diffuser les messages d’entrée vers la requête pour les conversations multi-tours
stopTask(taskId)Arrêter une tâche de fond en cours d’exécution par ID
close()Fermer la requête et terminer le processus sous-jacent. Termine de force la requête et nettoie toutes les ressources

applyFlagSettings()

Change n’importe quel paramètre sur une session en cours d’exécution sans redémarrer la requête. Utilisez-le quand un paramètre qui n’a pas de setter dédié doit changer en milieu de session, comme resserrer permissions après que l’agent ait 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 milieu de session :
  • Appliquées au tour suivant : model, effortLevel, ultracode, permissions, hooks, skillOverrides, fastMode, awaySummaryEnabled, agent. Basculer agent applique également le remplacement de modèle, les hooks et l’invite système de cet agent au tour suivant.
  • Aucun effet en milieu de session : les options d’invite système. Celles-ci sont résolues une fois au démarrage, donc la session en cours d’exécution conserve la valeur d’origine même si l’appel réussit. Pour les modifier, démarrez une nouvelle session.
Les valeurs sont écrites dans la couche de paramètres d’indicateur, la même couche que l’option settings en ligne de query() remplit au démarrage. Les paramètres d’indicateur se situent près du haut de l’ordre de précédence des paramètres : ils remplacent les paramètres utilisateur, projet et locaux, et seuls les paramètres de politique gérée peuvent les remplacer. C’est le même niveau que la section de précédence sur la page appelle les options programmatiques. Les appels successifs fusionnent superficiellement les clés de niveau supérieur. Un deuxième appel avec { permissions: {...} } remplace l’objet permissions entier de l’appel précédent plutôt que de le fusionner profondément. Pour effacer une clé de la couche d’indicateur et revenir aux sources de précédence inférieure, passez null pour cette clé. Passer undefined n’a aucun effet car la sérialisation JSON le supprime. Disponible uniquement en mode d’entrée en diffusion, la même contrainte que setModel() et setPermissionMode(). L’exemple ci-dessous bascule le modèle actif en milieu de session, puis efface le remplacement pour que le modèle revienne à ce que les paramètres utilisateur ou projet spécifient.
const q = query({ prompt: messageStream });

// Remplacer le modèle pour le reste de la session
await q.applyFlagSettings({ model: "claude-opus-4-6" });

// Plus tard : effacer le remplacement et revenir aux paramètres de précédence inférieure
await q.applyFlagSettings({ model: null });
applyFlagSettings() est TypeScript uniquement. Le SDK Python n’expose pas de méthode équivalente.

WarmQuery

Handle retourné par startup(). Le sous-processus est déjà généré et initialisé, donc appeler query() sur ce handle écrit l’invite directement dans un processus prêt sans latence de démarrage.
interface WarmQuery extends AsyncDisposable {
  query(prompt: string | AsyncIterable<SDKUserMessage>): Query;
  close(): void;
}

Méthodes

MéthodeDescription
query(prompt)Envoyer une invite au sous-processus préchauffé et retourner une Query. Ne peut être appelé qu’une fois par WarmQuery
close()Fermer le sous-processus sans envoyer d’invite. Utilisez ceci pour abandonner une requête chaude qui n’est plus nécessaire
WarmQuery implémente AsyncDisposable, il peut donc être utilisé avec await using pour le nettoyage automatique.

SDKControlInitializeResponse

Type de retour de initializationResult(). Contient les données d’initialisation de session.
type SDKControlInitializeResponse = {
  commands: SlashCommand[];
  agents: AgentInfo[];
  output_style: string;
  available_output_styles: string[];
  models: ModelInfo[];
  account: AccountInfo;
  fast_mode_state?: "off" | "cooldown" | "on";
};
Quand un client envoie initialize à une session qui est déjà en cours d’exécution, le wrapper de réponse de contrôle porte également un tableau pending_permission_requests optionnel. Le champ se trouve sur le wrapper de réponse lui-même, pas dans la charge utile SDKControlInitializeResponse ci-dessus. Chaque entrée est un message control_request complet avec la même forme { type: "control_request", request_id, request } que la session diffuse pour les demandes de permission lors de l’exécution. Ce sont des demandes qui ont été émises avant que le client se connecte et attendent toujours une réponse, donc lisez ce tableau pour afficher immédiatement les invites de permission en vol ; elles ne seront pas renvoyées.

AgentDefinition

Configuration pour un sous-agent défini par programmation.
type AgentDefinition = {
  description: string;
  tools?: string[];
  disallowedTools?: string[];
  prompt: string;
  model?: string;
  mcpServers?: AgentMcpServerSpec[];
  skills?: string[];
  initialPrompt?: string;
  maxTurns?: number;
  background?: boolean;
  memory?: "user" | "project" | "local";
  effort?: "low" | "medium" | "high" | "xhigh" | "max" | number;
  permissionMode?: PermissionMode;
  criticalSystemReminder_EXPERIMENTAL?: string;
};
ChampRequisDescription
descriptionOuiDescription en langage naturel de quand utiliser cet agent
toolsNonTableau de noms d’outils autorisés. S’il est omis, hérite tous les outils du parent. Pour précharger les compétences dans le contexte de l’agent, utilisez le champ skills plutôt que de lister 'Skill' ici
disallowedToolsNonTableau de noms d’outils à explicitement interdire pour cet agent
promptOuiL’invite système de l’agent
modelNonRemplacement de modèle pour cet agent. Accepte un alias tel que 'sonnet', 'opus', 'haiku', 'inherit', ou un ID de modèle complet. S’il est omis ou 'inherit', utilise le modèle principal
mcpServersNonSpécifications de serveur MCP pour cet agent
skillsNonTableau de noms de compétences à précharger dans le contexte de l’agent
initialPromptNonAuto-soumis comme le premier tour utilisateur quand cet agent s’exécute en tant qu’agent du thread principal
maxTurnsNonNombre maximum de tours agentiques (allers-retours API) avant arrêt
backgroundNonExécuter cet agent en tant que tâche de fond non-bloquante quand invoqué
memoryNonSource de mémoire pour cet agent : 'user', 'project', ou 'local'
effortNonNiveau d’effort de raisonnement pour cet agent. Accepte un niveau nommé ou un entier
permissionModeNonMode de permission pour l’exécution des outils dans cet agent. Voir PermissionMode
criticalSystemReminder_EXPERIMENTALNonExpérimental : Rappel critique ajouté à l’invite système

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 une configuration de serveur en ligne enregistrant les noms de serveur aux configurations.
type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;
McpServerConfigForProcessTransport est McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.

SettingSource

Contrôle les sources de configuration basées sur le système de fichiers que le SDK charge les paramètres à partir de.
type SettingSource = "user" | "project" | "local";
ValeurDescriptionEmplacement
'user'Paramètres utilisateur globaux~/.claude/settings.json
'project'Paramètres de projet partagés (contrôle de version).claude/settings.json
'local'Paramètres de projet locaux (gitignorés).claude/settings.local.json

Comportement par défaut

Quand settingSources 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. Les paramètres de politique gérée sont chargés dans tous les cas. Voir Ce que settingSources ne contrôle pas pour les entrées qui sont lues indépendamment de cette option, et comment les désactiver.

Pourquoi utiliser settingSources

Désactiver les paramètres du système de fichiers :
// Ne pas charger les paramètres utilisateur, projet ou locaux à partir du disque
const result = query({
  prompt: "Analyze this code",
  options: { settingSources: [] }
});
Charger tous les paramètres du système de fichiers explicitement :
const result = query({
  prompt: "Analyze this code",
  options: {
    settingSources: ["user", "project", "local"] // Charger tous les paramètres
  }
});
Charger uniquement des sources de paramètres spécifiques :
// Charger uniquement les paramètres de projet, ignorer utilisateur et local
const result = query({
  prompt: "Run CI checks",
  options: {
    settingSources: ["project"] // Uniquement .claude/settings.json
  }
});
Environnements de test et CI :
// Assurer un comportement cohérent en CI en excluant les paramètres locaux
const result = query({
  prompt: "Run tests",
  options: {
    settingSources: ["project"], // Uniquement les paramètres partagés par l'équipe
    permissionMode: "bypassPermissions"
  }
});
Applications SDK uniquement :
// Définir tout par programmation.
// Passez [] pour refuser les sources de paramètres du système de fichiers.
const result = query({
  prompt: "Review this PR",
  options: {
    settingSources: [],
    agents: {
      /* ... */
    },
    mcpServers: {
      /* ... */
    },
    allowedTools: ["Read", "Grep", "Glob"]
  }
});
Chargement des instructions de projet CLAUDE.md :
// Charger les paramètres de projet pour inclure les fichiers CLAUDE.md
const result = query({
  prompt: "Add a new feature following project conventions",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code" // Utiliser l'invite système de Claude Code
    },
    settingSources: ["project"], // Charge CLAUDE.md du répertoire de projet
    allowedTools: ["Read", "Write", "Edit"]
  }
});

Précédence des paramètres

Quand plusieurs sources sont chargées, les paramètres sont fusionnés avec cette précédence (la plus haute à la plus basse) :
  1. Paramètres locaux (.claude/settings.local.json)
  2. Paramètres de projet (.claude/settings.json)
  3. Paramètres utilisateur (~/.claude/settings.json)
Les options programmatiques telles que agents, allowedTools, et settings remplacent les paramètres du système de fichiers utilisateur, projet et local. Les paramètres de politique gérée ont la priorité sur les options programmatiques.

PermissionMode

type PermissionMode =
  | "default" // Comportement de permission standard
  | "acceptEdits" // Accepter automatiquement les modifications de fichiers
  | "bypassPermissions" // Contourner tous les contrôles de permission
  | "plan" // Mode de planification - outils en lecture seule uniquement
  | "dontAsk" // Ne pas demander les permissions, refuser si non pré-approuvé
  | "auto"; // Utiliser un classificateur de modèle pour approuver ou refuser chaque appel d'outil

CanUseTool

Type de fonction de permission personnalisée pour contrôler l’utilisation des outils.
type CanUseTool = (
  toolName: string,
  input: Record<string, unknown>,
  options: {
    signal: AbortSignal;
    suggestions?: PermissionUpdate[];
    blockedPath?: string;
    decisionReason?: string;
    toolUseID: string;
    agentID?: string;
  }
) => Promise<PermissionResult>;
OptionTypeDescription
signalAbortSignalSignalé si l’opération doit être abandonnée
suggestionsPermissionUpdate[]Mises à jour de permission suggérées pour que l’utilisateur ne soit pas invité à nouveau pour cet outil. Les invites Bash incluent une suggestion avec la destination localSettings, donc retourner dans updatedPermissions écrit la règle à .claude/settings.local.json et persiste entre les sessions.
blockedPathstringLe chemin de fichier qui a déclenché la demande de permission, le cas échéant
decisionReasonstringExplique pourquoi cette demande de permission a été déclenchée
toolUseIDstringIdentifiant unique pour cet appel d’outil spécifique dans le message assistant
agentIDstringSi exécuté dans un sous-agent, l’ID du sous-agent

PermissionResult

Résultat d’une vérification de permission.
type PermissionResult =
  | {
      behavior: "allow";
      updatedInput?: Record<string, unknown>;
      updatedPermissions?: PermissionUpdate[];
      toolUseID?: string;
    }
  | {
      behavior: "deny";
      message: string;
      interrupt?: boolean;
      toolUseID?: string;
    };

ToolConfig

Configuration pour le comportement des outils intégrés.
type ToolConfig = {
  askUserQuestion?: {
    previewFormat?: "markdown" | "html";
  };
};
ChampTypeDescription
askUserQuestion.previewFormat'markdown' | 'html'Accepte le champ preview sur les options AskUserQuestion et définit son format de contenu. Lorsqu’il n’est pas défini, Claude n’émet pas de prévisualisations

McpServerConfig

Configuration pour les serveurs MCP.
type McpServerConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfigWithInstance;

McpStdioServerConfig

type McpStdioServerConfig = {
  type?: "stdio";
  command: string;
  args?: string[];
  env?: Record<string, string>;
};

McpSSEServerConfig

type McpSSEServerConfig = {
  type: "sse";
  url: string;
  headers?: Record<string, string>;
};

McpHttpServerConfig

type McpHttpServerConfig = {
  type: "http";
  url: string;
  headers?: Record<string, string>;
};

McpSdkServerConfigWithInstance

type McpSdkServerConfigWithInstance = {
  type: "sdk";
  name: string;
  instance: McpServer;
};

McpClaudeAIProxyServerConfig

type McpClaudeAIProxyServerConfig = {
  type: "claudeai-proxy";
  url: string;
  id: string;
};

SdkPluginConfig

Configuration pour charger les plugins dans le SDK.
type SdkPluginConfig = {
  type: "local";
  path: string;
};
ChampTypeDescription
type'local'Doit être 'local' (seuls les plugins locaux sont actuellement pris en charge)
pathstringChemin absolu ou relatif au répertoire du plugin
Exemple :
plugins: [
  { type: "local", path: "./my-plugin" },
  { type: "local", path: "/absolute/path/to/plugin" }
];
Pour des informations complètes sur la création et l’utilisation de plugins, voir Plugins.

Types de messages

SDKMessage

Type union de tous les messages possibles retournés par la requête.
type SDKMessage =
  | SDKAssistantMessage
  | SDKUserMessage
  | SDKUserMessageReplay
  | SDKResultMessage
  | SDKSystemMessage
  | SDKPartialAssistantMessage
  | SDKCompactBoundaryMessage
  | SDKStatusMessage
  | SDKLocalCommandOutputMessage
  | SDKHookStartedMessage
  | SDKHookProgressMessage
  | SDKHookResponseMessage
  | SDKPluginInstallMessage
  | SDKToolProgressMessage
  | SDKAuthStatusMessage
  | SDKTaskNotificationMessage
  | SDKTaskStartedMessage
  | SDKTaskProgressMessage
  | SDKTaskUpdatedMessage
  | SDKSessionStateChangedMessage
  | SDKCommandsChangedMessage
  | SDKNotificationMessage
  | SDKFilesPersistedEvent
  | SDKToolUseSummaryMessage
  | SDKMemoryRecallMessage
  | SDKRateLimitEvent
  | SDKElicitationCompleteMessage
  | SDKPermissionDeniedMessage
  | SDKPromptSuggestionMessage
  | SDKAPIRetryMessage
  | SDKMirrorErrorMessage;

SDKAssistantMessage

Message de réponse assistant.
type SDKAssistantMessage = {
  type: "assistant";
  uuid: UUID;
  session_id: string;
  message: BetaMessage; // Du SDK Anthropic
  parent_tool_use_id: string | null;
  error?: SDKAssistantMessageError;
};
Le champ message est un BetaMessage du SDK Anthropic. Il inclut des champs comme id, content, model, stop_reason et usage. SDKAssistantMessageError est l’un de : 'authentication_failed', 'oauth_org_not_allowed', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens' ou 'unknown'. 'model_not_found' signifie que le modèle sélectionné n’existe pas ou n’est pas disponible pour votre compte ou déploiement. 'overloaded' signifie que l’API a retourné un 529 parce que le serveur est à pleine capacité, par opposition à 'rate_limit', qui est un 429 contre votre quota.

SDKUserMessage

Message d’entrée utilisateur.
type SDKUserMessage = {
  type: "user";
  uuid?: UUID;
  session_id?: string;
  message: MessageParam; // Du SDK Anthropic
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  shouldQuery?: boolean;
  tool_use_result?: unknown;
  origin?: SDKMessageOrigin;
};
Définissez shouldQuery sur false pour ajouter le message à la transcription sans déclencher un tour 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 en dehors de la bande, sans dépenser un appel de modèle.

SDKUserMessageReplay

Message utilisateur rejoué avec UUID requis.
type SDKUserMessageReplay = {
  type: "user";
  uuid: UUID;
  session_id: string;
  message: MessageParam;
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  tool_use_result?: unknown;
  origin?: SDKMessageOrigin;
  isReplay: true;
};

SDKResultMessage

Message de résultat final.
type SDKResultMessage =
  | {
      type: "result";
      subtype: "success";
      uuid: UUID;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      api_error_status?: number | null;
      num_turns: number;
      result: string;
      stop_reason: string | null;
      ttft_ms?: number;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      structured_output?: unknown;
      deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };
      terminal_reason?: TerminalReason;
      fast_mode_state?: FastModeState;
      origin?: SDKMessageOrigin;
    }
  | {
      type: "result";
      subtype:
        | "error_max_turns"
        | "error_during_execution"
        | "error_max_budget_usd"
        | "error_max_structured_output_retries";
      uuid: UUID;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      num_turns: number;
      stop_reason: string | null;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      errors: string[];
      terminal_reason?: TerminalReason;
      fast_mode_state?: FastModeState;
      origin?: SDKMessageOrigin;
    };
Plusieurs champs du résultat portent des détails diagnostiques au-delà du subtype :
  • api_error_status : le code de statut HTTP de l’erreur API qui a terminé la conversation. Absent ou null quand le tour s’est terminé sans erreur API.
  • ttft_ms : temps jusqu’au premier jeton en millisecondes. Présent uniquement sur le bras de succès.
  • 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", "blocking_limit", "rapid_refill_breaker", "prompt_too_long", "image_error" ou "model_error".
  • fast_mode_state : l’un de "on", "off" ou "cooldown".
Le champ origin transmet le SDKMessageOrigin du message utilisateur qui a déclenché ce résultat. Quand une tâche de fond se termine et que le SDK injecte un tour de suivi synthétique, le SDKResultMessage résultant porte origin: { kind: "task-notification" }. Vérifiez ce champ pour distinguer les résultats qui répondent à votre invite des résultats émis pour les suivis de tâches de fond, afin que vous puissiez acheminer ou supprimer ces derniers. 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. Consultez Différer un appel d’outil pour plus tard pour le trajet complet.

SDKSystemMessage

Message d’initialisation système.
type SDKSystemMessage = {
  type: "system";
  subtype: "init";
  uuid: UUID;
  session_id: string;
  agents?: string[];
  apiKeySource: ApiKeySource;
  betas?: string[];
  claude_code_version: string;
  cwd: string;
  tools: string[];
  mcp_servers: {
    name: string;
    status: string;
  }[];
  model: string;
  permissionMode: PermissionMode;
  slash_commands: string[];
  output_style: string;
  skills: string[];
  plugins: { name: string; path: string }[];
};

SDKPartialAssistantMessage

Message partiel en diffusion (uniquement quand includePartialMessages est true).
type SDKPartialAssistantMessage = {
  type: "stream_event";
  event: BetaRawMessageStreamEvent; // Du SDK Anthropic
  parent_tool_use_id: string | null;
  uuid: UUID;
  session_id: string;
};

SDKCompactBoundaryMessage

Message indiquant une limite de compaction de conversation.
type SDKCompactBoundaryMessage = {
  type: "system";
  subtype: "compact_boundary";
  uuid: UUID;
  session_id: string;
  compact_metadata: {
    trigger: "manual" | "auto";
    pre_tokens: number;
  };
};

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 du plugin de marketplace avant le premier tour. Les statuts started et completed encadrent l’installation globale. Les statuts installed et failed rapportent les marchés individuels et incluent name.
type SDKPluginInstallMessage = {
  type: "system";
  subtype: "plugin_install";
  status: "started" | "installed" | "failed" | "completed";
  name?: string;
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKPermissionDeniedMessage

Événement de flux émis quand le système de permissions refuse automatiquement un appel d’outil sans invite interactive. Utilisez-le pour afficher le refus dans votre interface utilisateur au fur et à mesure, plutôt que d’observer uniquement le résultat d’outil is_error qui suit. Le chemin de demande interactive atteint votre application séparément via le callback canUseTool. Les refus émis par un hook PreToolUse ne sont pas signalés via cet événement. Cet événement nécessite Claude Code v2.1.136 ou ultérieur.
type SDKPermissionDeniedMessage = {
  type: "system";
  subtype: "permission_denied";
  tool_name: string;
  tool_use_id: string;
  agent_id?: string;
  decision_reason_type?: string;
  decision_reason?: string;
  message: string;
  uuid: UUID;
  session_id: string;
};
ChampTypeDescription
tool_namestringNom de l’outil qui a été refusé
tool_use_idstringID du bloc tool_use auquel ce refus répond
agent_idstringID du sous-agent quand l’appel refusé provient d’un sous-agent. Reflète le champ sur can_use_tool pour l’acheminement côté hôte
decision_reason_typestringDiscriminateur du composant qui a décidé, tel que "rule", "mode", "classifier" ou "asyncAgent"
decision_reasonstringRaison lisible par l’homme du composant décideur, quand disponible
messagestringMessage de rejet retourné au modèle dans le tool_result

SDKPermissionDenial

Informations sur une utilisation d’outil refusée.
type SDKPermissionDenial = {
  tool_name: string;
  tool_use_id: string;
  tool_input: Record<string, unknown>;
};

SDKMessageOrigin

Provenance d’un message de rôle utilisateur. Ceci apparaît comme origin sur SDKUserMessage et est transmis au SDKResultMessage correspondant afin que vous puissiez dire ce qui a déclenché un tour donné.
type SDKMessageOrigin =
  | { kind: "human" }
  | { kind: "channel"; server: string }
  | { kind: "peer"; from: string; name?: string }
  | { kind: "task-notification" }
  | { kind: "coordinator" };
kindSignification
humanEntrée directe de l’utilisateur final. Sur les messages utilisateur, une origin absente signifie également une entrée humaine.
channelMessage arrivant sur un canal. server est le nom du serveur MCP source.
peerMessage d’une autre session d’agent via SendMessage. from est l’adresse de l’expéditeur ; name est le nom d’affichage de l’expéditeur quand disponible.
task-notificationTour synthétique injecté après la fin d’une tâche de fond. Voir SDKTaskNotificationMessage.
coordinatorMessage d’un coordinateur d’équipe dans une équipe d’agents.

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.
type HookEvent =
  | "PreToolUse"
  | "PostToolUse"
  | "PostToolUseFailure"
  | "PostToolBatch"
  | "Notification"
  | "UserPromptSubmit"
  | "SessionStart"
  | "SessionEnd"
  | "Stop"
  | "SubagentStart"
  | "SubagentStop"
  | "PreCompact"
  | "PermissionRequest"
  | "Setup"
  | "TeammateIdle"
  | "TaskCompleted"
  | "ConfigChange"
  | "WorktreeCreate"
  | "WorktreeRemove"
  | "MessageDisplay";

HookCallback

Type de fonction de rappel de hook.
type HookCallback = (
  input: HookInput, // Union de tous les types d'entrée de hook
  toolUseID: string | undefined,
  options: { signal: AbortSignal }
) => Promise<HookJSONOutput>;

HookCallbackMatcher

Configuration de hook avec matcher optionnel.
interface HookCallbackMatcher {
  matcher?: string;
  hooks: HookCallback[];
  timeout?: number; // Délai d'expiration en secondes pour tous les hooks dans ce matcher
}

HookInput

Type union de tous les types d’entrée de hook.
type HookInput =
  | PreToolUseHookInput
  | PostToolUseHookInput
  | PostToolUseFailureHookInput
  | PostToolBatchHookInput
  | NotificationHookInput
  | UserPromptSubmitHookInput
  | SessionStartHookInput
  | SessionEndHookInput
  | StopHookInput
  | SubagentStartHookInput
  | SubagentStopHookInput
  | PreCompactHookInput
  | PermissionRequestHookInput
  | SetupHookInput
  | TeammateIdleHookInput
  | TaskCompletedHookInput
  | ConfigChangeHookInput
  | WorktreeCreateHookInput
  | WorktreeRemoveHookInput
  | MessageDisplayHookInput;

BaseHookInput

Interface de base que tous les types d’entrée de hook étendent.
type BaseHookInput = {
  session_id: string;
  transcript_path: string;
  cwd: string;
  permission_mode?: string;
  effort?: { level: string };
  agent_id?: string;
  agent_type?: string;
};

PreToolUseHookInput

type PreToolUseHookInput = BaseHookInput & {
  hook_event_name: "PreToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
};

PostToolUseHookInput

type PostToolUseHookInput = BaseHookInput & {
  hook_event_name: "PostToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_response: unknown;
  tool_use_id: string;
  duration_ms?: number;
};

PostToolUseFailureHookInput

type PostToolUseFailureHookInput = BaseHookInput & {
  hook_event_name: "PostToolUseFailure";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
  error: string;
  is_interrupt?: boolean;
  duration_ms?: number;
};

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.
type PostToolBatchHookInput = BaseHookInput & {
  hook_event_name: "PostToolBatch";
  tool_calls: PostToolBatchToolCall[];
};

type PostToolBatchToolCall = {
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
  tool_response?: unknown;
};

NotificationHookInput

type NotificationHookInput = BaseHookInput & {
  hook_event_name: "Notification";
  message: string;
  title?: string;
  notification_type: string;
};

UserPromptSubmitHookInput

type UserPromptSubmitHookInput = BaseHookInput & {
  hook_event_name: "UserPromptSubmit";
  prompt: string;
};

SessionStartHookInput

type SessionStartHookInput = BaseHookInput & {
  hook_event_name: "SessionStart";
  source: "startup" | "resume" | "clear" | "compact";
  agent_type?: string;
  model?: string;
};

SessionEndHookInput

type SessionEndHookInput = BaseHookInput & {
  hook_event_name: "SessionEnd";
  reason: ExitReason; // Chaîne du tableau EXIT_REASONS
};

StopHookInput

type StopHookInput = BaseHookInput & {
  hook_event_name: "Stop";
  stop_hook_active: boolean;
  last_assistant_message?: string;
  background_tasks?: BackgroundTaskSummary[];
  session_crons?: SessionCronSummary[];
};

SubagentStartHookInput

type SubagentStartHookInput = BaseHookInput & {
  hook_event_name: "SubagentStart";
  agent_id: string;
  agent_type: string;
};

SubagentStopHookInput

type SubagentStopHookInput = BaseHookInput & {
  hook_event_name: "SubagentStop";
  stop_hook_active: boolean;
  agent_id: string;
  agent_transcript_path: string;
  agent_type: string;
  last_assistant_message?: string;
  background_tasks?: BackgroundTaskSummary[];
  session_crons?: SessionCronSummary[];
};

type BackgroundTaskSummary = {
  id: string;
  type: string;
  status: string;
  description: string;
  command?: string;
  agent_type?: string;
  server?: string;
  tool?: string;
  name?: string;
};

type SessionCronSummary = {
  id: string;
  schedule: string;
  recurring: boolean;
  prompt: string;
};

PreCompactHookInput

type PreCompactHookInput = BaseHookInput & {
  hook_event_name: "PreCompact";
  trigger: "manual" | "auto";
  custom_instructions: string | null;
};

PermissionRequestHookInput

type PermissionRequestHookInput = BaseHookInput & {
  hook_event_name: "PermissionRequest";
  tool_name: string;
  tool_input: unknown;
  permission_suggestions?: PermissionUpdate[];
};

SetupHookInput

type SetupHookInput = BaseHookInput & {
  hook_event_name: "Setup";
  trigger: "init" | "maintenance";
};

TeammateIdleHookInput

type TeammateIdleHookInput = BaseHookInput & {
  hook_event_name: "TeammateIdle";
  teammate_name: string;
  team_name: string;
};

TaskCompletedHookInput

type TaskCompletedHookInput = BaseHookInput & {
  hook_event_name: "TaskCompleted";
  task_id: string;
  task_subject: string;
  task_description?: string;
  teammate_name?: string;
  team_name?: string;
};

ConfigChangeHookInput

type ConfigChangeHookInput = BaseHookInput & {
  hook_event_name: "ConfigChange";
  source:
    | "user_settings"
    | "project_settings"
    | "local_settings"
    | "policy_settings"
    | "skills";
  file_path?: string;
};

WorktreeCreateHookInput

type WorktreeCreateHookInput = BaseHookInput & {
  hook_event_name: "WorktreeCreate";
  name: string;
};

WorktreeRemoveHookInput

type WorktreeRemoveHookInput = BaseHookInput & {
  hook_event_name: "WorktreeRemove";
  worktree_path: string;
};

MessageDisplayHookInput

type MessageDisplayHookInput = BaseHookInput & {
  hook_event_name: "MessageDisplay";
  turn_id: string;
  message_id: string;
  index: number;
  final: boolean;
  delta: string;
};

HookJSONOutput

Valeur de retour du hook.
type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;

AsyncHookJSONOutput

type AsyncHookJSONOutput = {
  async: true;
  asyncTimeout?: number;
};

SyncHookJSONOutput

type SyncHookJSONOutput = {
  continue?: boolean;
  suppressOutput?: boolean;
  stopReason?: string;
  decision?: "approve" | "block";
  systemMessage?: string;
  reason?: string;
  hookSpecificOutput?:
    | {
        hookEventName: "PreToolUse";
        permissionDecision?: "allow" | "deny" | "ask" | "defer";
        permissionDecisionReason?: string;
        updatedInput?: Record<string, unknown>;
        additionalContext?: string;
      }
    | {
        hookEventName: "UserPromptSubmit";
        additionalContext?: string;
      }
    | {
        hookEventName: "SessionStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "Setup";
        additionalContext?: string;
      }
    | {
        hookEventName: "SubagentStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "PostToolUse";
        additionalContext?: string;
        updatedToolOutput?: unknown;
        /** @deprecated Utilisez `updatedToolOutput`, qui fonctionne pour tous les outils. */
        updatedMCPToolOutput?: unknown;
      }
    | {
        hookEventName: "PostToolUseFailure";
        additionalContext?: string;
      }
    | {
        hookEventName: "PostToolBatch";
        additionalContext?: string;
      }
    | {
        hookEventName: "Notification";
        additionalContext?: string;
      }
    | {
        hookEventName: "PermissionRequest";
        decision:
          | {
              behavior: "allow";
              updatedInput?: Record<string, unknown>;
              updatedPermissions?: PermissionUpdate[];
            }
          | {
              behavior: "deny";
              message?: string;
              interrupt?: boolean;
            };
      };
};

Types d’entrée d’outil

Documentation des schémas d’entrée pour tous les outils Claude Code intégrés. Ces types sont exportés depuis @anthropic-ai/claude-agent-sdk et peuvent être utilisés pour les interactions d’outils type-safe.

ToolInputSchemas

Union de tous les types d’entrée d’outil, exportée depuis @anthropic-ai/claude-agent-sdk.
type ToolInputSchemas =
  | AgentInput
  | AskUserQuestionInput
  | BashInput
  | TaskOutputInput
  | EnterWorktreeInput
  | ExitPlanModeInput
  | FileEditInput
  | FileReadInput
  | FileWriteInput
  | GlobInput
  | GrepInput
  | ListMcpResourcesInput
  | McpInput
  | MonitorInput
  | NotebookEditInput
  | ReadMcpResourceInput
  | SubscribeMcpResourceInput
  | SubscribePollingInput
  | TaskCreateInput
  | TaskGetInput
  | TaskListInput
  | TaskStopInput
  | TaskUpdateInput
  | TodoWriteInput
  | UnsubscribeMcpResourceInput
  | UnsubscribePollingInput
  | WebFetchInput
  | WebSearchInput
  | WorkflowInput;

Agent

Nom de l’outil : Agent (précédemment Task, qui est toujours accepté comme alias)
type AgentInput = {
  description: string;
  prompt: string;
  subagent_type: string;
  model?: "sonnet" | "opus" | "haiku";
  resume?: string;
  run_in_background?: boolean;
  max_turns?: number;
  name?: string;
  team_name?: string;
  mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";
  isolation?: "worktree";
};
Lance un nouvel agent pour gérer les tâches complexes et multi-étapes de manière autonome.

AskUserQuestion

Nom de l’outil : AskUserQuestion
type AskUserQuestionInput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
};
Pose des questions de clarification à l’utilisateur pendant l’exécution. Voir Gérer les approbations et l’entrée utilisateur pour les détails d’utilisation.

Bash

Nom de l’outil : Bash
type BashInput = {
  command: string;
  timeout?: number;
  description?: string;
  run_in_background?: boolean;
  dangerouslyDisableSandbox?: boolean;
};
Exécute les commandes bash dans une session shell persistante avec délai d’expiration optionnel et exécution en arrière-plan.

Monitor

Nom de l’outil : Monitor
type MonitorInput = {
  command: string;
  description: string;
  timeout_ms?: number;
  persistent?: boolean;
};
Exécute un script de fond et livre chaque ligne stdout à Claude en tant qu’événement pour qu’il puisse réagir sans interrogation. Définissez persistent: true pour les montres de longueur de session telles que les queues de journal. Monitor suit les mêmes règles de permission que Bash. Voir la référence de l’outil Monitor pour le comportement et la disponibilité du fournisseur.

TaskOutput

Nom de l’outil : TaskOutput
type TaskOutputInput = {
  task_id: string;
  block: boolean;
  timeout: number;
};
Récupère la sortie d’une tâche de fond en cours d’exécution ou terminée.

Edit

Nom de l’outil : Edit
type FileEditInput = {
  file_path: string;
  old_string: string;
  new_string: string;
  replace_all?: boolean;
};
Effectue des remplacements de chaînes exacts dans les fichiers.

Read

Nom de l’outil : Read
type FileReadInput = {
  file_path: string;
  offset?: number;
  limit?: number;
  pages?: string;
};
Lit les fichiers du système de fichiers local, y compris le texte, les images, les PDF et les carnets Jupyter. Utilisez pages pour les plages de pages PDF (par exemple, "1-5").

Write

Nom de l’outil : Write
type FileWriteInput = {
  file_path: string;
  content: string;
};
Écrit un fichier dans le système de fichiers local, en écrasant s’il existe.

Glob

Nom de l’outil : Glob
type GlobInput = {
  pattern: string;
  path?: string;
};
Correspondance de motif de fichier rapide qui fonctionne avec n’importe quelle taille de base de code.

Grep

Nom de l’outil : Grep
type GrepInput = {
  pattern: string;
  path?: string;
  glob?: string;
  type?: string;
  output_mode?: "content" | "files_with_matches" | "count";
  "-i"?: boolean;
  "-n"?: boolean;
  "-B"?: number;
  "-A"?: number;
  "-C"?: number;
  context?: number;
  head_limit?: number;
  offset?: number;
  multiline?: boolean;
};
Outil de recherche puissant construit sur ripgrep avec support regex.

TaskStop

Nom de l’outil : TaskStop
type TaskStopInput = {
  task_id?: string;
  shell_id?: string; // Déprécié : utilisez task_id
};
Arrête une tâche de fond en cours d’exécution ou un shell par ID.

NotebookEdit

Nom de l’outil : NotebookEdit
type NotebookEditInput = {
  notebook_path: string;
  cell_id?: string;
  new_source: string;
  cell_type?: "code" | "markdown";
  edit_mode?: "replace" | "insert" | "delete";
};
Édite les cellules dans les fichiers de carnet Jupyter.

WebFetch

Nom de l’outil : WebFetch
type WebFetchInput = {
  url: string;
  prompt: string;
};
Récupère le contenu d’une URL et le traite avec un modèle IA.

WebSearch

Nom de l’outil : WebSearch
type WebSearchInput = {
  query: string;
  allowed_domains?: string[];
  blocked_domains?: string[];
};
Recherche le web et retourne les résultats formatés.

Workflow

Nom de l’outil : Workflow
type WorkflowInput = {
  script?: string;
  name?: string;
  scriptPath?: string;
  args?: unknown;
  resumeFromRunId?: string;
};
Exécute un flux de travail dynamique : un script qui orchestre de nombreux sous-agents en arrière-plan et retourne un résultat consolidé. L’outil Workflow est disponible dans Agent SDK v0.3.149 et versions ultérieures. Au moins l’un de script, name ou scriptPath est requis.
ChampTypeDescription
scriptstringScript de flux de travail en ligne. Doit commencer par export const meta = { name, description, phases } comme littéral, suivi du corps du script utilisant agent(), parallel(), pipeline() et phase()
namestringNom d’un flux de travail intégré ou d’un flux de travail enregistré dans .claude/workflows/. Résolu en script
scriptPathstringChemin vers un fichier de script de flux de travail sur le disque. Prend la priorité sur script et name. Chaque invocation persiste son script et retourne le chemin dans le résultat, afin que vous puissiez éditer ce fichier et réinvoquer avec le même scriptPath pour itérer
argsunknownValeur d’entrée exposée au script en tant que args global, pour les flux de travail nommés paramétrés tels qu’une question de recherche ou une liste de chemins de fichiers. Passez les tableaux et les objets comme des valeurs JSON réelles, pas comme une chaîne codée en JSON
resumeFromRunIdstringID d’exécution d’une invocation Workflow antérieure à reprendre. Les appels agent() complétés avec des entrées inchangées retournent les résultats en cache ; seuls les appels modifiés ou nouveaux s’exécutent en direct. Même session uniquement

TodoWrite

Nom de l’outil : TodoWrite
type TodoWriteInput = {
  todos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
Crée et gère une liste de tâches structurée pour suivre la progression.
À partir du TypeScript Agent SDK 0.3.142, TodoWrite est désactivé par défaut. Utilisez TaskCreate, TaskGet, TaskUpdate et TaskList à la place. Voir Migrer vers les outils Task pour mettre à jour votre code de surveillance, ou définissez CLAUDE_CODE_ENABLE_TASKS=0 pour revenir à TodoWrite.

TaskCreate

Nom de l’outil : TaskCreate
type TaskCreateInput = {
  subject: string;
  description: string;
  activeForm?: string;
  metadata?: Record<string, unknown>;
};
Crée une seule tâche et retourne son ID assigné.

TaskUpdate

Nom de l’outil : TaskUpdate
type TaskUpdateInput = {
  taskId: string;
  status?: "pending" | "in_progress" | "completed" | "deleted";
  subject?: string;
  description?: string;
  activeForm?: string;
  addBlocks?: string[];
  addBlockedBy?: string[];
  owner?: string;
  metadata?: Record<string, unknown>;
};
Corrige une tâche par ID. Définissez status à "deleted" pour la supprimer.

TaskGet

Nom de l’outil : TaskGet
type TaskGetInput = {
  taskId: string;
};
Retourne les détails complets d’une tâche, ou null lorsque l’ID n’est pas trouvé.

TaskList

Nom de l’outil : TaskList
type TaskListInput = {};
Retourne un instantané de toutes les tâches dans la liste actuelle.

ExitPlanMode

Nom de l’outil : ExitPlanMode
type ExitPlanModeInput = {
  allowedPrompts?: Array<{
    tool: "Bash";
    prompt: string;
  }>;
};
Quitte le mode de planification. Spécifie éventuellement les permissions basées sur les invites nécessaires pour implémenter le plan.

ListMcpResources

Nom de l’outil : ListMcpResourcesTool
type ListMcpResourcesInput = {
  server?: string;
};
Répertorie les ressources MCP disponibles à partir des serveurs connectés.

ReadMcpResource

Nom de l’outil : ReadMcpResourceTool
type ReadMcpResourceInput = {
  server: string;
  uri: string;
};
Lit une ressource MCP spécifique à partir d’un serveur.

EnterWorktree

Nom de l’outil : EnterWorktree
type EnterWorktreeInput = {
  name?: string;
  path?: string;
};
Crée et entre dans un worktree git temporaire pour un travail isolé. Passez path pour basculer dans un worktree existant du référentiel actuel au lieu d’en créer un nouveau. name et path s’excluent mutuellement.

Types de sortie d’outil

Documentation des schémas de sortie pour tous les outils Claude Code intégrés. Ces types sont exportés depuis @anthropic-ai/claude-agent-sdk et représentent les données de réponse réelles retournées par chaque outil.

ToolOutputSchemas

Union de tous les types de sortie d’outil.
type ToolOutputSchemas =
  | AgentOutput
  | AskUserQuestionOutput
  | BashOutput
  | EnterWorktreeOutput
  | ExitPlanModeOutput
  | FileEditOutput
  | FileReadOutput
  | FileWriteOutput
  | GlobOutput
  | GrepOutput
  | ListMcpResourcesOutput
  | MonitorOutput
  | NotebookEditOutput
  | ReadMcpResourceOutput
  | TaskCreateOutput
  | TaskGetOutput
  | TaskListOutput
  | TaskStopOutput
  | TaskUpdateOutput
  | TodoWriteOutput
  | WebFetchOutput
  | WebSearchOutput
  | WorkflowOutput;

Agent

Nom de l’outil : Agent (précédemment Task, qui est toujours accepté comme alias)
type AgentOutput =
  | {
      status: "completed";
      agentId: string;
      content: Array<{ type: "text"; text: string }>;
      totalToolUseCount: number;
      totalDurationMs: number;
      totalTokens: number;
      usage: {
        input_tokens: number;
        output_tokens: number;
        cache_creation_input_tokens: number | null;
        cache_read_input_tokens: number | null;
        server_tool_use: {
          web_search_requests: number;
          web_fetch_requests: number;
        } | null;
        service_tier: ("standard" | "priority" | "batch") | null;
        cache_creation: {
          ephemeral_1h_input_tokens: number;
          ephemeral_5m_input_tokens: number;
        } | null;
      };
      prompt: string;
    }
  | {
      status: "async_launched";
      agentId: string;
      description: string;
      prompt: string;
      outputFile: string;
      canReadOutputFile?: boolean;
    }
  | {
      status: "sub_agent_entered";
      description: string;
      message: string;
    };
Retourne le résultat du sous-agent. Discriminé sur le champ status : "completed" pour les tâches terminées, "async_launched" pour les tâches de fond et "sub_agent_entered" pour les sous-agents interactifs.

AskUserQuestion

Nom de l’outil : AskUserQuestion
type AskUserQuestionOutput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
  answers: Record<string, string>;
  response?: string;
};
Retourne les questions posées et les réponses de l’utilisateur. 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
type BashOutput = {
  stdout: string;
  stderr: string;
  rawOutputPath?: string;
  interrupted: boolean;
  isImage?: boolean;
  backgroundTaskId?: string;
  backgroundedByUser?: boolean;
  dangerouslyDisableSandbox?: boolean;
  returnCodeInterpretation?: string;
  structuredContent?: unknown[];
  persistedOutputPath?: string;
  persistedOutputSize?: number;
};
Retourne la sortie de la commande avec stdout/stderr séparés. Les commandes de fond incluent un backgroundTaskId.

Monitor

Nom de l’outil : Monitor
type MonitorOutput = {
  taskId: string;
  timeoutMs: number;
  persistent?: boolean;
};
Retourne l’ID de tâche de fond pour le moniteur en cours d’exécution. Utilisez cet ID avec TaskStop pour annuler la surveillance plus tôt.

Edit

Nom de l’outil : Edit
type FileEditOutput = {
  filePath: string;
  oldString: string;
  newString: string;
  originalFile: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  userModified: boolean;
  replaceAll: boolean;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
Retourne le diff structuré de l’opération d’édition.

Read

Nom de l’outil : Read
type FileReadOutput =
  | {
      type: "text";
      file: {
        filePath: string;
        content: string;
        numLines: number;
        startLine: number;
        totalLines: number;
      };
    }
  | {
      type: "image";
      file: {
        base64: string;
        type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
        originalSize: number;
        dimensions?: {
          originalWidth?: number;
          originalHeight?: number;
          displayWidth?: number;
          displayHeight?: number;
        };
      };
    }
  | {
      type: "notebook";
      file: {
        filePath: string;
        cells: unknown[];
      };
    }
  | {
      type: "pdf";
      file: {
        filePath: string;
        base64: string;
        originalSize: number;
      };
    }
  | {
      type: "parts";
      file: {
        filePath: string;
        originalSize: number;
        count: number;
        outputDir: string;
      };
    };
Retourne le contenu du fichier dans un format approprié au type de fichier. Discriminé sur le champ type.

Write

Nom de l’outil : Write
type FileWriteOutput = {
  type: "create" | "update";
  filePath: string;
  content: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  originalFile: string | null;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
Retourne le résultat d’écriture avec les informations de diff structuré.

Glob

Nom de l’outil : Glob
type GlobOutput = {
  durationMs: number;
  numFiles: number;
  filenames: string[];
  truncated: boolean;
};
Retourne les chemins de fichiers correspondant au motif glob, triés par heure de modification.

Grep

Nom de l’outil : Grep
type GrepOutput = {
  mode?: "content" | "files_with_matches" | "count";
  numFiles: number;
  filenames: string[];
  content?: string;
  numLines?: number;
  numMatches?: number;
  appliedLimit?: number;
  appliedOffset?: number;
};
Retourne les résultats de recherche. La forme varie selon mode : liste de fichiers, contenu avec correspondances ou comptages de correspondances.

TaskStop

Nom de l’outil : TaskStop
type TaskStopOutput = {
  message: string;
  task_id: string;
  task_type: string;
  command?: string;
};
Retourne la confirmation après l’arrêt de la tâche de fond.

NotebookEdit

Nom de l’outil : NotebookEdit
type NotebookEditOutput = {
  new_source: string;
  cell_id?: string;
  cell_type: "code" | "markdown";
  language: string;
  edit_mode: string;
  error?: string;
  notebook_path: string;
  original_file: string;
  updated_file: string;
};
Retourne le résultat de l’édition du carnet avec le contenu du fichier original et mis à jour.

WebFetch

Nom de l’outil : WebFetch
type WebFetchOutput = {
  bytes: number;
  code: number;
  codeText: string;
  result: string;
  durationMs: number;
  url: string;
};
Retourne le contenu récupéré avec le statut HTTP et les métadonnées.

WebSearch

Nom de l’outil : WebSearch
type WebSearchOutput = {
  query: string;
  results: Array<
    | {
        tool_use_id: string;
        content: Array<{ title: string; url: string }>;
      }
    | string
  >;
  durationSeconds: number;
};
Retourne les résultats de recherche du web.

Workflow

Nom de l’outil : Workflow
type WorkflowOutput = {
  status: "async_launched";
  taskId: string;
  runId?: string;
  summary?: string;
  transcriptDir?: string;
  scriptPath?: string;
  error?: string;
};
Retourne immédiatement après que l’outil accepte l’invocation. Le résultat final arrive plus tard en tant que complément de tâche. Vérifiez 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.
ChampTypeDescription
status"async_launched"L’outil a accepté l’invocation. C’est la seule valeur que le champ prend
taskIdstringIdentifiant de tâche de fond pour l’exécution
runIdstringIdentifiant d’exécution de workflow à transmettre en tant que resumeFromRunId lors d’une invocation ultérieure
summarystringDescription d’une ligne de ce que fait le workflow
transcriptDirstringRépertoire où les transcriptions de sous-agent sont écrites pendant l’exécution
scriptPathstringChemin du script de workflow persisté pour cette exécution. Modifiez-le et transmettez-le en tant que scriptPath pour réexécuter sans renvoyer le script
errorstringDéfini lorsque le script échoue sa vérification de syntaxe. Lorsqu’il est présent, l’exécution n’a pas démarré malgré le statut async_launched

TodoWrite

Nom de l’outil : TodoWrite
type TodoWriteOutput = {
  oldTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
  newTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
Retourne les listes de tâches précédentes et mises à jour.
À partir du TypeScript Agent SDK 0.3.142, TodoWrite est désactivé par défaut. Utilisez TaskCreate, TaskGet, TaskUpdate et TaskList à la place. Consultez Migrer vers les outils Task pour mettre à jour votre code de surveillance, ou définissez CLAUDE_CODE_ENABLE_TASKS=0 pour revenir à TodoWrite.

TaskCreate

Nom de l’outil : TaskCreate
type TaskCreateOutput = {
  task: {
    id: string;
    subject: string;
  };
};
Retourne la tâche créée avec son ID assigné.

TaskUpdate

Nom de l’outil : TaskUpdate
type TaskUpdateOutput = {
  success: boolean;
  taskId: string;
  updatedFields: string[];
  error?: string;
  statusChange?: {
    from: string;
    to: string;
  };
};
Retourne le résultat de la mise à jour, y compris les champs qui ont changé.

TaskGet

Nom de l’outil : TaskGet
type TaskGetOutput = {
  task: {
    id: string;
    subject: string;
    description: string;
    status: "pending" | "in_progress" | "completed";
    blocks: string[];
    blockedBy: string[];
  } | null;
};
Retourne l’enregistrement de tâche complet, ou null lorsque l’ID n’est pas trouvé.

TaskList

Nom de l’outil : TaskList
type TaskListOutput = {
  tasks: Array<{
    id: string;
    subject: string;
    status: "pending" | "in_progress" | "completed";
    owner?: string;
    blockedBy: string[];
  }>;
};
Retourne un instantané de toutes les tâches dans la liste actuelle.

ExitPlanMode

Nom de l’outil : ExitPlanMode
type ExitPlanModeOutput = {
  plan: string | null;
  isAgent: boolean;
  filePath?: string;
  hasTaskTool?: boolean;
  awaitingLeaderApproval?: boolean;
  requestId?: string;
};
Retourne l’état du plan après la sortie du mode de planification.

ListMcpResources

Nom de l’outil : ListMcpResourcesTool
type ListMcpResourcesOutput = Array<{
  uri: string;
  name: string;
  mimeType?: string;
  description?: string;
  server: string;
}>;
Retourne un tableau de ressources MCP disponibles.

ReadMcpResource

Nom de l’outil : ReadMcpResourceTool
type ReadMcpResourceOutput = {
  contents: Array<{
    uri: string;
    mimeType?: string;
    text?: string;
  }>;
};
Retourne le contenu de la ressource MCP demandée.

EnterWorktree

Nom de l’outil : EnterWorktree
type EnterWorktreeOutput = {
  worktreePath: string;
  worktreeBranch?: string;
  message: string;
};
Retourne les informations sur le worktree git.

Types de permission

PermissionUpdate

Opérations pour mettre à jour les permissions.
type PermissionUpdate =
  | {
      type: "addRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "replaceRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "removeRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "setMode";
      mode: PermissionMode;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "addDirectories";
      directories: string[];
      destination: PermissionUpdateDestination;
    }
  | {
      type: "removeDirectories";
      directories: string[];
      destination: PermissionUpdateDestination;
    };

PermissionBehavior

type PermissionBehavior = "allow" | "deny" | "ask";

PermissionUpdateDestination

type PermissionUpdateDestination =
  | "userSettings" // Paramètres utilisateur globaux
  | "projectSettings" // Paramètres de projet par répertoire
  | "localSettings" // Paramètres de projet gitignorés
  | "session" // Session actuelle uniquement
  | "cliArg"; // Argument CLI

PermissionRuleValue

type PermissionRuleValue = {
  toolName: string;
  ruleContent?: string;
};

Autres types

ApiKeySource

type ApiKeySource = "user" | "project" | "org" | "temporary" | "oauth";

SdkBeta

Fonctionnalités bêta disponibles qui peuvent être activées via l’option betas. Voir En-têtes bêta pour plus d’informations.
type SdkBeta = "context-1m-2025-08-07";
La bêta context-1m-2025-08-07 est retirée à partir du 30 avril 2026. Passer cette valeur avec Claude Sonnet 4.5 ou Sonnet 4 n’a aucun effet, et les demandes qui dépassent la fenêtre de contexte standard de 200 k tokens retournent une erreur. Pour utiliser une fenêtre de contexte de 1 M tokens, migrez vers Claude Sonnet 4.6, Claude Opus 4.6 ou Claude Opus 4.7, qui incluent 1 M de contexte à prix standard sans en-tête bêta requis.

SlashCommand

Informations sur une commande slash disponible.
type SlashCommand = {
  name: string;
  description: string;
  argumentHint: string;
  aliases?: string[];
};

ModelInfo

Informations sur un modèle disponible.
type ModelInfo = {
  value: string;
  displayName: string;
  description: string;
  supportsEffort?: boolean;
  supportedEffortLevels?: ("low" | "medium" | "high" | "xhigh" | "max")[];
  supportsAdaptiveThinking?: boolean;
  supportsFastMode?: boolean;
};

AgentInfo

Informations sur un sous-agent disponible qui peut être invoqué via l’outil Agent.
type AgentInfo = {
  name: string;
  description: string;
  model?: string;
};
ChampTypeDescription
namestringIdentifiant de type d’agent (par exemple, "Explore", "general-purpose")
descriptionstringDescription de quand utiliser cet agent
modelstring | undefinedAlias de modèle que cet agent utilise. S’il est omis, hérite le modèle du parent

McpServerStatus

Statut d’un serveur MCP connecté.
type McpServerStatus = {
  name: string;
  status: "connected" | "failed" | "needs-auth" | "pending" | "disabled";
  serverInfo?: {
    name: string;
    version: string;
  };
  error?: string;
  config?: McpServerStatusConfig;
  scope?: string;
  tools?: {
    name: string;
    description?: string;
    annotations?: {
      readOnly?: boolean;
      destructive?: boolean;
      openWorld?: boolean;
    };
  }[];
};

McpServerStatusConfig

La configuration d’un serveur MCP telle que rapportée par mcpServerStatus(). C’est l’union de tous les types de transport de serveur MCP.
type McpServerStatusConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfig
  | McpClaudeAIProxyServerConfig;
Voir McpServerConfig pour les détails sur chaque type de transport.

AccountInfo

Informations de compte pour l’utilisateur authentifié.
type AccountInfo = {
  email?: string;
  organization?: string;
  subscriptionType?: string;
  tokenSource?: string;
  apiKeySource?: string;
};

ModelUsage

Statistiques d’utilisation par modèle retournées dans les messages de résultat. La valeur costUSD est une estimation côté client. Voir Suivi des coûts et de l’utilisation pour les avertissements de facturation.
type ModelUsage = {
  inputTokens: number;
  outputTokens: number;
  cacheReadInputTokens: number;
  cacheCreationInputTokens: number;
  webSearchRequests: number;
  costUSD: number;
  contextWindow: number;
  maxOutputTokens: number;
};

ConfigScope

type ConfigScope = "local" | "user" | "project";

NonNullableUsage

Une version de Usage avec tous les champs nullables rendus non nullables.
type NonNullableUsage = {
  [K in keyof Usage]: NonNullable<Usage[K]>;
};

Usage

Statistiques d’utilisation des tokens. C’est le type BetaUsage de @anthropic-ai/sdk.
type Usage = {
  input_tokens: number;
  output_tokens: number;
  cache_creation_input_tokens: number | null;
  cache_read_input_tokens: number | null;
  cache_creation: {
    ephemeral_5m_input_tokens: number;
    ephemeral_1h_input_tokens: number;
  } | null;
  server_tool_use: BetaServerToolUsage | null;
  service_tier: "standard" | "priority" | "batch" | null;
  speed: "standard" | "fast" | null;
  inference_geo: string | null;
  iterations: BetaIterationsUsage | null;
};
BetaServerToolUsage et BetaIterationsUsage sont définis dans @anthropic-ai/sdk.

CallToolResult

Type de résultat d’outil MCP (depuis @modelcontextprotocol/sdk/types.js). structuredContent est un objet JSON qui peut être retourné aux côtés de content, incluant des blocs d’image. Voir Retourner des données structurées.
type CallToolResult = {
  content: Array<{
    type: "text" | "image" | "resource";
    // Les champs supplémentaires varient selon le type
  }>;
  structuredContent?: Record<string, unknown>;
  isError?: boolean;
};

ThinkingConfig

Contrôle le comportement de réflexion/raisonnement de Claude. Prend la priorité sur le maxThinkingTokens déprécié.
type ThinkingDisplay = "summarized" | "omitted";

type ThinkingConfig =
  | { type: "adaptive"; display?: ThinkingDisplay } // Le modèle détermine quand et combien raisonner (Opus 4.6+)
  | { type: "enabled"; budgetTokens?: number; display?: ThinkingDisplay } // Budget de token de réflexion fixe
  | { type: "disabled" }; // Pas de réflexion étendue
Le champ display optionnel contrôle si le texte de réflexion est retourné "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.

SpawnedProcess

Interface pour la génération de processus personnalisée (utilisée avec l’option spawnClaudeCodeProcess). ChildProcess satisfait déjà cette interface.
interface SpawnedProcess {
  stdin: Writable;
  stdout: Readable;
  readonly killed: boolean;
  readonly exitCode: number | null;
  kill(signal: NodeJS.Signals): boolean;
  on(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  on(event: "error", listener: (error: Error) => void): void;
  once(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  once(event: "error", listener: (error: Error) => void): void;
  off(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  off(event: "error", listener: (error: Error) => void): void;
}

SpawnOptions

Options passées à la fonction de génération personnalisée.
interface SpawnOptions {
  command: string;
  args: string[];
  cwd?: string;
  env: Record<string, string | undefined>;
  signal: AbortSignal;
}
Le champ signal indique à votre fonction de génération quand arrêter le processus. Passez-le comme option signal à spawn() de Node, ou passez-le à votre gestionnaire d’arrêt de VM ou de conteneur.Ce signal ne se déclenche pas au moment 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 depuis sa portée englobante.

McpSetServersResult

Résultat d’une opération setMcpServers().
type McpSetServersResult = {
  added: string[];
  removed: string[];
  errors: Record<string, string>;
};

RewindFilesResult

Résultat d’une opération rewindFiles().
type RewindFilesResult = {
  canRewind: boolean;
  error?: string;
  filesChanged?: string[];
  insertions?: number;
  deletions?: number;
};

SDKStatusMessage

Message de mise à jour de statut (par exemple, compaction).
type SDKStatusMessage = {
  type: "system";
  subtype: "status";
  status: "compacting" | null;
  permissionMode?: PermissionMode;
  uuid: UUID;
  session_id: string;
};

SDKTaskNotificationMessage

Notification quand une tâche de fond se termine, échoue ou est arrêtée. Les tâches de fond incluent les commandes Bash run_in_background, les montres Monitor et les sous-agents de fond.
type SDKTaskNotificationMessage = {
  type: "system";
  subtype: "task_notification";
  task_id: string;
  tool_use_id?: string;
  status: "completed" | "failed" | "stopped";
  output_file: string;
  summary: string;
  usage?: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKToolUseSummaryMessage

Résumé de l’utilisation des outils dans une conversation.
type SDKToolUseSummaryMessage = {
  type: "tool_use_summary";
  summary: string;
  preceding_tool_use_ids: string[];
  uuid: UUID;
  session_id: string;
};

SDKHookStartedMessage

Émis quand un hook commence à s’exécuter.
type SDKHookStartedMessage = {
  type: "system";
  subtype: "hook_started";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  uuid: UUID;
  session_id: string;
};

SDKHookProgressMessage

Émis pendant qu’un hook s’exécute, avec la sortie stdout/stderr.
type SDKHookProgressMessage = {
  type: "system";
  subtype: "hook_progress";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  stdout: string;
  stderr: string;
  output: string;
  uuid: UUID;
  session_id: string;
};

SDKHookResponseMessage

Émis quand un hook termine l’exécution.
type SDKHookResponseMessage = {
  type: "system";
  subtype: "hook_response";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  output: string;
  stdout: string;
  stderr: string;
  exit_code?: number;
  outcome: "success" | "error" | "cancelled";
  uuid: UUID;
  session_id: string;
};

SDKToolProgressMessage

Émis périodiquement pendant qu’un outil s’exécute pour indiquer la progression.
type SDKToolProgressMessage = {
  type: "tool_progress";
  tool_use_id: string;
  tool_name: string;
  parent_tool_use_id: string | null;
  elapsed_time_seconds: number;
  task_id?: string;
  uuid: UUID;
  session_id: string;
};

SDKAuthStatusMessage

Émis pendant les flux d’authentification.
type SDKAuthStatusMessage = {
  type: "auth_status";
  isAuthenticating: boolean;
  output: string[];
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskStartedMessage

Émis quand une tâche de fond commence. Le champ task_type est "local_bash" pour les commandes Bash de fond et les montres Monitor, "local_agent" pour les sous-agents ou "remote_agent".
type SDKTaskStartedMessage = {
  type: "system";
  subtype: "task_started";
  task_id: string;
  tool_use_id?: string;
  description: string;
  task_type?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskProgressMessage

Émis périodiquement pendant qu’un sous-agent ou une tâche de fond s’exécute. Le champ summary est rempli uniquement quand agentProgressSummaries est activé.
type SDKTaskProgressMessage = {
  type: "system";
  subtype: "task_progress";
  task_id: string;
  tool_use_id?: string;
  description: string;
  subagent_type?: string;
  usage: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  last_tool_name?: string;
  summary?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskUpdatedMessage

Émis quand l’état d’une tâche de fond change, par exemple quand 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 timestamp Unix epoch en millisecondes, comparable avec Date.now().
type SDKTaskUpdatedMessage = {
  type: "system";
  subtype: "task_updated";
  task_id: string;
  patch: {
    status?: "pending" | "running" | "completed" | "failed" | "killed";
    description?: string;
    end_time?: number;
    total_paused_ms?: number;
    error?: string;
    is_backgrounded?: boolean;
  };
  uuid: UUID;
  session_id: string;
};

SDKFilesPersistedEvent

Émis quand les points de contrôle de fichiers sont persistés sur disque.
type SDKFilesPersistedEvent = {
  type: "system";
  subtype: "files_persisted";
  files: { filename: string; file_id: string }[];
  failed: { filename: string; error: string }[];
  processed_at: string;
  uuid: UUID;
  session_id: string;
};

SDKRateLimitEvent

Émis quand la session rencontre une limite de débit.
type SDKRateLimitEvent = {
  type: "rate_limit_event";
  rate_limit_info: {
    status: "allowed" | "allowed_warning" | "rejected";
    resetsAt?: number;
    utilization?: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKLocalCommandOutputMessage

Sortie d’une commande slash locale (par exemple, /voice ou /usage). Affichée comme du texte de style assistant dans la transcription.
type SDKLocalCommandOutputMessage = {
  type: "system";
  subtype: "local_command_output";
  content: string;
  uuid: UUID;
  session_id: string;
};

SDKCommandsChangedMessage

Émis quand l’ensemble des commandes disponibles change en cours de session, par exemple quand des compétences sont découvertes alors que l’agent entre dans un sous-répertoire. Le tableau commands est la liste complète mise à jour, donc remplacez toute liste de commandes en cache par cette charge utile. Appeler supportedCommands() à nouveau n’est pas équivalent : cette méthode retourne l’instantané capturé à l’initialisation et ne reflète pas les changements en cours de session.
type SDKCommandsChangedMessage = {
  type: "system";
  subtype: "commands_changed";
  commands: SlashCommand[];
  uuid: UUID;
  session_id: string;
};

SDKPromptSuggestionMessage

Émis après chaque tour quand promptSuggestions est activé. Contient une invite utilisateur suivante prédite.
type SDKPromptSuggestionMessage = {
  type: "prompt_suggestion";
  suggestion: string;
  uuid: UUID;
  session_id: string;
};

AbortError

Classe d’erreur personnalisée pour les opérations d’abandon.
class AbortError extends Error {}

Configuration du sandbox

SandboxSettings

Configuration pour le comportement du sandbox. Utilisez ceci pour activer le sandboxing des commandes et configurer les restrictions réseau par programmation.
type SandboxSettings = {
  enabled?: boolean;
  failIfUnavailable?: boolean;
  autoAllowBashIfSandboxed?: boolean;
  excludedCommands?: string[];
  allowUnsandboxedCommands?: boolean;
  network?: SandboxNetworkConfig;
  filesystem?: SandboxFilesystemConfig;
  ignoreViolations?: Record<string, string[]>;
  enableWeakerNestedSandbox?: boolean;
  ripgrep?: { command: string; args?: string[] };
};
PropriétéTypePar défautDescription
enabledbooleanfalseActiver le mode sandbox pour l’exécution des commandes
failIfUnavailablebooleantrueS’arrêter au démarrage si enabled est true mais que le sandbox ne peut pas démarrer. Définissez false pour revenir à l’exécution non sandboxée avec un avertissement sur stderr
autoAllowBashIfSandboxedbooleantrueApprouver automatiquement les commandes bash quand le sandbox est activé
excludedCommandsstring[][]Commandes qui contournent toujours les restrictions du sandbox (par exemple, ['docker']). Celles-ci s’exécutent sans sandbox automatiquement sans implication du modèle
allowUnsandboxedCommandsbooleantruePermettre au modèle de demander l’exécution de commandes en dehors du sandbox. Quand true, le modèle peut définir dangerouslyDisableSandbox dans l’entrée de l’outil, qui revient au système de permissions
networkSandboxNetworkConfigundefinedConfiguration du sandbox spécifique au réseau
filesystemSandboxFilesystemConfigundefinedConfiguration du sandbox spécifique au système de fichiers pour les restrictions de lecture/écriture
ignoreViolationsRecord<string, string[]>undefinedCarte des catégories de violation aux motifs à ignorer (par exemple, { file: ['/tmp/*'], network: ['localhost'] })
enableWeakerNestedSandboxbooleanfalseActiver un sandbox imbriqué plus faible pour la compatibilité
ripgrep{ command: string; args?: string[] }undefinedConfiguration de binaire ripgrep personnalisée pour les environnements sandbox
Le sandbox dépend du support de la plateforme et, sur Linux, d’outils comme bubblewrap et socat. Quand 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, puis s’arrête. Surveillez ce subtype plutôt que de vous attendre à ce que query() lève une exception avant de produire des messages.Pour exécuter sans sandbox à la place, définissez failIfUnavailable: false.

Exemple d’utilisation

import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Build and test my project",
  options: {
    sandbox: {
      enabled: true,
      autoAllowBashIfSandboxed: true,
      network: {
        allowLocalBinding: true
      }
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
Sécurité des sockets Unix : L’option allowUnixSockets peut accorder l’accès à des services système puissants. Par exemple, permettre /var/run/docker.sock accorde effectivement un accès complet au système hôte via l’API Docker, contournant l’isolation du sandbox. Autorisez uniquement les sockets Unix strictement nécessaires et comprenez les implications de sécurité de chacun.

SandboxNetworkConfig

Configuration spécifique au réseau pour le mode sandbox. Ces paramètres s’appliquent aux commandes Bash sandboxées quand enabled est true dans le parent SandboxSettings. Ils ne restreignent pas l’outil WebFetch, qui utilise à la place les règles de permissions.
type SandboxNetworkConfig = {
  allowedDomains?: string[];
  deniedDomains?: string[];
  allowManagedDomainsOnly?: boolean;
  allowLocalBinding?: boolean;
  allowUnixSockets?: string[];
  allowAllUnixSockets?: boolean;
  httpProxyPort?: number;
  socksProxyPort?: number;
};
PropriétéTypePar défautDescription
allowedDomainsstring[][]Noms de domaine auxquels les processus sandboxés peuvent accéder
deniedDomainsstring[][]Noms de domaine auxquels les processus sandboxés ne peuvent pas accéder. Prend la priorité sur allowedDomains
allowManagedDomainsOnlybooleanfalseParamètres gérés uniquement. Quand défini dans les paramètres gérés, seules les entrées allowedDomains des paramètres gérés sont honorées et les entrées des paramètres utilisateur, projet ou locaux sont ignorées. N’a aucun effet quand défini via les options SDK
allowLocalBindingbooleanfalsePermettre aux processus de se lier aux ports locaux (par exemple, pour les serveurs de développement)
allowUnixSocketsstring[][]Chemins de socket Unix auxquels les processus peuvent accéder (par exemple, socket Docker)
allowAllUnixSocketsbooleanfalsePermettre l’accès à tous les sockets Unix
httpProxyPortnumberundefinedPort du proxy HTTP pour les demandes réseau
socksProxyPortnumberundefinedPort du proxy SOCKS pour les demandes réseau
Le proxy sandbox intégré applique allowedDomains en fonction du nom d’hôte demandé et ne termine pas ou n’inspecte pas le trafic TLS, donc des techniques telles que le domain fronting peuvent potentiellement le contourner. Voir Limitations de sécurité du sandboxing pour les détails et Déploiement sécurisé pour configurer un proxy qui termine TLS.

SandboxFilesystemConfig

Configuration spécifique au système de fichiers pour le mode sandbox.
type SandboxFilesystemConfig = {
  allowWrite?: string[];
  denyWrite?: string[];
  denyRead?: string[];
};
PropriétéTypePar défautDescription
allowWritestring[][]Motifs de chemin de fichier pour permettre l’accès en écriture
denyWritestring[][]Motifs de chemin de fichier pour refuser l’accès en écriture
denyReadstring[][]Motifs de chemin de fichier pour refuser l’accès en lecture

Repli des permissions pour les commandes non sandboxées

Quand allowUnsandboxedCommands 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 d’implémenter une logique d’autorisation personnalisée.
excludedCommands vs allowUnsandboxedCommands :
  • excludedCommands : Une liste statique de commandes qui contournent toujours le sandbox automatiquement (par exemple, ['docker']). Le modèle n’a aucun contrôle sur ceci.
  • allowUnsandboxedCommands : Permet au modèle de décider à l’exécution s’il faut demander l’exécution non sandboxée en définissant dangerouslyDisableSandbox: true dans l’entrée de l’outil.
import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Deploy my application",
  options: {
    sandbox: {
      enabled: true,
      allowUnsandboxedCommands: true // Le modèle peut demander l'exécution non sandboxée
    },
    permissionMode: "default",
    canUseTool: async (tool, input) => {
      // Vérifier si le modèle demande de contourner le sandbox
      if (tool === "Bash" && input.dangerouslyDisableSandbox) {
        // Le modèle demande d'exécuter cette commande en dehors du sandbox
        console.log(`Unsandboxed command requested: ${input.command}`);

        if (isCommandAuthorized(input.command)) {
          return { behavior: "allow" as const, updatedInput: input };
        }
        return {
          behavior: "deny" as const,
          message: "Command not authorized for unsandboxed execution"
        };
      }
      return { behavior: "allow" as const, updatedInput: input };
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
Ce modèle vous permet de :
  • Auditer les demandes du modèle : Enregistrer quand le modèle demande l’exécution non sandboxée
  • Implémenter des listes blanches : Permettre uniquement à des commandes spécifiques de s’exécuter sans sandbox
  • Ajouter des flux d’approbation : Exiger une autorisation explicite pour les opérations privilégiées
Les commandes s’exécutant avec dangerouslyDisableSandbox: true ont un accès complet au système. Assurez-vous que votre gestionnaire canUseTool valide ces demandes avec soin.Si permissionMode est défini sur bypassPermissions et allowUnsandboxedCommands est activé, le modèle peut exécuter de manière autonome des commandes en dehors du sandbox sans aucune invite d’approbation. Cette combinaison permet effectivement au modèle d’échapper à l’isolation du sandbox silencieusement.

Voir aussi