Per impostazione predefinita, Managed Agents esegue strumenti e codice all'interno di sandbox cloud gestite da Anthropic. Le sandbox self-hosted mantengono l'orchestrazione dal lato di Anthropic ma spostano l'esecuzione degli strumenti in un'infrastruttura che controlli tu, in modo che il codice dell'agente, il filesystem e il traffico di rete in uscita non lascino mai il tuo ambiente.
L'esecuzione degli strumenti rimane sul tuo host: il filesystem che l'agente legge e scrive, i processi che avvia e la rete che può raggiungere sono tutti sotto il tuo controllo. Gli input e gli output degli strumenti continuano a fluire verso il piano di controllo di Anthropic (dove viene eseguito Claude) in modo che il modello possa vedere i risultati e determinare cosa fare dopo. Consulta il modello di sicurezza per il confine completo del flusso di dati.
Le sandbox self-hosted supportano tutti i modelli Claude disponibili in Managed Agents, inclusi Claude Opus 4.8 e Claude Opus 5. Il modello è configurato sull'agente, non sull'ambiente.
| Ambiente cloud | Sandbox self-hosted | |
|---|---|---|
| Dove vengono eseguiti gli strumenti | Sandbox gestite da Anthropic | La tua infrastruttura |
| Portata di rete | Controlli di uscita di Anthropic | La tua policy di rete |
| Montaggio di file e repository GitHub | Gestito da Anthropic | Gestito da te |
| Ciclo di vita | Gestito da Anthropic | Gestito da te |
Il self-hosting è una buona scelta quando l'agente deve operare su dati che non possono lasciare il confine della tua rete, raggiungere servizi interni che non sono instradabili pubblicamente o funzionare sotto i controlli di conformità e audit della tua organizzazione.
Per l'idoneità a Zero Data Retention e HIPAA BAA, consulta API e conservazione dei dati.
Il self-hosting controlla dove viene eseguito il codice dell'agente. I tunnel MCP controllano come Anthropic raggiunge i server MCP nella tua rete. Sono indipendenti: una sessione in esecuzione nelle sandbox cloud di Anthropic può comunque raggiungere server MCP privati attraverso un tunnel, e una sessione self-hosted può usare server MCP sia tunnellizzati che pubblici. Usa entrambi quando vuoi che l'esecuzione e l'accesso agli strumenti rimangano all'interno del tuo confine. Per fornire all'agente strumenti da un server MCP all'interno della tua rete senza eseguire un tunnel, puoi anche incapsulare il server come strumenti personalizzati serviti dal tuo worker.
Questa guida descrive come costruire un worker con qualsiasi piattaforma di sandboxing generica. Sono disponibili guide aggiuntive specifiche per piattaforma per AWS Lambda MicroVMs, Blaxel, Cloudflare, Daytona, E2B, GKE Agent Sandbox, Modal, Namespace, Superserve e Vercel.
Un worker dell'ambiente è un processo che esegui sulla tua infrastruttura. Riceve richieste di esecuzione di strumenti da Anthropic e le esegue localmente. L'ambiente self_hosted funge da coda di lavoro: quando una sessione gli viene assegnata, Anthropic accoda la sessione come elemento di lavoro. Il tuo worker rivendica gli elementi di lavoro da quella coda, avvia un contesto di esecuzione per ciascuno, scarica le skill dell'agente (risorse riutilizzabili basate su filesystem che forniscono all'agente competenze specifiche di dominio), esegue le chiamate agli strumenti e pubblica i risultati.
Gli elementi di lavoro vengono rivendicati interrogando la coda dell'ambiente: tramite un worker sempre attivo che esegue il polling continuamente, oppure un handler attivato da webhook che si risveglia su session.status_run_started e inizia il polling.
La CLI e l'SDK includono entrambi worker predefiniti. La CLI ant supporta solo il pattern sempre attivo; l'SDK supporta sia il pattern sempre attivo che quello attivato da webhook. Entrambi sono configurabili: consulta Worker self-hosted nel riferimento per i flag della CLI, e Helper dell'SDK in questa pagina per le opzioni dell'SDK. Per un maggiore controllo, chiama direttamente gli endpoint Environments Work e implementa il tuo worker.
/workspace: la directory di lavoro predefinita del sistema per l'esecuzione degli strumenti e il download delle skill. Il flag --workdir della CLI ha come valore predefinito la directory corrente; passa --workdir /workspace per corrispondere al valore predefinito del sistema. Le skill vengono scaricate in <workdir>/skills/<name>/. Se usi una directory di lavoro diversa, aggiorna il prompt di sistema del tuo agente in modo che Claude possa individuare i file delle skill./mnt/session/outputs usata nelle sandbox gestite da Anthropic, quindi i deliverable finali finiscono ovunque l'agente li scriva nel filesystem della tua sandbox, tipicamente sotto la directory di lavoro.Ti servono:
/bin/bash esattamente in quel percorso. Lo strumento bash del worker lo invoca direttamente, senza consultare PATH. L'SDK TypeScript richiede inoltre unzip e tar nel PATH e Node.js 22 o successivo; gli SDK Python e Go usano le loro librerie standard per l'estrazione degli archivi e non hanno requisiti binari aggiuntivi.ant o un SDK Anthropic (Python, TypeScript o Go) sull'host del worker.Su Claude Platform on AWS, il worker si autentica con AWS IAM (SigV4) o con una chiave API generata nella Console AWS, non con una chiave di ambiente. Collega la policy gestita AnthropicSelfHostedEnvironmentAccess al principal IAM con cui viene eseguito il tuo worker. Le chiavi di ambiente generate nella Claude Console non funzionano con l'endpoint di Claude Platform on AWS.
Crea un ambiente self-hosted
Nella Console: Workspace > Environments > New > Self-hosted
Oppure tramite l'API:
client = anthropic.Anthropic()
environment = client.beta.environments.create(
name="self-hosted", config={"type": "self_hosted"}
)
print(environment.id)Genera una chiave di ambiente
Nella Console, apri l'ambiente e fai clic su Generate environment key. La generazione delle chiavi è disponibile solo nella Console, indipendentemente dal fatto che tu abbia creato l'ambiente tramite la Console o l'API. Poi esporta l'ID e la chiave dell'ambiente sull'host del worker:
export ANTHROPIC_ENVIRONMENT_KEY="sk-ant-oat01-..."
export ANTHROPIC_ENVIRONMENT_ID="env_..."Le skill possono includere eseguibili che l'agente può eseguire direttamente. I worker della CLI e dell'SDK preservano i permessi di esecuzione registrati nel bundle della skill quando lo estraggono. Se implementi manualmente il download delle skill, sei responsabile dell'impostazione dei permessi di esecuzione.
Scegli sempre attivo per la configurazione più semplice: un processo a lunga esecuzione interroga la coda continuamente e necessita solo di HTTPS in uscita. Scegli attivato da webhook per evitare di eseguire un poller inattivo; richiede un endpoint webhook che Anthropic possa raggiungere (consulta Webhook per la configurazione dell'endpoint e la verifica della firma).
Installa la CLI ant
Esegui questo sull'host del worker.
Per gli ambienti Linux, scarica direttamente il binario della release.
VERSION=1.21.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 antPuoi trovare tutte le release nella pagina delle release su GitHub.
Esegui il worker
In-process
ant beta:worker poll rivendica gli elementi di lavoro assegnati all'ambiente, scarica le skill, esegue le chiamate agli strumenti nella directory di lavoro e pubblica i risultati. Legge ANTHROPIC_ENVIRONMENT_KEY e ANTHROPIC_ENVIRONMENT_ID dall'ambiente.
ant beta:worker poll \
--workdir "/workspace"Il worker termina in modo pulito su SIGTERM o SIGINT: annulla qualsiasi chiamata a strumenti in corso, pubblica il suo risultato di errore e rilascia l'elemento di lavoro prima di fermarsi.
Sandbox per sessione
Se hai bisogno di un isolamento più forte (un filesystem pulito, limiti di risorse o controlli di rete per sessione), esegui ogni sessione nella propria sandbox. Costruisci un'immagine con ant installato e ant beta:worker run come entrypoint. L'immagine di base deve fornire /bin/bash; curl è usato solo in fase di build. Quando una sandbox si avvia, legge i dettagli della sessione dalle variabili d'ambiente, gestisce quella sessione ed esce:
FROM your-base-image
ARG ANT_VERSION=1.21.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 /workspace
ENTRYPOINT ["ant", "beta:worker", "run"]Poi scrivi uno script di avvio che inoltra i dettagli della sessione in una nuova sandbox. Il poller inietta ANTHROPIC_SESSION_ID, ANTHROPIC_WORK_ID, ANTHROPIC_ENVIRONMENT_ID e ANTHROPIC_ENVIRONMENT_KEY nell'ambiente dello script. ANTHROPIC_BASE_URL è opzionale e viene passato solo se era impostato sull'host del poller; sovrascrive l'endpoint API predefinito. Nell'esempio, /host/outputs è una directory host che scegli tu; viene montata in bind sulla directory di lavoro della sandbox (/workspace) in modo da poter recuperare i deliverable della sessione dopo che la sandbox termina. Negli ambienti self-hosted l'agente scrive i deliverable sotto la directory di lavoro anziché in /mnt/session/outputs (consulta Filesystem della sandbox), quindi montare la directory di lavoro è ciò che li cattura; il mount raccoglie anche l'albero skills/ scaricato e qualsiasi file intermedio creato dall'agente.
#!/bin/bash
# spawn.sh: chiamato una volta per ogni elemento di lavoro rivendicato
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":/workspace \
your-imageAvvia il poller puntando allo script:
ant beta:worker poll \
--on-work ./spawn.shL'SDK fornisce tre helper a diversi livelli di controllo. EnvironmentWorker copre la maggior parte dei casi d'uso; passa agli helper di livello inferiore quando devi avviare il tuo processo per sessione o eseguire strumenti su una sessione già rivendicata.
EnvironmentWorker: il worker pronto all'uso. Gestisce polling, configurazione ed esecuzione end to end.
.run(): viene eseguito indefinitamente, prendendo in carico le sessioni man mano che arrivano..handle_item(): gestisce un singolo elemento di lavoro rivendicato ed esce. Passa esplicitamente gli identificatori di lavoro, sessione e ambiente, oppure lascia che legga le variabili ANTHROPIC_* che ant beta:worker poll --on-work imposta per il processo che avvia.work.poller(): interroga la coda di lavoro per tuo conto e ti fornisce ogni sessione rivendicata. Usalo quando vuoi decidere cosa succede per ogni sessione, ad esempio avviare una sandbox anziché eseguire gli strumenti in-process.
drain: se interrompere il polling una volta che la coda è vuota anziché attendere nuovo lavoro.block_ms: quanto tempo attendere l'arrivo del lavoro prima di restituire, in millisecondi. Deve essere compreso tra 1 e 999 (attesa per singolo poll; l'helper ripete il polling automaticamente). Passa null (None in Python, param.Null[int64]() in Go) per un controllo non bloccante; omettere il parametro usa il long-poll predefinito di 999 ms.reclaim_older_than_ms: rivendica nuovamente gli elementi di lavoro che sono stati rivendicati ma mai confermati entro questo numero di millisecondi.auto_stop: se pubblicare un segnale di stop per ogni elemento di lavoro una volta che il corpo del tuo loop ha finito con esso. Il poller Go non ha opzione di disattivazione e pubblica sempre il segnale di stop, quindi blocca nel corpo del loop fino al completamento della sessione anziché scollegarti.client.beta.sessions.events.tool_runner(): esegue le chiamate agli strumenti per una singola sessione, dati l'ID della sessione e un elenco di strumenti. Usalo quando hai già rivendicato il lavoro e ti serve solo il livello di esecuzione.Usa direttamente il work poller quando vuoi avviare il tuo processo per sessione, ad esempio avviando una sandbox per ogni sessione rivendicata:
import asyncio
import os
from anthropic import AsyncAnthropic
from anthropic.types.beta.environments import BetaSelfHostedWork
async def launch_container(work: BetaSelfHostedWork) -> None:
# Sostituisci con il tuo launcher di sandbox per sessione. Passa
# ANTHROPIC_ENVIRONMENT_KEY alla sandbox avviata, mai
# la tua chiave 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 è il contesto di esecuzione per le chiamate agli strumenti. Definisce la directory di lavoro e la policy dei percorsi, e può scaricare le skill della sessione. beta_agent_toolset_20260401(env) prende un AgentToolContext e restituisce le implementazioni standard degli strumenti (bash, read, write, edit, glob, grep).
Con EnvironmentWorker: entrambi sono gestiti automaticamente. Passa una factory tools per personalizzare l'elenco degli strumenti:
EnvironmentWorker(client, ..., tools=lambda env: [beta_bash_tool(env), my_custom_tool])Con work.poller() e tool_runner(): passa un elenco di strumenti come tools a client.beta.sessions.events.tool_runner(). Per costruire quell'elenco, configura tu stesso AgentToolContext e chiama 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 scaricate in /workspace/skills/<name>/
tools = beta_agent_toolset_20260401(env)Da una shell separata, con ANTHROPIC_API_KEY impostata sulla tua chiave API di Claude (non la chiave di ambiente), conferma che workers_polling sia almeno 1:
ant beta:environments:work stats --environment-id "$ANTHROPIC_ENVIRONMENT_ID"Se workers_polling rimane a 0, il worker non sta raggiungendo la coda: conferma che ANTHROPIC_ENVIRONMENT_KEY e ANTHROPIC_ENVIRONMENT_ID siano impostate sull'host del worker. Consulta Leggi la profondità della coda per la risposta completa delle statistiche e altri esempi in altri linguaggi.
Una volta che il tuo worker è in esecuzione, crea una sessione che punti all'ambiente. Imposta AGENT_ID sull'ID agente che hai annotato in Prima di iniziare. La sessione entra nella coda di lavoro dell'ambiente e attende lì finché un worker non la rivendica; se nessun worker è connesso, la sessione rimane in coda anziché fallire.
Anthropic non monta file o repository GitHub nelle sandbox self-hosted. Per rendere disponibili file specifici della sessione, passa riferimenti ai file (come un percorso S3 o uno SHA di commit) nel campo metadata della sessione. L'elemento di lavoro rivendicato non trasporta i metadata della sessione, ma trasporta l'ID della sessione: il tuo script di avvio o handler --on-work recupera la sessione (GET /v1/sessions/{session_id}) per leggere il campo metadata, poi prepara i file nella directory di lavoro prima che inizi l'esecuzione degli strumenti.
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
metadata={"input_file": "s3://my-bucket/data.csv"},
)Le sandbox self-hosted non supportano le voci resources; una sessione che include qualsiasi risorsa su un ambiente self-hosted viene rifiutata.
Consulta Worker self-hosted nel riferimento per l'elenco completo dei flag della CLI, e Helper dell'SDK per le opzioni degli helper dell'SDK.
Gli strumenti personalizzati sono strumenti eseguiti dal tuo codice: l'agente emette un evento agent.custom_tool_use e attende un corrispondente user.custom_tool_result. Il worker può essere quel codice e, poiché viene eseguito all'interno della tua sandbox, lo strumento raggiunge i servizi interni, le credenziali e il traffico di rete in uscita che hai configurato per la sandbox, e nient'altro. La chiave di ambiente autorizza la pubblicazione dei risultati degli strumenti personalizzati, quindi la tua chiave API di Claude rimane fuori dall'host del worker.
Servire strumenti personalizzati richiede il worker dell'SDK: il worker della CLI ant non ha modo di registrare un'implementazione di strumento personalizzato. Nel pattern sandbox per sessione, esegui EnvironmentWorker all'interno della sandbox con handle_item() (handleItem in TypeScript, HandleItem in Go) al posto di ant beta:worker run.
Dichiara lo strumento sull'agente
Aggiungi una voce custom ai tools dell'agente il cui name corrisponda allo strumento che il tuo worker registra. Consulta Strumenti personalizzati per la forma completa della dichiarazione.
{
"type": "custom",
"name": "get_order_status",
"description": "Look up an order in the internal fulfillment system by order ID.",
"input_schema": {
"type": "object",
"properties": {
"order_id": { "type": "string", "description": "The order ID" }
},
"required": ["order_id"]
}
}Registra l'implementazione con il worker
Passa lo strumento attraverso la factory tools del worker (consulta Helper dell'SDK), insieme al toolset integrato:
import asyncio
import os
from anthropic import AsyncAnthropic, beta_async_tool
from anthropic.lib.environments import EnvironmentWorker
from anthropic.lib.tools.agent_toolset import beta_agent_toolset_20260401
@beta_async_tool
async def get_order_status(order_id: str) -> str:
"""Look up an order in the internal fulfillment system by order ID."""
# Viene eseguito sull'host del worker: chiama qualsiasi cosa raggiungibile dalla sandbox.
return f"Order {order_id}: shipped"
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:
await EnvironmentWorker(
client,
environment_id=environment_id,
environment_key=environment_key,
workdir="/workspace",
tools=lambda env: [*beta_agent_toolset_20260401(env), get_order_status],
).run()
asyncio.run(main())Il worker risponde solo agli strumenti registrati con esso. Uno strumento personalizzato dichiarato sull'agente ma non registrato con alcun worker o client lascia la sessione in pausa con un motivo di arresto requires_action finché qualcosa non pubblica il suo risultato; consulta Gestione delle chiamate a strumenti personalizzati per il flusso degli eventi.
Il connettore MCP si connette ai server MCP dal lato di Anthropic, quindi un server deve esporre un endpoint HTTP che Anthropic possa raggiungere, direttamente o tramite un tunnel MCP. Per usare un server raggiungibile solo dalla tua rete, rendi invece il worker il client MCP e dichiara gli strumenti del server come strumenti personalizzati. Il server MCP non necessita di connettività in ingresso dall'esterno della tua rete; Anthropic riceve le definizioni degli strumenti che dichiari sull'agente, l'input di ogni chiamata e il risultato che il tuo worker pubblica. A runtime il modello chiama uno strumento incapsulato come qualsiasi altro strumento personalizzato:
agent.custom_tool_use.user.custom_tool_result.Gli helper MCP lato client degli SDK convertono gli strumenti del server negli strumenti eseguibili che il worker accetta; installa un SDK MCP insieme all'SDK Anthropic (pip install "anthropic[mcp]" "mcp>=1.24", npm install @modelcontextprotocol/sdk, go get github.com/modelcontextprotocol/go-sdk). Gli esempi si connettono senza autenticazione; per inviare credenziali, configura il client HTTP o le opzioni di richiesta che passi al trasporto MCP (http_client in Python, requestInit in TypeScript, HTTPClient in Go).
Dichiara gli strumenti del server sull'agente
Elenca gli strumenti del server MCP e dichiara ciascuno come strumento custom; i campi MCP name, description e inputSchema si mappano uno a uno sui campi dello strumento personalizzato. Se il server pagina il suo elenco di strumenti, dichiara ogni pagina; il worker deve elencare le stesse pagine.
import asyncio
from typing import Any, cast
from anthropic import AsyncAnthropic
from anthropic.types.beta import BetaManagedAgentsCustomToolParams
from mcp import ClientSession, types
# Richiede mcp >= 1.24, che ha rinominato streamablehttp_client in streamable_http_client.
from mcp.client.streamable_http import streamable_http_client
MCP_SERVER_URL = "http://mcp.internal.example.com:8000/mcp"
def to_custom_tool(tool: types.Tool) -> BetaManagedAgentsCustomToolParams:
# I campi MCP corrispondono uno a uno a una dichiarazione di strumento personalizzato. Il cast
# passa il dizionario dello schema al parametro tipizzato dell'SDK senza modifiche.
return {
"type": "custom",
"name": tool.name,
"description": tool.description or tool.name,
"input_schema": cast(Any, tool.inputSchema),
}
async def main() -> None:
# Esegui questo codice dove crei gli agenti, non sull'host worker: si
# autentica con la tua chiave API di Claude (ANTHROPIC_API_KEY).
async with (
streamable_http_client(MCP_SERVER_URL) as (read, write, _),
ClientSession(read, write) as mcp_session,
AsyncAnthropic() as client,
):
await mcp_session.initialize()
listed = await mcp_session.list_tools()
agent = await client.beta.agents.create(
name="Internal tools agent",
model="claude-opus-5",
tools=[
{"type": "agent_toolset_20260401"},
*[to_custom_tool(tool) for tool in listed.tools],
],
)
print(agent.id)
asyncio.run(main())Servi gli strumenti dal worker
Connettiti allo stesso server MCP all'avvio, converti i suoi strumenti con gli helper MCP e registrali insieme al toolset integrato. Mantieni una sessione MCP aperta per tutta la vita del worker.
import asyncio
import os
from datetime import timedelta
from anthropic import AsyncAnthropic
from anthropic.lib.environments import EnvironmentWorker
from anthropic.lib.tools.agent_toolset import beta_agent_toolset_20260401
from anthropic.lib.tools.mcp import async_mcp_tool
from mcp import ClientSession
# Richiede mcp >= 1.24, che ha rinominato streamablehttp_client in streamable_http_client.
from mcp.client.streamable_http import streamable_http_client
MCP_SERVER_URL = "http://mcp.internal.example.com:8000/mcp"
async def main() -> None:
environment_key = os.environ["ANTHROPIC_ENVIRONMENT_KEY"]
environment_id = os.environ["ANTHROPIC_ENVIRONMENT_ID"]
# Si connette al server MCP una sola volta all'avvio e mantiene la sessione aperta per
# tutta la vita del worker. Il timeout trasforma una chiamata a uno strumento bloccata
# in un risultato di errore anziché in una chiamata in stallo.
async with (
streamable_http_client(MCP_SERVER_URL) as (read, write, _),
ClientSession(read, write, read_timeout_seconds=timedelta(seconds=60)) as mcp_session,
AsyncAnthropic(auth_token=environment_key) as client,
):
await mcp_session.initialize()
listed = await mcp_session.list_tools()
mcp_tools = [async_mcp_tool(tool, mcp_session) for tool in listed.tools]
await EnvironmentWorker(
client,
environment_id=environment_id,
environment_key=environment_key,
workdir="/workspace",
tools=lambda env: [*beta_agent_toolset_20260401(env), *mcp_tools],
).run()
asyncio.run(main())Tieni presente quanto segue quando incapsuli un server MCP:
tools di un agente accetta al massimo 128 voci (ogni strumento incapsulato è una voce, e il toolset integrato è un'altra). L'API rifiuta una dichiarazione che riutilizza un nome di strumento, che assegna a uno strumento personalizzato il nome di uno strumento integrato dell'agente come bash o read, o che usa il prefisso riservato mcp__. Gli helper MCP mantengono i nomi e le descrizioni del server, quindi rinomina o accorcia dove necessario. Quando due server espongono lo stesso nome di strumento, definisci tu stesso il wrapper con un nome prefissato e fagli chiamare il nome originale dello strumento del server.additionalProperties e title. Rifiuta le parole chiave di riferimento come $ref ovunque nell'input_schema di uno strumento personalizzato, quindi rendi inline gli schemi che generatori come pydantic fattorizzano in $defs. Rifiuta anche oneOf, anyOf e allOf di primo livello, e nomi di proprietà al di fuori di lettere, cifre, trattini bassi, punti e trattini (1–64 caratteri).read_timeout_seconds. Senza di esso, una chiamata bloccata diventa un risultato di errore solo quando scatta il timeout di richiesta predefinito dell'SDK MCP TypeScript (circa un minuto) o quando interviene il backstop del worker stesso: circa due minuti e mezzo in Python, e due minuti in Go, dove il worker annulla una chiamata a strumento che supera il suo valore predefinito di 120 secondi e pubblica un risultato di errore.bash sull'host del worker. Dichiara solo gli strumenti che intendi far usare all'agente.Queste chiamate vengono eseguite dai tuoi strumenti di monitoraggio o operazioni, autenticate con la tua chiave API di Claude, per osservare e gestire la flotta di worker. Il loop di rivendicazione e keep-alive è gestito all'interno degli helper del worker, quindi non chiami direttamente quegli endpoint.
Questi endpoint accettano sia la chiave API della tua organizzazione sia la chiave di ambiente. Chiamali dall'esterno dell'host del worker con la chiave API della tua organizzazione. Impostare ANTHROPIC_API_KEY sull'host del worker espone una credenziale con ambito organizzazione alle chiamate agli strumenti dell'agente.
work.stats restituisce lo stato della coda per un ambiente:
depth è il numero di elementi in attesa di essere rivendicati. Scala la tua flotta di worker o imposta avvisi sul backlog in base a questo valore.pending è il numero di elementi rivendicati da un worker ma non ancora confermati. Gli helper del worker confermano ogni elemento prima di elaborarlo, quindi questo valore rimane vicino a zero in condizioni normali; un valore diverso da zero prolungato significa che un worker si è bloccato tra la rivendicazione e la conferma.oldest_queued_at è il timestamp dell'elemento più vecchio ancora in coda, in attesa di essere rivendicato o rivendicato ma non ancora confermato, oppure null quando non ce n'è nessuno.workers_polling è il numero di worker che hanno eseguito il polling negli ultimi 30 secondi. Usalo per gli avvisi di liveness.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
}Usa work.stop per chiedere al worker che gestisce una sessione specifica di arrestarla. Per impostazione predefinita l'elemento di lavoro passa a stopping: il worker se ne accorge al successivo heartbeat del lease, annulla la chiamata allo strumento in corso della sessione e conferma l'arresto, momento in cui l'elemento di lavoro diventa stopped. Passa force: true nel corpo della richiesta (con la CLI, passa --force) per contrassegnare immediatamente l'elemento di lavoro come stopped invece di attendere la conferma del worker.
Poiché queste chiamate vengono eseguite dai tuoi strumenti operativi anziché dall'host del worker, ANTHROPIC_WORK_ID non viene impostato automaticamente. Impostalo sull'ID dell'elemento di lavoro di destinazione prima di eseguire gli esempi seguenti. Per trovare l'ID di un elemento di lavoro, elenca gli elementi di lavoro dell'ambiente tramite gli endpoint 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)Modello di responsabilità condivisa per gli ambienti sandbox self-hosted.
Crea una sessione per eseguire il tuo agente e iniziare a eseguire attività.
Connetti in modo sicuro Claude ai server MCP in esecuzione nella tua rete privata senza aprire porte in ingresso o esporre servizi alla rete Internet pubblica.
Was this page helpful?