Loading...
  • Construir
  • Admin
  • Modelos e preços
  • SDKs do cliente
  • Referência da API
Search...
⌘K
Log in
Migração
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
  • 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
  • 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
Admin/Administração

Migração

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

Was this page helpful?

  • 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
  • Do Claude Agent SDK
  • O que muda
  • Comparação de código
  • Recursos que se movem para seu cliente
  • Lista de verificação de migração
  • Migrando entre versões de modelo

Claude Managed Agents substitui seu loop de agente escrito manualmente por infraestrutura gerenciada. Esta página aborda as mudanças quando você migra de um loop personalizado construído na API de Mensagens ou do Claude Agent SDK.

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

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 maioria desse código desaparece.

O que você para de gerenciar

AntesDepois
Você mantém o array de histórico de conversas e o passa em cada turno.A sessão armazena o histórico no 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ê apenas 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 da 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 do 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. Veja Fluxo de eventos da sessão.
  • Contexto: Você ainda pode injetar contexto via prompt do sistema, recursos de arquivo ou habilidades.

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 Managed Agents é executado na infraestrutura da Anthropic. A maioria da migração é mapear objetos de configuração do SDK para seus equivalentes do lado da API.

O que muda

Agent SDKManaged Agents
ClaudeAgentOptions(...) construído por execuçãoclient.beta.agents.create(...) uma vez; o Agent é persistido e versionado no servidor. Veja Configuração do Agent.
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 Agent; seu cliente lida com eventos agent.custom_tool_use e responde com user.custom_tool_result. Veja Ferramentas.
Ferramentas integradas executadas em seu processo contra seu sistema de arquivos executa as mesmas ferramentas dentro do contêiner da 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-opus-4-7",
    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-opus-4-7",
    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 Agent e o Environment são criados uma vez e reutilizados em 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 do SDK despachá-lo para você.

Recursos que se movem para seu cliente

O tradeoff para Anthropic executar o loop do agente é que algumas coisas que o SDK tratava automaticamente se tornam responsabilidade do seu cliente.

Recurso do SDKAbordagem Managed Agents
Modo de planejamentoExecute uma sessão somente de planejamento primeiro, depois uma segunda sessão para executar.
Estilos de saída, comandos de barraAplique em seu cliente antes de enviar user.message ou depois de 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 turnos no lado do cliente.

Lista de verificação de migração

  1. Crie um ambiente com a rede e runtimes que seu agente precisa.
  2. Porte seu prompt do sistema e seleção de ferramentas para uma definição de agente.
  3. Substitua seu loop por sessions.create e sessions.stream.
  4. Para qualquer arquivo local que o agente leia, carregue-o via API de Arquivos e monte-o como resources.
  5. Para qualquer manipulador de ferramenta personalizada, mova a execução para seu loop de eventos como respostas a eventos agent.custom_tool_use.
  6. Verifique com uma sessão de teste antes de apontar 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 Claude Managed Agents é tipicamente uma mudança de um campo: atualize model em 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 em nível de modelo documentadas no guia de migração da API de Mensagens não requer ação do seu lado:

  • Mudanças de parâmetro de solicitação (padrões de max_tokens, configuração de thinking) são tratadas pelo runtime 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, então sua remoção em modelos mais novos é uma operação nula.
  • Escape JSON de argumento de ferramenta é 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 diferentemente) ainda se aplicam. As etapas de migração (como alterar seu código de solicitação) não.

messages = [{"role": "user", "content": task}]
while True:
    response = client.messages.create(
        model="claude-opus-4-7",
        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 = client.beta.agents.create(
    name="Task Runner",
    model="claude-opus-4-7",
    tools=[{"type": "agent_toolset_20260401"}],
)

session = client.beta.sessions.create(
    agent={"type": "agent", "id": agent.id, "version": agent.version},
    environment_id=environment.id,
)

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": task}]}],
    )
    for event in stream:
        if event.type == "session.status_idle":
            break
{"type": "agent_toolset_20260401"}
/workspace
cwd, add_dirs apontam para caminhos locaisCarregue ou monte arquivos como recursos de sessão.
system_prompt e a hierarquia CLAUDE.mdUma única string system no Agent. Cada atualização produz uma nova versão no servidor; fixe sessões a uma versão específica para promover ou reverter sem um deploy. Veja Configuração do Agent.
mcp_servers configurados e autenticados em um lugarDeclare servidores no Agent; forneça credenciais através de um Vault na Sessão.
permission_mode, can_use_toolPor ferramenta permission_policy; responda a eventos user.tool_confirmation para ferramentas always_ask.
ant beta:agents update \
  --agent-id "$AGENT_ID" \
  --version "$AGENT_VERSION" \
  --model claude-opus-4-7