Claude Agent SDK e Managed Agents: Production-Grade Agents
Il 29 settembre 2025, Claude Code SDK è stato ufficialmente rinominato Claude Agent SDK - un cambiamento che riflette l'evoluzione da semplice strumento CLI a un framework completo per la creazione di agenti AI che operano in produzione. Ad aprile 2026, con l'arrivo dei Managed Agents in public beta, il panorama cambia ulteriormente: harness completamente gestito, sandbox isolato, tool integrati, supporto per SSE streaming e sessioni persistenti. Questo articolo esplora come costruire agenti production-grade in Python e TypeScript, integrare Spring Boot e Angular, e scegliere tra SDK locale e Managed Agents gestiti.
Cosa Imparerai
- Differenze tra Claude Code SDK e Claude Agent SDK
- Architettura di base degli agenti SDK in Python e TypeScript
- Come costruire agenti specializzati con ClaudeAgentOptions
- Integrare agenti con backend Spring Boot e frontend Angular
- Subagenti programmatici per orchestrazione complessa
- Managed Agents: quando usarli e come configurarli
- ant CLI: command-line client per Claude API
- Memory per Managed Agents (beta, 23 aprile 2026)
- Confronto: SDK locale vs Managed Agents hosted
Panoramica della Serie Completa (Claude Series, 25 articoli)
| # | Articolo | Focus |
|---|---|---|
| 1 | Claude come Partner Tecnico | Setup e primi passi |
| 2 | Contesto e Setup del Progetto | CLAUDE.md e configurazione |
| 3 | Ideazione e Requisiti | MVP e user personas |
| 4 | Architettura Backend e Frontend | Spring Boot e Angular |
| 5 | Struttura del Codice | Organizzazione e convenzioni |
| 6 | Prompt Engineering Avanzato | Tecniche avanzate |
| 7 | Testing e qualità | Strategie e generazione test |
| 8 | Documentazione Professionale | README, API, ADR |
| 9 | Deploy e DevOps | Docker, CI/CD, monitoring |
| 10 | Evoluzione e Manutenzione | Refactoring e scalabilità |
| 11 | Integrazione Progetto Reale | Claude Code in produzione |
| 12 | Claude Code CLI | Comandi e configurazione |
| 13 | Agent Skills | Capacità modulari |
| 14 | Subagenti Specializzati | Agenti con ruoli specifici |
| 15 | Hooks e Automazione | Event-driven workflows |
| 16 | Ralph Wiggum Method | Sviluppo guidato da test |
| 17 | BMAD Method | Gestione progetti strutturata |
| 18 | Orchestrazione Multi-Agente | Pipeline di agenti |
| 19 | Collaborative Work | Team e pair programming AI |
| 20 | Sicurezza e Best Practice | Hardening e compliance |
| 21 | Monitoring e Observability | Metriche e debugging |
| 22 | Token Economy e Costi | Ottimizzazione budget API |
| 23 | Feedback Loop e Miglioramento Continuo | Iterazione e user feedback |
| 24 | Advanced Patterns | Agenti con memoria e context |
| 25 | Claude Agent SDK & Managed Agents (sei qui) | Production-grade agents |
1. Da Claude Code SDK a Claude Agent SDK (29 Settembre 2025)
Fino al 28 settembre 2025, il framework ufficiale di Anthropic era denominato
Claude Code SDK. Il termine Code rifletteva l'origine come
strumento per sviluppatori che lavoravano con codice sorgente. Ad ottobre 2025, il rebrand
a Claude Agent SDK ha segnalato un'espansione del scope: gli agenti costruiti
con questo SDK non si limitano più a leggere/modificare file, ma operano come
entità autonome che orchestrano task complessi, coordinano subagenti,
gestiscono workflow e interagiscono con sistemi esterni (database, API, webhook).
Cosa è rimasto uguale
La surface API non è cambiata. Se hai scritto codice con Claude Code SDK fino a settembre 2025, il tuo codice continua a funzionare senza modifiche. Il rebrand è principalmente una questione di nomenclatura e di come il framework viene percepito dalla comunità.
Cosa è nuovo
Il nome Agent SDK sottolinea nuove capacità che arrivano progressivamente:
- Managed Agents (aprile 2026): Versione cloud-hosted del framework con harness orchestrato
- Memory persistence (aprile 2026): Memoria cross-session managed automaticamente
- Built-in tools: Tool standard pre-integrati (file operations, web fetch, SQL)
- SSE streaming: Streaming delle risposte agent in tempo reale
- Sandbox isolation: Agenti eseguiti in container isolati con limiti di risorsa
- ant CLI: Client command-line nativo per Claude API e Managed Agents
2. Architettura dell'Agent SDK
L'Agent SDK è disponibile per Python e TypeScript. Entrambi gli SDK condividono la stessa architettura concettuale:
Componenti Fondamentali dell'Agent SDK
| Componente | Descrizione | Uso |
|---|---|---|
| ClaudeAgent | Classe principale che rappresenta un agente | Istanza di un agente con personalità e capabilità |
| ClaudeAgentOptions | Configurazione dell'agente (system prompt, model, tools) | Setup agentespecifico |
| Tool | Azione che l'agente può eseguire (function call) | Callback registrati dall'utente |
| Session | Contesto conversazionale persistente | Memoria inter-turno della conversazione |
| Message | Unità di comunicazione (user input, agent response) | Scambio di messaggi |
Flusso di Esecuzione Base
Ecco il flusso base di un agente SDK:
- Inizializzazione: creare
ClaudeAgentconClaudeAgentOptions - Registrazione tool: indicare all'agente quali azioni può eseguire
- User message: l'utente invia un prompt all'agente
- Agent reasoning: Claude legge il prompt e decide il prossimo step (thinking o tool use)
- Tool execution: se Claude decide di usare un tool, esegui la callback
- Feedback loop: passa il risultato del tool a Claude, che decide il next step
- Response: quando Claude decide di rispondere, restituisci il risultato all'utente
3. Agente Specializzato in Python: Test JUnit Generator
Vediamo come costruire un agente Python che genera test JUnit per classi Java Spring Boot. L'agente legge il codice sorgente, lo analizza e produce test completi.
#!/usr/bin/env python3
# test_generator_agent.py
from anthropic_agent import ClaudeAgent, ClaudeAgentOptions, Tool
from pathlib import Path
import json
# 1. Definire il system prompt dell'agente
SYSTEM_PROMPT = """
Sei un esperto di Java e Spring Boot che genera test JUnit5 di alta qualità.
Quando ricevi una classe Java, produci:
1. Unit test per ogni metodo pubblico
2. Mock delle dipendenze Autowired
3. Test per happy path e edge case
4. Assertions complete e meaningful
5. Supporto per Testcontainers se necessario (DB, Redis)
Segui le convenzioni:
- Nomi test: testMethodName_Condition_ExpectedResult
- Use @DisplayName per descrizioni leggibili
- Import Mockito per mock
- Import AssertJ per fluent assertion
"""
def read_java_file(path: str) -> str:
"""Tool callback: leggi un file Java"""
file_path = Path(path)
if not file_path.exists():
return f"ERROR: File non trovato: {path}"
with open(file_path, 'r') as f:
return f.read()
def write_test_file(path: str, content: str) -> str:
"""Tool callback: scrivi il file di test"""
file_path = Path(path)
file_path.parent.mkdir(parents=True, exist_ok=True)
with open(file_path, 'w') as f:
f.write(content)
return f"Test file scritto: {path}"
def analyze_class_structure(java_code: str) -> str:
"""Tool callback: analizza struttura della classe"""
# In produzione, usaresti un parser Java vero (javalang, etc.)
# Qui facciamo semplice regex per demo
import re
methods = re.findall(r'public\s+\w+\s+(\w+)\s*\(', java_code)
fields = re.findall(r'@Autowired\s+private\s+\w+\s+(\w+);', java_code)
return json.dumps({
"methods": methods,
"autowired_fields": fields,
"line_count": len(java_code.split('\n'))
})
# 2. Istanziare l'agente con tools
agent = ClaudeAgent(
options=ClaudeAgentOptions(
model="claude-opus-4-20250514",
system_prompt=SYSTEM_PROMPT,
max_tokens=8000
)
)
# 3. Registrare i tool disponibili per l'agente
agent.register_tool(
name="read_java_file",
description="Leggi il contenuto di un file Java",
callback=read_java_file,
parameters={
"path": {"type": "string", "description": "Percorso file .java"}
}
)
agent.register_tool(
name="write_test_file",
description="Scrivi il file di test JUnit generato",
callback=write_test_file,
parameters={
"path": {"type": "string", "description": "Percorso file test"},
"content": {"type": "string", "description": "Contenuto test"}
}
)
agent.register_tool(
name="analyze_class_structure",
description="Analizza la struttura della classe (metodi, dipendenze)",
callback=analyze_class_structure,
parameters={
"java_code": {"type": "string", "description": "Codice sorgente Java"}
}
)
# 4. Eseguire l'agente
if __name__ == "__main__":
user_input = """
Genera test JUnit5 completi per il file
'backend/src/main/java/dev/federicocalo/portfolio/application/service/UserService.java'
Salva il risultato in:
'backend/src/test/java/dev/federicocalo/portfolio/application/service/UserServiceTest.java'
Considera che la classe ha dipendenze Autowired su UserRepository e EmailService.
"""
response = agent.run(user_input)
print("Agent Response:")
print(response)
4. Agente Specializzato in TypeScript: Angular Component Generator
Vediamo come costruire un agente TypeScript che genera componenti Angular 21 standalone con form reattivi, integrazione API e test.
#!/usr/bin/env node
// component-generator-agent.ts
import { ClaudeAgent, ClaudeAgentOptions } from "@anthropic-ai/claude-agent";
import { execSync } from "child_process";
import { promises as fs } from "fs";
import path from "path";
// 1. System prompt dell'agente
const SYSTEM_PROMPT = `
Sei un esperto di Angular 21 che genera componenti standalone di alta qualità.
Quando ricevi una richiesta, produci:
1. Componente TypeScript standalone (.ts)
- Usa standalone: true
- OnPush change detection
- Signal per stato reattivo (computed, effect)
- Dependency injection via constructor
- Proper typing (no 'any')
2. Template HTML (.html)
- Binding reattivo su signal
- Form reattivo con Validators
- ARIA label per accessibilità
- ngNonBindable dove necessario
3. Stile CSS scoped (.css)
- CSS custom properties da design system
- Mobile-first responsive
- Transizioni fluide
4. Test Jasmine (.spec.ts)
- 80%+ code coverage
- Mock di servizi
- Test user interactions
Nomi: kebab-case per file, PascalCase per classi
`;
// Tool callbacks
async function executeCommand(cmd: string): Promise {
try {
const result = execSync(cmd, { encoding: 'utf-8' });
return result;
} catch (error: any) {
return \`ERROR: \${error.message}\`;
}
}
async function writeFile(filePath: string, content: string): Promise {
try {
const dir = path.dirname(filePath);
await fs.mkdir(dir, { recursive: true });
await fs.writeFile(filePath, content);
return \`File scritto: \${filePath}\`;
} catch (error: any) {
return \`ERROR: \${error.message}\`;
}
}
async function readAngularStyle(): Promise {
try {
const styleContent = await fs.readFile(
'src/styles.css',
'utf-8'
);
// Estrai solo le variabili CSS importanti
const lines = styleContent.split('\n')
.filter(l => l.includes('--color-') || l.includes('--space-'))
.slice(0, 20);
return lines.join('\n');
} catch {
return "/* Design system not found */";
}
}
// 2. Istanziare agente TypeScript
const agent = new ClaudeAgent({
model: "claude-opus-4-20250514",
system_prompt: SYSTEM_PROMPT,
max_tokens: 12000
});
// 3. Registrare tool
agent.registerTool({
name: "execute_command",
description: "Esegui comandi bash (ng, npm, git, etc.)",
handler: executeCommand,
parameters: {
cmd: { type: "string", description: "Comando da eseguire" }
}
});
agent.registerTool({
name: "write_file",
description: "Scrivi contenuto su file",
handler: writeFile,
parameters: {
filePath: { type: "string", description: "Percorso del file" },
content: { type: "string", description: "Contenuto" }
}
});
agent.registerTool({
name: "read_angular_style",
description: "Leggi variabili CSS del design system",
handler: readAngularStyle,
parameters: {}
});
// 4. Eseguire agente
async function main() {
const userInput = \`
Genera un componente Angular standalone "UserProfileForm" con:
- Form reattivo per edit profilo (nome, email, bio)
- Validation di email
- Submit con loading state
- Scossa di errore animata se submit fallisce
- Signal per reactive state
- Dipendenza su UserService (mock)
- Test completo
- Usa design system da src/styles.css
Salva in: src/app/pages/user-profile-form/
Aggiungi la route in app.routes.ts come lazy-loaded
\`;
const response = await agent.run(userInput);
console.log("Agent Output:");
console.log(response);
}
main().catch(console.error);
5. Subagenti Programmatici: Orchestrazione Multi-Agente
Uno dei pattern più potenti dell'Agent SDK è la capacità di uno parent agent di spawmare subagenti per task paralleli. Questo permette decomposizione e parallelizzazione di lavoro complesso.
#!/usr/bin/env python3
# orchestrator_agent.py
from anthropic_agent import ClaudeAgent, ClaudeAgentOptions
import asyncio
import json
# Parent agent: compone il task
def parent_agent():
agent = ClaudeAgent(
options=ClaudeAgentOptions(
model="claude-opus-4-20250514",
system_prompt="Sei il coordinatore di un team di agenti specializzati."
)
)
return agent
# Tre subagenti specializzati
def code_review_agent():
return ClaudeAgent(
options=ClaudeAgentOptions(
model="claude-sonnet-4-20250514",
system_prompt="Sei esperto di code review. Analizza il codice per bug, security, performance.",
max_tokens=4000
)
)
def test_generation_agent():
return ClaudeAgent(
options=ClaudeAgentOptions(
model="claude-sonnet-4-20250514",
system_prompt="Sei esperto di testing. Genera test JUnit5 con coverage 80%+.",
max_tokens=4000
)
)
def documentation_agent():
return ClaudeAgent(
options=ClaudeAgentOptions(
model="claude-sonnet-4-20250514",
system_prompt="Sei esperto di documentazione tecnica. Produci README, Javadoc, API doc.",
max_tokens=4000
)
)
# Orchestrazione: parent spawna 3 subagenti in parallelo
async def orchestrate_workflow(java_code: str) -> dict:
"""
Parent decompone il task:
1. Subagente 1: Code review del codice
2. Subagente 2: Generazione test
3. Subagente 3: Documentazione
Esegui in parallelo, raccogli risultati.
"""
# Create subagents
reviewer = code_review_agent()
tester = test_generation_agent()
documenter = documentation_agent()
# Task paralleli
review_task = reviewer.run(f"Esamina questo codice Java:\n{java_code[:1000]}...")
test_task = tester.run(f"Genera test per:\n{java_code[:1000]}...")
doc_task = documenter.run(f"Documenta:\n{java_code[:1000]}...")
# Attendi completamento di tutti i task
results = await asyncio.gather(
asyncio.create_task(review_task),
asyncio.create_task(test_task),
asyncio.create_task(doc_task)
)
return {
"code_review": results[0],
"tests_generated": results[1],
"documentation": results[2]
}
# Aggregazione: parent agent legge i risultati e produce summary
def aggregate_results(subagent_results: dict):
parent = parent_agent()
summary_prompt = f"""
I seguenti subagenti hanno analizzato una classe Java:
CODE REVIEW:
{subagent_results['code_review']}
TEST GENERATED:
{subagent_results['tests_generated']}
DOCUMENTATION:
{subagent_results['documentation']}
Produci un report esecutivo consolidato con:
1. Severità complessiva degli issue
2. Copertura test stimata
3. Completezza documentazione
4. Action items prioritizzati
"""
return parent.run(summary_prompt)
# Main: esegui workflow
async def main():
# Simula lettura codice
java_code = """
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findById(Long id) {
return userRepository.findById(id).orElse(null);
}
public User save(UserRequest request) {
User user = new User();
user.setName(request.getName());
user.setEmail(request.getEmail());
return userRepository.save(user);
}
}
"""
print("=== Orchestrating Multi-Agent Workflow ===\n")
# Esegui workflow parallelo
results = await orchestrate_workflow(java_code)
print("Subagent Results:")
print(json.dumps(results, indent=2))
# Aggregazione finale
print("\n=== Final Report ===")
final_report = aggregate_results(results)
print(final_report)
if __name__ == "__main__":
asyncio.run(main())
6. Managed Agents (Public Beta, 8 Aprile 2026)
I Managed Agents rappresentano l'evoluzione cloud-native dell'Agent SDK. Invece di eseguire agenti localmente sul tuo server, gli agenti vengono eseguiti su infrastruttura gestita da Anthropic, con sandbox isolato, resource limits e orchestrazione automatica.
Caratteristiche Principali dei Managed Agents
Managed Agents vs SDK Locale
| Aspetto | Agent SDK Locale | Managed Agents |
|---|---|---|
| Esecuzione | Sul tuo server/laptop | Su infrastruttura Anthropic |
| Isolamento | Condiviso con altri processi | Sandbox container isolato |
| Scalabilità | Limitata dalle risorse locali | Auto-scaling illimitato |
| Memoria persistente | In-memory, persa al riavvio | Managed storage cross-session |
| Monitoraggio | DIY (logging, metriche) | Dashboard built-in |
| Costo | Solo token API | Token + compute hosting |
| Tool built-in | Custom solo | File ops, web fetch, SQL, bash |
| SSE streaming | Non supportato | Supportato nativamente |
Configurazione Managed Agent
Un Managed Agent è definito da tre componenti: Agent Config, Environment e Sessions.
# managed-agent-config.yaml
name: "github-pr-generator"
description: "Agente che monitora repo GitHub e genera PR automatiche"
agent:
model: "claude-opus-4-20250514"
system_prompt: |
Sei un agente GitHub PR bot.
Il tuo compito è monitorare repository per issue aperte,
e generare PR che risolvono gli issue.
Quando vedi un issue:
1. Leggi il description completa
2. Clona il repo localmente (tool: bash)
3. Crea un branch per la soluzione
4. Implementa fix
5. Genera il PR con description dettagliata
max_tokens: 8000
environment:
container:
image: "ubuntu:24.04"
resources:
cpu: "1000m"
memory: "2Gi"
env:
GITHUB_TOKEN: "${SECRETS.GITHUB_TOKEN}"
GITHUB_REPO: "myorg/myrepo"
tools:
enabled:
- bash # Esegui comandi Linux
- file_ops # Read/write file
- web_fetch # HTTP requests
- git_cli # Git commands
webhooks:
- event: "issues.opened"
url: "/webhook/github-issue"
auth: "bearer-token"
sessions:
max_active: 10
timeout: 3600
memory:
enabled: true
retention_days: 30
Distributed System Pattern: Agent + Backend Integration
Un pattern comune è integrare un Managed Agent con un backend Spring Boot tramite webhook. Quando avviene un evento (GitHub push, issue aperto, etc.), il webhook notifica il backend, che spawna una sessione del Managed Agent.
@RestController
@RequestMapping("/api/v1/webhook")
@RequiredArgsConstructor
public class WebhookController {
private final ManagedAgentClient agentClient;
private final AuditService auditService;
@PostMapping("/github/issue")
public ResponseEntity<?> handleGitHubIssue(@RequestBody GitHubIssueEvent event) {
// 1. Valida signature GitHub
if (!isValidGitHubSignature(event)) {
return ResponseEntity.status(401).build();
}
// 2. Spawna sessione Managed Agent
String agentSessionId = agentClient.createSession("github-pr-generator");
// 3. Invia messaggio all'agente
String prompt = String.format("""
Nuovo issue aperto su GitHub:
Repo: %s
Issue #%d: %s
Description: %s
URL: %s
Analizza e genera una PR che risolva l'issue.
Usa il webhook callback per notificarmi del completamento.
""",
event.getRepository(),
event.getIssueNumber(),
event.getTitle(),
event.getDescription(),
event.getUrl()
);
agentClient.sendMessage(agentSessionId, prompt);
// 4. Log audit
auditService.log(AuditEvent.builder()
.type("AGENT_SPAWNED")
.agentSessionId(agentSessionId)
.payload(event)
.build()
);
return ResponseEntity.accepted().build();
}
@PostMapping("/agent/complete")
public ResponseEntity<?> handleAgentComplete(@RequestBody AgentCompleteEvent event) {
// Callback: l'agente ha completato il task
String prUrl = event.getPullRequestUrl();
// Notifica l'utente via email/Slack
notificationService.notifyPRCreated(prUrl);
return ResponseEntity.ok().build();
}
private boolean isValidGitHubSignature(GitHubIssueEvent event) {
// Verifica HMAC signature da GitHub
return true; // implement properly
}
}
7. ant CLI: Command-Line Client per Claude API
ant è il command-line client ufficiale di Anthropic per Claude API e Managed Agents. È ideale per automazione da bash, CI/CD pipeline e script serverless.
Installazione ant CLI
# macOS con Homebrew
brew tap anthropics/ant
brew install ant
# Linux / WSL
curl -fsSL https://cli.anthropic.com/install.sh | sh
# Verifica installazione
ant --version
# Primo avvio: setup API key
ant config set api-key $ANTHROPIC_API_KEY
Comandi Principali di ant
ant CLI Commands
| Comando | Descrizione | Esempio |
|---|---|---|
ant messages create |
Invia un messaggio a Claude API | ant messages create --model claude-opus --message "Ciao" |
ant agents list |
Elenca Managed Agents configurati | ant agents list --format json |
ant agents create |
Crea un nuovo Managed Agent da YAML | ant agents create --config agent.yaml |
ant sessions create |
Crea una nuova sessione per un agent | ant sessions create --agent-id abc123 |
ant sessions send-message |
Invia messaggio a una sessione | ant sessions send-message --session-id xyz --message "..." |
ant files upload |
Upload file (per agent file ops) | ant files upload --file mycode.java |
Esempio Pratico: CI/CD Pipeline con ant
name: Agent Code Review with ant
on:
pull_request:
types: [opened, synchronize]
jobs:
agent-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install ant CLI
run: |
curl -fsSL https://cli.anthropic.com/install.sh | sh
ant --version
- name: Get PR diff
id: diff
run: |
git fetch origin main
git diff origin/main...HEAD > /tmp/pr.diff
echo "diff_size=$(wc -c < /tmp/pr.diff)" >> $GITHUB_OUTPUT
- name: Send to Agent for Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
PROMPT="Esamina il seguente diff e fornisci una code review:
\$(cat /tmp/pr.diff)
Output JSON con:
- severity: critical/major/minor
- file
- line
- issue
- suggestion"
ant messages create \
--model claude-opus-4-20250514 \
--message "\$PROMPT" \
--format json > /tmp/review.json
- name: Post Review Comment
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = JSON.parse(fs.readFileSync('/tmp/review.json', 'utf8'));
const comment = \`## Agent Code Review
\${review.content}
\`;
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: comment
});
8. Memory per Managed Agents (Public Beta, 23 Aprile 2026)
Il 23 aprile 2026, la Memory feature è entrata in public beta per Managed Agents. La memoria consente agli agenti di ricordare informazioni cross-session, learning da interazioni precedenti.
Come Funziona la Memory
Quando un Managed Agent interagisce con un utente:
- Prima di ogni sessione, l'agente legge il memory context dall'utente
- Usa questo contesto per personalizzare risposte e decisioni
- Dopo la sessione, può aggiungere nuovo memory update per future sessioni
- La memoria persiste su server Anthropic con versionamento e audit trail
# tutoring-agent-memory.yaml
name: "java-tutoring-agent"
description: "Tutore privato per Java & Spring Boot con memoria"
agent:
model: "claude-opus-4-20250514"
system_prompt: |
Sei un tutore privato di Java e Spring Boot.
Adatta lo stile di insegnamento al livello dello studente.
Usa la memoria per ricordare:
- Topics già insegnati e compresi
- Aree di difficoltà
- Preferenze didattiche (esempi vs teoria)
- Progetti precedenti discussi
memory:
enabled: true
schema:
student_level: "beginner|intermediate|advanced"
topics_covered: ["string", "oop", "spring-boot"]
difficult_areas: ["generics", "streams"]
learning_style: "visual|textual|hands-on"
projects: [{name, date, skills_practiced}]
recent_questions: [{topic, answer}]
management:
auto_update: true
retention_days: 365
review_frequency: "per_session"
sessions:
max_active: 1
timeout: 1800
---
# Esempio: usare l'agente con memoria
POST /api/v1/agent/tutoring/sessions
Request:
{
"user_id": "student123",
"message": "Come creo un REST API in Spring Boot?",
"memory_context": {
"student_level": "beginner",
"topics_covered": ["variables", "classes", "inheritance"],
"difficult_areas": ["annotations"],
"learning_style": "hands-on"
}
}
Response:
{
"session_id": "sess_abc123",
"response": "Facciamo un esempio pratico...",
"memory_update": {
"topics_covered": [..., "rest-api", "spring-annotations"],
"recent_questions": [
{"topic": "REST API Spring Boot", "answer": "[summary]"}
]
}
}
9. Quando Usare Agent SDK vs Managed Agents
La scelta tra SDK locale e Managed Agents dipende dal tuo caso d'uso specifico.
Matrice Decisionale
| Criterio | Agent SDK Locale | Managed Agents |
|---|---|---|
| Prototipazione rapida | ✅ Ideale | ⚠️ Setup iniziale |
| Agenti in produzione 24/7 | ⚠️ Devi gestire infrastructure | ✅ Ideale |
| Carico variabile (basso → alto) | ⚠️ Overhead operativo | ✅ Auto-scaling |
| Costo per task singolo | ✅ Solo token | ⚠️ Token + hosting |
| Accesso a risorsa locale (DB, file) | ✅ Diretto | ⚠️ Via tool configurati |
| Memoria cross-session | ⚠️ DIY (Redis, DB) | ✅ Built-in |
| Controllo fine sui tool | ✅ Custom callback | ⚠️ Tool pre-built |
| Compliance isolamento | ⚠️ Condiviso | ✅ Sandbox |
Architettura Ibrida Consigliata
Per sistemi production-scale, è consigliato combinare entrambi gli approcci:
- Agent SDK locale: Agenti veloci ad-hoc nel backend (code review, validation, formatting)
- Managed Agents: Agenti long-running per orchestrazione complessa (monitoring, workflow automation, customer support)
- Comunicazione: Backend Spring Boot coordina entrambi, messaggi passati via webhook/queue
10. Conclusione e Roadmap Futura
L'evoluzione da Claude Code SDK a Claude Agent SDK a Managed Agents rappresenta una democratizzazione della creazione di agenti autonomi. In 9 mesi (da settembre 2025 ad aprile 2026), il framework ha progredito da tool per developer a piattaforma enterprise per agenti production-grade.
Punti Chiave
- Agent SDK (Oct 2025): Framework unificato Python + TypeScript
- System prompts + tools: Definisci agenti specializzati con capacità custom
- Subagenti programmatici: Orchestrazione parallela di agenti
- Managed Agents (Apr 2026): Cloud-hosted, sandbox, scalable
- Memory (Apr 2026): Persistenza cross-session
- ant CLI: Client nativo per automation e CI/CD
- Scelta ibrida: Combinare SDK locale + Managed per massima flessibilità
Prossimi Articoli della Serie
Nel prossimo articolo (26 della serie) esploreremo Auto Mode e ScheduleWakeup: la capacità degli agenti di operare completamente autonomi senza intervento umano, e di risvegliarsi automaticamente a orari specifici per eseguire task scheduled. Scopriremo come costruire agenti che monitorano sistemi 24/7 e prendono decisioni autonome.
Questa è la 25ª e penultima parte della Claude series. La serie è nata come guida per sviluppatori che vogliono integrare Claude AI nei propri workflow professionali. Con l'arrivo dei Managed Agents, il panorama è completo: dal prototyping locale al production enterprise-scale, hai tutti gli strumenti per costruire sistemi AI autonomi, scalabili e affidabili.

Commenti
Caricamento commenti...
Accedi per commentare