Was this page helpful?
La comunicación con Claude Managed Agents es basada en eventos. Envías eventos de usuario al agente y recibes eventos de agente y sesión para rastrear el estado.
Todas las solicitudes de la API de Managed Agents requieren el encabezado beta managed-agents-2026-04-01. El SDK establece el encabezado beta automáticamente.
Los eventos fluyen en dos direcciones.
Las cadenas de tipo de evento siguen una convención de nombres {domain}.{action}.
Cada evento incluye una marca de tiempo processed_at indicando cuándo fue registrado el evento en el servidor. Si processed_at es nulo, significa que el evento ha sido puesto en cola por el arnés y será manejado después de que los eventos anteriores terminen de procesarse.
Cuando el agente invoca una herramienta personalizada:
agent.custom_tool_use que contiene el nombre de la herramienta y la entrada.session.status_idle que contiene stop_reason: requires_action. Los IDs de eventos de bloqueo están en el array stop_reason.requires_action.event_ids.user.custom_tool_result para cada uno, pasando el ID del evento en el parámetro custom_tool_use_id junto con el contenido del resultado.running.Cuando una política de permisos requiere confirmación antes de que se ejecute una herramienta:
agent.tool_use o agent.mcp_tool_use.session.status_idle que contiene stop_reason: requires_action. Los IDs de eventos de bloqueo están en el array stop_reason.requires_action.event_ids.user.tool_confirmation para cada uno, pasando el ID del evento en el parámetro tool_use_id. Establece result en "allow" o "deny". Usa deny_message para explicar un rechazo.running.El objeto de sesión incluye un campo usage con estadísticas de tokens acumulativos. Obtén la sesión después de que se quede inactiva para leer los totales más recientes y úsalos para rastrear costos, aplicar presupuestos o monitorear el consumo.
{
"id": "sesn_01...",
"status": "idle",
"usage": {
"input_tokens": 5000,
"output_tokens": 3200,
"cache_creation_input_tokens": 2000,
"cache_read_input_tokens": 20000
}
}input_tokens reporta tokens de entrada sin caché y output_tokens reporta tokens de salida totales en todas las llamadas de modelo en la sesión. Los campos cache_creation_input_tokens y cache_read_input_tokens reflejan la actividad de almacenamiento en caché de indicaciones. Las entradas de caché utilizan un TTL de 5 minutos, por lo que los turnos consecutivos dentro de esa ventana se benefician de lecturas de caché, que reducen el costo por token.
with client.beta.sessions.events.stream(session.id) as stream:
for event in stream:
if event.type == "session.status_idle" and (stop := event.stop_reason):
match stop.type:
case "requires_action":
for event_id in stop.event_ids:
# Look up the custom tool use event and execute it
tool_event = events_by_id[event_id]
result = call_tool(tool_event.name, tool_event.input)
# Send the result back
client.beta.sessions.events.send(
session.id,
events=[
{
"type": "user.custom_tool_result",
"custom_tool_use_id": event_id,
"content": [{"type": "text", "text": result}],
},
],
)
case "end_turn":
breakwith client.beta.sessions.events.stream(session.id) as stream:
for event in stream:
if event.type == "session.status_idle" and (stop := event.stop_reason):
match stop.type:
case "requires_action":
for event_id in stop.event_ids:
# Approve the pending tool call
client.beta.sessions.events.send(
session.id,
events=[
{
"type": "user.tool_confirmation",
"tool_use_id": event_id,
"result": "allow",
},
],
)
case "end_turn":
break