Per impostazione predefinita, Managed Agents esegue strumenti e codice all'interno di sandbox cloud gestite da Anthropic. Le sandbox self-hosted mantengono l'orchestrazione sul lato di Anthropic ma spostano l'esecuzione degli strumenti nell'infrastruttura che controlli, 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 genera e la rete che può raggiungere sono tutti sotto il tuo controllo. Gli input e gli output degli strumenti continuano a fluire verso il control plane 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.
| Ambiente cloud | Sandbox self-hosted | |
|---|---|---|
| Dove vengono eseguiti gli strumenti | Sandbox gestite da Anthropic | La tua infrastruttura |
| Accesso di rete | Controlli di uscita di Anthropic | La tua policy di rete |
| Mounting 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 perimetro della tua rete, raggiungere servizi interni che non sono instradabili pubblicamente o essere eseguito 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ò utilizzare server MCP sia tunnelizzati che pubblici. Usa entrambi quando vuoi che l'esecuzione e l'accesso agli strumenti rimangano all'interno del tuo perimetro. 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.
Un environment worker è un processo che esegui sulla tua infrastruttura. Riceve richieste di esecuzione degli 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, genera 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 invia i risultati.
Gli elementi di lavoro vengono rivendicati interrogando la coda dell'ambiente: tramite un worker sempre attivo che interroga continuamente, oppure un handler attivato da webhook che si risveglia su session.status_run_started e inizia a interrogare.
Sia la CLI che l'SDK forniscono worker precostruiti. La CLI ant supporta solo il pattern sempre attivo; l'SDK supporta sia quello sempre attivo che quello attivato da webhook. Entrambi sono configurabili: consulta Self-hosted worker nel riferimento per i flag della CLI, e Helper 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 utilizzata nelle sandbox gestite da Anthropic, quindi i deliverable finali vengono salvati ovunque l'agente li scriva nel filesystem della tua sandbox, tipicamente sotto la directory di lavoro.Ti servono:
/bin/bash in quel percorso esatto. 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 utilizzano 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.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. Quindi esporta l'ID e la chiave dell'ambiente sull'host del worker:
export ANTHROPIC_ENVIRONMENT_KEY="sk-ant-oat01-..."
export ANTHROPIC_ENVIRONMENT_ID="env_..."Scegli sempre attivo per la configurazione più semplice: un processo a lunga esecuzione interroga continuamente la coda 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 comando sull'host del worker.
Per ambienti Linux, scarica direttamente il binario della release.
VERSION=1.22.1
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 invia 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 strumento in corso, invia il relativo risultato di errore e rilascia l'elemento di lavoro prima di arrestarsi.
Sandbox per sessione
Se hai bisogno di un isolamento più forte (un filesystem nuovo, limiti di risorse o controlli di rete per sessione), esegui ogni sessione nella propria sandbox. Crea un'immagine con ant installato e ant beta:worker run come entrypoint. L'immagine base deve fornire /bin/bash; curl è utilizzato solo in fase di build. Quando una sandbox si avvia, legge i dettagli della sessione dalle variabili d'ambiente, gestisce quella sessione e termina:
FROM your-base-image
ARG ANT_VERSION=1.22.1
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"]Quindi scrivi uno script di spawn 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 a tua scelta; viene montata tramite bind mount 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 dall'inizio alla fine.
.run(): viene eseguito indefinitamente, prelevando le sessioni man mano che arrivano..handle_item(): gestisce un singolo elemento di lavoro rivendicato e termina. 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 genera.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 di lavoro prima di restituire, in millisecondi. Deve essere compreso tra 1 e 999 (attesa per singolo poll; l'helper ripete automaticamente il polling). Passa null (None in Python, param.Null[int64]() in Go) per un controllo non bloccante; omettere il parametro utilizza 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 inviare un segnale di stop per ogni elemento di lavoro una volta che il corpo del tuo loop ha finito di elaborarlo. Il poller Go non ha opt-out e invia sempre il segnale di stop, quindi blocca nel corpo del loop fino al completamento della sessione anziché distaccarti.client.beta.sessions.events.tool_runner(): esegue le chiamate agli strumenti per una singola sessione, dato 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 creando 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 nella 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) accetta 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 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 punta 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 un 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 spawn o handler --on-work recupera la sessione (GET /v1/sessions/{session_id}) per leggere il campo metadata, quindi 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"},
)Consulta Self-hosted worker nel riferimento per l'elenco completo dei flag della CLI, e Helper SDK per le opzioni degli helper SDK.
Gli strumenti personalizzati sono strumenti che il tuo codice esegue: l'agente emette un evento agent.custom_tool_use e attende un user.custom_tool_result corrispondente. 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 l'invio dei risultati degli strumenti personalizzati, quindi la tua chiave API Claude rimane fuori dall'host del worker.
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 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 nessun worker o client lascia la sessione in pausa con uno stop reason requires_action finché qualcosa non invia il suo risultato; consulta Gestione delle chiamate agli 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 attraverso un tunnel MCP. Per utilizzare un server che solo la tua rete può raggiungere, rendi invece il worker il client MCP e dichiara gli strumenti del server come strumenti personalizzati. Il server MCP non necessita di connettività in entrata 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 invia. 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; name, description e inputSchema di MCP corrispondono uno a uno ai 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 durata 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, nomina uno strumento personalizzato come uno strumento agente integrato quale bash o read, o utilizza 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 fallo 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 incorpora inline gli schemi che generatori come pydantic fattorizzano in $defs. Rifiuta anche oneOf, anyOf e allOf a livello superiore, e nomi di proprietà al di fuori di lettere, cifre, underscore, 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 lo fa 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 invia un risultato di errore.bash sull'host del worker. Dichiara solo gli strumenti che intendi far utilizzare all'agente.Queste chiamate vengono eseguite dai tuoi strumenti di monitoraggio o operazioni, autenticate con la tua chiave API 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.
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 genera 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 sostenuto 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 interrogato 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, il work item passa allo stato stopping: il worker se ne accorge al successivo heartbeat del lease, annulla la chiamata allo strumento in corso della sessione e conferma l'arresto, a quel punto il work item diventa stopped. Passa force: true nel corpo della richiesta (con la CLI, passa --force) per contrassegnare immediatamente il work item 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 del work item di destinazione prima di eseguire gli esempi seguenti. Per trovare l'ID di un work item, elenca i work item 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 a Internet pubblico.
Was this page helpful?