Une session est une instance d'agent au sein d'un environnement. Chaque session référence un agent et un environnement (tous deux créés séparément), et conserve l'historique de conversation au fil de plusieurs interactions. Les sessions suivent un cycle de vie en deux étapes : d'abord créer la session, puis envoyer un événement utilisateur pour démarrer le travail. Vous pouvez également regrouper les deux étapes en un seul appel avec initial_events.
Une session nécessite un ID d'agent et un ID d'environment. Les agents sont des ressources versionnées ; transmettre l'ID de l'agent sous forme de chaîne crée la session avec la dernière version de l'agent.
ant beta:sessions create \
--agent "$AGENT_ID" \
--environment-id "$ENVIRONMENT_ID"Pour épingler une session à une version spécifique de l'agent, transmettez un objet. Cela vous permet de contrôler exactement quelle version s'exécute et d'échelonner le déploiement de nouvelles versions de manière indépendante.
ant beta:sessions create <<YAML
agent:
type: agent
id: $AGENT_ID
version: 1
environment_id: $ENVIRONMENT_ID
YAMLVous pouvez créer une session et démarrer son travail en un seul appel. initial_events est un tableau facultatif d'événements initiaux à envoyer à la session lors de sa création, traités dans l'ordre. Il prend en charge les événements user.message et user.define_outcome, et accepte un maximum de 50 événements. Une liste non vide démarre la boucle de l'agent dans le même appel : la session est créée directement avec le statut running, sans requête supplémentaire.
L'exemple suivant crée une session avec un seul user.message dans initial_events :
SEEDED_SESSION_ID=$(ant beta:sessions create \
--transform id --raw-output <<YAML
agent: $AGENT_ID
environment_id: $ENVIRONMENT_ID
initial_events:
- type: user.message
content:
- type: text
text: List the files in the working directory.
YAML
)
# Les initial_events ne sont pas renvoyés dans la réponse de création ; listez les
# événements de la session pour voir le message amorcé.
echo "Seeded event: $(ant beta:sessions:events list \
--session-id "$SEEDED_SESSION_ID" \
--format raw \
--transform 'data.#(type=="user.message").content.0.text' --raw-output)"Aucun autre type d'événement n'est accepté. Les événements qui répondent à un tour de l'agent (user.tool_confirmation, user.tool_result et user.custom_tool_result) ne sont pas acceptés car aucun tour de l'agent n'existe encore, et user.interrupt n'est pas accepté car il n'y a aucun tour à arrêter. Contrairement aux initial_events d'un déploiement planifié, les initial_events d'une session n'acceptent pas system.message.
Chaque événement dans initial_events est validé et persisté avant le retour de la réponse de création, dans l'ordre de la liste, avec un ID attribué par le serveur, exactement comme si vous l'aviez envoyé au point de terminaison d'envoi d'événements immédiatement après la création. Les règles de contenu par événement sont également les mêmes que sur ce point de terminaison. Une liste vide équivaut à omettre le champ. La validation fonctionne en tout ou rien : si un événement échoue à la validation, la requête entière est rejetée et aucune session n'est créée.
La requête de création est rejetée dans les cas suivants :
| Condition | Statut |
|---|---|
Plus d'un événement user.define_outcome | 400 |
Un événement user.define_outcome sans rubric | 400 |
Plus de 100 blocs de contenu document issus de fichiers sur l'ensemble de la liste | 400 |
| Un corps de requête de plus de 32 Mo | 413 |
Un événement user.define_outcome dans initial_events est accepté dans les mêmes conditions que l'envoi d'un tel événement à une session existante ; consultez Définir des résultats.
Vous pouvez transmettre agent sous trois formes : une chaîne d'ID d'agent, un objet à version épinglée (type: "agent") ou un objet de remplacements (overrides). La forme avec remplacements modifie des parties de la configuration de l'agent pour une seule session. Utilisez-la pour essayer un modèle différent ou accorder un outil supplémentaire dans une session sans versionner l'agent. Pour la forme avec remplacements, définissez type sur agent_with_overrides et transmettez l'id de l'agent et, facultativement, une version (omettez version pour utiliser la dernière version de l'agent). Incluez ensuite n'importe lesquels des champs model, system, tools, mcp_servers ou skills avec les valeurs que la session doit utiliser.
Chaque champ remplaçable suit les trois mêmes règles :
null, ou sur un tableau vide pour les champs de type liste : la session s'exécute avec ce champ effacé. Cette règle s'applique pleinement à system et skills. Il existe trois exceptions :
model ne peut jamais être effacé. Une session a toujours besoin d'un modèle, donc model: null renvoie une erreur 400 agent_model_required.tools renvoie une erreur 400 lorsque les skills effectifs de la session ne sont pas vides, car les skills nécessitent l'outil read. Sinon, tools: null et tools: [] effacent le champ.mcp_servers renvoie une erreur 400 lorsque les tools effectifs de la session contiennent encore un mcp_toolset qui référence l'un des serveurs de l'agent. Remplacez tools dans la même requête pour supprimer ces entrées mcp_toolset, puis effacez mcp_servers.tools doit lister chaque outil dont la session doit disposer. Il existe une exception :
effort à l'intérieur d'un remplacement de model par session n'est pas appliqué, et comme le remplacement remplace intégralement l'objet model de l'agent, l'effort propre à l'agent n'est pas non plus reporté : une session créée avec un remplacement de model s'exécute au niveau d'effort par défaut du modèle. Pour s'exécuter à un niveau d'effort spécifique, définissez effort sur l'agent et ne remplacez pas model pour cette session.Les remplacements s'appliquent uniquement à la session que vous créez. Ils ne modifient pas la ressource agent et ne créent pas de nouvelle version de l'agent, de sorte que les autres sessions qui référencent le même agent ne sont pas affectées.
Dans la réponse, l'objet agent reflète la configuration avec laquelle la session s'exécute après application des remplacements. Ses champs id et version identifient toujours l'agent et la version auxquels les remplacements sont appliqués. Cela vous permet de retracer une session jusqu'à son agent de base.
L'exemple suivant démarre une session qui remplace le modèle et efface l'invite système :
# Le champ `agent` de la réponse est l'instantané résolu : chaque surcharge remplace ce
# champ pour cette session uniquement, et la ressource agent conserve son id et sa version.
ant beta:sessions create \
--transform 'agent.{id,version,model,system}' \
--format json <<YAML
agent:
type: agent_with_overrides
id: $AGENT_ID
model:
id: claude-sonnet-5
system: null
environment_id: $ENVIRONMENT_ID
YAMLComme un remplacement de model remplace intégralement l'objet model de l'agent, il définit ou efface également l'épinglage inference_geo du modèle pour la session : un remplacement qui inclut inference_geo épingle la zone géographique qui traite les requêtes de modèle de la session, et un remplacement qui l'omet efface l'épinglage de l'agent, de sorte que la session suit le default_inference_geo de l'espace de travail. La valeur remplacée est validée par rapport aux allowed_inference_geos de l'espace de travail lors de la création de la session.
L'exemple suivant démarre une session à partir d'un agent dont le modèle n'a pas d'épinglage géographique, épingle les requêtes de modèle de la session à l'inférence aux États-Unis en incluant inference_geo dans le remplacement de model, et affiche la valeur renvoyée dans le champ agent.model de la réponse :
# Remplace intégralement le `model` de l'agent : réindiquez `id`, ajoutez `inference_geo` pour épingler.
session=$(ant beta:sessions create <<YAML
agent:
type: agent_with_overrides
id: $AGENT_ID
model:
id: claude-opus-5
inference_geo: us
environment_id: $ENVIRONMENT_ID
YAML
)
echo "Inference geo: $(jq -r '.agent.model.inference_geo' <<< "$session")"Pour plafonner ce qu'une session peut dépenser, transmettez l'objet facultatif budget lors de sa création. Un budget est un plafond strict sur le coût au tarif public (list cost) de la session : la plateforme tarifie tout ce que la session consomme aux tarifs publics, et la session cesse d'émettre de nouvelles requêtes de modèle dès que ce total cumulé atteint max_list_cost. Définissez type sur limit et donnez à max_list_cost un amount et une currency. amount est un nombre entier de cents américains écrit sous forme de chaîne, par exemple "2500" pour 25,00 $ ; l'API accepte une chaîne plutôt qu'un nombre afin qu'aucun arrondi en virgule flottante ne soit jamais appliqué. USD est la seule devise actuellement prise en charge. Lorsque la session atteint le plafond, elle se met en pause et devient inactive avec le motif d'arrêt budget_reached. Le plafond est appliqué entre les requêtes de modèle, de sorte que la requête qui le franchit se termine d'abord et que le coût final au tarif public de la session peut se situer légèrement au-delà du plafond. Un budget ne peut être attaché qu'à la création : vous pouvez le modifier ou le supprimer ultérieurement, mais vous ne pouvez pas en ajouter un à une session créée sans budget.
L'exemple suivant crée une session avec un budget de 25,00 $ ; la réponse renvoie le budget sur la ressource de session :
curl -fsSL https://api.anthropic.com/v1/sessions \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" \
-d @- <<EOF
{
"agent": "$AGENT_ID",
"environment_id": "$ENVIRONMENT_ID",
"budget": {
"type": "limit",
"max_list_cost": {"amount": "2500", "currency": "USD"}
}
}
EOFConsultez Budgets de session pour savoir comment fonctionne l'application du plafond, ce qui est comptabilisé dans le coût au tarif public et comment les budgets se comportent dans les sessions multi-agents.
Si votre agent utilise des outils MCP qui nécessitent une authentification, transmettez vault_ids lors de la création de la session pour référencer un coffre-fort (vault) contenant des identifiants OAuth stockés. Anthropic gère le renouvellement des jetons pour vous. Consultez S'authentifier avec les coffres-forts pour savoir comment créer des coffres-forts et enregistrer des identifiants.
ant beta:sessions create <<YAML
agent: $AGENT_ID
environment_id: $ENVIRONMENT_ID
vault_ids:
- $VAULT_ID
YAMLCréer une session sans initial_events enregistre la session mais ne démarre aucun travail ; le sandbox de l'environnement commence à être provisionné dès la création de la session, de sorte que le premier appel d'outil n'a pas à l'attendre. Pour déléguer une tâche, envoyez des événements à la session à l'aide d'un événement utilisateur. Pour fournir le premier événement dans la requête de création à la place, consultez Amorcer la session avec des événements initiaux. La session agit comme une machine à états qui suit la progression tandis que les événements pilotent l'exécution réelle.
ant beta:sessions:events send \
--session-id "$SESSION_ID" <<'YAML'
events:
- type: user.message
content:
- type: text
text: List the files in the working directory.
YAMLConsultez Flux d'événements de session pour savoir comment diffuser en streaming les réponses de l'agent et gérer les confirmations d'outils.
Consultez Statuts de session pour connaître les statuts par lesquels passe une session.
Récupérez, listez, mettez à jour, archivez et supprimez des sessions Claude Managed Agents.
Envoyez des événements, diffusez les réponses en streaming et interrompez ou redirigez votre session en cours d'exécution.
Créez et gérez des déploiements avec l'API Claude : exécutez un agent selon une planification cron récurrente et inspectez son historique d'exécutions.
Was this page helpful?