Claude Managed Agents sostituisce il tuo ciclo agente scritto manualmente con un'infrastruttura gestita. Questa pagina copre i cambiamenti quando esegui la migrazione da un ciclo personalizzato creato su Messages API 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.
Se hai creato 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.
| Prima | Dopo |
|---|---|
| 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 pre-costruiti si eseguono automaticamente all'interno del contenitore. Gestisci solo gli strumenti personalizzati tramite gli eventi agent.custom_tool_use. |
| Fornisci il tuo 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. |
Prima (ciclo Messages API, semplificato):
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,
}
],
}
)Dopo (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. Vedi Flusso di eventi della sessione.Se hai creato 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.
| Agent SDK | Managed Agents |
|---|---|
ClaudeAgentOptions(...) costruito per ogni esecuzione | client.beta.agents.create(...) una volta; l'Agente è persistente 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'SDK | Dichiara 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 integrati 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 locali | Carica o monta file come risorse della sessione. |
system_prompt e la gerarchia CLAUDE.md | Una 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 posto | Dichiara i server sull'Agente; fornisci le credenziali tramite un Vault sulla Sessione. |
permission_mode, can_use_tool | Per-strumento permission_policy; rispondi agli eventi user.tool_confirmation per gli strumenti always_ask. |
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-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)Dopo (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":
breakL'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.
Il compromesso per Anthropic che esegue il ciclo agente è che alcune cose che l'SDK gestiva automaticamente diventano responsabilità del tuo client.
| Funzionalità SDK | Approccio Managed Agents |
|---|---|
| Modalità di pianificazione | Esegui prima una sessione di sola pianificazione, quindi una seconda sessione per eseguire. |
| Stili di output, comandi slash | Applica nel tuo client prima di inviare user.message o dopo aver ricevuto agent.message. |
Hook PreToolUse / PostToolUse | Il tuo client vede già ogni evento agent.custom_tool_use prima di rispondere; metti la logica lì. Per gli strumenti integrati, usa permission_policy: always_ask. |
max_turns | Conta i turni lato client. |
sessions.create e sessions.stream.resources.agent.custom_tool_use.Quando viene rilasciato un nuovo modello Claude, la migrazione di un'integrazione Claude Managed Agents è in genere una modifica a un campo: aggiorna model sulla tua definizione di agente e il cambiamento avrà effetto sulla prossima sessione che crei.
ant beta:agents update \
--agent-id "$AGENT_ID" \
--version "$AGENT_VERSION" \
--model claude-opus-4-7La maggior parte dei cambiamenti di comportamento a livello di modello documentati nella guida alla migrazione di Messages API non richiedono azioni da parte tua:
max_tokens, configurazione di thinking) sono gestite dal runtime di Claude Managed Agents. Questi campi non sono esposti sulla definizione dell'agente.agent.custom_tool_use. Vedi dati strutturati, non stringhe grezze.Le descrizioni del comportamento nella guida di Messages API (cosa fa il modello diversamente) si applicano ancora. I passaggi di migrazione (come modificare il codice della tua richiesta) no.
Was this page helpful?