Claude Managed Agents ersetzt Ihre handgeschriebene Agent-Schleife durch verwaltete Infrastruktur. Diese Seite behandelt die Änderungen bei der Migration von einer benutzerdefinierten Schleife, die auf der Messages API basiert, oder vom Claude Agent SDK.
Alle Managed Agents API-Anfragen erfordern den Beta-Header managed-agents-2026-04-01. Das SDK setzt den Beta-Header automatisch.
Wenn Sie einen Agent erstellt haben, indem Sie messages.create in einer while-Schleife aufgerufen, Tool-Aufrufe selbst ausgeführt und Ergebnisse zum Gesprächsverlauf hinzugefügt haben, verschwindet der größte Teil dieses Codes.
| Vorher | Nachher |
|---|---|
| Sie verwalten das Gesprächsverlauf-Array und übergeben es bei jedem Durchgang. | Die Sitzung speichert den Verlauf serverseitig. Senden Sie Ereignisse, empfangen Sie Ereignisse. |
Sie analysieren stop_reason: "tool_use", führen das Tool aus und schließen die Schleife mit einer tool_result-Nachricht. | Vordefinierte Tools werden automatisch im Container ausgeführt. Sie handhaben nur benutzerdefinierte Tools über agent.custom_tool_use-Ereignisse. |
| Sie stellen Ihre eigene Sandbox für die Ausführung von Agent-generiertem Code bereit. | Der Sitzungs-Container verwaltet Code-Ausführung, Dateioperationen und Bash. |
| Sie entscheiden, wann die Schleife beendet ist. | Die Sitzung sendet session.status_idle, wenn der Agent nichts mehr zu tun hat. |
Vorher (Messages API-Schleife, vereinfacht):
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,
}
],
}
)Nachher (Claude Managed Agents):
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":
breakagent.custom_tool_use-Ereignisse. Siehe Session-Ereignisstrom.Wenn Sie mit dem Claude Agent SDK gebaut haben, arbeiten Sie bereits mit Agents, Tools und Sessions als Konzepte. 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 Anthropics Infrastruktur ausgeführt wird. Der Großteil der Migration besteht darin, SDK-Konfigurationsobjekte ihren API-seitigen Entsprechungen zuzuordnen.
| Agent SDK | Managed Agents |
|---|---|
ClaudeAgentOptions(...) pro Durchlauf konstruiert | client.beta.agents.create(...) einmal; der Agent wird serverseitig persistiert und versioniert. Siehe Agent-Setup. |
async with ClaudeSDKClient(...) oder query(...) | client.beta.sessions.create(...) dann senden und empfangen Sie Ereignisse. |
@tool-dekorierte Funktionen, die automatisch vom SDK verteilt werden | Deklarieren Sie als {"type": "custom", ...} auf dem Agent; Ihr Client verarbeitet agent.custom_tool_use-Ereignisse und antwortet mit user.custom_tool_result. Siehe Tools. |
| Integrierte Tools werden in Ihrem Prozess gegen Ihr Dateisystem ausgeführt | {"type": "agent_toolset_20260401"} führt die gleichen Tools im Sitzungs-Container gegen /workspace aus. |
cwd, add_dirs zeigen auf lokale Pfade | Laden Sie Dateien hoch oder mounten Sie sie als Sitzungs-Ressourcen. |
system_prompt und die CLAUDE.md-Hierarchie | Ein einzelner system-String auf dem Agent. Jede Aktualisierung erzeugt eine neue serverseitige Version; heften Sie Sitzungen an eine bestimmte Version, um ohne Bereitstellung zu fördern oder zurückzurollen. Siehe Agent-Setup. |
mcp_servers konfiguriert und authentifiziert an einem Ort | Deklarieren Sie Server auf dem Agent; stellen Sie Anmeldedaten über einen Vault in der Sitzung bereit. |
permission_mode, can_use_tool | Pro-Tool permission_policy; antworten Sie auf user.tool_confirmation-Ereignisse für always_ask-Tools. |
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-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)Nachher (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":
breakDer Agent und die Umgebung werden einmal erstellt und über Sitzungen hinweg wiederverwendet. Die Tool-Funktion wird weiterhin in Ihrem Prozess ausgeführt; der Unterschied besteht darin, dass Sie das agent.custom_tool_use-Ereignis lesen und das Ergebnis explizit senden, anstatt dass das SDK es für Sie verteilt.
Der Kompromiss dafür, dass Anthropic die Agent-Schleife ausführt, besteht darin, dass einige Dinge, die das SDK automatisch verarbeitet hat, zur Verantwortung Ihres Clients werden.
| SDK-Funktion | Managed Agents-Ansatz |
|---|---|
| Plan-Modus | Führen Sie zuerst eine Planungs-Sitzung aus, dann eine zweite Sitzung zur Ausführung. |
| Ausgabestile, Schrägstrich-Befehle | Wenden Sie in Ihrem Client an, bevor Sie user.message senden oder nachdem Sie agent.message empfangen. |
PreToolUse / PostToolUse Hooks | Ihr Client sieht bereits jedes agent.custom_tool_use-Ereignis, bevor er antwortet; legen Sie die Logik dort ab. Für integrierte Tools verwenden Sie permission_policy: always_ask. |
max_turns | Zählen Sie Durchgänge clientseitig. |
sessions.create und sessions.stream.resources.agent.custom_tool_use-Ereignisse.Wenn ein neues Claude-Modell veröffentlicht wird, ist die Migration einer Claude Managed Agents-Integration typischerweise eine Änderung in einem Feld: Aktualisieren Sie model in Ihrer Agent-Definition und die Änderung wird bei der nächsten Sitzung, die Sie erstellen, wirksam.
ant beta:agents update \
--agent-id "$AGENT_ID" \
--version "$AGENT_VERSION" \
--model claude-opus-4-7Die meisten Verhaltensänderungen auf Modellebene, die im Messages API-Migrationsleitfaden dokumentiert sind, erfordern keine Maßnahmen Ihrerseits:
max_tokens-Standards, thinking-Konfiguration) werden von der Claude Managed Agents-Laufzeit verarbeitet. Diese Felder werden nicht in der Agent-Definition verfügbar gemacht.agent.custom_tool_use-Ereignisse 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 Anfragecode ändern) nicht.
Was this page helpful?