Par défaut, Managed Agents exécute les outils et le code à l'intérieur de sandboxes cloud gérés par Anthropic. Les « self-hosted sandboxes » (sandboxes auto-hébergés) conservent l'orchestration du côté d'Anthropic mais déplacent l'exécution des outils dans une infrastructure que vous contrôlez, de sorte que le code de l'agent, le système de fichiers et la sortie réseau ne quittent jamais votre environnement.
L'exécution des outils reste sur votre hôte : le système de fichiers que l'agent lit et écrit, les processus qu'il lance et le réseau qu'il peut atteindre sont tous sous votre contrôle. Les entrées et sorties des outils transitent toujours vers le plan de contrôle d'Anthropic (où Claude s'exécute) afin que le modèle puisse voir les résultats et déterminer la suite. Consultez le modèle de sécurité pour la frontière complète du flux de données.
Les sandboxes auto-hébergés prennent en charge tous les modèles Claude disponibles dans Managed Agents, y compris Claude Opus 4.8. Le modèle est configuré sur l'agent, pas sur l'environnement.
| Environnement cloud | Sandbox auto-hébergé | |
|---|---|---|
| Où les outils s'exécutent | Sandboxes gérés par Anthropic | Votre infrastructure |
| Portée réseau | Contrôles de sortie d'Anthropic | Votre politique réseau |
| Montage de fichiers et de dépôts GitHub | Géré par Anthropic | Géré par vous |
| Cycle de vie | Géré par Anthropic | Géré par vous |
L'auto-hébergement est un bon choix lorsque l'agent doit opérer sur des données qui ne peuvent pas quitter votre périmètre réseau, atteindre des services internes qui ne sont pas routables publiquement, ou s'exécuter sous les contrôles de conformité et d'audit propres à votre organisation.
Pour l'éligibilité à la rétention zéro des données (Zero Data Retention) et au BAA HIPAA, consultez API et rétention des données.
L'auto-hébergement contrôle où le code de l'agent s'exécute. Les tunnels MCP contrôlent comment Anthropic atteint les serveurs MCP dans votre réseau. Ils sont indépendants : une session s'exécutant dans les sandboxes cloud d'Anthropic peut toujours atteindre des serveurs MCP privés via un tunnel, et une session auto-hébergée peut utiliser des serveurs MCP tunnelisés ou publics. Utilisez les deux lorsque vous voulez que l'exécution et l'accès aux outils restent à l'intérieur de votre périmètre.
Ce guide décrit comment construire un worker avec n'importe quelle plateforme de sandboxing générique. Des guides supplémentaires, spécifiques à chaque plateforme, sont disponibles pour AWS Lambda MicroVMs, Blaxel, Cloudflare, Daytona, E2B, GKE Agent Sandbox, Modal, Namespace, Superserve et Vercel.
Un « environment worker » (worker d'environnement) est un processus que vous exécutez sur votre propre infrastructure. Il reçoit les requêtes d'exécution d'outils d'Anthropic et les exécute localement. L'environnement self_hosted agit comme une file de travail : lorsqu'une session lui est assignée, Anthropic met la session en file d'attente en tant qu'élément de travail. Votre worker réclame les éléments de travail de cette file, lance un contexte d'exécution pour chacun d'eux, télécharge les skills de l'agent (des ressources réutilisables, basées sur le système de fichiers, qui donnent à l'agent une expertise spécifique à un domaine), exécute les appels d'outils et renvoie les résultats.
Les éléments de travail sont réclamés en interrogeant la file de l'environnement : soit par un worker toujours actif qui interroge en continu, soit par un gestionnaire déclenché par webhook qui se réveille sur session.status_run_started et commence à interroger.
La CLI et le SDK fournissent tous deux des workers préconstruits. La CLI ant ne prend en charge que le modèle toujours actif ; le SDK prend en charge à la fois le modèle toujours actif et le modèle déclenché par webhook. Les deux sont configurables : consultez Worker auto-hébergé dans la référence pour les options de la CLI, et Helpers du SDK sur cette page pour les options du SDK. Pour plus de contrôle, appelez directement les points de terminaison Environments Work et implémentez votre propre worker.
/workspace : le répertoire de travail par défaut du système pour l'exécution des outils et le téléchargement des skills. L'option --workdir de la CLI utilise par défaut le répertoire courant ; passez --workdir /workspace pour correspondre à la valeur par défaut du système. Les skills sont téléchargés dans <workdir>/skills/<name>/. Si vous utilisez un répertoire de travail différent, mettez à jour l'invite système de votre agent afin que Claude puisse localiser les fichiers de skills./mnt/session/outputs : le harnais du worker indique à Claude d'écrire les livrables finaux ici. En mode sandbox, montez un répertoire hôte à ce chemin pour récupérer les sorties après la fin de la session. En mode in-process, les outils de fichiers du worker écrivent plutôt sous le répertoire de travail, donc ce chemin ne s'applique pas.Vous avez besoin de :
/bin/bash à ce chemin exact. L'outil bash du worker l'invoque directement, sans consulter PATH. Le SDK TypeScript nécessite en plus unzip et tar dans le PATH ainsi que Node.js 22 ou ultérieur ; les SDK Python et Go utilisent leurs bibliothèques standard pour l'extraction d'archives et n'ont pas d'exigences binaires supplémentaires.ant ou un SDK Anthropic (Python, TypeScript ou Go) sur l'hôte du worker.Sur Claude Platform sur AWS, le worker s'authentifie avec AWS IAM (SigV4) ou une clé API générée dans la Console AWS, et non avec une clé d'environnement. Attachez la politique gérée AnthropicSelfHostedEnvironmentAccess au principal IAM sous lequel votre worker s'exécute. Les clés d'environnement générées dans la Claude Console ne fonctionnent pas avec le point de terminaison Claude Platform sur AWS.
Créer un environnement auto-hébergé
Dans la Console : Workspace > Environments > New > Self-hosted
Ou via l'API :
client = anthropic.Anthropic()
environment = client.beta.environments.create(
name="self-hosted", config={"type": "self_hosted"}
)
print(environment.id)Générer une clé d'environnement
Dans la Console, ouvrez l'environnement et cliquez sur Generate environment key. La génération de clés se fait uniquement dans la Console, que vous ayez créé l'environnement via la Console ou via l'API. Exportez ensuite l'ID et la clé de l'environnement sur l'hôte du worker :
export ANTHROPIC_ENVIRONMENT_KEY="sk-ant-oat01-..."
export ANTHROPIC_ENVIRONMENT_ID="env_..."Les skills peuvent inclure des exécutables que l'agent peut lancer directement. Les workers de la CLI et du SDK préservent les permissions d'exécution enregistrées dans le bundle de skill lorsqu'ils l'extraient. Si vous implémentez le téléchargement des skills manuellement, vous êtes responsable de la définition des permissions d'exécution.
Choisissez toujours actif pour la configuration la plus simple : un processus de longue durée interroge la file en continu et n'a besoin que d'HTTPS sortant. Choisissez déclenché par webhook pour éviter d'exécuter un poller inactif ; cela nécessite un point de terminaison webhook qu'Anthropic peut atteindre (consultez Webhooks pour la configuration du point de terminaison et la vérification de signature).
Installer la CLI ant
Exécutez ceci sur l'hôte du worker.
Pour les environnements Linux, téléchargez directement le binaire de la release.
VERSION=1.15.0
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
case $(uname -m) in
x86_64) ARCH=amd64 ;;
aarch64) ARCH=arm64 ;;
esac
curl -fsSL "https://github.com/anthropics/anthropic-cli/releases/download/v${VERSION}/ant_${VERSION}_${OS}_${ARCH}.tar.gz" \
| sudo tar -xz -C /usr/local/bin antVous pouvez trouver toutes les releases sur la page des releases GitHub.
Exécuter le worker
In-process
ant beta:worker poll réclame les éléments de travail assignés à l'environnement, télécharge les skills, exécute les appels d'outils dans le répertoire de travail et renvoie les résultats. Il lit ANTHROPIC_ENVIRONMENT_KEY et ANTHROPIC_ENVIRONMENT_ID depuis l'environnement.
ant beta:worker poll \
--workdir "/workspace"Le worker se termine proprement sur SIGTERM ou SIGINT, en drainant les appels d'outils en cours avant de s'arrêter.
Un sandbox par session
Si vous avez besoin d'une isolation plus forte (un système de fichiers neuf, des limites de ressources ou des contrôles réseau par session), exécutez chaque session dans son propre sandbox. Construisez une image avec ant installé et ant beta:worker run comme point d'entrée. L'image de base doit fournir /bin/bash ; curl n'est utilisé qu'au moment de la construction. Lorsqu'un sandbox démarre, il lit les détails de la session depuis les variables d'environnement, gère cette session et se termine :
FROM your-base-image
ARG ANT_VERSION=1.15.0
ARG TARGETARCH
RUN ARCH=$([ "$TARGETARCH" = "arm64" ] && echo arm64 || echo amd64) && \
curl -fsSL "https://github.com/anthropics/anthropic-cli/releases/download/v${ANT_VERSION}/ant_${ANT_VERSION}_linux_${ARCH}.tar.gz" \
| tar -xz -C /usr/local/bin ant
WORKDIR /workspace
VOLUME /mnt/session/outputs
ENTRYPOINT ["ant", "beta:worker", "run"]Écrivez ensuite un script de lancement qui transmet les détails de la session dans un sandbox neuf. Le poller injecte ANTHROPIC_SESSION_ID, ANTHROPIC_WORK_ID, ANTHROPIC_ENVIRONMENT_ID et ANTHROPIC_ENVIRONMENT_KEY dans l'environnement du script. ANTHROPIC_BASE_URL est optionnel et n'est transmis que s'il a été défini sur l'hôte du poller ; il remplace le point de terminaison API par défaut. Dans l'exemple, /host/outputs est un répertoire hôte que vous choisissez ; il est monté en bind sur /mnt/session/outputs du sandbox afin que vous puissiez récupérer les livrables de la session après la fin du sandbox.
#!/bin/bash
# spawn.sh : appelé une fois par élément de travail réclamé
mkdir -p "/host/outputs/$ANTHROPIC_SESSION_ID"
exec docker run --rm \
-e ANTHROPIC_SESSION_ID -e ANTHROPIC_ENVIRONMENT_KEY \
-e ANTHROPIC_WORK_ID -e ANTHROPIC_ENVIRONMENT_ID -e ANTHROPIC_BASE_URL \
-v "/host/outputs/$ANTHROPIC_SESSION_ID":/mnt/session/outputs \
your-imageDémarrez le poller en pointant vers le script :
ant beta:worker poll \
--on-work ./spawn.shLe SDK fournit trois helpers à différents niveaux de contrôle. EnvironmentWorker couvre la plupart des cas d'usage ; descendez aux helpers de plus bas niveau lorsque vous devez lancer votre propre processus par session ou exécuter des outils sur une session déjà réclamée.
EnvironmentWorker : le worker prêt à l'emploi. Gère l'interrogation, la configuration et l'exécution de bout en bout.
.run() : s'exécute indéfiniment, prenant en charge les sessions au fur et à mesure de leur arrivée..handle_item() : gère un seul élément de travail réclamé et se termine. Passez explicitement les identifiants de travail, de session et d'environnement, ou laissez-le lire les variables ANTHROPIC_* que ant beta:worker poll --on-work définit pour le processus qu'il lance.work.poller() : interroge la file de travail pour vous et vous donne chaque session réclamée. Utilisez ceci lorsque vous voulez décider de ce qui se passe pour chaque session, par exemple lancer un sandbox plutôt que d'exécuter les outils in-process.
drain : indique s'il faut arrêter l'interrogation une fois la file vide plutôt que d'attendre de nouveaux travaux.block_ms : combien de temps attendre l'arrivée de travail avant de retourner, en millisecondes. Doit être compris entre 1 et 999 (attente par interrogation ; le helper ré-interroge automatiquement). Passez null (None en Python, param.Null[int64]() en Go) pour une vérification non bloquante ; l'omission du paramètre utilise le long-poll par défaut de 999 ms.reclaim_older_than_ms : re-réclame les éléments de travail qui ont été réclamés mais jamais acquittés dans ce nombre de millisecondes.auto_stop : indique s'il faut publier un signal d'arrêt pour chaque élément de travail une fois que le corps de votre boucle en a terminé avec lui. Le poller Go n'a pas d'option de désactivation et publie toujours le signal d'arrêt, donc bloquez dans le corps de la boucle jusqu'à ce que la session se termine plutôt que de vous détacher.client.beta.sessions.events.tool_runner() : exécute les appels d'outils pour une seule session, étant donné l'ID de session et une liste d'outils. Utilisez-le lorsque vous avez déjà réclamé le travail et que vous n'avez besoin que de la couche d'exécution.Utilisez directement le poller de travail lorsque vous voulez lancer votre propre processus par session, par exemple démarrer un sandbox pour chaque session réclamée :
import asyncio
import os
from anthropic import AsyncAnthropic
from anthropic.types.beta.environments import BetaSelfHostedWork
async def launch_container(work: BetaSelfHostedWork) -> None:
# Remplacez par votre propre lanceur de sandbox par session. Transmettez
# ANTHROPIC_ENVIRONMENT_KEY dans la sandbox lancée, jamais
# votre clé API.
print(f"claimed session {work.data.id}")
async def main() -> None:
environment_key = os.environ["ANTHROPIC_ENVIRONMENT_KEY"]
environment_id = os.environ["ANTHROPIC_ENVIRONMENT_ID"]
async with AsyncAnthropic(auth_token=environment_key) as client:
async for work in client.beta.environments.work.poller(
environment_id=environment_id,
environment_key=environment_key,
auto_stop=False, # the launched sandbox owns the stop call
):
await launch_container(work)
asyncio.run(main())AgentToolContext est le contexte d'exécution pour les appels d'outils. Il définit le répertoire de travail et la politique de chemins, et peut télécharger les skills de la session. beta_agent_toolset_20260401(env) prend un AgentToolContext et retourne les implémentations d'outils standard (bash, read, write, edit, glob, grep).
Avec EnvironmentWorker : les deux sont gérés automatiquement. Passez une factory tools pour personnaliser la liste d'outils :
EnvironmentWorker(client, ..., tools=lambda env: [beta_bash_tool(env), my_custom_tool])Avec work.poller() et tool_runner() : passez une liste d'outils en tant que tools à client.beta.sessions.events.tool_runner(). Pour construire cette liste, configurez vous-même AgentToolContext et appelez beta_agent_toolset_20260401(env) :
from anthropic.lib.tools.agent_toolset import (
AgentToolContext,
beta_agent_toolset_20260401,
)
async with AgentToolContext(
workdir="/workspace", client=client, session_id=work.data.id
) as env:
# skills téléchargés vers /workspace/skills/<name>/
tools = beta_agent_toolset_20260401(env)Depuis un shell séparé, avec ANTHROPIC_API_KEY défini sur votre clé API Claude (pas la clé d'environnement), confirmez que workers_polling est au moins égal à 1 :
ant beta:environments:work stats --environment-id "$ANTHROPIC_ENVIRONMENT_ID"Si workers_polling reste à 0, le worker n'atteint pas la file : confirmez que ANTHROPIC_ENVIRONMENT_KEY et ANTHROPIC_ENVIRONMENT_ID sont définis sur l'hôte du worker. Consultez Lire la profondeur de la file pour la réponse complète des statistiques et des exemples dans d'autres langages.
Une fois votre worker en cours d'exécution, créez une session qui cible l'environnement. Définissez AGENT_ID sur l'ID d'agent que vous avez noté dans Avant de commencer. La session entre dans la file de travail de l'environnement et y attend jusqu'à ce qu'un worker la réclame ; si aucun worker n'est connecté, la session reste en file d'attente plutôt que d'échouer.
Anthropic ne monte pas de fichiers ni de dépôts GitHub dans les sandboxes auto-hébergés. Pour rendre disponibles des fichiers spécifiques à une session, passez des références de fichiers (comme un chemin S3 ou un SHA de commit) dans le champ metadata de la session. Votre script de lancement ou votre gestionnaire --on-work lit ces métadonnées depuis l'élément de travail réclamé (le poller de la CLI transmet le JSON de l'élément de travail au stdin du script, et les gestionnaires du SDK peuvent le lire via les points de terminaison Environments Work) et met en place les fichiers dans le répertoire de travail avant le début de l'exécution des outils.
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
metadata={"input_file": "s3://my-bucket/data.csv"},
)La mémoire n'est actuellement pas prise en charge avec les sandboxes auto-hébergés.
Consultez Worker auto-hébergé dans la référence pour la liste complète des options de la CLI, et Helpers du SDK pour les options des helpers du SDK.
Ces appels s'exécutent depuis vos outils de surveillance ou d'opérations, authentifiés avec votre clé API Claude, pour observer et gérer la flotte de workers. La boucle de réclamation et de keep-alive est gérée à l'intérieur des helpers du worker, vous n'appelez donc pas ces points de terminaison directement.
Ces points de terminaison s'authentifient avec la clé API de votre organisation, pas avec la clé d'environnement. Appelez-les depuis l'extérieur de l'hôte du worker. Définir ANTHROPIC_API_KEY sur l'hôte du worker expose un identifiant à portée organisationnelle aux appels d'outils de l'agent.
work.stats retourne l'état de la file pour un environnement :
depth est le nombre d'éléments en attente d'être réclamés. Dimensionnez votre flotte de workers ou déclenchez des alertes sur l'arriéré en fonction de cette valeur.pending est le nombre d'éléments qu'un worker a réclamés et qu'il traite actuellement.oldest_queued_at est l'horodatage de l'élément le plus ancien encore en file d'attente ou en cours de traitement, ou null lorsqu'il n'y en a aucun.workers_polling est le nombre de workers qui ont interrogé la file au cours des 30 dernières secondes. Utilisez ceci pour les alertes de vivacité.import os
import anthropic
client = anthropic.Anthropic()
stats = client.beta.environments.work.stats(os.environ["ANTHROPIC_ENVIRONMENT_ID"])
print(f"depth={stats.depth} pending={stats.pending}"){
"type": "work_queue_stats",
"depth": 0,
"pending": 0,
"oldest_queued_at": null,
"workers_polling": 0
}Utilisez work.stop pour demander au worker gérant une session spécifique de l'arrêter proprement. Le worker termine tout appel d'outil en cours, publie un statut final et libère la session. Passez force: true dans le corps de la requête (avec la CLI, passez --force) pour interrompre immédiatement au lieu d'attendre la fin de l'appel d'outil en cours.
Comme ces appels s'exécutent depuis vos outils d'opérations plutôt que depuis l'hôte du worker, ANTHROPIC_WORK_ID n'est pas défini automatiquement. Définissez-le sur l'ID de l'élément de travail cible avant d'exécuter les exemples suivants. Pour trouver l'ID d'un élément de travail, listez les éléments de travail de l'environnement via les points de terminaison Environments Work.
import os
import anthropic
client = anthropic.Anthropic()
work = client.beta.environments.work.stop(
os.environ["ANTHROPIC_WORK_ID"],
environment_id=os.environ["ANTHROPIC_ENVIRONMENT_ID"],
)
print(work.state)Modèle de responsabilité partagée pour les environnements sandbox auto-hébergés.
Créez une session pour exécuter votre agent et commencer à exécuter des tâches.
Connectez Claude en toute sécurité aux serveurs MCP s'exécutant dans votre réseau privé sans ouvrir de ports entrants ni exposer de services à l'internet public.
Was this page helpful?