De forma predeterminada, Managed Agents ejecuta herramientas y código dentro de sandboxes en la nube administrados por Anthropic. Los sandboxes autoalojados mantienen la orquestación del lado de Anthropic pero trasladan la ejecución de herramientas a infraestructura que tú controlas, de modo que el código del agente, el sistema de archivos y la salida de red nunca abandonan tu entorno.
La ejecución de herramientas permanece en tu host: el sistema de archivos que el agente lee y escribe, los procesos que genera y la red a la que puede acceder están todos bajo tu control. Las entradas y salidas de las herramientas siguen fluyendo hacia el plano de control de Anthropic (donde se ejecuta Claude) para que el modelo pueda ver los resultados y determinar qué hacer a continuación. Consulta el modelo de seguridad para conocer el límite completo del flujo de datos.
Los sandboxes autoalojados admiten todos los modelos de Claude disponibles en Managed Agents, incluidos Claude Opus 4.8 y Claude Opus 5. El modelo se configura en el agente, no en el entorno.
| Entorno en la nube | Sandbox autoalojado | |
|---|---|---|
| Dónde se ejecutan las herramientas | Sandboxes administrados por Anthropic | Tu infraestructura |
| Alcance de red | Controles de salida de Anthropic | Tu política de red |
| Montaje de archivos y repositorios de GitHub | Administrado por Anthropic | Administrado por ti |
| Ciclo de vida | Administrado por Anthropic | Administrado por ti |
El autoalojamiento es una buena opción cuando el agente necesita operar con datos que no pueden salir de tu límite de red, acceder a servicios internos que no son enrutables públicamente o ejecutarse bajo los controles de cumplimiento y auditoría propios de tu organización.
Para la elegibilidad de Zero Data Retention y HIPAA BAA, consulta API y retención de datos.
El autoalojamiento controla dónde se ejecuta el código del agente. Los túneles MCP controlan cómo Anthropic accede a los servidores MCP en tu red. Son independientes: una sesión que se ejecuta en los sandboxes en la nube de Anthropic aún puede acceder a servidores MCP privados a través de un túnel, y una sesión autoalojada puede usar servidores MCP tunelizados o públicos. Usa ambos cuando quieras que la ejecución y el acceso a herramientas permanezcan dentro de tu límite. Para darle al agente herramientas de un servidor MCP dentro de tu red sin ejecutar un túnel, también puedes envolver el servidor como herramientas personalizadas servidas por tu worker.
Esta guía describe cómo construir un worker con cualquier plataforma genérica de sandboxing. Hay guías adicionales específicas de plataforma disponibles para AWS Lambda MicroVMs, Blaxel, Cloudflare, Daytona, E2B, GKE Agent Sandbox, Modal, Namespace, Superserve y Vercel.
Un worker de entorno es un proceso que ejecutas en tu propia infraestructura. Recibe solicitudes de ejecución de herramientas de Anthropic y las ejecuta localmente. El entorno self_hosted actúa como una cola de trabajo: cuando se le asigna una sesión, Anthropic encola la sesión como un elemento de trabajo. Tu worker reclama elementos de trabajo de esa cola, genera un contexto de ejecución para cada uno, descarga las skills del agente (recursos reutilizables basados en el sistema de archivos que le dan al agente experiencia específica de dominio), ejecuta las llamadas a herramientas y publica los resultados de vuelta.
Los elementos de trabajo se reclaman sondeando la cola del entorno: ya sea mediante un worker siempre activo que sondea continuamente, o un manejador activado por webhook que se despierta con session.status_run_started y comienza a sondear.
Tanto la CLI como el SDK incluyen workers preconstruidos. La CLI ant solo admite el patrón siempre activo; el SDK admite tanto el siempre activo como el activado por webhook. Ambos son configurables: consulta Worker autoalojado en la referencia para los flags de la CLI, y Helpers del SDK en esta página para las opciones del SDK. Para mayor control, llama directamente a los endpoints de Environments Work e implementa tu propio worker.
/workspace: el directorio de trabajo predeterminado del sistema para la ejecución de herramientas y la descarga de skills. El flag --workdir de la CLI usa de forma predeterminada el directorio actual; pasa --workdir /workspace para coincidir con el valor predeterminado del sistema. Las skills se descargan en <workdir>/skills/<name>/. Si usas un directorio de trabajo diferente, actualiza la indicación del sistema de tu agente para que Claude pueda localizar los archivos de las skills./mnt/session/outputs usada en los sandboxes administrados por Anthropic, por lo que los entregables finales terminan donde el agente los escriba en el sistema de archivos de tu sandbox, típicamente bajo el directorio de trabajo.Necesitas:
/bin/bash en esa ruta exacta. La herramienta bash del worker lo invoca directamente, sin consultar PATH. El SDK de TypeScript requiere adicionalmente unzip y tar en el PATH y Node.js 22 o posterior; los SDK de Python y Go usan sus bibliotecas estándar para la extracción de archivos y no tienen requisitos binarios adicionales.ant o un SDK de Anthropic (Python, TypeScript o Go) en el host del worker.En Claude Platform on AWS, el worker se autentica con AWS IAM (SigV4) o una clave de API generada en la AWS Console, no con una clave de entorno. Adjunta la política administrada AnthropicSelfHostedEnvironmentAccess al principal de IAM con el que se ejecuta tu worker. Las claves de entorno generadas en la Claude Console no funcionan con el endpoint de Claude Platform on AWS.
Crea un entorno autoalojado
En la Console: Workspace > Environments > New > Self-hosted
O a través de la API:
client = anthropic.Anthropic()
environment = client.beta.environments.create(
name="self-hosted", config={"type": "self_hosted"}
)
print(environment.id)Genera una clave de entorno
En la Console, abre el entorno y haz clic en Generate environment key. La generación de claves es solo desde la Console, independientemente de si creaste el entorno a través de la Console o de la API. Luego exporta el ID del entorno y la clave en el host del worker:
export ANTHROPIC_ENVIRONMENT_KEY="sk-ant-oat01-..."
export ANTHROPIC_ENVIRONMENT_ID="env_..."Las skills pueden incluir ejecutables que el agente puede ejecutar directamente. Los workers de la CLI y del SDK preservan los permisos de ejecución registrados en el paquete de la skill cuando lo extraen. Si implementas la descarga de skills manualmente, eres responsable de establecer los permisos de ejecución.
Elige siempre activo para la configuración más simple: un proceso de larga duración sondea la cola continuamente y solo necesita HTTPS saliente. Elige activado por webhook para evitar ejecutar un sondeador inactivo; requiere un endpoint de webhook al que Anthropic pueda acceder (consulta Webhooks para la configuración del endpoint y la verificación de firmas).
Instala la CLI ant
Ejecuta esto en el host del worker.
Para entornos Linux, descarga el binario de la versión directamente.
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 antPuedes encontrar todas las versiones en la página de versiones de GitHub.
Ejecuta el worker
En el proceso
ant beta:worker poll reclama elementos de trabajo asignados al entorno, descarga skills, ejecuta llamadas a herramientas en el directorio de trabajo y publica los resultados de vuelta. Lee ANTHROPIC_ENVIRONMENT_KEY y ANTHROPIC_ENVIRONMENT_ID del entorno.
ant beta:worker poll \
--workdir "/workspace"El worker sale limpiamente con SIGTERM o SIGINT: cancela cualquier llamada a herramienta en curso, publica su resultado de error y libera el elemento de trabajo antes de detenerse.
Sandbox por sesión
Si necesitas un aislamiento más fuerte (un sistema de archivos nuevo, límites de recursos o controles de red por sesión), ejecuta cada sesión en su propio sandbox. Construye una imagen con ant instalado y ant beta:worker run como punto de entrada. La imagen base debe proporcionar /bin/bash; curl solo se usa en tiempo de construcción. Cuando un sandbox se inicia, lee los detalles de la sesión desde variables de entorno, maneja esa sesión y sale:
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"]Luego escribe un script de generación que reenvíe los detalles de la sesión a un sandbox nuevo. El sondeador inyecta ANTHROPIC_SESSION_ID, ANTHROPIC_WORK_ID, ANTHROPIC_ENVIRONMENT_ID y ANTHROPIC_ENVIRONMENT_KEY en el entorno del script. ANTHROPIC_BASE_URL es opcional y se pasa solo si se estableció en el host del sondeador; anula el endpoint de API predeterminado. En el ejemplo, /host/outputs es un directorio del host que tú eliges; se monta mediante bind-mount en el directorio de trabajo del sandbox (/workspace) para que puedas recuperar los entregables de la sesión después de que el sandbox salga. En entornos autoalojados, el agente escribe los entregables bajo el directorio de trabajo en lugar de /mnt/session/outputs (consulta Sistema de archivos del sandbox), por lo que montar el directorio de trabajo es lo que los captura; el montaje también recoge el árbol skills/ descargado y cualquier archivo intermedio que el agente cree.
#!/bin/bash
# spawn.sh: se llama una vez por cada elemento de trabajo reclamado
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-imageInicia el sondeador apuntando al script:
ant beta:worker poll \
--on-work ./spawn.shEl SDK proporciona tres helpers en diferentes niveles de control. EnvironmentWorker cubre la mayoría de los casos de uso; baja a los helpers de nivel inferior cuando necesites lanzar tu propio proceso por sesión o ejecutar herramientas contra una sesión ya reclamada.
EnvironmentWorker: el worker listo para usar. Maneja el sondeo, la configuración y la ejecución de principio a fin.
.run(): se ejecuta indefinidamente, recogiendo sesiones a medida que llegan..handle_item(): maneja un único elemento de trabajo reclamado y sale. Pasa los identificadores de trabajo, sesión y entorno explícitamente, o deja que lea las variables ANTHROPIC_* que ant beta:worker poll --on-work establece para el proceso que genera.work.poller(): sondea la cola de trabajo en tu nombre y te entrega cada sesión reclamada. Usa esto cuando quieras decidir qué sucede con cada sesión, por ejemplo, lanzar un sandbox en lugar de ejecutar herramientas en el proceso.
drain: si se debe dejar de sondear una vez que la cola esté vacía en lugar de esperar nuevo trabajo.block_ms: cuánto tiempo esperar a que llegue trabajo antes de retornar, en milisegundos. Debe estar entre 1 y 999 (espera por sondeo; el helper vuelve a sondear automáticamente). Pasa null (None en Python, param.Null[int64]() en Go) para una verificación no bloqueante; omitir el parámetro usa el long-poll predeterminado de 999 ms.reclaim_older_than_ms: vuelve a reclamar elementos de trabajo que fueron reclamados pero nunca confirmados dentro de esta cantidad de milisegundos.auto_stop: si se debe publicar una señal de detención para cada elemento de trabajo una vez que el cuerpo de tu bucle termine con él. El sondeador de Go no tiene opción de exclusión y siempre publica la señal de detención, así que bloquea en el cuerpo del bucle hasta que la sesión se complete en lugar de desacoplarte.client.beta.sessions.events.tool_runner(): ejecuta llamadas a herramientas para una única sesión, dado el ID de sesión y una lista de herramientas. Úsalo cuando ya hayas reclamado el trabajo y solo necesites la capa de ejecución.Usa el sondeador de trabajo directamente cuando quieras lanzar tu propio proceso por sesión, por ejemplo, iniciando un sandbox para cada sesión reclamada:
import asyncio
import os
from anthropic import AsyncAnthropic
from anthropic.types.beta.environments import BetaSelfHostedWork
async def launch_container(work: BetaSelfHostedWork) -> None:
# Reemplaza con tu propio lanzador de sandbox por sesión. Pasa
# ANTHROPIC_ENVIRONMENT_KEY al sandbox lanzado, nunca
# tu clave de 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 es el contexto de ejecución para las llamadas a herramientas. Define el directorio de trabajo y la política de rutas, y puede descargar las skills de la sesión. beta_agent_toolset_20260401(env) toma un AgentToolContext y devuelve las implementaciones estándar de herramientas (bash, read, write, edit, glob, grep).
Con EnvironmentWorker: ambos se administran automáticamente. Pasa una fábrica tools para personalizar la lista de herramientas:
EnvironmentWorker(client, ..., tools=lambda env: [beta_bash_tool(env), my_custom_tool])Con work.poller() y tool_runner(): pasa una lista de herramientas como tools a client.beta.sessions.events.tool_runner(). Para construir esa lista, configura AgentToolContext tú mismo y llama a 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 descargadas en /workspace/skills/<name>/
tools = beta_agent_toolset_20260401(env)Desde una shell separada, con ANTHROPIC_API_KEY establecida en tu clave de API de Claude (no la clave de entorno), confirma que workers_polling sea al menos 1:
ant beta:environments:work stats --environment-id "$ANTHROPIC_ENVIRONMENT_ID"Si workers_polling permanece en 0, el worker no está alcanzando la cola: confirma que ANTHROPIC_ENVIRONMENT_KEY y ANTHROPIC_ENVIRONMENT_ID estén establecidas en el host del worker. Consulta Leer la profundidad de la cola para la respuesta completa de estadísticas y ejemplos en otros lenguajes.
Una vez que tu worker esté en ejecución, crea una sesión que apunte al entorno. Establece AGENT_ID en el ID de agente que anotaste en Antes de comenzar. La sesión entra en la cola de trabajo del entorno y espera allí hasta que un worker la reclame; si no hay ningún worker conectado, la sesión permanece en cola en lugar de fallar.
Anthropic no monta archivos ni repositorios de GitHub en sandboxes autoalojados. Para hacer disponibles archivos específicos de la sesión, pasa referencias de archivos (como una ruta de S3 o un SHA de commit) en el campo metadata de la sesión. El elemento de trabajo reclamado no lleva los metadatos de la sesión, pero sí lleva el ID de la sesión: tu script de generación o manejador --on-work recupera la sesión (GET /v1/sessions/{session_id}) para leer el campo metadata, y luego prepara los archivos en el directorio de trabajo antes de que comience la ejecución de herramientas.
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
metadata={"input_file": "s3://my-bucket/data.csv"},
)Los sandboxes autoalojados no admiten entradas resources; una sesión que incluya cualquier recurso en un entorno autoalojado es rechazada.
Consulta Worker autoalojado en la referencia para la lista completa de flags de la CLI, y Helpers del SDK para las opciones de helpers del SDK.
Las herramientas personalizadas son herramientas que tu propio código ejecuta: el agente emite un evento agent.custom_tool_use y espera un user.custom_tool_result coincidente. El worker puede ser ese código, y como se ejecuta dentro de tu sandbox, la herramienta alcanza los servicios internos, las credenciales y la salida de red que configuraste para el sandbox, y nada más. La clave de entorno autoriza la publicación de resultados de herramientas personalizadas, por lo que tu clave de API de Claude se mantiene fuera del host del worker.
Servir herramientas personalizadas requiere el worker del SDK: el worker de la CLI ant no tiene forma de registrar una implementación de herramienta personalizada. En el patrón de sandbox por sesión, ejecuta EnvironmentWorker dentro del sandbox con handle_item() (handleItem en TypeScript, HandleItem en Go) en lugar de ant beta:worker run.
Declara la herramienta en el agente
Agrega una entrada custom a las tools del agente cuyo name coincida con la herramienta que tu worker registra. Consulta Herramientas personalizadas para la forma completa de la declaración.
{
"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 la implementación con el worker
Pasa la herramienta a través de la fábrica tools del worker (consulta Helpers del SDK), junto con el conjunto de herramientas integrado:
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."""
# Se ejecuta en el host del worker: llama a cualquier cosa que el sandbox pueda alcanzar.
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())El worker responde solo a las herramientas registradas con él. Una herramienta personalizada que está declarada en el agente pero no registrada con ningún worker o cliente deja la sesión pausada con una razón de detención requires_action hasta que algo publique su resultado; consulta Manejo de llamadas a herramientas personalizadas para el flujo de eventos.
El conector MCP se conecta a servidores MCP desde el lado de Anthropic, por lo que un servidor debe exponer un endpoint HTTP al que Anthropic pueda acceder, directamente o a través de un túnel MCP. Para usar un servidor al que solo tu red puede acceder, haz que el worker sea el cliente MCP en su lugar y declara las herramientas del servidor como herramientas personalizadas. El servidor MCP no necesita conectividad entrante desde fuera de tu red; Anthropic recibe las definiciones de herramientas que declaras en el agente, la entrada de cada llamada y el resultado que tu worker publica de vuelta. En tiempo de ejecución, el modelo llama a una herramienta envuelta como cualquier otra herramienta personalizada:
agent.custom_tool_use.user.custom_tool_result.Los helpers MCP del lado del cliente de los SDK convierten las herramientas del servidor en las herramientas ejecutables que el worker acepta; instala un SDK de MCP junto con el SDK de Anthropic (pip install "anthropic[mcp]" "mcp>=1.24", npm install @modelcontextprotocol/sdk, go get github.com/modelcontextprotocol/go-sdk). Los ejemplos se conectan sin autenticación; para enviar credenciales, configura el cliente HTTP o las opciones de solicitud que le entregas al transporte MCP (http_client en Python, requestInit en TypeScript, HTTPClient en Go).
Declara las herramientas del servidor en el agente
Lista las herramientas del servidor MCP y declara cada una como una herramienta custom; el name, description e inputSchema de MCP se mapean uno a uno con los campos de la herramienta personalizada. Si el servidor pagina su lista de herramientas, declara cada página; el worker debe listar las mismas páginas.
import asyncio
from typing import Any, cast
from anthropic import AsyncAnthropic
from anthropic.types.beta import BetaManagedAgentsCustomToolParams
from mcp import ClientSession, types
# Requiere mcp >= 1.24, que renombró streamablehttp_client a 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:
# Los campos MCP se corresponden uno a uno con una declaración de herramienta personalizada. El cast
# entrega el diccionario del esquema al parámetro tipado del SDK sin cambios.
return {
"type": "custom",
"name": tool.name,
"description": tool.description or tool.name,
"input_schema": cast(Any, tool.inputSchema),
}
async def main() -> None:
# Ejecuta esto donde crees los agentes, no en el host worker:
# se autentica con tu clave de API de 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())Sirve las herramientas desde el worker
Conéctate al mismo servidor MCP al inicio, convierte sus herramientas con los helpers MCP y regístralas junto con el conjunto de herramientas integrado. Mantén una sesión MCP abierta durante la vida 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
# Requiere mcp >= 1.24, que renombró streamablehttp_client a 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"]
# Conéctate al servidor MCP una vez al inicio y mantén la sesión abierta durante
# la vida del worker. El timeout convierte una llamada a herramienta colgada en un
# resultado de error en lugar de una llamada estancada.
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())Ten en cuenta lo siguiente cuando envuelvas un servidor MCP:
tools de un agente acepta como máximo 128 entradas (cada herramienta envuelta es una entrada, y el conjunto de herramientas integrado es una más). La API rechaza una declaración que reutilice un nombre de herramienta, nombre una herramienta personalizada igual que una herramienta integrada del agente como bash o read, o use el prefijo reservado mcp__. Los helpers MCP conservan los nombres y descripciones del servidor, así que renombra o recorta donde sea necesario. Cuando dos servidores exponen el mismo nombre de herramienta, define el envoltorio tú mismo bajo un nombre con prefijo y haz que llame al nombre original de la herramienta del servidor.additionalProperties y title. Rechaza palabras clave de referencia como $ref en cualquier parte del input_schema de una herramienta personalizada, así que incorpora en línea los esquemas que generadores como pydantic factorizan en $defs. También rechaza oneOf, anyOf y allOf de nivel superior, y nombres de propiedades fuera de letras, dígitos, guiones bajos, puntos y guiones (1–64 caracteres).read_timeout_seconds. Sin uno, una llamada colgada se convierte en un resultado de error solo cuando se dispara el tiempo de espera de solicitud predeterminado del SDK MCP de TypeScript (alrededor de un minuto) o cuando lo hace el respaldo propio del worker: alrededor de dos minutos y medio en Python, y dos minutos en Go, donde el worker cancela una llamada a herramienta que sobrevive a su valor predeterminado de 120 segundos y publica un resultado de error.bash en el host del worker. Declara solo las herramientas que pretendes que el agente use.Estas llamadas se ejecutan desde tus herramientas de monitoreo u operaciones, autenticadas con tu clave de API de Claude, para observar y administrar la flota de workers. El bucle de reclamación y keep-alive se maneja dentro de los helpers del worker, por lo que no llamas a esos endpoints directamente.
Estos endpoints aceptan tu clave de API de organización o la clave de entorno. Llámalos desde fuera del host del worker con tu clave de API de organización. Establecer ANTHROPIC_API_KEY en el host del worker expone una credencial con alcance de organización a las llamadas a herramientas del agente.
work.stats devuelve el estado de la cola para un entorno:
depth es el número de elementos esperando a ser reclamados. Escala tu flota de workers o genera alertas sobre el backlog basándote en este valor.pending es el número de elementos reclamados por un worker pero aún no confirmados. Los helpers del worker confirman cada elemento antes de procesarlo, por lo que este valor se mantiene cerca de cero en operación normal; un valor distinto de cero sostenido significa que un worker se detuvo entre reclamar y confirmar.oldest_queued_at es la marca de tiempo del elemento más antiguo que aún está en la cola, esperando a ser reclamado o reclamado pero aún no confirmado, o null cuando no hay ninguno.workers_polling es el número de workers que han sondeado en los últimos 30 segundos. Usa esto para alertas de actividad.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 para pedirle al worker que maneja una sesión específica que la apague. De forma predeterminada, el elemento de trabajo pasa a stopping: el worker lo detecta en su siguiente latido de lease, cancela la llamada a herramienta en curso de la sesión y confirma el apagado, momento en el cual el elemento de trabajo pasa a stopped. Pasa force: true en el cuerpo de la solicitud (con la CLI, pasa --force) para marcar el elemento de trabajo como stopped inmediatamente en lugar de esperar la confirmación del worker.
Debido a que estas llamadas se ejecutan desde tus herramientas de operaciones en lugar del host del worker, ANTHROPIC_WORK_ID no se establece automáticamente. Configúralo con el ID del elemento de trabajo objetivo antes de ejecutar los siguientes ejemplos. Para encontrar el ID de un elemento de trabajo, lista los elementos de trabajo del entorno a través de los endpoints de Work de Environments.
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)Modelo de responsabilidad compartida para entornos de sandbox autoalojados.
Crea una sesión para ejecutar tu agente y comenzar a ejecutar tareas.
Conecta Claude de forma segura a servidores MCP que se ejecutan en tu red privada sin abrir puertos de entrada ni exponer servicios a la internet pública.
Was this page helpful?