Loading...
    • Erstellen
    • Admin
    • Modelle & Preise
    • Client SDKs
    • API-Referenz
    Search...
    ⌘K
    Administration
    Admin API-ÜbersichtArbeitsbereicheDatenresidenzAPI- und Datenspeicherung
    Überwachung
    Claude Code Analytics APINutzungs- und Kosten-API
    Drittanbieter-Plattformen
    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
    Administration

    Migration

    Migrieren Sie einen bestehenden Agenten, der auf der Messages API oder dem Claude Agent SDK aufgebaut ist, zu Claude Managed Agents.

    Claude Managed Agents ersetzt Ihre handgeschriebene Agentenschleife durch verwaltete Infrastruktur. Diese Seite beschreibt, was sich ändert, wenn Sie von einer benutzerdefinierten Schleife migrieren, die auf der Messages API oder dem Claude Agent SDK aufgebaut ist.

    Alle Managed Agents API-Anfragen erfordern den managed-agents-2026-04-01 Beta-Header. Das SDK setzt den Beta-Header automatisch.

    Von einer Messages API-Agentenschleife

    Wenn Sie einen Agenten erstellt haben, indem Sie messages.create in einer while-Schleife aufgerufen, Tool-Aufrufe selbst ausgeführt und Ergebnisse an den Gesprächsverlauf angehängt haben, entfällt der größte Teil dieses Codes.

    Was Sie nicht mehr verwalten müssen

    VorherNachher
    Sie pflegen das Gesprächsverlauf-Array und übergeben es bei jedem Durchlauf zurück.Die Session speichert den Verlauf serverseitig. Senden Sie Events, empfangen Sie Events.
    Sie parsen stop_reason: "tool_use", führen das Tool aus und kehren mit einer tool_result-Nachricht zurück.Vorgefertigte Tools werden automatisch im Container ausgeführt. Sie behandeln nur benutzerdefinierte Tools über agent.custom_tool_use-Events.
    Sie stellen Ihre eigene Sandbox für die Ausführung von agentengenerierten Code bereit.Der Session-Container übernimmt die Code-Ausführung, Dateioperationen und Bash.
    Sie entscheiden, wann die Schleife beendet ist.Die Session gibt session.status_idle aus, wenn der Agent nichts mehr zu tun hat.

    Code-Vergleich

    Vorher (Messages API-Schleife, vereinfacht):

    Nachher (Claude Managed Agents):

    Was Sie weiterhin kontrollieren

    • System-Prompt und Modell: Gleiche Felder, jetzt in der Agentendefinition.
    • Benutzerdefinierte Tools: Werden weiterhin mit JSON Schema deklariert. Die Ausführung wechselt von der direkten Behandlung zur Reaktion auf agent.custom_tool_use-Events. Siehe Session-Event-Stream.
    • Kontext: Sie können weiterhin Kontext über den System-Prompt, Dateiressourcen oder Skills einfügen.

    Vom Claude Agent SDK

    Wenn Sie mit dem Claude Agent SDK entwickelt haben, arbeiten Sie bereits mit Agenten, Tools und Sessions als Konzepten. Der Unterschied liegt darin, wo sie ausgeführt werden: Das SDK wird in einem Prozess ausgeführt, den Sie betreiben, während Managed Agents in der Infrastruktur von Anthropic läuft. Der größte Teil der Migration besteht darin, SDK-Konfigurationsobjekte ihren API-seitigen Entsprechungen zuzuordnen.

    Was sich ändert

    Agent SDKManaged Agents
    ClaudeAgentOptions(...) wird pro Ausführung erstelltclient.beta.agents.create(...) einmalig; der Agent wird serverseitig gespeichert und versioniert. Siehe Agent-Setup.
    async with ClaudeSDKClient(...) oder query(...)client.beta.sessions.create(...), dann Events senden und empfangen.
    @tool-dekorierte Funktionen werden automatisch vom SDK ausgeführtAls {"type": "custom", ...} auf dem Agenten deklarieren; Ihr Client behandelt agent.custom_tool_use-Events und antwortet mit user.custom_tool_result. Siehe Tools.
    Eingebaute Tools laufen in Ihrem Prozess gegen Ihr Dateisystem{"type": "agent_toolset_20260401"} führt dieselben Tools im Session-Container gegen aus.

    Code-Vergleich

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

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

    Der Agent und die Umgebung werden einmalig erstellt und über Sessions hinweg wiederverwendet. Die Tool-Funktion läuft weiterhin in Ihrem Prozess; der Unterschied besteht darin, dass Sie das agent.custom_tool_use-Event lesen und das Ergebnis explizit senden, anstatt dass das SDK es für Sie ausführt.

    Funktionen, die zu Ihrem Client wechseln

    Der Kompromiss dafür, dass Anthropic die Agentenschleife ausführt, besteht darin, dass einige Dinge, die das SDK automatisch behandelt hat, zur Verantwortung Ihres Clients werden.

    SDK-FunktionManaged Agents-Ansatz
    Plan-ModusFühren Sie zuerst eine reine Planungs-Session durch, dann eine zweite Session zur Ausführung.
    Ausgabestile, Slash-BefehleIn Ihrem Client anwenden, bevor Sie user.message senden oder nachdem Sie agent.message empfangen.
    PreToolUse / PostToolUse-HooksIhr Client sieht bereits jedes agent.custom_tool_use-Event, bevor er antwortet; legen Sie die Logik dort ab. Für eingebaute Tools verwenden Sie permission_policy: always_ask.
    max_turnsZählen Sie Durchläufe clientseitig.

    Migrations-Checkliste

    1. Erstellen Sie eine Umgebung mit dem Netzwerk und den Laufzeiten, die Ihr Agent benötigt.
    2. Portieren Sie Ihren System-Prompt und Ihre Tool-Auswahl in eine Agentendefinition.
    3. Ersetzen Sie Ihre Schleife durch sessions.create und sessions.stream.
    4. Laden Sie für alle lokalen Dateien, die der Agent liest, diese über die Files API hoch und mounten Sie sie als resources.
    5. Verschieben Sie für alle benutzerdefinierten Tool-Handler die Ausführung in Ihre Event-Schleife als Antworten auf agent.custom_tool_use-Events.
    6. Überprüfen Sie mit einer Test-Session, bevor Sie den Produktionsverkehr auf den neuen Ablauf umleiten.

    Migration zwischen Modellversionen

    Wenn ein neues Claude-Modell veröffentlicht wird, ist die Migration einer Claude Managed Agents-Integration typischerweise eine Änderung an einem einzigen Feld: Aktualisieren Sie model in Ihrer Agentendefinition, und die Änderung tritt bei der nächsten Session, die Sie erstellen, in Kraft.

    Die meisten Verhaltensänderungen auf Modellebene, die im Messages API-Migrationsleitfaden dokumentiert sind, erfordern keine Maßnahmen Ihrerseits:

    • Änderungen an Request-Parametern (max_tokens-Standardwerte, thinking-Konfiguration) werden von der Claude Managed Agents-Laufzeit behandelt. Diese Felder sind in der Agentendefinition nicht verfügbar.
    • Prefilling von Assistentennachrichten existiert im event-basierten Session-Modell nicht, daher ist seine Entfernung bei neueren Modellen ein No-Op.
    • JSON-Escaping von Tool-Argumenten wird von der Laufzeit geparst, bevor Sie agent.custom_tool_use-Events empfangen. Sie sehen strukturierte Daten, keine rohen Strings.

    Die Verhaltensbeschreibungen im Messages API-Leitfaden (was das Modell anders macht) gelten weiterhin. Die Migrationsschritte (wie Sie Ihren Request-Code ändern) gelten nicht.

    Was this page helpful?

    • Von einer Messages API-Agentenschleife
    • Was Sie nicht mehr verwalten müssen
    • Code-Vergleich
    • Was Sie weiterhin kontrollieren
    • Vom Claude Agent SDK
    • Was sich ändert
    • Code-Vergleich
    • Funktionen, die zu Ihrem Client wechseln
    • Migrations-Checkliste
    • Migration zwischen Modellversionen
    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'
    )
    
    # Öffnen Sie den SSE-Stream im Hintergrund, dann senden Sie die Benutzernachricht.
    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
    
    # Lesen Sie Events, bis die Session in den Leerlauf geht.
    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
    /workspace
    cwd, add_dirs zeigen auf lokale PfadeLaden Sie Dateien hoch oder mounten Sie sie als Session-Ressourcen.
    system_prompt und die CLAUDE.md-HierarchieEin einzelner system-String auf dem Agenten. Jede Aktualisierung erzeugt eine neue serverseitige Version; pinnen Sie Sessions auf eine bestimmte Version, um ohne Deployment zu fördern oder zurückzurollen. Siehe Agent-Setup.
    mcp_servers an einem Ort konfiguriert und authentifiziertServer auf dem Agenten deklarieren; Anmeldedaten über einen Vault auf der Session bereitstellen.
    permission_mode, can_use_toolPro-Tool permission_policy; auf user.tool_confirmation-Events für always_ask-Tools reagieren.
    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"}')"