Passer au contenu principal
Essayez la nouvelle interface V2 (aperçu) : Une interface simplifiée avec les modèles send() et stream() est maintenant disponible, ce qui facilite les conversations multi-tours. En savoir plus sur l’aperçu TypeScript V2

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.

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_idnullRéservé

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

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](#agent-definition)>undefinedDéfinir programmatiquement les sous-agents
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 à toujours refuser. Les règles de refus sont vérifiées en premier et remplacent allowedTools et permissionMode (y compris bypassPermissions)
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. 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
hooksPartial<Record<HookEvent, HookCallbackMatcher[]>>{}Rappels de hook pour les événements
includePartialMessagesbooleanfalseInclure les événements de message partiel
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](#mcp-server-config)>{}Configurations de serveur MCP
modelstringPar défaut de CLIModèle Claude à utiliser
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
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
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
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
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
strictMcpConfigbooleanfalseAppliquer la validation MCP stricte
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
thinkingThinkingConfig{ type: 'adaptive' } pour les modèles pris en chargeContrôle le comportement de réflexion/raisonnement de Claude. Voir ThinkingConfig pour les options
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

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>;
  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
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

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";
};

AgentDefinition

Configuration pour un sous-agent défini par programmation.
type AgentDefinition = {
  description: string;
  tools?: string[];
  disallowedTools?: string[];
  prompt: string;
  model?: "sonnet" | "opus" | "haiku" | "inherit";
  mcpServers?: AgentMcpServerSpec[];
  skills?: string[];
  maxTurns?: number;
  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
disallowedToolsNonTableau de noms d’outils à explicitement interdire pour cet agent
promptOuiL’invite système de l’agent
modelNonRemplacement de modèle pour cet agent. 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
maxTurnsNonNombre maximum de tours agentiques (allers-retours API) avant arrêt
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 et allowedTools 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 - pas d'exécution
  | "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
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
  | SDKFilesPersistedEvent
  | SDKToolUseSummaryMessage
  | SDKRateLimitEvent
  | SDKPromptSuggestionMessage;

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', 'billing_error', 'rate_limit', 'invalid_request', 'server_error', 'max_output_tokens' ou 'unknown'.

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;
};
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;
  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;
      num_turns: number;
      result: string;
      stop_reason: string | null;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      structured_output?: unknown;
    }
  | {
      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[];
    };

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;
};

SDKPermissionDenial

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

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"
  | "Notification"
  | "UserPromptSubmit"
  | "SessionStart"
  | "SessionEnd"
  | "Stop"
  | "SubagentStart"
  | "SubagentStop"
  | "PreCompact"
  | "PermissionRequest"
  | "Setup"
  | "TeammateIdle"
  | "TaskCompleted"
  | "ConfigChange"
  | "WorktreeCreate"
  | "WorktreeRemove";

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
  | NotificationHookInput
  | UserPromptSubmitHookInput
  | SessionStartHookInput
  | SessionEndHookInput
  | StopHookInput
  | SubagentStartHookInput
  | SubagentStopHookInput
  | PreCompactHookInput
  | PermissionRequestHookInput
  | SetupHookInput
  | TeammateIdleHookInput
  | TaskCompletedHookInput
  | ConfigChangeHookInput
  | WorktreeCreateHookInput
  | WorktreeRemoveHookInput;

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;
  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;
};

PostToolUseFailureHookInput

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

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;
};

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;
};

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;
};

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";
        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;
        updatedMCPToolOutput?: unknown;
      }
    | {
        hookEventName: "PostToolUseFailure";
        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
  | ConfigInput
  | EnterWorktreeInput
  | ExitPlanModeInput
  | FileEditInput
  | FileReadInput
  | FileWriteInput
  | GlobInput
  | GrepInput
  | ListMcpResourcesInput
  | McpInput
  | MonitorInput
  | NotebookEditInput
  | ReadMcpResourceInput
  | SubscribeMcpResourceInput
  | SubscribePollingInput
  | TaskStopInput
  | TodoWriteInput
  | UnsubscribeMcpResourceInput
  | UnsubscribePollingInput
  | WebFetchInput
  | WebSearchInput;

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.

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.

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 : ListMcpResources
type ListMcpResourcesInput = {
  server?: string;
};
Répertorie les ressources MCP disponibles à partir des serveurs connectés.

ReadMcpResource

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

Config

Nom de l’outil : Config
type ConfigInput = {
  setting: string;
  value?: string | boolean | number;
};
Obtient ou définit une valeur de configuration.

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
  | ConfigOutput
  | EnterWorktreeOutput
  | ExitPlanModeOutput
  | FileEditOutput
  | FileReadOutput
  | FileWriteOutput
  | GlobOutput
  | GrepOutput
  | ListMcpResourcesOutput
  | MonitorOutput
  | NotebookEditOutput
  | ReadMcpResourceOutput
  | TaskStopOutput
  | TodoWriteOutput
  | WebFetchOutput
  | WebSearchOutput;

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>;
};
Retourne les questions posées et les réponses de l’utilisateur.

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 montre 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.

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.

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 : ListMcpResources
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 : ReadMcpResource
type ReadMcpResourceOutput = {
  contents: Array<{
    uri: string;
    mimeType?: string;
    text?: string;
  }>;
};
Retourne le contenu de la ressource MCP demandée.

Config

Nom de l’outil : Config
type ConfigOutput = {
  success: boolean;
  operation?: "get" | "set";
  setting?: string;
  value?: unknown;
  previousValue?: unknown;
  newValue?: unknown;
  error?: string;
};
Retourne le résultat d’une opération de configuration get ou set.

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;
};

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 (depuis @anthropic-ai/sdk).
type Usage = {
  input_tokens: number | null;
  output_tokens: number | null;
  cache_creation_input_tokens?: number | null;
  cache_read_input_tokens?: number | null;
};

CallToolResult

Type de résultat d’outil MCP (depuis @modelcontextprotocol/sdk/types.js).
type CallToolResult = {
  content: Array<{
    type: "text" | "image" | "resource";
    // Les champs supplémentaires varient selon le type
  }>;
  isError?: boolean;
};

ThinkingConfig

Contrôle le comportement de réflexion/raisonnement de Claude. Prend la priorité sur le maxThinkingTokens déprécié.
type ThinkingConfig =
  | { type: "adaptive" } // Le modèle détermine quand et combien raisonner (Opus 4.6+)
  | { type: "enabled"; budgetTokens?: number } // Budget de token de réflexion fixe
  | { type: "disabled" }; // Pas de réflexion étendue

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;
}

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’une tâche de fond s’exécute.
type SDKTaskProgressMessage = {
  type: "system";
  subtype: "task_progress";
  task_id: string;
  tool_use_id?: string;
  description: string;
  usage: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  last_tool_name?: string;
  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 /cost). 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;
};

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;
  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
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

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.
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
allowManagedDomainsOnlybooleanfalseRestreindre l’accès réseau uniquement aux domaines dans allowedDomains
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

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