Loading...
    • Costruisci
    • Admin
    • Modelli e prezzi
    • Client SDK
    • Riferimento API
    Search...
    ⌘K
    Amministrazione
    Panoramica Admin APIWorkspaceResidenza dei datiAPI e conservazione dei dati
    Monitoraggio
    Claude Code Analytics APIUsage and Cost API
    Piattaforme di terze parti
    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
    Amministrazione

    Migrazione

    Sposta un agente esistente costruito sull'API Messages o su Claude Agent SDK a Claude Managed Agents.

    Claude Managed Agents sostituisce il tuo ciclo agente scritto manualmente con infrastruttura gestita. Questa pagina copre i cambiamenti quando esegui la migrazione da un ciclo personalizzato costruito sull'API Messages o da Claude Agent SDK.

    Tutte le richieste API di Managed Agents richiedono l'intestazione beta managed-agents-2026-04-01. L'SDK imposta automaticamente l'intestazione beta.

    Da un ciclo agente dell'API Messages

    Se hai costruito un agente chiamando messages.create in un ciclo while, eseguendo le chiamate agli strumenti tu stesso e aggiungendo i risultati alla cronologia della conversazione, la maggior parte di quel codice scompare.

    Cosa smetti di gestire

    PrimaDopo
    Mantieni l'array della cronologia della conversazione e lo trasmetti ad ogni turno.La sessione memorizza la cronologia lato server. Invia eventi, ricevi eventi.
    Analizzi stop_reason: "tool_use", esegui lo strumento e torni indietro con un messaggio tool_result.Gli strumenti precostruiti si eseguono automaticamente all'interno del contenitore. Gestisci solo gli strumenti personalizzati tramite gli eventi .

    Was this page helpful?

    • Da un ciclo agente dell'API Messages
    • Cosa smetti di gestire
    • Confronto del codice
    • Cosa controlli ancora
    • Da Claude Agent SDK
    • Cosa cambia
    • Confronto del codice
    • Funzionalità che passano al tuo client
    • Elenco di controllo della migrazione
    • Migrazione tra versioni di modello
    agent.custom_tool_use
    Provisioning della tua sandbox per eseguire il codice generato dall'agente.Il contenitore della sessione gestisce l'esecuzione del codice, le operazioni sui file e bash.
    Decidi quando il ciclo è terminato.La sessione emette session.status_idle quando l'agente non ha più nulla da fare.

    Confronto del codice

    Prima (ciclo API Messages, semplificato):

    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,
                            }
                        ],
                    }
                )

    Dopo (Claude Managed Agents):

    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

    Cosa controlli ancora

    • Prompt di sistema e modello: Stessi campi, ora sulla definizione dell'agente.
    • Strumenti personalizzati: Ancora dichiarati con JSON Schema. L'esecuzione passa dalla gestione inline alla risposta agli eventi agent.custom_tool_use. Vedi Flusso di eventi della sessione.
    • Contesto: Puoi ancora iniettare il contesto tramite il prompt di sistema, risorse file, o competenze.

    Da Claude Agent SDK

    Se hai costruito con Claude Agent SDK, stai già lavorando con agenti, strumenti e sessioni come concetti. La differenza è dove vengono eseguiti: l'SDK viene eseguito in un processo che gestisci, mentre Managed Agents viene eseguito nell'infrastruttura di Anthropic. La maggior parte della migrazione è mappare gli oggetti di configurazione dell'SDK ai loro equivalenti lato API.

    Cosa cambia

    Agent SDKManaged Agents
    ClaudeAgentOptions(...) costruito per ogni esecuzioneclient.beta.agents.create(...) una volta; l'Agente è persistito e versionato lato server. Vedi Configurazione dell'agente.
    async with ClaudeSDKClient(...) o query(...)client.beta.sessions.create(...) quindi invia e ricevi eventi.
    Funzioni decorate con @tool inviate automaticamente dall'SDKDichiara come {"type": "custom", ...} sull'Agente; il tuo client gestisce gli eventi agent.custom_tool_use e risponde con user.custom_tool_result. Vedi Strumenti.
    Gli strumenti incorporati vengono eseguiti nel tuo processo rispetto al tuo filesystem{"type": "agent_toolset_20260401"} esegue gli stessi strumenti all'interno del contenitore della sessione rispetto a /workspace.
    cwd, add_dirs puntano a percorsi localiCarica o monta file come risorse della sessione.
    system_prompt e la gerarchia CLAUDE.mdUna singola stringa system sull'Agente. Ogni aggiornamento produce una nuova versione lato server; fissa le sessioni a una versione specifica per promuovere o eseguire il rollback senza un deploy. Vedi Configurazione dell'agente.
    mcp_servers configurati e autenticati in un unico postoDichiara i server sull'Agente; fornisci le credenziali tramite un Vault sulla Sessione.
    permission_mode, can_use_toolPer-strumento permission_policy; rispondi agli eventi user.tool_confirmation per gli strumenti always_ask.

    Confronto del codice

    Prima (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)

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

    L'Agente e l'Ambiente vengono creati una volta e riutilizzati tra le sessioni. La funzione dello strumento viene ancora eseguita nel tuo processo; la differenza è che leggi l'evento agent.custom_tool_use e invii il risultato esplicitamente invece che l'SDK lo invii per te.

    Funzionalità che passano al tuo client

    Il compromesso per Anthropic che esegue il ciclo agente è che alcune cose che l'SDK gestiva automaticamente diventano responsabilità del tuo client.

    Funzionalità SDKApproccio Managed Agents
    Modalità di pianificazioneEsegui prima una sessione di sola pianificazione, quindi una seconda sessione per eseguire.
    Stili di output, comandi slashApplica nel tuo client prima di inviare user.message o dopo aver ricevuto agent.message.
    Hook PreToolUse / PostToolUseIl tuo client vede già ogni evento agent.custom_tool_use prima di rispondere; metti la logica lì. Per gli strumenti incorporati, usa permission_policy: always_ask.
    max_turnsConta i turni lato client.

    Elenco di controllo della migrazione

    1. Crea un ambiente con la rete e i runtime di cui il tuo agente ha bisogno.
    2. Porta il tuo prompt di sistema e la selezione degli strumenti a una definizione di agente.
    3. Sostituisci il tuo ciclo con sessions.create e sessions.stream.
    4. Per tutti i file locali che l'agente legge, caricali tramite l'API Files e montali come resources.
    5. Per qualsiasi gestore di strumenti personalizzati, sposta l'esecuzione nel tuo ciclo di eventi come risposte agli eventi agent.custom_tool_use.
    6. Verifica con una sessione di test prima di indirizzare il traffico di produzione al nuovo flusso.

    Migrazione tra versioni di modello

    Quando viene rilasciato un nuovo modello Claude, la migrazione di un'integrazione Claude Managed Agents è in genere una modifica di un campo: aggiorna model sulla tua definizione di agente e il cambiamento avrà effetto sulla prossima sessione che crei.

    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"}')"

    La maggior parte dei cambiamenti di comportamento a livello di modello documentati nella guida alla migrazione dell'API Messages non richiedono azioni da parte tua:

    • Modifiche ai parametri di richiesta (impostazioni predefinite di max_tokens, configurazione di thinking) sono gestite dal runtime di Claude Managed Agents. Questi campi non sono esposti sulla definizione dell'agente.
    • Precompilazione del messaggio dell'assistente non esiste nel modello di sessione basato su eventi, quindi la sua rimozione su modelli più recenti è un no-op.
    • Escape JSON degli argomenti dello strumento viene analizzato dal runtime prima di ricevere gli eventi agent.custom_tool_use. Vedi dati strutturati, non stringhe grezze.

    Le descrizioni del comportamento nella guida dell'API Messages (cosa fa il modello diversamente) si applicano ancora. I passaggi di migrazione (come modificare il codice della tua richiesta) no.