Loading...
    • Construir
    • Admin
    • Modelos e preços
    • SDKs de cliente
    • Referência da API
    Search...
    ⌘K
    Administração
    Visão geral da Admin APIWorkspacesResidência de dadosRetenção de API e dados
    Monitoramento
    API de Analytics do Claude CodeAPI de Uso e Custo
    Plataformas de terceiros
    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
    Administração

    Migração

    Mova um agente existente construído na API de Mensagens ou no Claude Agent SDK para o Claude Managed Agents.

    Was this page helpful?

    • A partir de um loop de agente da API de Mensagens
    • O que você para de gerenciar
    • Comparação de código
    • O que você ainda controla
    • A partir do Claude Agent SDK
    • O que muda
    • Comparação de código
    • Recursos que passam para o seu cliente
    • Lista de verificação de migração
    • Migrando entre versões de modelo

    O Claude Managed Agents substitui seu loop de agente escrito manualmente por infraestrutura gerenciada. Esta página cobre o que muda quando você migra de um loop personalizado construído na API de Mensagens ou do Claude Agent SDK.

    Todas as solicitações da API do Managed Agents requerem o cabeçalho beta managed-agents-2026-04-01. O SDK define o cabeçalho beta automaticamente.

    A partir de um loop de agente da API de Mensagens

    Se você construiu um agente chamando messages.create em um loop while, executando chamadas de ferramentas você mesmo e adicionando resultados ao histórico de conversas, a maior parte desse código desaparece.

    O que você para de gerenciar

    AntesDepois
    Você mantém o array de histórico de conversas e o passa de volta a cada turno.A sessão armazena o histórico no lado do servidor. Envie eventos, receba eventos.
    Você analisa stop_reason: "tool_use", executa a ferramenta e volta com uma mensagem tool_result.Ferramentas pré-construídas são executadas dentro do contêiner automaticamente. Você só lida com ferramentas personalizadas via eventos agent.custom_tool_use.
    Você provisiona seu próprio sandbox para executar código gerado pelo agente.O contêiner de sessão lida com execução de código, operações de arquivo e bash.
    Você decide quando o loop termina.A sessão emite session.status_idle quando o agente não tem mais nada a fazer.

    Comparação de código

    Antes (loop da API de Mensagens, simplificado):

    Depois (Claude Managed Agents):

    O que você ainda controla

    • Prompt de sistema e modelo: Mesmos campos, agora na definição do agente.
    • Ferramentas personalizadas: Ainda declaradas com JSON Schema. A execução passa do tratamento inline para responder a eventos agent.custom_tool_use. Consulte Stream de eventos de sessão.
    • Contexto: Você ainda pode injetar contexto via prompt de sistema, recursos de arquivo ou habilidades.

    A partir do Claude Agent SDK

    Se você construiu com o Claude Agent SDK, você já está trabalhando com agentes, ferramentas e sessões como conceitos. A diferença é onde eles são executados: o SDK é executado em um processo que você opera, enquanto o Managed Agents é executado na infraestrutura da Anthropic. A maior parte da migração é mapear objetos de configuração do SDK para seus equivalentes no lado da API.

    O que muda

    Agent SDKManaged Agents
    ClaudeAgentOptions(...) construído por execuçãoclient.beta.agents.create(...) uma vez; o Agente é persistido e versionado no lado do servidor. Consulte Configuração do agente.
    async with ClaudeSDKClient(...) ou query(...)client.beta.sessions.create(...) depois envie e receba eventos.
    Funções decoradas com @tool despachadas automaticamente pelo SDKDeclare como {"type": "custom", ...} no Agente; seu cliente lida com eventos agent.custom_tool_use e responde com user.custom_tool_result. Consulte Ferramentas.
    Ferramentas integradas executadas em seu processo contra seu sistema de arquivos executa as mesmas ferramentas dentro do contêiner de sessão contra .

    Comparação de código

    Antes (Agent SDK):

    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)

    Depois (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

    O Agente e o Ambiente são criados uma vez e reutilizados entre sessões. A função de ferramenta ainda é executada em seu processo; a diferença é que você lê o evento agent.custom_tool_use e envia o resultado explicitamente em vez de o SDK despachá-lo para você.

    Recursos que passam para o seu cliente

    A contrapartida de a Anthropic executar o loop do agente é que algumas coisas que o SDK tratava automaticamente se tornam responsabilidade do seu cliente.

    Recurso do SDKAbordagem no Managed Agents
    Modo de planejamentoExecute uma sessão somente de planejamento primeiro, depois uma segunda sessão para executar.
    Estilos de saída, comandos slashAplique em seu cliente antes de enviar user.message ou após receber agent.message.
    Hooks PreToolUse / PostToolUseSeu cliente já vê cada evento agent.custom_tool_use antes de responder; coloque a lógica lá. Para ferramentas integradas, use permission_policy: always_ask.
    max_turnsConte os turnos no lado do cliente.

    Lista de verificação de migração

    1. Crie um ambiente com a rede e os runtimes que seu agente precisa.
    2. Porte seu prompt de sistema e seleção de ferramentas para uma definição de agente.
    3. Substitua seu loop por sessions.create e sessions.stream.
    4. Para quaisquer arquivos locais que o agente lê, faça upload deles via API de Arquivos e monte-os como resources.
    5. Para quaisquer manipuladores de ferramentas personalizadas, mova a execução para o seu loop de eventos como respostas a eventos agent.custom_tool_use.
    6. Verifique com uma sessão de teste antes de direcionar o tráfego de produção para o novo fluxo.

    Migrando entre versões de modelo

    Quando um novo modelo Claude é lançado, migrar uma integração do Claude Managed Agents é tipicamente uma mudança de um campo: atualize model na sua definição de agente e a mudança entra em vigor na próxima sessão que você criar.

    A maioria das mudanças de comportamento no nível do modelo documentadas no guia de migração da API de Mensagens não requer ação da sua parte:

    • Mudanças de parâmetros de requisição (padrões de max_tokens, configuração de thinking) são tratadas pelo runtime do Claude Managed Agents. Esses campos não são expostos na definição do agente.
    • Preenchimento de mensagem do assistente não existe no modelo de sessão baseado em eventos, portanto sua remoção em modelos mais novos é uma operação sem efeito.
    • Escape de JSON de argumentos de ferramentas é analisado pelo runtime antes de você receber eventos agent.custom_tool_use. Você vê dados estruturados, não strings brutas.

    As descrições de comportamento no guia da API de Mensagens (o que o modelo faz de forma diferente) ainda se aplicam. As etapas de migração (como alterar o código de sua requisição) não se aplicam.

    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'
    )
    
    # Abra o stream SSE em segundo plano, depois envie a mensagem do usuário.
    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
    
    # Leia eventos até a sessão ficar ociosa.
    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 apontam para caminhos locaisFaça upload ou monte arquivos como recursos de sessão.
    system_prompt e a hierarquia CLAUDE.mdUma única string system no Agente. Cada atualização produz uma nova versão no lado do servidor; fixe sessões em uma versão específica para promover ou reverter sem um deploy. Consulte Configuração do agente.
    mcp_servers configurados e autenticados em um lugarDeclare servidores no Agente; forneça credenciais através de um Vault na Sessão.
    permission_mode, can_use_toolpermission_policy por ferramenta; responda a eventos user.tool_confirmation para ferramentas 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"}')"