Loading...
    • Construir
    • Administración
    • Modelos y precios
    • SDKs de cliente
    • Referencia de la API
    Search...
    ⌘K
    Administración
    Descripción general de la API de administraciónEspacios de trabajoResidencia de datosRetención de API y datos
    Monitoreo
    API de análisis de Claude CodeAPI de uso y costos
    Plataformas de terceros
    Amazon BedrockMicrosoft FoundryVertex AI
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    Administración

    Migración

    Migra un agente existente construido en la API de Mensajes o el SDK del Agente Claude a Claude Managed Agents.

    Was this page helpful?

    • Desde un bucle de agente de la API de Mensajes
    • Qué dejas de administrar
    • Comparación de código
    • Qué aún controlas
    • Desde el SDK del Agente Claude
    • Qué cambia
    • Comparación de código
    • Características que se trasladan a tu cliente
    • Lista de verificación de migración
    • Migración entre versiones de modelo

    Claude Managed Agents reemplaza tu bucle de agente escrito a mano con infraestructura administrada. Esta página cubre qué cambios cuando migras desde un bucle personalizado construido en la API de Mensajes o desde el SDK del Agente Claude.

    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.

    Desde un bucle de agente de la API de Mensajes

    Si construiste un agente llamando a messages.create en un bucle while, ejecutando llamadas de herramientas tú mismo y añadiendo resultados al historial de conversación, la mayoría de ese código desaparece.

    Qué dejas de administrar

    AntesDespués
    Mantienes el array del historial de conversación y lo pasas en cada turno.La sesión almacena el historial en el servidor. Envía eventos, recibe eventos.
    Analizas stop_reason: "tool_use", ejecutas la herramienta y vuelves al bucle con un mensaje tool_result.Las herramientas preintegradas se ejecutan dentro del contenedor automáticamente. Solo manejas herramientas personalizadas a través de eventos agent.custom_tool_use.
    Aprovisionas tu propio sandbox para ejecutar código generado por el agente.El contenedor de sesión maneja la ejecución de código, operaciones de archivos y bash.
    Decides cuándo termina el bucle.La sesión emite session.status_idle cuando el agente no tiene nada más que hacer.

    Comparación de código

    Antes (bucle de API de Mensajes, simplificado):

    Después (Claude Managed Agents):

    Qué aún controlas

    • Indicación del sistema y modelo: Los mismos campos, ahora en la definición del agente.
    • Herramientas personalizadas: Aún se declaran con JSON Schema. La ejecución se mueve del manejo en línea a responder a eventos agent.custom_tool_use. Ver Flujo de eventos de sesión.
    • Contexto: Aún puedes inyectar contexto a través de la indicación del sistema, recursos de archivo, o habilidades.

    Desde el SDK del Agente Claude

    Si construiste con el SDK del Agente Claude, ya estás trabajando con agentes, herramientas y sesiones como conceptos. La diferencia es dónde se ejecutan: el SDK se ejecuta en un proceso que operas, mientras que Managed Agents se ejecuta en la infraestructura de Anthropic. La mayoría de la migración es mapear objetos de configuración del SDK a sus equivalentes del lado de la API.

    Qué cambia

    SDK del AgenteManaged Agents
    ClaudeAgentOptions(...) construido por ejecuciónclient.beta.agents.create(...) una vez; el Agente se persiste y se versionea en el servidor. Ver Configuración del Agente.
    async with ClaudeSDKClient(...) o query(...)client.beta.sessions.create(...) luego envía y recibe eventos.
    Funciones decoradas con @tool despachadas automáticamente por el SDKDeclara como {"type": "custom", ...} en el Agente; tu cliente maneja eventos agent.custom_tool_use y responde con user.custom_tool_result. Ver Herramientas.
    Las herramientas integradas se ejecutan en tu proceso contra tu sistema de archivos ejecuta las mismas herramientas dentro del contenedor de sesión contra .

    Comparación de código

    Antes (SDK del Agente):

    from claude_agent_sdk import (
        ClaudeAgentOptions,
        ClaudeSDKClient,
        create_sdk_mcp_server,
        tool,
    )
    
    
    @tool("get_weather", "Get the current weather for a city.", {"city": str})
    async def get_weather(args: dict) -> dict:
        return {"content": [{"type": "text", "text": f"{args['city']}: 18°C, clear"}]}
    
    
    options = ClaudeAgentOptions(
        model="claude-sonnet-4-6",
        system_prompt="You are a concise weather assistant.",
        mcp_servers={
            "weather": create_sdk_mcp_server("weather", "1.0", tools=[get_weather])
        },
    )
    
    async with ClaudeSDKClient(options=options) as agent:
        await agent.query("What's the weather in Tokyo?")
        async for msg in agent.receive_response():
            print(msg)

    Después (Managed Agents):

    from anthropic import Anthropic
    
    client = Anthropic()
    
    agent = client.beta.agents.create(
        name="weather-agent",
        model="claude-sonnet-4-6",
        system="You are a concise weather assistant.",
        tools=[
            {
                "type": "custom",
                "name": "get_weather",
                "description": "Get the current weather for a city.",
                "input_schema": {
                    "type": "object",
                    "properties": {"city": {"type": "string"}},
                    "required": ["city"],
                },
            }
        ],
    )
    environment = client.beta.environments.create(
        name="weather-env",
        config={"type": "cloud", "networking": {"type": "unrestricted"}},
    )
    
    session = client.beta.sessions.create(
        agent={"type": "agent", "id": agent.id, "version": agent.version},
        environment_id=environment.id,
    )
    
    
    def get_weather(city: str) -> str:
        return f"{city}: 18°C, clear"
    
    
    with client.beta.sessions.events.stream(session.id) as stream:
        client.beta.sessions.events.send(
            session.id,
            events=[
                {
                    "type": "user.message",
                    "content": [{"type": "text", "text": "What's the weather in Tokyo?"}],
                }
            ],
        )
        for ev in stream:
            if ev.type == "agent.message":
                print("".join(b.text for b in ev.content))
            elif ev.type == "agent.custom_tool_use":
                result = get_weather(**ev.input)
                client.beta.sessions.events.send(
                    session.id,
                    events=[
                        {
                            "type": "user.custom_tool_result",
                            "custom_tool_use_id": ev.id,
                            "content": [{"type": "text", "text": result}],
                        }
                    ],
                )
            elif ev.type == "session.status_idle" and ev.stop_reason.type == "end_turn":
                break

    El Agente y el Entorno se crean una vez y se reutilizan en todas las sesiones. La función de herramienta aún se ejecuta en tu proceso; la diferencia es que lees el evento agent.custom_tool_use y envías el resultado explícitamente en lugar de que el SDK lo despache por ti.

    Características que se trasladan a tu cliente

    El compromiso de que Anthropic ejecute el bucle del agente es que algunas cosas que el SDK manejaba automáticamente se convierten en responsabilidad de tu cliente.

    Característica del SDKEnfoque de Managed Agents
    Modo de planificaciónEjecuta una sesión de solo planificación primero, luego una segunda sesión para ejecutar.
    Estilos de salida, comandos de barraAplica en tu cliente antes de enviar user.message o después de recibir agent.message.
    Ganchos PreToolUse / PostToolUseTu cliente ya ve cada evento agent.custom_tool_use antes de responder; pon la lógica allí. Para herramientas integradas, usa permission_policy: always_ask.
    max_turnsCuenta turnos en el lado del cliente.

    Lista de verificación de migración

    1. Crea un entorno con la red y los tiempos de ejecución que tu agente necesita.
    2. Porta tu indicación del sistema y selección de herramientas a una definición de agente.
    3. Reemplaza tu bucle con sessions.create y sessions.stream.
    4. Para cualquier archivo local que el agente lea, cárgalo a través de la API de Archivos y móntalo como resources.
    5. Para cualquier manejador de herramienta personalizada, mueve la ejecución a tu bucle de eventos como respuestas a eventos agent.custom_tool_use.
    6. Verifica con una sesión de prueba antes de dirigir el tráfico de producción al nuevo flujo.

    Migración entre versiones de modelo

    Cuando se lanza un nuevo modelo Claude, migrar una integración de Claude Managed Agents es típicamente un cambio de un campo: actualiza model en tu definición de agente y el cambio toma efecto en la próxima sesión que crees.

    La mayoría de los cambios de comportamiento a nivel de modelo documentados en la guía de migración de la API de Mensajes no requieren acción de tu parte:

    • Cambios de parámetros de solicitud (valores predeterminados de max_tokens, configuración de thinking) son manejados por el tiempo de ejecución de Claude Managed Agents. Estos campos no se exponen en la definición del agente.
    • Rellenado de mensajes del asistente no existe en el modelo de sesión basado en eventos, por lo que su eliminación en modelos más nuevos es una no-operación.
    • Escape de JSON de argumentos de herramienta es analizado por el tiempo de ejecución antes de que recibas eventos agent.custom_tool_use. Ves datos estructurados, no cadenas sin procesar.

    Las descripciones de comportamiento en la guía de la API de Mensajes (qué hace el modelo de manera diferente) aún se aplican. Los pasos de migración (cómo cambiar tu código de solicitud) no.

    messages = [{"role": "user", "content": task}]
    while True:
        response = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=1024,
            messages=messages,
            tools=tools,
        )
        messages.append({"role": "assistant", "content": response.content})
        if response.stop_reason == "end_turn":
            break
        for block in response.content:
            if block.type == "tool_use":
                result = execute_tool(block.name, block.input)
                messages.append(
                    {
                        "role": "user",
                        "content": [
                            {
                                "type": "tool_result",
                                "tool_use_id": block.id,
                                "content": result,
                            }
                        ],
                    }
                )
    agent=$(
      curl --fail-with-body -sS "https://api.anthropic.com/v1/agents?beta=true" \
        -H "x-api-key: ${ANTHROPIC_API_KEY}" \
        -H "anthropic-version: 2023-06-01" \
        -H "anthropic-beta: managed-agents-2026-04-01" \
        --json '{
          "name": "Task Runner",
          "model": "claude-sonnet-4-6",
          "tools": [{"type": "agent_toolset_20260401"}]
        }'
    )
    agent_id=$(jq -r '.id' <<< "${agent}")
    
    session_id=$(
      curl --fail-with-body -sS "https://api.anthropic.com/v1/sessions?beta=true" \
        -H "x-api-key: ${ANTHROPIC_API_KEY}" \
        -H "anthropic-version: 2023-06-01" \
        -H "anthropic-beta: managed-agents-2026-04-01" \
        --json "$(jq -n --argjson a "${agent}" --arg env "${environment_id}" \
          '{agent: {type: "agent", id: $a.id, version: $a.version}, environment_id: $env}')" \
      | jq -r '.id'
    )
    
    # Open the SSE stream in the background, then send the user message.
    stream_log=$(mktemp)
    curl --fail-with-body -sS -N \
      "https://api.anthropic.com/v1/sessions/${session_id}/stream?beta=true" \
      -H "x-api-key: ${ANTHROPIC_API_KEY}" \
      -H "anthropic-version: 2023-06-01" \
      -H "anthropic-beta: managed-agents-2026-04-01" \
      > "${stream_log}" &
    stream_pid=$!
    
    curl --fail-with-body -sS \
      "https://api.anthropic.com/v1/sessions/${session_id}/events?beta=true" \
      -H "x-api-key: ${ANTHROPIC_API_KEY}" \
      -H "anthropic-version: 2023-06-01" \
      -H "anthropic-beta: managed-agents-2026-04-01" \
      --json "$(jq -n --arg text "${task}" \
        '{events: [{type: "user.message", content: [{type: "text", text: $text}]}]}')" \
      > /dev/null
    
    # Read events until the session goes idle.
    while IFS= read -r line; do
      [[ ${line} == data:* ]] || continue
      event_type=$(jq -r '.type // empty' 2>/dev/null <<< "${line#data: }" || true)
      [[ ${event_type} == "session.status_idle" ]] && break
    done < <(tail -f -n +1 "${stream_log}")
    
    kill "${stream_pid}" 2>/dev/null || true
    {"type": "agent_toolset_20260401"}
    /workspace
    cwd, add_dirs apuntan a rutas localesCarga o monta archivos como recursos de sesión.
    system_prompt y la jerarquía CLAUDE.mdUna única cadena system en el Agente. Cada actualización produce una nueva versión en el servidor; fija sesiones a una versión específica para promover o revertir sin un despliegue. Ver Configuración del Agente.
    mcp_servers configurados y autenticados en un lugarDeclara servidores en el Agente; proporciona credenciales a través de un Vault en la Sesión.
    permission_mode, can_use_toolPor herramienta permission_policy; responde a eventos user.tool_confirmation para herramientas always_ask.
    curl -sS --fail-with-body "https://api.anthropic.com/v1/agents/$AGENT_ID?beta=true" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -H "anthropic-beta: managed-agents-2026-04-01" \
      --json "$(jq -n --argjson version "$AGENT_VERSION" '{version: $version, model: "claude-sonnet-4-6"}')"