[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"portal-settings:stajic:it":3,"public-menus:all":38,"post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:it":205,"related:post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:it:1":2860},{"statusCode":4,"data":5,"message":37},200,{"tenantId":6,"lang":7,"defaultLang":8,"siteUrl":9,"contactEmail":10,"brandName":11,"logoUrl":12,"siteName":11,"siteDescription":13,"ogImage":10,"robotsIndex":14,"socialLinks":10,"reservedSlugs":10,"seoPolicy":15},"stajic","it","de","https:\u002F\u002Fstajic.de",null,"Stajic Platform","\u002FLogo_Planet.svg","Stajic Portal",true,{"branding":16,"relatedContent":17,"crossDomainLinks":18},{"logoUrl":12},{"enabled":14},[19,22,25,28,31,34],{"url":20,"label":21,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Ffigure.rocks","figure.rocks",{"url":23,"label":24,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Floving.rocks","loving.rocks",{"url":26,"label":27,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.com","bazify.com",{"url":29,"label":30,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.de","bazify.de",{"url":32,"label":33,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.at","bazify.at",{"url":35,"label":36,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.ba","bazify.ba","Portal settings resolved",[39,45],{"id":40,"name":41,"location":42,"isActive":14,"isDefault":43,"items":44},1,"main-navigation","header",false,[],{"id":46,"name":47,"location":48,"isActive":14,"isDefault":14,"items":49},4,"main-menu","sidebar",[50,66,79,93,103,118,133],{"id":51,"title":52,"url":60,"target":61,"icon":62,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":64,"portfolioId":10,"children":65},"item-18",{"de":53,"en":54,"es":55,"fr":56,"it":54,"ru":57,"sr":58,"zh":59},"Startseite","Home","Inicio","Accueil","Главная","Почетна","首页","\u002Ffull-stack-web-developer-munich-performance-seo-and-maintainable-builds","_self","i-lucide-home","page",111,[],{"id":67,"title":68,"url":75,"target":61,"icon":76,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":77,"portfolioId":10,"children":78},"item-22",{"de":69,"en":69,"es":70,"fr":69,"it":71,"ru":72,"sr":73,"zh":74},"Vision","Visión","Visione","Видение","Визија","想象","\u002Fueber-uns-webdesign-muenchen-webaplikation","i-lucide-eye",113,[],{"id":80,"title":81,"url":89,"target":61,"icon":90,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":91,"portfolioId":10,"children":92},"item-19",{"de":82,"en":83,"es":84,"fr":83,"it":85,"ru":86,"sr":87,"zh":88},"Leistungen","Services","Servicios","Servizi","Услуги","Услуге","服务","\u002Fservices-dienstleistungen-muenchen","i-lucide-wrench",116,[],{"id":94,"title":95,"url":99,"target":61,"icon":100,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":101,"portfolioId":10,"children":102},"item-23",{"de":96,"en":96,"es":96,"fr":96,"it":96,"ru":97,"sr":97,"zh":98},"Blog","Блог","博客","\u002Fblog","i-lucide-book-open",112,[],{"id":104,"title":105,"url":114,"target":61,"icon":115,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":116,"portfolioId":10,"children":117},"item-32",{"de":106,"en":107,"es":108,"fr":109,"it":110,"ru":111,"sr":112,"zh":113},"Neue Technologien","New Technologies","Nuevas tecnologías","Nouvelles technologies","Nuove tecnologie","Новые технологии","Нове технологије","新技术！","\u002Fneue-webtechnologien","i-lucide-sparkles",122,[],{"id":119,"title":120,"url":129,"target":61,"icon":130,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":131,"portfolioId":10,"children":132},"item-20",{"de":121,"en":122,"es":123,"fr":124,"it":125,"ru":126,"sr":127,"zh":128},"Kontakt","Contact us!","Contacto","Contact","Contatto","Контакт","Контактирајте нас","联系我们！","\u002Fcontact","i-lucide-mail",115,[],{"id":134,"title":135,"url":144,"target":61,"icon":145,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":146,"portfolioId":10,"children":147},"item-21",{"de":136,"en":137,"es":138,"fr":139,"it":140,"ru":141,"sr":142,"zh":143},"Unsere Arbeit","Our Work","Nuestro trabajo","Nos réalisations","I nostri lavori","Наши работы","Наши радови","文件夹","\u002Fportfolio","i-lucide-briefcase",114,[148,161,175,181,193],{"id":149,"title":150,"url":144,"target":61,"icon":159,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":146,"portfolioId":10,"children":160},"item-24",{"de":151,"en":152,"es":153,"fr":154,"it":155,"ru":156,"sr":157,"zh":158},"Alle Projekte","All Projects","Todos los proyectos","Tous les projets","Tutti i progetti","Все проекты","Сви пројекти","所有项目","i-lucide-grid-3x3",[],{"id":162,"title":163,"url":171,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":174},"item-29",{"de":164,"en":165,"es":166,"fr":167,"it":168,"ru":169,"sr":170,"zh":143},"Local Roots, Global Reach","Local Roots - Global Reach","Empresa local ","Entreprise locale","Azienda locale","Местная компания","Локално предузеће глобално тржиште","\u002Fportfolio\u002Flocal-roots-global-reach-communication-media-systems-for-modern-business","i-lucide-folder","custom",[],{"id":176,"title":177,"url":179,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":180},"item-28",{"de":178,"en":178,"es":178,"fr":178,"it":178,"ru":178,"sr":178,"zh":178},"Solr Suggester","\u002Fportfolio\u002Fsolr-fuzzy-suggester-und-solr-infix-suggester-abfrage-ueber-ajax-und-filterung",[],{"id":182,"title":183,"url":191,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":192},"item-27",{"de":184,"en":185,"es":186,"fr":187,"it":188,"ru":189,"sr":190,"zh":185},"Firmenwebseite SEO","Company Website SEO","Sitio web corporativo SEO","Site web d’entreprise SEO","Sito web aziendale SEO","Корпоративный сайт SEO","Пословна веб-страница SEO","\u002Fportfolio\u002Fseo-sem-branding-mobile-webseite-muenchen",[],{"id":194,"title":195,"url":203,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":204},"item-31",{"de":196,"en":197,"es":198,"fr":199,"it":200,"ru":201,"sr":202,"zh":197},"Digitalisierungsportal","Digitalization Portal","Portal de digitalización","Portail de numérisation","Portale di digitalizzazione","Портал цифровизации","Портал за дигитализацију","\u002Fportfolio\u002Fdigitalisierungsportal-archiv-museum-bibliothek-ead-lido-mets-mods",[],{"statusCode":4,"data":206,"message":2859},{"id":207,"title":208,"slug":209,"content":210,"contentJson":211,"excerpt":1303,"featuredImage":1304,"featuredImageAlt":1305,"featuredImageCaption":10,"featuredImageTitle":10,"featuredImageCopyright":10,"featuredImageAuthor":10,"featuredImageSourceUrl":10,"featuredImageLicense":10,"featuredImageIsAiGenerated":43,"status":1306,"publishedAt":1307,"createdAt":1308,"updatedAt":1309,"seoLocalePaths":1310,"categories":1319,"author":1332,"translations":1337},"474","Migrare dall'SDK OpenAI Agents all'API Agents: cosa cambia effettivamente a livello architetturale?","migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Contenuti\">\u003Cstrong class=\"editorjs-toc__title\">Contenuti\u003C\u002Fstrong>\u003Col class=\"editorjs-toc__list editorjs-toc__list--depth-0\">\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-6\" class=\"editorjs-toc__link\">La migrazione va da un loop di proprietà dell&#39;applicazione a un harness gestito\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">La Mappa di Migrazione del Confine di Runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Cosa può migrare concettualmente senza cambiare titolarità\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Cosa non dovrebbe essere migrato uno-a-uno\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Passo 1 — Separare lo stato del dominio dallo stato della sessione dell&#39;agente\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Passo 2 — Convertire la mentalità del runner in una mentalità di sessione ed eventi\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Passo 3 — Riprogettare gli strumenti funzione attorno alle azioni richieste\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Passo 4 — Decidere dove deve avvenire l&#39;esecuzione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Passo 5 — Sostituire il recupero implicito con una gestione esplicita del ciclo di vita\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Passo 6 — Ricostruire l&#39;osservabilità attorno al nuovo confine di traccia\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Passo 7 — Preservare le valutazioni prima di modificare il runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">Il test di prova della migrazione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Cosa misurare durante la migrazione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Quando non migrare ancora\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Quando la migrazione diventa strategicamente importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Cosa cambierebbe questa risposta?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Limitazioni\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Conclusione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">FAQ\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Glossario\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Fonti primarie e approfondimenti\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">La migrazione va da un ciclo di proprietà dell&#39;applicazione a un harness gestito\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">La Mappa di Migrazione del Confine di Runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Cosa può migrare concettualmente senza cambiare titolarità\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Cosa non dovrebbe essere migrato uno a uno\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Passo 1 — Separare lo stato di dominio dallo stato della sessione dell&#39;agente\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Passo 2 — Convertire la mentalità del runner in una mentalità di sessione ed eventi\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Passo 3 — Riprogettare gli strumenti funzione attorno alle azioni richieste\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Passo 4 — Decidere dove deve avvenire l&#39;esecuzione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Passo 5 — Sostituire il recupero implicito con una gestione esplicita del ciclo di vita\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Passo 6 — Ricostruire l&#39;osservabilità attorno al nuovo confine di tracciamento\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Passo 7 — Preservare le valutazioni prima di cambiare il runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">Il test di prova della migrazione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Cosa misurare durante la migrazione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Quando non migrare ancora\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Quando la migrazione diventa strategicamente importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">Cosa cambierebbe questa risposta?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Limitazioni\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Conclusione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">FAQ\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Glossario\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Fonti primarie e ulteriori letture\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Cp>Migrare dall'OpenAI Agents SDK all'Agents API non è una semplice rinomina di import. Il confine architetturale principale cambia: l'SDK esegue il loop dell'agente all'interno della tua applicazione, mentre l'Agents API esegue un harness Codex gestito e una sessione durevole sul lato di OpenAI. La domanda di migrazione non è quindi \"Quali classi corrispondono a quali endpoint?\" ma \"Quali responsabilità di runtime attraversano il confine, quali rimangono nella nostra applicazione e quali devono essere riprogettate?\"\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--info my-6 rounded-xl border p-5 border-blue-300 bg-blue-50 dark:border-blue-900 dark:bg-blue-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Risposta diretta\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Una vera migrazione da Agents SDK ad Agents API cambia la titolarità del runtime.&lt;\u002Fstrong&gt; La tua configurazione riutilizzabile dell&#39;agente può ancora contenere modello, istruzioni e strumenti, ma il loop, la sessione durevole, l&#39;orchestrazione, la compattazione del contesto e il ripristino si spostano verso il runtime gestito dell&#39;Agents API. La tua applicazione dovrebbe mantenere lo stato di dominio, l&#39;autorizzazione, le regole di business, le implementazioni delle funzioni e la logica di audit al di fuori della sessione dell&#39;agente. Tratta la migrazione come una riprogettazione del confine, non come una conversione meccanica del codice.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Caside class=\"editorjs-callout editorjs-callout--warning my-6 rounded-xl border p-5 border-amber-300 bg-amber-50 dark:border-amber-900 dark:bg-amber-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Aggiornato al 25 settembre 2026\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">OpenAI attualmente contrassegna l&#39;Agents SDK come &lt;strong&gt;feature complete&lt;\u002Fstrong&gt; e raccomanda l&#39;Agents API per le nuove applicazioni di agenti. L&#39;Agents API è in beta pubblica. Le applicazioni SDK esistenti rimangono supportate e la migrazione immediata non è automaticamente richiesta.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Caside class=\"editorjs-callout editorjs-callout--note my-6 rounded-xl border p-5 border-gray-300 bg-gray-50 dark:border-gray-700 dark:bg-gray-900\u002F40\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Informazioni sul modello di migrazione\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">La Mappa di Migrazione del Confine di Runtime e il Test di Prova di Migrazione in questo articolo sono strumenti architetturali pratici, non framework di migrazione ufficiali di OpenAI. Derivano dalle attuali differenze di runtime documentate da OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-6\">La migrazione va da un loop di proprietà dell'applicazione a un harness gestito\u003C\u002Fh2>\n\u003Cp>Nell'Agents SDK, una esecuzione è un turno a livello di applicazione. Il runner dell'SDK chiama il modello, ispeziona l'output, esegue gli strumenti, segue i passaggi di consegne e continua fino a raggiungere un punto di arresto. Il tuo processo ospita quel loop e quindi ne possiede il ciclo di vita.\u003C\u002Fp>\n\u003Cp>Nell'Agents API, OpenAI esegue l'harness. Una sessione è un'istanza durevole di una configurazione di agente che accetta attività, produce eventi, può mettersi in pausa per azioni richieste e può continuare nel tempo. OpenAI gestisce sessioni, orchestrazione, compattazione del contesto e ripristino; la tua applicazione invia lavoro, gestisce gli strumenti funzione, riceve eventi e opzionalmente gestisce un ambiente di esecuzione self-hosted.\u003C\u002Fp>\n\u003Cp>Questo spostamento di titolarità è la migrazione. Tutto il resto — sintassi API, schemi degli strumenti, gestione degli eventi, ID di sessione — ne consegue.\u003C\u002Fp>\n\u003Ch2 id=\"section-10\">La Mappa di Migrazione del Confine di Runtime\u003C\u002Fh2>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Aspetto\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Agents SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Obiettivo di migrazione Agents API\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Loop dell'agente\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Viene eseguito nella tua applicazione tramite il runner dell'SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Viene eseguito nell'harness Codex gestito\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Definizione riutilizzabile dell'agente\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Oggetto Agent nel codice dell'applicazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Configurazione dell'agente salvata o inline con modello, istruzioni e strumenti\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuità della conversazione \u002F del lavoro\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Strategia di sessione dell'SDK, cronologia, continuazione del risultato o archiviazione dell'applicazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Sessione durevole dell'Agents API\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Esecuzione degli strumenti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'SDK coordina le chiamate agli strumenti nel tuo runtime\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'harness richiede chiamate di funzione; la tua applicazione restituisce i risultati\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gestione del contesto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il tuo runtime \u002F strategia di sessione dell'SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Contesto di sessione gestito, compattazione e ripristino, più i confini dei dati della tua applicazione\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Passaggi di consegne \u002F specialisti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Primitive di orchestrazione dell'SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportamento dell'harness \u002F subagente nell'Agents API; non dare per scontata una semantica uno-a-uno\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ambiente di esecuzione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il runtime della tua applicazione o un ambiente specifico per gli strumenti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ambiente opzionale ospitato da OpenAI o self-hosted collegato alla sessione\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Streaming\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Streaming dell'SDK dall'esecuzione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Flusso di eventi della sessione dell'Agents API\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ciclo di vita asincrono\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Di solito gestito dall'applicazione attorno all'esecuzione dell'SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Stati nativi della sessione, turni asincroni e webhook\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tracciamento \u002F osservabilità\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tracciamento dell'Agents SDK e log dell'applicazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Log di sessione dell'Agents, eventi, turni, chiamate agli strumenti, subagenti e tracce esportabili\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ripristino\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Responsabilità dell'applicazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ripristino gestito di harness\u002Fsessione più ripristino di proprietà dell'applicazione per sistemi esterni e ambienti self-hosted\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-12\">Cosa può migrare concettualmente senza cambiare titolarità\u003C\u002Fh2>\n\u003Cp>Diversi concetti dell'applicazione sopravvivono alla migrazione senza problemi anche se la loro rappresentazione cambia. Modelli, istruzioni, definizioni di funzioni con schema JSON, accesso MCP, descrizioni degli strumenti e requisiti di output strutturato rimangono aspetti della configurazione dell'agente.\u003C\u002Fp>\n\u003Cp>Il modello di configurazione dell'Agents API di OpenAI definisce esplicitamente un agente tramite modello, istruzioni, strumenti, ragionamento e comportamento di output. Gli strumenti funzione rimangono codice dell'applicazione: l'harness richiede una chiamata di funzione e il tuo handler restituisce il risultato. OpenAI osserva inoltre che le implementazioni di funzioni usate con la Responses API possono essere riutilizzate con il flusso di sessione dell'Agents API.\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--success my-6 rounded-xl border p-5 border-emerald-300 bg-emerald-50 dark:border-emerald-900 dark:bg-emerald-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Buon candidato alla migrazione\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Una funzione di business pura come &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt; non dovrebbe aver bisogno di sapere se il chiamante è l&#39;Agents SDK o l&#39;Agents API. Mantieni la sua logica di dominio dietro un&#39;interfaccia applicativa stabile e migra solo l&#39;adattatore rivolto all&#39;agente.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-16\">Cosa non dovrebbe essere migrato uno-a-uno\u003C\u002Fh2>\n\u003Cp>Il modello di migrazione pericoloso è ricreare ogni astrazione di runtime dell'SDK all'interno dell'Agents API. Questo può portarti a pagare per un harness gestito mentre gestisci ancora un harness ombra nella tua applicazione.\u003C\u002Fp>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Assunzione dell'era SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Perché una copia diretta è rischiosa\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Domanda di migrazione\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il loop dell'applicazione possiede ogni continuazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'Agents API possiede già il loop dell'harness\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quale logica di continuazione è logica di prodotto e quale dovrebbe passare alla sessione gestita?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'oggetto sessione locale è il meccanismo principale di continuità\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le sessioni dell'Agents API sono risorse durevoli con un proprio ciclo di vita\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quale stato appartiene alla sessione rispetto al database di prodotto?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ogni interruzione viene gestita in modo sincrono\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">I turni dell'Agents API sono asincroni e possono presentare stati action_required\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quali azioni necessitano di webhook, worker, idempotenza e handler ripristinabili?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tutta l'esecuzione degli strumenti avviene dove gira il processo dell'SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gli handler delle funzioni e gli ambienti di esecuzione possono essere separati\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Dove dovrebbe effettivamente essere eseguito ciascuno strumento?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La traccia dell'SDK è la timeline operativa\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'Agents API espone eventi di sessione, turni e tracce gestite\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quali dati di audit a livello di applicazione necessitano ancora di un proprio registro?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'oggetto handoff corrisponde direttamente a un modello di subagente ospitato\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le semantiche di runtime possono differire\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quale titolarità visibile all'utente e comportamento specialistico deve essere preservato, non solo la vecchia struttura delle classi?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-19\">Passo 1 — Separare lo stato del dominio dallo stato della sessione dell'agente\u003C\u002Fh2>\n\u003Cp>Prima di toccare le chiamate API, classifica lo stato che la tua applicazione SDK attualmente trasporta. Parte dello stato esiste solo per mantenere in movimento la conversazione dell'agente. Altro stato è verità di business: permessi utente, stato del progetto, dati dell'ordine, approvazione del flusso di lavoro, record dei clienti, versioni dei documenti, stato delle policy o configurazione dell'applicazione.\u003C\u002Fp>\n\u003Cp>La seconda categoria non dovrebbe diventare dipendente da una sessione dell'API Agents. Una sessione durevole è una continuità utile per l'agente; non è un sostituto della fonte di verità del tuo prodotto. Se la sessione scompare, scade, viene ricostruita o cambia implementazione, la tua applicazione deve comunque sapere cosa è vero.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Test di collocazione dello stato\u003C\u002Fh3>\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left dark:border-gray-700 dark:bg-gray-900\">\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Tipo di stato\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Proprietario preferito\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Motivo\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Continuità della conversazione\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Verità di business\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Artefatto durevole\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Stato di lavoro temporaneo\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-23\">Passo 2 — Convertire la mentalità del runner in una mentalità di sessione ed eventi\u003C\u002Fh2>\n\u003Cp>Le applicazioni SDK spesso pensano in termini di chiamata a run e ricezione di un risultato. L'API Agents pensa in termini di una sessione durevole i cui turni possono essere eseguiti in modo asincrono. Un messaggio a una sessione inattiva avvia il lavoro; un messaggio durante un turno attivo può indirizzarlo. I progressi arrivano tramite streaming o webhook.\u003C\u002Fp>\n\u003Cp>Ciò influisce sull'architettura dell'applicazione. Il lavoro di produzione a lunga esecuzione non dovrebbe dipendere dal fatto che una singola richiesta HTTP rimanga attiva. Il tuo prodotto necessita di identificatori di sessione stabili, persistenza del ciclo di vita, verifica dei webhook, gestori idempotenti e un modo per riconciliare lo stato corrente della sessione dopo il riavvio del processo.\u003C\u002Fp>\n\u003Ch2 id=\"section-26\">Passo 3 — Riprogettare gli strumenti funzione attorno alle azioni richieste\u003C\u002Fh2>\n\u003Cp>Gli strumenti funzione rimangono un confine importante dell'applicazione. Definisci la funzione e il suo schema JSON nella configurazione dell'agente. Quando l'harness necessita della funzione, la sessione può entrare in uno stato di azione richiesta. La tua applicazione recupera l'azione richiesta, esegue la logica di business e restituisce il risultato.\u003C\u002Fp>\n\u003Cp>Ciò significa che l'implementazione della funzione dovrebbe essere sicura da riprendere. Un webhook può essere consegnato mentre un altro worker sta elaborando. Un errore di rete può verificarsi dopo l'effetto collaterale esterno ma prima che il risultato venga restituito. La migrazione è quindi un buon momento per aggiungere ID di chiamata, chiavi di idempotenza, autorizzazione esplicita, politiche di timeout e record di audit agli strumenti consequenziali.\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--warning my-6 rounded-xl border p-5 border-amber-300 bg-amber-50 dark:border-amber-900 dark:bg-amber-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Trappola della migrazione degli strumenti\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Non trattare una chiamata di funzione dall&#39;harness gestito come autorizzazione a eseguire l&#39;azione. L&#39;harness decide &lt;em&gt;cosa vuole chiamare&lt;\u002Fem&gt;; la tua applicazione decide comunque se l&#39;utente corrente, la sessione e lo stato di business consentono quell&#39;azione.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-30\">Passo 4 — Decidere dove deve avvenire l'esecuzione\u003C\u002Fh2>\n\u003Cp>L'API Agents separa l'harness gestito dall'ambiente di esecuzione. Un agente può operare senza un ambiente dedicato, in un sandbox ospitato da OpenAI o tramite un ambiente self-hosted connesso alla sessione.\u003C\u002Fp>\n\u003Cp>Ciò crea una decisione di migrazione che le applicazioni SDK potrebbero non aver mai preso esplicitamente: quale codice dovrebbe essere eseguito come funzione dell'applicazione, quale codice appartiene a un sandbox e quali carichi di lavoro richiedono infrastrutture che controlli tu?\u003C\u002Fp>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Esigenza\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Confine probabile\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Chiamare un servizio interno esistente tramite logica di business controllata\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Strumento funzione gestito dalla tua applicazione\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Eseguire codice isolato o lavorare con file temporanei senza infrastruttura privata\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ambiente ospitato da OpenAI\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Accedere a risorse di rete private, software di sistema personalizzato o calcolo locale controllato\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ambiente self-hosted\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Persistere artefatti di prodotto accettati\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Archiviazione di proprietà dell'applicazione, non solo filesystem del sandbox\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Eseguire un effetto collaterale di business ad alto impatto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Funzione dell'applicazione con controlli di autorizzazione e audit\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-34\">Passo 5 — Sostituire il recupero implicito con una gestione esplicita del ciclo di vita\u003C\u002Fh2>\n\u003Cp>L'harness gestito fornisce il recupero a livello di sessione, ma la tua applicazione possiede comunque ogni dipendenza esterna attorno ad esso. Gli ambienti self-hosted necessitano di provisioning, riconnessione e arresto. I gestori di funzioni possono fallire. I webhook possono essere ritentati. Lo stato lato prodotto può cambiare mentre un agente è inattivo.\u003C\u002Fp>\n\u003Cp>La migrazione necessita quindi di due modelli di recupero: recupero del runtime dell'agente e recupero delle operazioni di business. Il primo è sempre più gestito dall'API Agents. Il secondo rimane una tua responsabilità.\u003C\u002Fp>\n\u003Ch2 id=\"section-37\">Passo 6 — Ricostruire l'osservabilità attorno al nuovo confine di traccia\u003C\u002Fh2>\n\u003Cp>Le sessioni dell'API Agents espongono eventi, cronologia salvata, turni, chiamate agli strumenti, subagenti e utilizzo dei token. OpenAI fornisce anche i log di sessione nella piattaforma e l'esportazione delle tracce.\u003C\u002Fp>\n\u003Cp>Non scartare l'osservabilità della tua applicazione solo perché le tracce della piattaforma sono migliorate. I log di prodotto devono comunque collegare la sessione dell'agente all'identità dell'utente, alla decisione di autorizzazione, all'oggetto di dominio, all'effetto collaterale dello strumento, al record di approvazione e al risultato finale accettato. La traccia di produzione utile è la congiunzione tra le evidenze dell'agent-runtime e le evidenze del business-runtime.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Fit\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough\" class=\"flex flex-col sm:flex-row gap-4 rounded-xl border border-gray-200 dark:border-gray-700 p-4 transition hover:border-primary-500\">\u003Cdiv class=\"min-w-0 flex-1\">\u003Cstrong class=\"block text-lg text-gray-900 dark:text-gray-100\">Affidabilità degli agenti AI: perché la risposta finale non è sufficiente\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">L'affidabilità di un agente dipende dal percorso di esecuzione, dagli strumenti e dalle decisioni intermedie — non solo dall'output finale.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Leggi l'articolo sull'affidabilità →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-41\">Passo 7 — Preservare le valutazioni prima di modificare il runtime\u003C\u002Fh2>\n\u003Cp>Una migrazione può sembrare riuscita perché il nuovo sistema produce ancora risposte plausibili mentre cambia silenziosamente la scelta degli strumenti, la continuità della sessione, il comportamento di handoff, la latenza o il recupero dagli errori. Costruisci la baseline comportamentale prima di cambiare runtime.\u003C\u002Fp>\n\u003Cp>La baseline dovrebbe includere attività rappresentative, chiamate agli strumenti attese, azioni vietate, punti di approvazione, continuità dello stato, scenari di recupero e criteri di accettazione dell'output finale. Esegui le vecchie e le nuove architetture sugli stessi casi ove possibile.\u003C\u002Fp>\n\u003Ch2 id=\"section-44\">Il test di prova della migrazione\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Dimostra il nuovo runtime prima del passaggio\u003C\u002Fh3>\u003Cdiv class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4\">\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">1\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">1. Congela la baseline comportamentale\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Cattura tracce SDK rappresentative, output attesi, percorsi degli strumenti, punti di approvazione e casi di errore.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">2\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">2. Inventaria la proprietà dello stato\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Contrassegna ogni campo di stato come stato della sessione dell'agente, stato di dominio autorevole, artefatto durevole o stato di lavoro effimero.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">3\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">3. Riutilizza implementazioni stabili degli strumenti\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Mantieni le funzioni di business dietro interfacce applicative; sostituisci solo l'integrazione rivolta all'agente ove possibile.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">4\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">4. Costruisci una fetta verticale dell'API Agents\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Migra un flusso di lavoro a forma di produzione includendo creazione della sessione, strumenti, eventi, ambiente e persistenza.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">5\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">5. Inietta interruzioni\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Testa riavvio del processo, retry del webhook, timeout della funzione, riconnessione dell'ambiente self-hosted e stato di dominio obsoleto.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">6\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">6. Confronta le tracce, non solo le risposte\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Verifica la scelta degli strumenti, l'autorizzazione, il percorso delle evidenze, le transizioni di stato e gli effetti collaterali rispetto alla baseline.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">7\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">7. Esegui traffico in shadow\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Dove fattibile, riproduci o rispecchia attività rappresentative prima di rendere autorevole il nuovo runtime.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">8\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">8. Passa dietro un confine reversibile\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Mantieni gli adattatori di integrazione e la capacità di rollback finché il comportamento in produzione non è stabile.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-46\">Cosa misurare durante la migrazione\u003C\u002Fh2>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Dimensione\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Verifica di migrazione\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Successo dell'attività\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il nuovo runtime soddisfa gli stessi o migliori criteri di accettazione?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Correttezza degli strumenti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Chiama lo strumento giusto con argomenti validi e autorizzazione?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuità dello stato\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il lavoro può riprendere tra turni, riavvii e attese asincrone?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Recupero\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cosa succede dopo perdita di webhook, errore del gestore, disconnessione dell'ambiente o timeout?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tracciabilità\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ogni azione consequenziale può essere collegata a sessione, utente, chiamata allo strumento e oggetto di dominio?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportamento del contesto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le sessioni di lunga durata preservano i vincoli senza trasportare verità applicative obsolete?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Latenza\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Come influiscono l'avvio della sessione, il provisioning dell'ambiente e il lavoro multi-turno sul tempo visibile all'utente?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Costo\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cosa cambia nell'uso del modello, nell'uso della sandbox, nel contesto ripetuto e nelle operazioni infrastrutturali?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Carico operativo\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quali responsabilità precedentemente di proprietà dell'applicazione sono effettivamente scomparse e quali si sono semplicemente spostate?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-48\">Quando non migrare ancora\u003C\u002Fh2>\n\u003Cp>Un'applicazione esistente basata su Agents SDK non diventa una cattiva architettura solo perché la direzione della piattaforma è cambiata. OpenAI continua la manutenzione, le correzioni di sicurezza, le correzioni di bug critici e il lavoro di compatibilità. Se l'applicazione è stabile, ben valutata e non ha requisiti di roadmap bloccati, una migrazione immediata del runtime potrebbe non essere giustificata.\u003C\u002Fp>\n\u003Cul>\u003Cli>Una capacità richiesta dell'SDK non è ancora disponibile nell'API Agents.\u003C\u002Fli>\u003Cli>La migrazione interromperebbe un periodo di produzione critico senza fornire valore a breve termine.\u003C\u002Fli>\u003Cli>L'applicazione dipende da semantiche di orchestrazione personalizzate che non sono state validate sull'harness gestito.\u003C\u002Fli>\u003Cli>La portabilità del provider è un requisito rigido e l'attuale astrazione dell'SDK è materialmente preziosa.\u003C\u002Fli>\u003Cli>Il tuo team non ha ancora separato lo stato di business dallo stato del runtime dell'agente, rendendo il passaggio non sicuro.\u003C\u002Fli>\u003Cli>Il comportamento della nuova API Agents non è stato testato su carichi di lavoro di produzione rappresentativi.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-51\">Quando la migrazione diventa strategicamente importante\u003C\u002Fh2>\n\u003Cp>La migrazione diventa più convincente quando i requisiti di prodotto si allineano con l'harness gestito: lavoro durevole di lunga durata, compattazione e recupero del contesto gestiti dalla piattaforma, capacità più recenti dell'agent-runtime, esecuzione in sandbox, gestione del ciclo di vita ospitata più ricca o il desiderio di ridurre la quantità di codice di orchestrazione che la tua applicazione gestisce.\u003C\u002Fp>\n\u003Cp>Il segnale più forte non è \"il vecchio SDK è completo di funzionalità\". È \"la nostra roadmap ora dipende da capacità la cui sede naturale è il runtime gestito dell'API Agents\".\u003C\u002Fp>\n\u003Ch2 id=\"section-54\">Cosa cambierebbe questa risposta?\u003C\u002Fh2>\n\u003Cp>La strategia di migrazione cambierebbe se OpenAI pubblicasse strumenti di migrazione automatizzati, introducesse livelli di compatibilità espliciti, modificasse la semantica delle sessioni dell'API Agents, ampliasse o restringesse il supporto agli ambienti self-hosted, oppure cambiasse la politica di supporto per l'SDK Agents.\u003C\u002Fp>\n\u003Cp>Cambierebbe anche se cambiassero i requisiti del tuo prodotto. Un semplice assistente richiesta-risposta potrebbe non aver bisogno affatto di un harness gestito e durevole. Un agente di coding, ricerca o operations a lunga esecuzione può trarre molto più vantaggio dal modello di ownership dell'API Agents.\u003C\u002Fp>\n\u003Ch2 id=\"section-57\">Limitazioni\u003C\u002Fh2>\n\u003Cp>Non esiste una mappa di migrazione universale uno-a-uno da SDK ad API, perché le applicazioni usano l'SDK Agents in modi diversi. Alcune si affidano pesantemente a sessioni e handoff; altre lo usano come un sottile runner attorno a function tool. La migrazione corretta dipende da quali responsabilità la tua applicazione possiede effettivamente oggi.\u003C\u002Fp>\n\u003Cp>L'API Agents è anche in beta pubblica, quindi i dettagli implementativi possono evolvere. Considera i principi di ownership in questo articolo come più durevoli di qualsiasi forma specifica di endpoint.\u003C\u002Fp>\n\u003Ch2 id=\"section-60\">Conclusione\u003C\u002Fh2>\n\u003Cp>Migrare dall'SDK Agents all'API Agents si comprende meglio come lo spostamento del confine del runtime dell'agente. L'harness gestito si assume una parte maggiore del loop, della continuità di sessione, della compattazione e del ripristino. La tua applicazione dovrebbe diventare più esplicita riguardo alle responsabilità che rimangono tue: verità di dominio, autorizzazione, effetti collaterali delle funzioni, artefatti, auditabilità e ciclo di vita del prodotto.\u003C\u002Fp>\n\u003Cp>Se una migrazione lascia in piedi tutta la vecchia macchina di orchestrazione e si limita a sostituire le chiamate SDK con chiamate all'API Agents, probabilmente ha mancato l'opportunità architetturale. L'obiettivo non è riprodurre il vecchio runtime sopra quello nuovo. L'obiettivo è decidere quali responsabilità del runtime non appartengono più alla tua applicazione.\u003C\u002Fp>\n\u003Ch2 id=\"section-63\">FAQ\u003C\u002Fh2>\n\u003Csection class=\"editorjs-faq my-6 rounded-xl border border-gray-200 p-5 dark:border-gray-700\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Migrare dall&#39;SDK Agents all&#39;API Agents\u003C\u002Fh3>\u003Cdiv id=\"faq1\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Migrare dall&#39;SDK Agents all&#39;API Agents è solo una riscrittura di API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No. Il cambiamento principale è l&#39;ownership del runtime: l&#39;SDK Agents esegue il loop dell&#39;agente nella tua applicazione, mentre l&#39;API Agents esegue un harness Codex gestito e una sessione durevole. Stato, ciclo di vita, gestione degli eventi e ripristino dovrebbero essere riesaminati come questioni architetturali.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq2\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">I miei function tool devono essere riscritti?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">L&#39;implementazione di business spesso può essere riutilizzata se è già dietro un&#39;interfaccia applicativa stabile. L&#39;integrazione rivolta all&#39;agente cambia perché le chiamate di funzione dell&#39;API Agents sono gestite tramite azioni richieste e risultati della sessione.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq3\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Dovrei spostare lo stato di business nella sessione dell&#39;API Agents?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">In genere no. Mantieni lo stato autoritativo di business e di prodotto nei tuoi database o servizi. Usa la sessione dell&#39;agente per la continuità dell&#39;agente e il contesto di lavoro, non come unica fonte di verità per il tuo prodotto.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq4\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Ho bisogno di webhook per l&#39;API Agents?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Non sempre, perché è disponibile anche lo streaming. I webhook sono particolarmente utili per sessioni a lunga esecuzione o asincrone in cui la tua applicazione dovrebbe reagire ai cambiamenti del ciclo di vita senza mantenere uno stream aperto.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq5\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Ogni applicazione esistente basata sull&#39;SDK Agents dovrebbe migrare ora?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No. L&#39;SDK rimane supportato in modalità manutenzione. Migra quando il nuovo runtime fornisce un valore significativo per la roadmap e dopo che il comportamento richiesto è stato validato rispetto a valutazioni modellate sulla produzione.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-65\">Glossario\u003C\u002Fh2>\n\u003Csection class=\"editorjs-glossary my-6 rounded-xl border border-gray-200 dark:border-gray-700 p-5\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Termini chiave della migrazione\u003C\u002Fh3>\u003Cdl>\u003Cdiv id=\"runtime-boundary\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Confine del runtime\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">La divisione delle responsabilità tra il runtime dell'agente gestito dalla piattaforma e il runtime di proprietà dell'applicazione.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"harness\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Harness\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Il runtime dell'agente che coordina chiamate al modello, strumenti, contesto, orchestrazione ed esecuzione continuata.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"session\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Sessione\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un'istanza durevole dell'API Agents che conserva la configurazione di un agente, la conversazione e il lavoro salvato tra i turni.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"required-action\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Azione richiesta\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Uno stato della sessione in cui l'API Agents necessita di input esterno, come il risultato di una funzione o una connessione all'ambiente, prima che il lavoro possa continuare.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"self-hosted-environment\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Ambiente self-hosted\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un ambiente di esecuzione gestito dalla tua infrastruttura e connesso all'harness gestito dell'API Agents.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"migration-proof-test\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Test di prova della migrazione\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un metodo di validazione a fasi che confronta il nuovo runtime con baseline comportamentali, iniezioni di guasto, tracce e criteri di cutover reversibili.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-67\">Fonti primarie e approfondimenti\u003C\u002Fh2>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Agents SDK\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Politica di supporto attuale: l&#39;SDK Agents è completo nelle funzionalità, rimane mantenuto e le nuove applicazioni dovrebbero iniziare con l&#39;API Agents.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Eseguire agenti con l&#39;SDK Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documentazione del loop dell&#39;agente di proprietà dell&#39;applicazione SDK e del modello di continuazione.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Panoramica dell&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definisce i concetti fondamentali dell&#39;API Agents: agente, ambiente, sessione, eventi e item.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Architettura dell&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Spiega l&#39;harness ospitato, il server applicativo e i confini degli ambienti di esecuzione ospitati da OpenAI e self-hosted.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Configurare gli agenti\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definisce la configurazione riutilizzabile degli agenti e la personalizzazione a livello di sessione.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Eseguire e continuare le sessioni\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documenta sessioni durevoli, turni asincroni, streaming e steering.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Funzioni dell&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definizione dello strumento funzione e il confine del gestore dell&#39;applicazione per i risultati delle funzioni richieste.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Webhook di sessione\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Eventi del ciclo di vita per sessioni asincrone, azioni richieste e connessioni a ambienti self-hosted.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Osservabilità e utilizzo dell&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Log di sessione, eventi, turni, chiamate a strumenti, subagenti, tracce e ispezione dell&#39;utilizzo dei token.\u003C\u002Fp>\u003C\u002Fa>\n\u003Cp>Migrare dall'SDK OpenAI Agents all'API Agents non è una semplice rinomina di import. Il confine architetturale principale cambia: l'SDK esegue il ciclo dell'agente all'interno della tua applicazione, mentre l'API Agents esegue un harness Codex gestito e una sessione durevole dal lato di OpenAI. La domanda di migrazione quindi non è \"Quali classi corrispondono a quali endpoint?\" ma \"Quali responsabilità di runtime si spostano oltre il confine, quali rimangono nella nostra applicazione e quali necessitano di una riprogettazione?\"\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--info my-6 rounded-xl border p-5 border-blue-300 bg-blue-50 dark:border-blue-900 dark:bg-blue-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Risposta diretta\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Una vera migrazione da Agents SDK ad Agents API cambia la titolarità del runtime.&lt;\u002Fstrong&gt; La tua configurazione riutilizzabile dell&#39;agente può ancora contenere modello, istruzioni e strumenti, ma il ciclo, la sessione durevole, l&#39;orchestrazione, la compattazione del contesto e il ripristino si spostano verso il runtime gestito dell&#39;API Agents. La tua applicazione dovrebbe mantenere lo stato di dominio, l&#39;autorizzazione, le regole di business, le implementazioni delle funzioni e la logica di audit al di fuori della sessione dell&#39;agente. Tratta la migrazione come una riprogettazione del confine, non come una conversione meccanica del codice.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Caside class=\"editorjs-callout editorjs-callout--warning my-6 rounded-xl border p-5 border-amber-300 bg-amber-50 dark:border-amber-900 dark:bg-amber-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Aggiornato al 25 settembre 2026\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">OpenAI attualmente contrassegna l&#39;SDK Agents come &lt;strong&gt;feature complete&lt;\u002Fstrong&gt; e raccomanda l&#39;API Agents per le nuove applicazioni di agenti. L&#39;API Agents è in beta pubblica. Le applicazioni SDK esistenti rimangono supportate e la migrazione immediata non è automaticamente richiesta.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Caside class=\"editorjs-callout editorjs-callout--note my-6 rounded-xl border p-5 border-gray-300 bg-gray-50 dark:border-gray-700 dark:bg-gray-900\u002F40\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Informazioni sul modello di migrazione\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">La Mappa di Migrazione del Confine di Runtime e il Test di Prova di Migrazione in questo articolo sono strumenti architetturali pratici, non framework di migrazione ufficiali di OpenAI. Sono derivati dalle attuali differenze di runtime documentate da OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Contenuti\">\u003Cstrong class=\"editorjs-toc__title\">Contenuti\u003C\u002Fstrong>\u003Col class=\"editorjs-toc__list editorjs-toc__list--depth-0\">\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-6\" class=\"editorjs-toc__link\">La migrazione va da un loop di proprietà dell&#39;applicazione a un harness gestito\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">La Mappa di Migrazione del Confine di Runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Cosa può migrare concettualmente senza cambiare titolarità\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Cosa non dovrebbe essere migrato uno-a-uno\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Passo 1 — Separare lo stato del dominio dallo stato della sessione dell&#39;agente\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Passo 2 — Convertire la mentalità del runner in una mentalità di sessione ed eventi\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Passo 3 — Riprogettare gli strumenti funzione attorno alle azioni richieste\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Passo 4 — Decidere dove deve avvenire l&#39;esecuzione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Passo 5 — Sostituire il recupero implicito con una gestione esplicita del ciclo di vita\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Passo 6 — Ricostruire l&#39;osservabilità attorno al nuovo confine di traccia\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Passo 7 — Preservare le valutazioni prima di modificare il runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">Il test di prova della migrazione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Cosa misurare durante la migrazione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Quando non migrare ancora\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Quando la migrazione diventa strategicamente importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Cosa cambierebbe questa risposta?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Limitazioni\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Conclusione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">FAQ\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Glossario\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Fonti primarie e approfondimenti\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">La migrazione va da un ciclo di proprietà dell&#39;applicazione a un harness gestito\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">La Mappa di Migrazione del Confine di Runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Cosa può migrare concettualmente senza cambiare titolarità\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Cosa non dovrebbe essere migrato uno a uno\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Passo 1 — Separare lo stato di dominio dallo stato della sessione dell&#39;agente\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Passo 2 — Convertire la mentalità del runner in una mentalità di sessione ed eventi\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Passo 3 — Riprogettare gli strumenti funzione attorno alle azioni richieste\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Passo 4 — Decidere dove deve avvenire l&#39;esecuzione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Passo 5 — Sostituire il recupero implicito con una gestione esplicita del ciclo di vita\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Passo 6 — Ricostruire l&#39;osservabilità attorno al nuovo confine di tracciamento\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Passo 7 — Preservare le valutazioni prima di cambiare il runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">Il test di prova della migrazione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Cosa misurare durante la migrazione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Quando non migrare ancora\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Quando la migrazione diventa strategicamente importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">Cosa cambierebbe questa risposta?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Limitazioni\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Conclusione\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">FAQ\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Glossario\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Fonti primarie e ulteriori letture\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Ch2 id=\"section-82\">La migrazione va da un ciclo di proprietà dell'applicazione a un harness gestito\u003C\u002Fh2>\n\u003Cp>Nell'SDK Agents, una esecuzione è un turno a livello di applicazione. Il runner dell'SDK chiama il modello, ispeziona l'output, esegue gli strumenti, segue i passaggi di consegne e continua fino a raggiungere un punto di arresto. Il tuo processo ospita quel ciclo e quindi ne possiede il ciclo di vita.\u003C\u002Fp>\n\u003Cp>Nell'API Agents, OpenAI esegue l'harness. Una sessione è un'istanza durevole di una configurazione di agente che accetta attività, produce eventi, può mettersi in pausa per azioni richieste e può continuare nel tempo. OpenAI gestisce sessioni, orchestrazione, compattazione del contesto e ripristino; la tua applicazione invia lavoro, gestisce gli strumenti funzione, riceve eventi e opzionalmente gestisce un ambiente di esecuzione self-hosted.\u003C\u002Fp>\n\u003Cp>Questo spostamento di titolarità è la migrazione. Tutto il resto — sintassi API, schemi degli strumenti, gestione degli eventi, ID di sessione — ne consegue.\u003C\u002Fp>\n\u003Ch2 id=\"section-86\">La Mappa di Migrazione del Confine di Runtime\u003C\u002Fh2>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Aspetto\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Agents SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Obiettivo di migrazione dell'API Agents\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ciclo dell'agente\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Viene eseguito nella tua applicazione tramite il runner dell'SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Viene eseguito nell'harness Codex gestito\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Definizione riutilizzabile dell'agente\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Oggetto Agent nel codice dell'applicazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Configurazione dell'agente salvata o inline con modello, istruzioni e strumenti\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuità della conversazione \u002F del lavoro\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Strategia di sessione dell'SDK, cronologia, continuazione del risultato o archiviazione dell'applicazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Sessione durevole dell'API Agents\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Esecuzione degli strumenti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'SDK coordina le chiamate agli strumenti nel tuo runtime\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'harness richiede chiamate a funzioni; la tua applicazione restituisce i risultati\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gestione del contesto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il tuo runtime \u002F strategia di sessione dell'SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Contesto di sessione gestito, compattazione e ripristino, più i confini dei dati della tua applicazione\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Passaggi di consegne \u002F specialisti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Primitive di orchestrazione dell'SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportamento dell'harness \u002F subagenti nell'API Agents; non presumere una semantica uno-a-uno\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ambiente di esecuzione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il runtime della tua applicazione o ambiente specifico dello strumento\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ambiente opzionale ospitato da OpenAI o self-hosted collegato alla sessione\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Streaming\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Streaming dell'SDK dall'esecuzione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Flusso di eventi della sessione dell'API Agents\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ciclo di vita asincrono\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Di solito gestito dall'applicazione attorno all'esecuzione dell'SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Stati nativi della sessione, turni asincroni e webhook\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tracciamento \u002F osservabilità\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tracciamento dell'SDK Agents e log dell'applicazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Log di sessione degli agenti, eventi, turni, chiamate a strumenti, subagenti e tracce esportabili\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ripristino\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Responsabilità dell'applicazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ripristino gestito dell'harness\u002Fsessione più ripristino di proprietà dell'applicazione per sistemi esterni e ambienti self-hosted\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-88\">Cosa può migrare concettualmente senza cambiare titolarità\u003C\u002Fh2>\n\u003Cp>Diversi concetti dell'applicazione sopravvivono alla migrazione in modo pulito anche se la loro rappresentazione cambia. Modelli, istruzioni, definizioni di funzioni JSON-schema, accesso MCP, descrizioni degli strumenti e requisiti di output strutturato rimangono aspetti della configurazione dell'agente.\u003C\u002Fp>\n\u003Cp>Il modello di configurazione dell'API Agents di OpenAI definisce esplicitamente un agente attraverso modello, istruzioni, strumenti, ragionamento e comportamento di output. Gli strumenti funzione rimangono codice dell'applicazione: l'harness richiede una chiamata a funzione e il tuo gestore restituisce il risultato. OpenAI nota anche che le implementazioni di funzioni utilizzate con l'API Responses possono essere riutilizzate con il flusso di sessione dell'API Agents.\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--success my-6 rounded-xl border p-5 border-emerald-300 bg-emerald-50 dark:border-emerald-900 dark:bg-emerald-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Buon candidato alla migrazione\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Una funzione puramente di business come &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt; non dovrebbe aver bisogno di sapere se il chiamante è l&#39;Agents SDK o l&#39;Agents API. Mantieni la sua logica di dominio dietro un&#39;interfaccia applicativa stabile e migra solo l&#39;adapter rivolto all&#39;agente.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-92\">Cosa non dovrebbe essere migrato uno a uno\u003C\u002Fh2>\n\u003Cp>Il pattern di migrazione pericoloso è ricreare ogni astrazione runtime dell'SDK all'interno dell'Agents API. Questo può portarti a pagare per un harness gestito continuando comunque a gestire un harness ombra nella tua applicazione.\u003C\u002Fp>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Assunzione dell'era SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Perché una copia diretta è rischiosa\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Domanda di migrazione\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il loop dell'applicazione possiede ogni continuazione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'Agents API possiede già il loop dell'harness\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quale logica di continuazione è logica di prodotto e quale dovrebbe passare alla sessione gestita?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'oggetto sessione locale è il meccanismo principale di continuità\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le sessioni dell'Agents API sono risorse durevoli con un proprio ciclo di vita\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quale stato appartiene alla sessione e quale al database di prodotto?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ogni interruzione è gestita in modo sincrono\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">I turni dell'Agents API sono asincroni e possono presentare stati action_required\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quali azioni richiedono webhook, worker, idempotenza e handler ripristinabili?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tutta l'esecuzione degli strumenti avviene dove gira il processo SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gli handler delle funzioni e gli ambienti di esecuzione possono essere separati\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Dove dovrebbe effettivamente essere eseguito ciascuno strumento?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La traccia SDK è la timeline operativa\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'Agents API espone eventi di sessione, turni e tracce gestite\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quali dati di audit a livello applicativo necessitano ancora di un proprio registro?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'oggetto handoff mappa direttamente su un modello di subagente ospitato\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le semantiche di runtime possono differire\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quale proprietà visibile all'utente e comportamento specialistico deve essere preservato, non solo la vecchia struttura delle classi?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-95\">Passo 1 — Separare lo stato di dominio dallo stato della sessione dell'agente\u003C\u002Fh2>\n\u003Cp>Prima di toccare le chiamate API, classifica lo stato che la tua applicazione SDK attualmente trasporta. Parte dello stato esiste solo per mantenere in movimento la conversazione dell'agente. Altro stato è verità di business: permessi utente, stato del progetto, dati dell'ordine, approvazione del flusso di lavoro, record dei clienti, versioni dei documenti, stato delle policy o configurazione dell'applicazione.\u003C\u002Fp>\n\u003Cp>La seconda categoria non dovrebbe diventare dipendente da una sessione dell'Agents API. Una sessione durevole è una continuità utile per l'agente; non è un sostituto della fonte di verità del tuo prodotto. Se la sessione scompare, scade, viene ricostruita o cambia implementazione, la tua applicazione deve comunque sapere cosa è vero.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Test di collocazione dello stato\u003C\u002Fh3>\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left dark:border-gray-700 dark:bg-gray-900\">\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Tipo di stato\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Proprietario preferito\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Motivo\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Continuità della conversazione\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Verità di business\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Artefatto durevole\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Stato di lavoro temporaneo\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-99\">Passo 2 — Convertire la mentalità del runner in una mentalità di sessione ed eventi\u003C\u002Fh2>\n\u003Cp>Le applicazioni SDK spesso ragionano in termini di chiamata a run e ricezione di un risultato. L'Agents API ragiona in termini di una sessione durevole i cui turni possono essere eseguiti in modo asincrono. Un messaggio a una sessione inattiva avvia il lavoro; un messaggio durante un turno attivo può orientarlo. L'avanzamento arriva tramite streaming o webhook.\u003C\u002Fp>\n\u003Cp>Questo influisce sull'architettura dell'applicazione. Il lavoro di produzione di lunga durata non dovrebbe dipendere dal fatto che una singola richiesta HTTP rimanga attiva. Il tuo prodotto necessita di identificatori di sessione stabili, persistenza del ciclo di vita, verifica dei webhook, handler idempotenti e un modo per riconciliare lo stato corrente della sessione dopo i riavvii del processo.\u003C\u002Fp>\n\u003Ch2 id=\"section-102\">Passo 3 — Riprogettare gli strumenti funzione attorno alle azioni richieste\u003C\u002Fh2>\n\u003Cp>Gli strumenti funzione rimangono un confine applicativo importante. Definisci la funzione e il suo schema JSON nella configurazione dell'agente. Quando l'harness necessita della funzione, la sessione può entrare in uno stato di azione richiesta. La tua applicazione recupera l'azione richiesta, esegue la logica di business e restituisce il risultato.\u003C\u002Fp>\n\u003Cp>Ciò significa che l'implementazione della funzione dovrebbe essere sicura da riprendere. Un webhook può essere consegnato mentre un altro worker sta elaborando. Un errore di rete può verificarsi dopo l'effetto collaterale esterno ma prima che il risultato venga restituito. La migrazione è quindi un buon momento per aggiungere call ID, chiavi di idempotenza, autorizzazione esplicita, policy di timeout e record di audit agli strumenti consequenziali.\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--warning my-6 rounded-xl border p-5 border-amber-300 bg-amber-50 dark:border-amber-900 dark:bg-amber-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Trappola della migrazione degli strumenti\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Non trattare una chiamata di funzione dall&#39;harness gestito come autorizzazione a eseguire l&#39;azione. L&#39;harness decide &lt;em&gt;cosa vuole chiamare&lt;\u002Fem&gt;; la tua applicazione decide comunque se l&#39;utente corrente, la sessione e lo stato di business consentono quell&#39;azione.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-106\">Passo 4 — Decidere dove deve avvenire l'esecuzione\u003C\u002Fh2>\n\u003Cp>L'Agents API separa l'harness gestito dall'ambiente di esecuzione. Un agente può operare senza un ambiente dedicato, in una sandbox ospitata da OpenAI o tramite un ambiente self-hosted connesso alla sessione.\u003C\u002Fp>\n\u003Cp>Questo crea una decisione di migrazione che le applicazioni SDK potrebbero non aver mai preso esplicitamente: quale codice dovrebbe essere eseguito come funzione applicativa, quale codice appartiene a una sandbox e quali carichi di lavoro richiedono un'infrastruttura che controlli tu?\u003C\u002Fp>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Esigenza\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Confine probabile\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Chiamare un servizio interno esistente tramite logica di business controllata\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Strumento funzione gestito dalla tua applicazione\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Eseguire codice isolato o lavorare con file temporanei senza infrastruttura privata\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ambiente ospitato da OpenAI\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Accedere a risorse di rete private, software di sistema personalizzato o calcolo locale controllato\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ambiente self-hosted\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Persistere artefatti di prodotto accettati\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Archiviazione di proprietà dell'applicazione, non solo filesystem sandbox\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Eseguire un effetto collaterale di business ad alto impatto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Funzione dell'applicazione con controlli di autorizzazione e audit\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-110\">Passo 5 — Sostituire il recupero implicito con una gestione esplicita del ciclo di vita\u003C\u002Fh2>\n\u003Cp>Il harness gestito fornisce il recupero a livello di sessione, ma la tua applicazione possiede ancora ogni dipendenza esterna attorno ad esso. Gli ambienti self-hosted necessitano di provisioning, riconnessione e spegnimento. I gestori di funzioni possono fallire. I webhook possono essere ritentati. Lo stato lato prodotto può cambiare mentre un agente è inattivo.\u003C\u002Fp>\n\u003Cp>La migrazione necessita quindi di due modelli di recupero: recupero del runtime dell'agente e recupero delle operazioni di business. Il primo è sempre più gestito dalle API Agents. Il secondo rimane una tua responsabilità.\u003C\u002Fp>\n\u003Ch2 id=\"section-113\">Passo 6 — Ricostruire l'osservabilità attorno al nuovo confine di tracciamento\u003C\u002Fh2>\n\u003Cp>Le sessioni delle API Agents espongono eventi, cronologia salvata, turni, chiamate agli strumenti, subagenti e utilizzo dei token. OpenAI fornisce anche log di sessione nella piattaforma ed esportazione delle tracce.\u003C\u002Fp>\n\u003Cp>Non scartare l'osservabilità della tua applicazione solo perché le tracce della piattaforma sono migliorate. I log di prodotto devono ancora collegare la sessione dell'agente all'identità dell'utente, alla decisione di autorizzazione, all'oggetto di dominio, all'effetto collaterale dello strumento, al record di approvazione e al risultato finale accettato. La traccia di produzione utile è l'unione tra le prove del runtime dell'agente e le prove del runtime di business.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Fit\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough\" class=\"flex flex-col sm:flex-row gap-4 rounded-xl border border-gray-200 dark:border-gray-700 p-4 transition hover:border-primary-500\">\u003Cdiv class=\"min-w-0 flex-1\">\u003Cstrong class=\"block text-lg text-gray-900 dark:text-gray-100\">Affidabilità degli agenti AI: perché la risposta finale non è sufficiente\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">L'affidabilità dell'agente dipende dal percorso di esecuzione, dagli strumenti e dalle decisioni intermedie — non solo dall'output finale.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Leggi l'articolo sull'affidabilità →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-117\">Passo 7 — Preservare le valutazioni prima di cambiare il runtime\u003C\u002Fh2>\n\u003Cp>Una migrazione può sembrare riuscita perché il nuovo sistema produce ancora risposte plausibili mentre cambia silenziosamente la scelta degli strumenti, la continuità della sessione, il comportamento di handoff, la latenza o il recupero dagli errori. Costruisci la baseline comportamentale prima di cambiare runtime.\u003C\u002Fp>\n\u003Cp>La baseline dovrebbe includere attività rappresentative, chiamate agli strumenti attese, azioni vietate, punti di approvazione, continuità dello stato, scenari di recupero e criteri di accettazione dell'output finale. Esegui la vecchia e la nuova architettura sugli stessi casi ove possibile.\u003C\u002Fp>\n\u003Ch2 id=\"section-120\">Il test di prova della migrazione\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Dimostra il nuovo runtime prima del passaggio\u003C\u002Fh3>\u003Cdiv class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4\">\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">1\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">1. Congela la baseline comportamentale\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Cattura tracce SDK rappresentative, output attesi, percorsi degli strumenti, punti di approvazione e casi di errore.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">2\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">2. Inventaria la proprietà dello stato\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Contrassegna ogni campo di stato come stato della sessione dell'agente, stato di dominio autorevole, artefatto durevole o stato di lavoro effimero.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">3\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">3. Riusa implementazioni stabili degli strumenti\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Mantieni le funzioni di business dietro interfacce applicative; sostituisci solo l'integrazione rivolta all'agente ove possibile.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">4\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">4. Costruisci una fetta verticale delle API Agents\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Migra un flusso di lavoro di forma produttiva includendo creazione della sessione, strumenti, eventi, ambiente e persistenza.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">5\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">5. Inietta interruzioni\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Testa riavvio del processo, retry del webhook, timeout della funzione, riconnessione dell'ambiente self-hosted e stato di dominio obsoleto.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">6\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">6. Confronta le tracce, non solo le risposte\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Verifica scelta degli strumenti, autorizzazione, percorso delle prove, transizioni di stato ed effetti collaterali rispetto alla baseline.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">7\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">7. Esegui traffico in shadow\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Ove fattibile, riproduci o rispecchia attività rappresentative prima di rendere autorevole il nuovo runtime.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">8\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">8. Passa dietro un confine reversibile\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Mantieni adattatori di integrazione e capacità di rollback fino a quando il comportamento in produzione è stabile.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-122\">Cosa misurare durante la migrazione\u003C\u002Fh2>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Dimensione\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Verifica di migrazione\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Successo del compito\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il nuovo runtime soddisfa gli stessi o migliori criteri di accettazione?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Correttezza degli strumenti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Chiama lo strumento giusto con argomenti validi e autorizzazione?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuità dello stato\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Il lavoro può riprendere attraverso turni, riavvii e attese asincrone?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Recupero\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cosa succede dopo perdita di webhook, errore del gestore, disconnessione dell'ambiente o timeout?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tracciabilità\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ogni azione consequenziale può essere collegata a sessione, utente, chiamata allo strumento e oggetto di dominio?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportamento del contesto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le sessioni di lunga durata preservano i vincoli senza trasportare verità applicative obsolete?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Latenza\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Come influiscono l'avvio della sessione, il provisioning dell'ambiente e il lavoro multi-turno sul tempo visibile all'utente?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Costo\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cosa cambia nell'uso del modello, nell'uso del sandbox, nel contesto ripetuto e nelle operazioni infrastrutturali?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Carico operativo\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quali responsabilità precedentemente di proprietà dell'applicazione sono effettivamente scomparse e quali si sono semplicemente spostate?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-124\">Quando non migrare ancora\u003C\u002Fh2>\n\u003Cp>Un'applicazione esistente basata su Agents SDK non diventa una cattiva architettura solo perché la direzione della piattaforma è cambiata. OpenAI continua la manutenzione, le correzioni di sicurezza, le correzioni di bug critici e il lavoro di compatibilità. Se l'applicazione è stabile, ben valutata e non ha requisiti di roadmap bloccati, una migrazione immediata del runtime potrebbe non essere giustificata.\u003C\u002Fp>\n\u003Cul>\u003Cli>Una capacità SDK richiesta non è ancora disponibile nelle API Agents.\u003C\u002Fli>\u003Cli>La migrazione interromperebbe un periodo di produzione critico senza fornire valore a breve termine.\u003C\u002Fli>\u003Cli>L'applicazione dipende da semantiche di orchestrazione personalizzate che non sono state validate sul harness gestito.\u003C\u002Fli>\u003Cli>La portabilità del provider è un requisito rigido e l'attuale astrazione SDK è materialmente preziosa.\u003C\u002Fli>\u003Cli>Il tuo team non ha ancora separato lo stato di business dallo stato del runtime dell'agente, rendendo il passaggio non sicuro.\u003C\u002Fli>\u003Cli>Il comportamento delle nuove API Agents non è stato testato su carichi di lavoro di produzione rappresentativi.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-127\">Quando la migrazione diventa strategicamente importante\u003C\u002Fh2>\n\u003Cp>La migrazione diventa più convincente quando i requisiti di prodotto si allineano con l'harness gestito: lavoro durevole a lunga esecuzione, compattazione e ripristino del contesto gestiti dalla piattaforma, capacità più recenti dell'agent-runtime, esecuzione in sandbox, gestione del ciclo di vita ospitata più ricca, o il desiderio di ridurre la quantità di codice di orchestrazione che la tua applicazione gestisce.\u003C\u002Fp>\n\u003Cp>Il segnale più forte non è \"il vecchio SDK è completo di funzionalità\". È \"la nostra roadmap ora dipende da capacità la cui sede naturale è il runtime gestito dell'Agents API\".\u003C\u002Fp>\n\u003Ch2 id=\"section-130\">Cosa cambierebbe questa risposta?\u003C\u002Fh2>\n\u003Cp>La strategia di migrazione cambierebbe se OpenAI pubblicasse strumenti di migrazione automatizzati, introducesse livelli di compatibilità espliciti, modificasse la semantica delle sessioni dell'Agents API, ampliasse o riducesse il supporto agli ambienti self-hosted, o modificasse la politica di supporto per l'Agents SDK.\u003C\u002Fp>\n\u003Cp>Cambierebbe anche se i requisiti del tuo prodotto cambiassero. Un semplice assistente richiesta-risposta potrebbe non aver bisogno affatto di un harness gestito durevole. Un agente di coding, ricerca o operations a lunga esecuzione può trarre molto più vantaggio dal modello di ownership dell'Agents API.\u003C\u002Fp>\n\u003Ch2 id=\"section-133\">Limitazioni\u003C\u002Fh2>\n\u003Cp>Non esiste una mappa di migrazione universale uno-a-uno da SDK ad API perché le applicazioni usano l'Agents SDK in modi diversi. Alcune si affidano pesantemente a sessioni e handoff; altre lo usano come un sottile runner attorno a function tool. La migrazione corretta dipende da quali responsabilità la tua applicazione possiede effettivamente oggi.\u003C\u002Fp>\n\u003Cp>L'Agents API è anche in beta pubblica, quindi i dettagli di implementazione possono evolvere. Considera i principi di ownership in questo articolo come più durevoli di qualsiasi forma di endpoint individuale.\u003C\u002Fp>\n\u003Ch2 id=\"section-136\">Conclusione\u003C\u002Fh2>\n\u003Cp>Migrare dall'Agents SDK all'Agents API è meglio inteso come spostare il confine dell'agent-runtime. L'harness gestito assume il controllo di una parte maggiore del loop, della continuità della sessione, della compattazione e del ripristino. La tua applicazione dovrebbe diventare più esplicita riguardo alle responsabilità che rimangono tue: verità di dominio, autorizzazione, effetti collaterali delle funzioni, artefatti, auditabilità e ciclo di vita del prodotto.\u003C\u002Fp>\n\u003Cp>Se una migrazione lascia in piedi tutta la vecchia macchina di orchestrazione e si limita a sostituire le chiamate SDK con chiamate Agents API, probabilmente ha perso l'opportunità architetturale. L'obiettivo non è riprodurre il vecchio runtime sopra quello nuovo. L'obiettivo è decidere quali responsabilità del runtime non appartengono più alla tua applicazione.\u003C\u002Fp>\n\u003Ch2 id=\"section-139\">FAQ\u003C\u002Fh2>\n\u003Csection class=\"editorjs-faq my-6 rounded-xl border border-gray-200 p-5 dark:border-gray-700\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Migrare da Agents SDK ad Agents API\u003C\u002Fh3>\u003Cdiv id=\"faq1\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Migrare dall&#39;Agents SDK all&#39;Agents API è solo una riscrittura di API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No. Il cambiamento principale è l&#39;ownership del runtime: l&#39;Agents SDK esegue il loop dell&#39;agente nella tua applicazione, mentre l&#39;Agents API esegue un harness Codex gestito e una sessione durevole. Stato, ciclo di vita, gestione degli eventi e ripristino dovrebbero essere rivisti come questioni architetturali.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq2\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">I miei function tool devono essere riscritti?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">L&#39;implementazione di business spesso può essere riutilizzata se è già dietro un&#39;interfaccia applicativa stabile. L&#39;integrazione rivolta all&#39;agente cambia perché le chiamate di funzione dell&#39;Agents API sono gestite tramite azioni richieste e risultati della sessione.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq3\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Dovrei spostare lo stato di business nella sessione dell&#39;Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">In genere no. Mantieni lo stato autorevole di business e prodotto nei tuoi database o servizi. Usa la sessione dell&#39;agente per la continuità dell&#39;agente e il contesto di lavoro, non come unica fonte di verità per il tuo prodotto.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq4\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Ho bisogno di webhook per l&#39;Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Non sempre, perché è disponibile anche lo streaming. I webhook sono particolarmente utili per sessioni a lunga esecuzione o asincrone in cui la tua applicazione dovrebbe reagire ai cambiamenti del ciclo di vita senza mantenere uno stream aperto.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq5\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Ogni applicazione esistente basata su Agents SDK dovrebbe migrare ora?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No. L&#39;SDK rimane supportato in modalità manutenzione. Migra quando il nuovo runtime fornisce un valore significativo per la roadmap e dopo che il comportamento richiesto è stato validato rispetto a valutazioni modellate sulla produzione.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-141\">Glossario\u003C\u002Fh2>\n\u003Csection class=\"editorjs-glossary my-6 rounded-xl border border-gray-200 dark:border-gray-700 p-5\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Termini chiave della migrazione\u003C\u002Fh3>\u003Cdl>\u003Cdiv id=\"runtime-boundary\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Confine del runtime\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">La divisione delle responsabilità tra il runtime dell'agente gestito dalla piattaforma e il runtime di proprietà dell'applicazione.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"harness\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Harness\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Il runtime dell'agente che coordina chiamate al modello, strumenti, contesto, orchestrazione ed esecuzione continuata.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"session\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Sessione\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un'istanza durevole dell'Agents API che conserva la configurazione di un agente, la conversazione e il lavoro salvato tra i turni.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"required-action\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Azione richiesta\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Uno stato della sessione in cui l'Agents API necessita di input esterno, come il risultato di una funzione o una connessione ambientale, prima che il lavoro possa continuare.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"self-hosted-environment\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Ambiente self-hosted\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un ambiente di esecuzione gestito dalla tua infrastruttura e connesso all'harness gestito dell'Agents API.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"migration-proof-test\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Test di prova della migrazione\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un metodo di validazione a fasi che confronta il nuovo runtime con baseline comportamentali, iniezioni di guasto, tracce e criteri di cutover reversibile.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-143\">Fonti primarie e ulteriori letture\u003C\u002Fh2>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Agents SDK\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Politica di supporto attuale: l&#39;Agents SDK è completo di funzionalità, rimane mantenuto e le nuove applicazioni dovrebbero iniziare con l&#39;Agents API.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Esecuzione di agenti con l&#39;Agents SDK\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documentazione del ciclo dell&#39;agente di proprietà dell&#39;applicazione dell&#39;SDK e del modello di continuazione.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Panoramica dell&#39;Agents API\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definisce i concetti fondamentali dell&#39;Agents API: agente, ambiente, sessione, eventi ed elementi.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Architettura dell&#39;Agents API\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Spiega i confini dell&#39;harness ospitato, del server applicativo, dell&#39;ambiente di esecuzione ospitato da OpenAI e self-hosted.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Configurazione degli agenti\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definisce la configurazione riutilizzabile degli agenti e la personalizzazione a livello di sessione.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Eseguire e continuare le sessioni\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documenta le sessioni durevoli, i turni asincroni, lo streaming e lo steering.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Funzioni dell&#39;Agents API\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definizione dello strumento funzione e confine del gestore dell&#39;applicazione per i risultati delle funzioni richiesti.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Webhook di sessione\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Eventi del ciclo di vita per sessioni asincrone, azioni richieste e connessioni all&#39;ambiente self-hosted.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Osservabilità e utilizzo dell&#39;Agents API\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Log di sessione, eventi, turni, chiamate agli strumenti, subagenti, tracce e ispezione dell&#39;utilizzo dei token.\u003C\u002Fp>\u003C\u002Fa>",{"time":212,"blocks":213,"version":1302},1790352550262,[214,222,228,236,243,250,255,260,265,270,275,329,334,339,344,351,356,361,394,399,404,409,443,448,453,458,463,468,473,479,484,489,494,517,522,527,532,537,542,547,556,561,566,571,576,608,613,648,653,658,672,677,682,687,692,697,702,707,712,717,722,727,732,737,763,768,797,802,812,821,830,839,848,857,866,875,884,888,892,896,900,904,908,912,916,919,922,948,951,955,959,963,967,971,990,994,997,1001,1017,1020,1024,1028,1031,1035,1039,1042,1045,1049,1053,1064,1067,1071,1075,1079,1083,1087,1091,1095,1098,1102,1105,1123,1126,1143,1146,1149,1158,1161,1165,1169,1172,1176,1180,1183,1187,1191,1194,1198,1202,1205,1222,1225,1239,1243,1249,1256,1263,1270,1276,1282,1289,1295],{"id":215,"data":216,"type":220,"tunes":221},"24Foq4L2Wb",{"title":217,"maxLevel":218,"minLevel":219},"Contenuti",3,2,"tableOfContents",{},{"id":223,"data":224,"type":226,"tunes":227},"intro",{"text":225},"Migrare dall'OpenAI Agents SDK all'Agents API non è una semplice rinomina di import. Il confine architetturale principale cambia: l'SDK esegue il loop dell'agente all'interno della tua applicazione, mentre l'Agents API esegue un harness Codex gestito e una sessione durevole sul lato di OpenAI. La domanda di migrazione non è quindi \"Quali classi corrispondono a quali endpoint?\" ma \"Quali responsabilità di runtime attraversano il confine, quali rimangono nella nostra applicazione e quali devono essere riprogettate?\"","paragraph",{},{"id":229,"data":230,"type":234,"tunes":235},"direct",{"body":231,"title":232,"variant":233},"\u003Cstrong>Una vera migrazione da Agents SDK ad Agents API cambia la titolarità del runtime.\u003C\u002Fstrong> La tua configurazione riutilizzabile dell'agente può ancora contenere modello, istruzioni e strumenti, ma il loop, la sessione durevole, l'orchestrazione, la compattazione del contesto e il ripristino si spostano verso il runtime gestito dell'Agents API. La tua applicazione dovrebbe mantenere lo stato di dominio, l'autorizzazione, le regole di business, le implementazioni delle funzioni e la logica di audit al di fuori della sessione dell'agente. Tratta la migrazione come una riprogettazione del confine, non come una conversione meccanica del codice.","Risposta diretta","info","callout",{},{"id":237,"data":238,"type":234,"tunes":242},"current",{"body":239,"title":240,"variant":241},"OpenAI attualmente contrassegna l'Agents SDK come \u003Cstrong>feature complete\u003C\u002Fstrong> e raccomanda l'Agents API per le nuove applicazioni di agenti. L'Agents API è in beta pubblica. Le applicazioni SDK esistenti rimangono supportate e la migrazione immediata non è automaticamente richiesta.","Aggiornato al 25 settembre 2026","warning",{},{"id":244,"data":245,"type":234,"tunes":249},"model-note",{"body":246,"title":247,"variant":248},"La Mappa di Migrazione del Confine di Runtime e il Test di Prova di Migrazione in questo articolo sono strumenti architetturali pratici, non framework di migrazione ufficiali di OpenAI. Derivano dalle attuali differenze di runtime documentate da OpenAI.","Informazioni sul modello di migrazione","note",{},{"id":251,"data":252,"type":42,"tunes":254},"h-boundary",{"text":253,"level":219},"La migrazione va da un loop di proprietà dell'applicazione a un harness gestito",{},{"id":256,"data":257,"type":226,"tunes":259},"p-boundary-1",{"text":258},"Nell'Agents SDK, una esecuzione è un turno a livello di applicazione. Il runner dell'SDK chiama il modello, ispeziona l'output, esegue gli strumenti, segue i passaggi di consegne e continua fino a raggiungere un punto di arresto. Il tuo processo ospita quel loop e quindi ne possiede il ciclo di vita.",{},{"id":261,"data":262,"type":226,"tunes":264},"p-boundary-2",{"text":263},"Nell'Agents API, OpenAI esegue l'harness. Una sessione è un'istanza durevole di una configurazione di agente che accetta attività, produce eventi, può mettersi in pausa per azioni richieste e può continuare nel tempo. OpenAI gestisce sessioni, orchestrazione, compattazione del contesto e ripristino; la tua applicazione invia lavoro, gestisce gli strumenti funzione, riceve eventi e opzionalmente gestisce un ambiente di esecuzione self-hosted.",{},{"id":266,"data":267,"type":226,"tunes":269},"p-boundary-3",{"text":268},"Questo spostamento di titolarità è la migrazione. Tutto il resto — sintassi API, schemi degli strumenti, gestione degli eventi, ID di sessione — ne consegue.",{},{"id":271,"data":272,"type":42,"tunes":274},"h-map",{"text":273,"level":219},"La Mappa di Migrazione del Confine di Runtime",{},{"id":276,"data":277,"type":327,"tunes":328},"migration-map",{"content":278,"stretched":43,"withHeadings":14},[279,283,287,291,295,299,303,307,311,315,319,323],[280,281,282],"Aspetto","Agents SDK","Obiettivo di migrazione Agents API",[284,285,286],"Loop dell'agente","Viene eseguito nella tua applicazione tramite il runner dell'SDK","Viene eseguito nell'harness Codex gestito",[288,289,290],"Definizione riutilizzabile dell'agente","Oggetto Agent nel codice dell'applicazione","Configurazione dell'agente salvata o inline con modello, istruzioni e strumenti",[292,293,294],"Continuità della conversazione \u002F del lavoro","Strategia di sessione dell'SDK, cronologia, continuazione del risultato o archiviazione dell'applicazione","Sessione durevole dell'Agents API",[296,297,298],"Esecuzione degli strumenti","L'SDK coordina le chiamate agli strumenti nel tuo runtime","L'harness richiede chiamate di funzione; la tua applicazione restituisce i risultati",[300,301,302],"Gestione del contesto","Il tuo runtime \u002F strategia di sessione dell'SDK","Contesto di sessione gestito, compattazione e ripristino, più i confini dei dati della tua applicazione",[304,305,306],"Passaggi di consegne \u002F specialisti","Primitive di orchestrazione dell'SDK","Comportamento dell'harness \u002F subagente nell'Agents API; non dare per scontata una semantica uno-a-uno",[308,309,310],"Ambiente di esecuzione","Il runtime della tua applicazione o un ambiente specifico per gli strumenti","Ambiente opzionale ospitato da OpenAI o self-hosted collegato alla sessione",[312,313,314],"Streaming","Streaming dell'SDK dall'esecuzione","Flusso di eventi della sessione dell'Agents API",[316,317,318],"Ciclo di vita asincrono","Di solito gestito dall'applicazione attorno all'esecuzione dell'SDK","Stati nativi della sessione, turni asincroni e webhook",[320,321,322],"Tracciamento \u002F osservabilità","Tracciamento dell'Agents SDK e log dell'applicazione","Log di sessione dell'Agents, eventi, turni, chiamate agli strumenti, subagenti e tracce esportabili",[324,325,326],"Ripristino","Responsabilità dell'applicazione","Ripristino gestito di harness\u002Fsessione più ripristino di proprietà dell'applicazione per sistemi esterni e ambienti self-hosted","table",{},{"id":330,"data":331,"type":42,"tunes":333},"h-conceptual",{"text":332,"level":219},"Cosa può migrare concettualmente senza cambiare titolarità",{},{"id":335,"data":336,"type":226,"tunes":338},"p-conceptual-1",{"text":337},"Diversi concetti dell'applicazione sopravvivono alla migrazione senza problemi anche se la loro rappresentazione cambia. Modelli, istruzioni, definizioni di funzioni con schema JSON, accesso MCP, descrizioni degli strumenti e requisiti di output strutturato rimangono aspetti della configurazione dell'agente.",{},{"id":340,"data":341,"type":226,"tunes":343},"p-conceptual-2",{"text":342},"Il modello di configurazione dell'Agents API di OpenAI definisce esplicitamente un agente tramite modello, istruzioni, strumenti, ragionamento e comportamento di output. Gli strumenti funzione rimangono codice dell'applicazione: l'harness richiede una chiamata di funzione e il tuo handler restituisce il risultato. OpenAI osserva inoltre che le implementazioni di funzioni usate con la Responses API possono essere riutilizzate con il flusso di sessione dell'Agents API.",{},{"id":345,"data":346,"type":234,"tunes":350},"good-candidate",{"body":347,"title":348,"variant":349},"Una funzione di business pura come \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> non dovrebbe aver bisogno di sapere se il chiamante è l'Agents SDK o l'Agents API. Mantieni la sua logica di dominio dietro un'interfaccia applicativa stabile e migra solo l'adattatore rivolto all'agente.","Buon candidato alla migrazione","success",{},{"id":352,"data":353,"type":42,"tunes":355},"h-no-one",{"text":354,"level":219},"Cosa non dovrebbe essere migrato uno-a-uno",{},{"id":357,"data":358,"type":226,"tunes":360},"p-no-one-1",{"text":359},"Il modello di migrazione pericoloso è ricreare ogni astrazione di runtime dell'SDK all'interno dell'Agents API. Questo può portarti a pagare per un harness gestito mentre gestisci ancora un harness ombra nella tua applicazione.",{},{"id":362,"data":363,"type":327,"tunes":393},"no-one-table",{"content":364,"stretched":43,"withHeadings":14},[365,369,373,377,381,385,389],[366,367,368],"Assunzione dell'era SDK","Perché una copia diretta è rischiosa","Domanda di migrazione",[370,371,372],"Il loop dell'applicazione possiede ogni continuazione","L'Agents API possiede già il loop dell'harness","Quale logica di continuazione è logica di prodotto e quale dovrebbe passare alla sessione gestita?",[374,375,376],"L'oggetto sessione locale è il meccanismo principale di continuità","Le sessioni dell'Agents API sono risorse durevoli con un proprio ciclo di vita","Quale stato appartiene alla sessione rispetto al database di prodotto?",[378,379,380],"Ogni interruzione viene gestita in modo sincrono","I turni dell'Agents API sono asincroni e possono presentare stati action_required","Quali azioni necessitano di webhook, worker, idempotenza e handler ripristinabili?",[382,383,384],"Tutta l'esecuzione degli strumenti avviene dove gira il processo dell'SDK","Gli handler delle funzioni e gli ambienti di esecuzione possono essere separati","Dove dovrebbe effettivamente essere eseguito ciascuno strumento?",[386,387,388],"La traccia dell'SDK è la timeline operativa","L'Agents API espone eventi di sessione, turni e tracce gestite","Quali dati di audit a livello di applicazione necessitano ancora di un proprio registro?",[390,391,392],"L'oggetto handoff corrisponde direttamente a un modello di subagente ospitato","Le semantiche di runtime possono differire","Quale titolarità visibile all'utente e comportamento specialistico deve essere preservato, non solo la vecchia struttura delle classi?",{},{"id":395,"data":396,"type":42,"tunes":398},"h-domain",{"text":397,"level":219},"Passo 1 — Separare lo stato del dominio dallo stato della sessione dell'agente",{},{"id":400,"data":401,"type":226,"tunes":403},"p-domain-1",{"text":402},"Prima di toccare le chiamate API, classifica lo stato che la tua applicazione SDK attualmente trasporta. Parte dello stato esiste solo per mantenere in movimento la conversazione dell'agente. Altro stato è verità di business: permessi utente, stato del progetto, dati dell'ordine, approvazione del flusso di lavoro, record dei clienti, versioni dei documenti, stato delle policy o configurazione dell'applicazione.",{},{"id":405,"data":406,"type":226,"tunes":408},"p-domain-2",{"text":407},"La seconda categoria non dovrebbe diventare dipendente da una sessione dell'API Agents. Una sessione durevole è una continuità utile per l'agente; non è un sostituto della fonte di verità del tuo prodotto. Se la sessione scompare, scade, viene ricostruita o cambia implementazione, la tua applicazione deve comunque sapere cosa è vero.",{},{"id":410,"data":411,"type":441,"tunes":442},"state-test",{"rows":412,"title":430,"layout":327,"columns":431},[413,418,422,426],{"id":414,"label":415,"values":416},"conversation","Continuità della conversazione",[417,417,417],"",{"id":419,"label":420,"values":421},"domain","Verità di business",[417,417,417],{"id":423,"label":424,"values":425},"artifact","Artefatto durevole",[417,417,417],{"id":427,"label":428,"values":429},"ephemeral","Stato di lavoro temporaneo",[417,417,417],"Test di collocazione dello stato",[432,435,438],{"id":433,"label":434},"type","Tipo di stato",{"id":436,"label":437},"place","Proprietario preferito",{"id":439,"label":440},"reason","Motivo","comparison",{},{"id":444,"data":445,"type":42,"tunes":447},"h-events",{"text":446,"level":219},"Passo 2 — Convertire la mentalità del runner in una mentalità di sessione ed eventi",{},{"id":449,"data":450,"type":226,"tunes":452},"p-events-1",{"text":451},"Le applicazioni SDK spesso pensano in termini di chiamata a run e ricezione di un risultato. L'API Agents pensa in termini di una sessione durevole i cui turni possono essere eseguiti in modo asincrono. Un messaggio a una sessione inattiva avvia il lavoro; un messaggio durante un turno attivo può indirizzarlo. I progressi arrivano tramite streaming o webhook.",{},{"id":454,"data":455,"type":226,"tunes":457},"p-events-2",{"text":456},"Ciò influisce sull'architettura dell'applicazione. Il lavoro di produzione a lunga esecuzione non dovrebbe dipendere dal fatto che una singola richiesta HTTP rimanga attiva. Il tuo prodotto necessita di identificatori di sessione stabili, persistenza del ciclo di vita, verifica dei webhook, gestori idempotenti e un modo per riconciliare lo stato corrente della sessione dopo il riavvio del processo.",{},{"id":459,"data":460,"type":42,"tunes":462},"h-functions",{"text":461,"level":219},"Passo 3 — Riprogettare gli strumenti funzione attorno alle azioni richieste",{},{"id":464,"data":465,"type":226,"tunes":467},"p-functions-1",{"text":466},"Gli strumenti funzione rimangono un confine importante dell'applicazione. Definisci la funzione e il suo schema JSON nella configurazione dell'agente. Quando l'harness necessita della funzione, la sessione può entrare in uno stato di azione richiesta. La tua applicazione recupera l'azione richiesta, esegue la logica di business e restituisce il risultato.",{},{"id":469,"data":470,"type":226,"tunes":472},"p-functions-2",{"text":471},"Ciò significa che l'implementazione della funzione dovrebbe essere sicura da riprendere. Un webhook può essere consegnato mentre un altro worker sta elaborando. Un errore di rete può verificarsi dopo l'effetto collaterale esterno ma prima che il risultato venga restituito. La migrazione è quindi un buon momento per aggiungere ID di chiamata, chiavi di idempotenza, autorizzazione esplicita, politiche di timeout e record di audit agli strumenti consequenziali.",{},{"id":474,"data":475,"type":234,"tunes":478},"tool-trap",{"body":476,"title":477,"variant":241},"Non trattare una chiamata di funzione dall'harness gestito come autorizzazione a eseguire l'azione. L'harness decide \u003Cem>cosa vuole chiamare\u003C\u002Fem>; la tua applicazione decide comunque se l'utente corrente, la sessione e lo stato di business consentono quell'azione.","Trappola della migrazione degli strumenti",{},{"id":480,"data":481,"type":42,"tunes":483},"h-environment",{"text":482,"level":219},"Passo 4 — Decidere dove deve avvenire l'esecuzione",{},{"id":485,"data":486,"type":226,"tunes":488},"p-env-1",{"text":487},"L'API Agents separa l'harness gestito dall'ambiente di esecuzione. Un agente può operare senza un ambiente dedicato, in un sandbox ospitato da OpenAI o tramite un ambiente self-hosted connesso alla sessione.",{},{"id":490,"data":491,"type":226,"tunes":493},"p-env-2",{"text":492},"Ciò crea una decisione di migrazione che le applicazioni SDK potrebbero non aver mai preso esplicitamente: quale codice dovrebbe essere eseguito come funzione dell'applicazione, quale codice appartiene a un sandbox e quali carichi di lavoro richiedono infrastrutture che controlli tu?",{},{"id":495,"data":496,"type":327,"tunes":516},"environment-table",{"content":497,"stretched":43,"withHeadings":14},[498,501,504,507,510,513],[499,500],"Esigenza","Confine probabile",[502,503],"Chiamare un servizio interno esistente tramite logica di business controllata","Strumento funzione gestito dalla tua applicazione",[505,506],"Eseguire codice isolato o lavorare con file temporanei senza infrastruttura privata","Ambiente ospitato da OpenAI",[508,509],"Accedere a risorse di rete private, software di sistema personalizzato o calcolo locale controllato","Ambiente self-hosted",[511,512],"Persistere artefatti di prodotto accettati","Archiviazione di proprietà dell'applicazione, non solo filesystem del sandbox",[514,515],"Eseguire un effetto collaterale di business ad alto impatto","Funzione dell'applicazione con controlli di autorizzazione e audit",{},{"id":518,"data":519,"type":42,"tunes":521},"h-recovery",{"text":520,"level":219},"Passo 5 — Sostituire il recupero implicito con una gestione esplicita del ciclo di vita",{},{"id":523,"data":524,"type":226,"tunes":526},"p-recovery-1",{"text":525},"L'harness gestito fornisce il recupero a livello di sessione, ma la tua applicazione possiede comunque ogni dipendenza esterna attorno ad esso. Gli ambienti self-hosted necessitano di provisioning, riconnessione e arresto. I gestori di funzioni possono fallire. I webhook possono essere ritentati. Lo stato lato prodotto può cambiare mentre un agente è inattivo.",{},{"id":528,"data":529,"type":226,"tunes":531},"p-recovery-2",{"text":530},"La migrazione necessita quindi di due modelli di recupero: recupero del runtime dell'agente e recupero delle operazioni di business. Il primo è sempre più gestito dall'API Agents. Il secondo rimane una tua responsabilità.",{},{"id":533,"data":534,"type":42,"tunes":536},"h-observability",{"text":535,"level":219},"Passo 6 — Ricostruire l'osservabilità attorno al nuovo confine di traccia",{},{"id":538,"data":539,"type":226,"tunes":541},"p-obs-1",{"text":540},"Le sessioni dell'API Agents espongono eventi, cronologia salvata, turni, chiamate agli strumenti, subagenti e utilizzo dei token. OpenAI fornisce anche i log di sessione nella piattaforma e l'esportazione delle tracce.",{},{"id":543,"data":544,"type":226,"tunes":546},"p-obs-2",{"text":545},"Non scartare l'osservabilità della tua applicazione solo perché le tracce della piattaforma sono migliorate. I log di prodotto devono comunque collegare la sessione dell'agente all'identità dell'utente, alla decisione di autorizzazione, all'oggetto di dominio, all'effetto collaterale dello strumento, al record di approvazione e al risultato finale accettato. La traccia di produzione utile è la congiunzione tra le evidenze dell'agent-runtime e le evidenze del business-runtime.",{},{"id":548,"data":549,"type":554,"tunes":555},"ref-reliability",{"url":550,"title":551,"excerpt":552,"ctaLabel":553},"https:\u002F\u002Fstajic.de\u002Fit\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough","Affidabilità degli agenti AI: perché la risposta finale non è sufficiente","L'affidabilità di un agente dipende dal percorso di esecuzione, dagli strumenti e dalle decisioni intermedie — non solo dall'output finale.","Leggi l'articolo sull'affidabilità","referralArticle",{},{"id":557,"data":558,"type":42,"tunes":560},"h-evals",{"text":559,"level":219},"Passo 7 — Preservare le valutazioni prima di modificare il runtime",{},{"id":562,"data":563,"type":226,"tunes":565},"p-evals-1",{"text":564},"Una migrazione può sembrare riuscita perché il nuovo sistema produce ancora risposte plausibili mentre cambia silenziosamente la scelta degli strumenti, la continuità della sessione, il comportamento di handoff, la latenza o il recupero dagli errori. Costruisci la baseline comportamentale prima di cambiare runtime.",{},{"id":567,"data":568,"type":226,"tunes":570},"p-evals-2",{"text":569},"La baseline dovrebbe includere attività rappresentative, chiamate agli strumenti attese, azioni vietate, punti di approvazione, continuità dello stato, scenari di recupero e criteri di accettazione dell'output finale. Esegui le vecchie e le nuove architetture sugli stessi casi ove possibile.",{},{"id":572,"data":573,"type":42,"tunes":575},"h-proof",{"text":574,"level":219},"Il test di prova della migrazione",{},{"id":577,"data":578,"type":606,"tunes":607},"proof-flow",{"steps":579,"title":604,"orientation":605},[580,583,586,589,592,595,598,601],{"label":581,"description":582},"1. Congela la baseline comportamentale","Cattura tracce SDK rappresentative, output attesi, percorsi degli strumenti, punti di approvazione e casi di errore.",{"label":584,"description":585},"2. Inventaria la proprietà dello stato","Contrassegna ogni campo di stato come stato della sessione dell'agente, stato di dominio autorevole, artefatto durevole o stato di lavoro effimero.",{"label":587,"description":588},"3. Riutilizza implementazioni stabili degli strumenti","Mantieni le funzioni di business dietro interfacce applicative; sostituisci solo l'integrazione rivolta all'agente ove possibile.",{"label":590,"description":591},"4. Costruisci una fetta verticale dell'API Agents","Migra un flusso di lavoro a forma di produzione includendo creazione della sessione, strumenti, eventi, ambiente e persistenza.",{"label":593,"description":594},"5. Inietta interruzioni","Testa riavvio del processo, retry del webhook, timeout della funzione, riconnessione dell'ambiente self-hosted e stato di dominio obsoleto.",{"label":596,"description":597},"6. Confronta le tracce, non solo le risposte","Verifica la scelta degli strumenti, l'autorizzazione, il percorso delle evidenze, le transizioni di stato e gli effetti collaterali rispetto alla baseline.",{"label":599,"description":600},"7. Esegui traffico in shadow","Dove fattibile, riproduci o rispecchia attività rappresentative prima di rendere autorevole il nuovo runtime.",{"label":602,"description":603},"8. Passa dietro un confine reversibile","Mantieni gli adattatori di integrazione e la capacità di rollback finché il comportamento in produzione non è stabile.","Dimostra il nuovo runtime prima del passaggio","auto","processFlow",{},{"id":609,"data":610,"type":42,"tunes":612},"h-metrics",{"text":611,"level":219},"Cosa misurare durante la migrazione",{},{"id":614,"data":615,"type":327,"tunes":647},"metrics-table",{"content":616,"stretched":43,"withHeadings":14},[617,620,623,626,629,632,635,638,641,644],[618,619],"Dimensione","Verifica di migrazione",[621,622],"Successo dell'attività","Il nuovo runtime soddisfa gli stessi o migliori criteri di accettazione?",[624,625],"Correttezza degli strumenti","Chiama lo strumento giusto con argomenti validi e autorizzazione?",[627,628],"Continuità dello stato","Il lavoro può riprendere tra turni, riavvii e attese asincrone?",[630,631],"Recupero","Cosa succede dopo perdita di webhook, errore del gestore, disconnessione dell'ambiente o timeout?",[633,634],"Tracciabilità","Ogni azione consequenziale può essere collegata a sessione, utente, chiamata allo strumento e oggetto di dominio?",[636,637],"Comportamento del contesto","Le sessioni di lunga durata preservano i vincoli senza trasportare verità applicative obsolete?",[639,640],"Latenza","Come influiscono l'avvio della sessione, il provisioning dell'ambiente e il lavoro multi-turno sul tempo visibile all'utente?",[642,643],"Costo","Cosa cambia nell'uso del modello, nell'uso della sandbox, nel contesto ripetuto e nelle operazioni infrastrutturali?",[645,646],"Carico operativo","Quali responsabilità precedentemente di proprietà dell'applicazione sono effettivamente scomparse e quali si sono semplicemente spostate?",{},{"id":649,"data":650,"type":42,"tunes":652},"h-not-yet",{"text":651,"level":219},"Quando non migrare ancora",{},{"id":654,"data":655,"type":226,"tunes":657},"p-not-yet-1",{"text":656},"Un'applicazione esistente basata su Agents SDK non diventa una cattiva architettura solo perché la direzione della piattaforma è cambiata. OpenAI continua la manutenzione, le correzioni di sicurezza, le correzioni di bug critici e il lavoro di compatibilità. Se l'applicazione è stabile, ben valutata e non ha requisiti di roadmap bloccati, una migrazione immediata del runtime potrebbe non essere giustificata.",{},{"id":659,"data":660,"type":670,"tunes":671},"not-yet-list",{"meta":661,"items":662,"style":669},{},[663,664,665,666,667,668],"Una capacità richiesta dell'SDK non è ancora disponibile nell'API Agents.","La migrazione interromperebbe un periodo di produzione critico senza fornire valore a breve termine.","L'applicazione dipende da semantiche di orchestrazione personalizzate che non sono state validate sull'harness gestito.","La portabilità del provider è un requisito rigido e l'attuale astrazione dell'SDK è materialmente preziosa.","Il tuo team non ha ancora separato lo stato di business dallo stato del runtime dell'agente, rendendo il passaggio non sicuro.","Il comportamento della nuova API Agents non è stato testato su carichi di lavoro di produzione rappresentativi.","unordered","list",{},{"id":673,"data":674,"type":42,"tunes":676},"h-when",{"text":675,"level":219},"Quando la migrazione diventa strategicamente importante",{},{"id":678,"data":679,"type":226,"tunes":681},"p-when-1",{"text":680},"La migrazione diventa più convincente quando i requisiti di prodotto si allineano con l'harness gestito: lavoro durevole di lunga durata, compattazione e recupero del contesto gestiti dalla piattaforma, capacità più recenti dell'agent-runtime, esecuzione in sandbox, gestione del ciclo di vita ospitata più ricca o il desiderio di ridurre la quantità di codice di orchestrazione che la tua applicazione gestisce.",{},{"id":683,"data":684,"type":226,"tunes":686},"p-when-2",{"text":685},"Il segnale più forte non è \"il vecchio SDK è completo di funzionalità\". È \"la nostra roadmap ora dipende da capacità la cui sede naturale è il runtime gestito dell'API Agents\".",{},{"id":688,"data":689,"type":42,"tunes":691},"h-change",{"text":690,"level":219},"Cosa cambierebbe questa risposta?",{},{"id":693,"data":694,"type":226,"tunes":696},"p-change-1",{"text":695},"La strategia di migrazione cambierebbe se OpenAI pubblicasse strumenti di migrazione automatizzati, introducesse livelli di compatibilità espliciti, modificasse la semantica delle sessioni dell'API Agents, ampliasse o restringesse il supporto agli ambienti self-hosted, oppure cambiasse la politica di supporto per l'SDK Agents.",{},{"id":698,"data":699,"type":226,"tunes":701},"p-change-2",{"text":700},"Cambierebbe anche se cambiassero i requisiti del tuo prodotto. Un semplice assistente richiesta-risposta potrebbe non aver bisogno affatto di un harness gestito e durevole. Un agente di coding, ricerca o operations a lunga esecuzione può trarre molto più vantaggio dal modello di ownership dell'API Agents.",{},{"id":703,"data":704,"type":42,"tunes":706},"h-limitations",{"text":705,"level":219},"Limitazioni",{},{"id":708,"data":709,"type":226,"tunes":711},"p-limit-1",{"text":710},"Non esiste una mappa di migrazione universale uno-a-uno da SDK ad API, perché le applicazioni usano l'SDK Agents in modi diversi. Alcune si affidano pesantemente a sessioni e handoff; altre lo usano come un sottile runner attorno a function tool. La migrazione corretta dipende da quali responsabilità la tua applicazione possiede effettivamente oggi.",{},{"id":713,"data":714,"type":226,"tunes":716},"p-limit-2",{"text":715},"L'API Agents è anche in beta pubblica, quindi i dettagli implementativi possono evolvere. Considera i principi di ownership in questo articolo come più durevoli di qualsiasi forma specifica di endpoint.",{},{"id":718,"data":719,"type":42,"tunes":721},"h-conclusion",{"text":720,"level":219},"Conclusione",{},{"id":723,"data":724,"type":226,"tunes":726},"p-conclusion-1",{"text":725},"Migrare dall'SDK Agents all'API Agents si comprende meglio come lo spostamento del confine del runtime dell'agente. L'harness gestito si assume una parte maggiore del loop, della continuità di sessione, della compattazione e del ripristino. La tua applicazione dovrebbe diventare più esplicita riguardo alle responsabilità che rimangono tue: verità di dominio, autorizzazione, effetti collaterali delle funzioni, artefatti, auditabilità e ciclo di vita del prodotto.",{},{"id":728,"data":729,"type":226,"tunes":731},"p-conclusion-2",{"text":730},"Se una migrazione lascia in piedi tutta la vecchia macchina di orchestrazione e si limita a sostituire le chiamate SDK con chiamate all'API Agents, probabilmente ha mancato l'opportunità architetturale. L'obiettivo non è riprodurre il vecchio runtime sopra quello nuovo. L'obiettivo è decidere quali responsabilità del runtime non appartengono più alla tua applicazione.",{},{"id":733,"data":734,"type":42,"tunes":736},"h-faq",{"text":735,"level":219},"FAQ",{},{"id":738,"data":739,"type":738,"tunes":762},"faq",{"items":740,"title":761},[741,745,749,753,757],{"id":742,"answer":743,"question":744},"faq1","No. Il cambiamento principale è l'ownership del runtime: l'SDK Agents esegue il loop dell'agente nella tua applicazione, mentre l'API Agents esegue un harness Codex gestito e una sessione durevole. Stato, ciclo di vita, gestione degli eventi e ripristino dovrebbero essere riesaminati come questioni architetturali.","Migrare dall'SDK Agents all'API Agents è solo una riscrittura di API?",{"id":746,"answer":747,"question":748},"faq2","L'implementazione di business spesso può essere riutilizzata se è già dietro un'interfaccia applicativa stabile. L'integrazione rivolta all'agente cambia perché le chiamate di funzione dell'API Agents sono gestite tramite azioni richieste e risultati della sessione.","I miei function tool devono essere riscritti?",{"id":750,"answer":751,"question":752},"faq3","In genere no. Mantieni lo stato autoritativo di business e di prodotto nei tuoi database o servizi. Usa la sessione dell'agente per la continuità dell'agente e il contesto di lavoro, non come unica fonte di verità per il tuo prodotto.","Dovrei spostare lo stato di business nella sessione dell'API Agents?",{"id":754,"answer":755,"question":756},"faq4","Non sempre, perché è disponibile anche lo streaming. I webhook sono particolarmente utili per sessioni a lunga esecuzione o asincrone in cui la tua applicazione dovrebbe reagire ai cambiamenti del ciclo di vita senza mantenere uno stream aperto.","Ho bisogno di webhook per l'API Agents?",{"id":758,"answer":759,"question":760},"faq5","No. L'SDK rimane supportato in modalità manutenzione. Migra quando il nuovo runtime fornisce un valore significativo per la roadmap e dopo che il comportamento richiesto è stato validato rispetto a valutazioni modellate sulla produzione.","Ogni applicazione esistente basata sull'SDK Agents dovrebbe migrare ora?","Migrare dall'SDK Agents all'API Agents",{},{"id":764,"data":765,"type":42,"tunes":767},"h-glossary",{"text":766,"level":219},"Glossario",{},{"id":769,"data":770,"type":769,"tunes":796},"glossary",{"title":771,"entries":772},"Termini chiave della migrazione",[773,777,781,785,789,792],{"term":774,"anchor":775,"definition":776},"Confine del runtime","runtime-boundary","La divisione delle responsabilità tra il runtime dell'agente gestito dalla piattaforma e il runtime di proprietà dell'applicazione.",{"term":778,"anchor":779,"definition":780},"Harness","harness","Il runtime dell'agente che coordina chiamate al modello, strumenti, contesto, orchestrazione ed esecuzione continuata.",{"term":782,"anchor":783,"definition":784},"Sessione","session","Un'istanza durevole dell'API Agents che conserva la configurazione di un agente, la conversazione e il lavoro salvato tra i turni.",{"term":786,"anchor":787,"definition":788},"Azione richiesta","required-action","Uno stato della sessione in cui l'API Agents necessita di input esterno, come il risultato di una funzione o una connessione all'ambiente, prima che il lavoro possa continuare.",{"term":509,"anchor":790,"definition":791},"self-hosted-environment","Un ambiente di esecuzione gestito dalla tua infrastruttura e connesso all'harness gestito dell'API Agents.",{"term":793,"anchor":794,"definition":795},"Test di prova della migrazione","migration-proof-test","Un metodo di validazione a fasi che confronta il nuovo runtime con baseline comportamentali, iniezioni di guasto, tracce e criteri di cutover reversibili.",{},{"id":798,"data":799,"type":42,"tunes":801},"h-sources",{"text":800,"level":219},"Fonti primarie e approfondimenti",{},{"id":803,"data":804,"type":810,"tunes":811},"src-sdk",{"link":805,"meta":806},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk",{"image":807,"title":808,"description":809},{"url":417},"OpenAI — Agents SDK","Politica di supporto attuale: l'SDK Agents è completo nelle funzionalità, rimane mantenuto e le nuove applicazioni dovrebbero iniziare con l'API Agents.","linkTool",{},{"id":813,"data":814,"type":810,"tunes":820},"src-running-sdk",{"link":815,"meta":816},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents",{"image":817,"title":818,"description":819},{"url":417},"OpenAI — Eseguire agenti con l'SDK Agents","Documentazione del loop dell'agente di proprietà dell'applicazione SDK e del modello di continuazione.",{},{"id":822,"data":823,"type":810,"tunes":829},"src-api-overview",{"link":824,"meta":825},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview",{"image":826,"title":827,"description":828},{"url":417},"OpenAI — Panoramica dell'API Agents","Definisce i concetti fondamentali dell'API Agents: agente, ambiente, sessione, eventi e item.",{},{"id":831,"data":832,"type":810,"tunes":838},"src-api-architecture",{"link":833,"meta":834},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture",{"image":835,"title":836,"description":837},{"url":417},"OpenAI — Architettura dell'API Agents","Spiega l'harness ospitato, il server applicativo e i confini degli ambienti di esecuzione ospitati da OpenAI e self-hosted.",{},{"id":840,"data":841,"type":810,"tunes":847},"src-api-config",{"link":842,"meta":843},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration",{"image":844,"title":845,"description":846},{"url":417},"OpenAI — Configurare gli agenti","Definisce la configurazione riutilizzabile degli agenti e la personalizzazione a livello di sessione.",{},{"id":849,"data":850,"type":810,"tunes":856},"src-api-sessions",{"link":851,"meta":852},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions",{"image":853,"title":854,"description":855},{"url":417},"OpenAI — Eseguire e continuare le sessioni","Documenta sessioni durevoli, turni asincroni, streaming e steering.",{},{"id":858,"data":859,"type":810,"tunes":865},"src-api-functions",{"link":860,"meta":861},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions",{"image":862,"title":863,"description":864},{"url":417},"OpenAI — Funzioni dell'API Agents","Definizione dello strumento funzione e il confine del gestore dell'applicazione per i risultati delle funzioni richieste.",{},{"id":867,"data":868,"type":810,"tunes":874},"src-api-webhooks",{"link":869,"meta":870},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks",{"image":871,"title":872,"description":873},{"url":417},"OpenAI — Webhook di sessione","Eventi del ciclo di vita per sessioni asincrone, azioni richieste e connessioni a ambienti self-hosted.",{},{"id":876,"data":877,"type":810,"tunes":883},"src-api-observability",{"link":878,"meta":879},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability",{"image":880,"title":881,"description":882},{"url":417},"OpenAI — Osservabilità e utilizzo dell'API Agents","Log di sessione, eventi, turni, chiamate a strumenti, subagenti, tracce e ispezione dell'utilizzo dei token.",{},{"id":223,"data":885,"type":226,"tunes":887},{"text":886},"Migrare dall'SDK OpenAI Agents all'API Agents non è una semplice rinomina di import. Il confine architetturale principale cambia: l'SDK esegue il ciclo dell'agente all'interno della tua applicazione, mentre l'API Agents esegue un harness Codex gestito e una sessione durevole dal lato di OpenAI. La domanda di migrazione quindi non è \"Quali classi corrispondono a quali endpoint?\" ma \"Quali responsabilità di runtime si spostano oltre il confine, quali rimangono nella nostra applicazione e quali necessitano di una riprogettazione?\"",{},{"id":229,"data":889,"type":234,"tunes":891},{"body":890,"title":232,"variant":233},"\u003Cstrong>Una vera migrazione da Agents SDK ad Agents API cambia la titolarità del runtime.\u003C\u002Fstrong> La tua configurazione riutilizzabile dell'agente può ancora contenere modello, istruzioni e strumenti, ma il ciclo, la sessione durevole, l'orchestrazione, la compattazione del contesto e il ripristino si spostano verso il runtime gestito dell'API Agents. La tua applicazione dovrebbe mantenere lo stato di dominio, l'autorizzazione, le regole di business, le implementazioni delle funzioni e la logica di audit al di fuori della sessione dell'agente. Tratta la migrazione come una riprogettazione del confine, non come una conversione meccanica del codice.",{},{"id":237,"data":893,"type":234,"tunes":895},{"body":894,"title":240,"variant":241},"OpenAI attualmente contrassegna l'SDK Agents come \u003Cstrong>feature complete\u003C\u002Fstrong> e raccomanda l'API Agents per le nuove applicazioni di agenti. L'API Agents è in beta pubblica. Le applicazioni SDK esistenti rimangono supportate e la migrazione immediata non è automaticamente richiesta.",{},{"id":244,"data":897,"type":234,"tunes":899},{"body":898,"title":247,"variant":248},"La Mappa di Migrazione del Confine di Runtime e il Test di Prova di Migrazione in questo articolo sono strumenti architetturali pratici, non framework di migrazione ufficiali di OpenAI. Sono derivati dalle attuali differenze di runtime documentate da OpenAI.",{},{"id":901,"data":902,"type":220,"tunes":903},"toc",{"title":217,"maxLevel":218,"minLevel":219},{},{"id":251,"data":905,"type":42,"tunes":907},{"text":906,"level":219},"La migrazione va da un ciclo di proprietà dell'applicazione a un harness gestito",{},{"id":256,"data":909,"type":226,"tunes":911},{"text":910},"Nell'SDK Agents, una esecuzione è un turno a livello di applicazione. Il runner dell'SDK chiama il modello, ispeziona l'output, esegue gli strumenti, segue i passaggi di consegne e continua fino a raggiungere un punto di arresto. Il tuo processo ospita quel ciclo e quindi ne possiede il ciclo di vita.",{},{"id":261,"data":913,"type":226,"tunes":915},{"text":914},"Nell'API Agents, OpenAI esegue l'harness. Una sessione è un'istanza durevole di una configurazione di agente che accetta attività, produce eventi, può mettersi in pausa per azioni richieste e può continuare nel tempo. OpenAI gestisce sessioni, orchestrazione, compattazione del contesto e ripristino; la tua applicazione invia lavoro, gestisce gli strumenti funzione, riceve eventi e opzionalmente gestisce un ambiente di esecuzione self-hosted.",{},{"id":266,"data":917,"type":226,"tunes":918},{"text":268},{},{"id":271,"data":920,"type":42,"tunes":921},{"text":273,"level":219},{},{"id":276,"data":923,"type":327,"tunes":947},{"content":924,"stretched":43,"withHeadings":14},[925,927,929,930,932,934,935,937,939,941,942,945],[280,281,926],"Obiettivo di migrazione dell'API Agents",[928,285,286],"Ciclo dell'agente",[288,289,290],[292,293,931],"Sessione durevole dell'API Agents",[296,297,933],"L'harness richiede chiamate a funzioni; la tua applicazione restituisce i risultati",[300,301,302],[304,305,936],"Comportamento dell'harness \u002F subagenti nell'API Agents; non presumere una semantica uno-a-uno",[308,938,310],"Il runtime della tua applicazione o ambiente specifico dello strumento",[312,313,940],"Flusso di eventi della sessione dell'API Agents",[316,317,318],[320,943,944],"Tracciamento dell'SDK Agents e log dell'applicazione","Log di sessione degli agenti, eventi, turni, chiamate a strumenti, subagenti e tracce esportabili",[324,325,946],"Ripristino gestito dell'harness\u002Fsessione più ripristino di proprietà dell'applicazione per sistemi esterni e ambienti self-hosted",{},{"id":330,"data":949,"type":42,"tunes":950},{"text":332,"level":219},{},{"id":335,"data":952,"type":226,"tunes":954},{"text":953},"Diversi concetti dell'applicazione sopravvivono alla migrazione in modo pulito anche se la loro rappresentazione cambia. Modelli, istruzioni, definizioni di funzioni JSON-schema, accesso MCP, descrizioni degli strumenti e requisiti di output strutturato rimangono aspetti della configurazione dell'agente.",{},{"id":340,"data":956,"type":226,"tunes":958},{"text":957},"Il modello di configurazione dell'API Agents di OpenAI definisce esplicitamente un agente attraverso modello, istruzioni, strumenti, ragionamento e comportamento di output. Gli strumenti funzione rimangono codice dell'applicazione: l'harness richiede una chiamata a funzione e il tuo gestore restituisce il risultato. OpenAI nota anche che le implementazioni di funzioni utilizzate con l'API Responses possono essere riutilizzate con il flusso di sessione dell'API Agents.",{},{"id":345,"data":960,"type":234,"tunes":962},{"body":961,"title":348,"variant":349},"Una funzione puramente di business come \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> non dovrebbe aver bisogno di sapere se il chiamante è l'Agents SDK o l'Agents API. Mantieni la sua logica di dominio dietro un'interfaccia applicativa stabile e migra solo l'adapter rivolto all'agente.",{},{"id":352,"data":964,"type":42,"tunes":966},{"text":965,"level":219},"Cosa non dovrebbe essere migrato uno a uno",{},{"id":357,"data":968,"type":226,"tunes":970},{"text":969},"Il pattern di migrazione pericoloso è ricreare ogni astrazione runtime dell'SDK all'interno dell'Agents API. Questo può portarti a pagare per un harness gestito continuando comunque a gestire un harness ombra nella tua applicazione.",{},{"id":362,"data":972,"type":327,"tunes":989},{"content":973,"stretched":43,"withHeadings":14},[974,975,976,978,981,983,986],[366,367,368],[370,371,372],[374,375,977],"Quale stato appartiene alla sessione e quale al database di prodotto?",[979,379,980],"Ogni interruzione è gestita in modo sincrono","Quali azioni richiedono webhook, worker, idempotenza e handler ripristinabili?",[982,383,384],"Tutta l'esecuzione degli strumenti avviene dove gira il processo SDK",[984,387,985],"La traccia SDK è la timeline operativa","Quali dati di audit a livello applicativo necessitano ancora di un proprio registro?",[987,391,988],"L'oggetto handoff mappa direttamente su un modello di subagente ospitato","Quale proprietà visibile all'utente e comportamento specialistico deve essere preservato, non solo la vecchia struttura delle classi?",{},{"id":395,"data":991,"type":42,"tunes":993},{"text":992,"level":219},"Passo 1 — Separare lo stato di dominio dallo stato della sessione dell'agente",{},{"id":400,"data":995,"type":226,"tunes":996},{"text":402},{},{"id":405,"data":998,"type":226,"tunes":1000},{"text":999},"La seconda categoria non dovrebbe diventare dipendente da una sessione dell'Agents API. Una sessione durevole è una continuità utile per l'agente; non è un sostituto della fonte di verità del tuo prodotto. Se la sessione scompare, scade, viene ricostruita o cambia implementazione, la tua applicazione deve comunque sapere cosa è vero.",{},{"id":410,"data":1002,"type":441,"tunes":1016},{"rows":1003,"title":430,"layout":327,"columns":1012},[1004,1006,1008,1010],{"id":414,"label":415,"values":1005},[417,417,417],{"id":419,"label":420,"values":1007},[417,417,417],{"id":423,"label":424,"values":1009},[417,417,417],{"id":427,"label":428,"values":1011},[417,417,417],[1013,1014,1015],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":1018,"type":42,"tunes":1019},{"text":446,"level":219},{},{"id":449,"data":1021,"type":226,"tunes":1023},{"text":1022},"Le applicazioni SDK spesso ragionano in termini di chiamata a run e ricezione di un risultato. L'Agents API ragiona in termini di una sessione durevole i cui turni possono essere eseguiti in modo asincrono. Un messaggio a una sessione inattiva avvia il lavoro; un messaggio durante un turno attivo può orientarlo. L'avanzamento arriva tramite streaming o webhook.",{},{"id":454,"data":1025,"type":226,"tunes":1027},{"text":1026},"Questo influisce sull'architettura dell'applicazione. Il lavoro di produzione di lunga durata non dovrebbe dipendere dal fatto che una singola richiesta HTTP rimanga attiva. Il tuo prodotto necessita di identificatori di sessione stabili, persistenza del ciclo di vita, verifica dei webhook, handler idempotenti e un modo per riconciliare lo stato corrente della sessione dopo i riavvii del processo.",{},{"id":459,"data":1029,"type":42,"tunes":1030},{"text":461,"level":219},{},{"id":464,"data":1032,"type":226,"tunes":1034},{"text":1033},"Gli strumenti funzione rimangono un confine applicativo importante. Definisci la funzione e il suo schema JSON nella configurazione dell'agente. Quando l'harness necessita della funzione, la sessione può entrare in uno stato di azione richiesta. La tua applicazione recupera l'azione richiesta, esegue la logica di business e restituisce il risultato.",{},{"id":469,"data":1036,"type":226,"tunes":1038},{"text":1037},"Ciò significa che l'implementazione della funzione dovrebbe essere sicura da riprendere. Un webhook può essere consegnato mentre un altro worker sta elaborando. Un errore di rete può verificarsi dopo l'effetto collaterale esterno ma prima che il risultato venga restituito. La migrazione è quindi un buon momento per aggiungere call ID, chiavi di idempotenza, autorizzazione esplicita, policy di timeout e record di audit agli strumenti consequenziali.",{},{"id":474,"data":1040,"type":234,"tunes":1041},{"body":476,"title":477,"variant":241},{},{"id":480,"data":1043,"type":42,"tunes":1044},{"text":482,"level":219},{},{"id":485,"data":1046,"type":226,"tunes":1048},{"text":1047},"L'Agents API separa l'harness gestito dall'ambiente di esecuzione. Un agente può operare senza un ambiente dedicato, in una sandbox ospitata da OpenAI o tramite un ambiente self-hosted connesso alla sessione.",{},{"id":490,"data":1050,"type":226,"tunes":1052},{"text":1051},"Questo crea una decisione di migrazione che le applicazioni SDK potrebbero non aver mai preso esplicitamente: quale codice dovrebbe essere eseguito come funzione applicativa, quale codice appartiene a una sandbox e quali carichi di lavoro richiedono un'infrastruttura che controlli tu?",{},{"id":495,"data":1054,"type":327,"tunes":1063},{"content":1055,"stretched":43,"withHeadings":14},[1056,1057,1058,1059,1060,1062],[499,500],[502,503],[505,506],[508,509],[511,1061],"Archiviazione di proprietà dell'applicazione, non solo filesystem sandbox",[514,515],{},{"id":518,"data":1065,"type":42,"tunes":1066},{"text":520,"level":219},{},{"id":523,"data":1068,"type":226,"tunes":1070},{"text":1069},"Il harness gestito fornisce il recupero a livello di sessione, ma la tua applicazione possiede ancora ogni dipendenza esterna attorno ad esso. Gli ambienti self-hosted necessitano di provisioning, riconnessione e spegnimento. I gestori di funzioni possono fallire. I webhook possono essere ritentati. Lo stato lato prodotto può cambiare mentre un agente è inattivo.",{},{"id":528,"data":1072,"type":226,"tunes":1074},{"text":1073},"La migrazione necessita quindi di due modelli di recupero: recupero del runtime dell'agente e recupero delle operazioni di business. Il primo è sempre più gestito dalle API Agents. Il secondo rimane una tua responsabilità.",{},{"id":533,"data":1076,"type":42,"tunes":1078},{"text":1077,"level":219},"Passo 6 — Ricostruire l'osservabilità attorno al nuovo confine di tracciamento",{},{"id":538,"data":1080,"type":226,"tunes":1082},{"text":1081},"Le sessioni delle API Agents espongono eventi, cronologia salvata, turni, chiamate agli strumenti, subagenti e utilizzo dei token. OpenAI fornisce anche log di sessione nella piattaforma ed esportazione delle tracce.",{},{"id":543,"data":1084,"type":226,"tunes":1086},{"text":1085},"Non scartare l'osservabilità della tua applicazione solo perché le tracce della piattaforma sono migliorate. I log di prodotto devono ancora collegare la sessione dell'agente all'identità dell'utente, alla decisione di autorizzazione, all'oggetto di dominio, all'effetto collaterale dello strumento, al record di approvazione e al risultato finale accettato. La traccia di produzione utile è l'unione tra le prove del runtime dell'agente e le prove del runtime di business.",{},{"id":548,"data":1088,"type":554,"tunes":1090},{"url":550,"title":551,"excerpt":1089,"ctaLabel":553},"L'affidabilità dell'agente dipende dal percorso di esecuzione, dagli strumenti e dalle decisioni intermedie — non solo dall'output finale.",{},{"id":557,"data":1092,"type":42,"tunes":1094},{"text":1093,"level":219},"Passo 7 — Preservare le valutazioni prima di cambiare il runtime",{},{"id":562,"data":1096,"type":226,"tunes":1097},{"text":564},{},{"id":567,"data":1099,"type":226,"tunes":1101},{"text":1100},"La baseline dovrebbe includere attività rappresentative, chiamate agli strumenti attese, azioni vietate, punti di approvazione, continuità dello stato, scenari di recupero e criteri di accettazione dell'output finale. Esegui la vecchia e la nuova architettura sugli stessi casi ove possibile.",{},{"id":572,"data":1103,"type":42,"tunes":1104},{"text":574,"level":219},{},{"id":577,"data":1106,"type":606,"tunes":1122},{"steps":1107,"title":604,"orientation":605},[1108,1109,1110,1112,1115,1116,1118,1120],{"label":581,"description":582},{"label":584,"description":585},{"label":1111,"description":588},"3. Riusa implementazioni stabili degli strumenti",{"label":1113,"description":1114},"4. Costruisci una fetta verticale delle API Agents","Migra un flusso di lavoro di forma produttiva includendo creazione della sessione, strumenti, eventi, ambiente e persistenza.",{"label":593,"description":594},{"label":596,"description":1117},"Verifica scelta degli strumenti, autorizzazione, percorso delle prove, transizioni di stato ed effetti collaterali rispetto alla baseline.",{"label":599,"description":1119},"Ove fattibile, riproduci o rispecchia attività rappresentative prima di rendere autorevole il nuovo runtime.",{"label":602,"description":1121},"Mantieni adattatori di integrazione e capacità di rollback fino a quando il comportamento in produzione è stabile.",{},{"id":609,"data":1124,"type":42,"tunes":1125},{"text":611,"level":219},{},{"id":614,"data":1127,"type":327,"tunes":1142},{"content":1128,"stretched":43,"withHeadings":14},[1129,1130,1132,1133,1135,1136,1137,1138,1139,1141],[618,619],[1131,622],"Successo del compito",[624,625],[627,1134],"Il lavoro può riprendere attraverso turni, riavvii e attese asincrone?",[630,631],[633,634],[636,637],[639,640],[642,1140],"Cosa cambia nell'uso del modello, nell'uso del sandbox, nel contesto ripetuto e nelle operazioni infrastrutturali?",[645,646],{},{"id":649,"data":1144,"type":42,"tunes":1145},{"text":651,"level":219},{},{"id":654,"data":1147,"type":226,"tunes":1148},{"text":656},{},{"id":659,"data":1150,"type":670,"tunes":1157},{"meta":1151,"items":1152,"style":669},{},[1153,664,1154,1155,667,1156],"Una capacità SDK richiesta non è ancora disponibile nelle API Agents.","L'applicazione dipende da semantiche di orchestrazione personalizzate che non sono state validate sul harness gestito.","La portabilità del provider è un requisito rigido e l'attuale astrazione SDK è materialmente preziosa.","Il comportamento delle nuove API Agents non è stato testato su carichi di lavoro di produzione rappresentativi.",{},{"id":673,"data":1159,"type":42,"tunes":1160},{"text":675,"level":219},{},{"id":678,"data":1162,"type":226,"tunes":1164},{"text":1163},"La migrazione diventa più convincente quando i requisiti di prodotto si allineano con l'harness gestito: lavoro durevole a lunga esecuzione, compattazione e ripristino del contesto gestiti dalla piattaforma, capacità più recenti dell'agent-runtime, esecuzione in sandbox, gestione del ciclo di vita ospitata più ricca, o il desiderio di ridurre la quantità di codice di orchestrazione che la tua applicazione gestisce.",{},{"id":683,"data":1166,"type":226,"tunes":1168},{"text":1167},"Il segnale più forte non è \"il vecchio SDK è completo di funzionalità\". È \"la nostra roadmap ora dipende da capacità la cui sede naturale è il runtime gestito dell'Agents API\".",{},{"id":688,"data":1170,"type":42,"tunes":1171},{"text":690,"level":219},{},{"id":693,"data":1173,"type":226,"tunes":1175},{"text":1174},"La strategia di migrazione cambierebbe se OpenAI pubblicasse strumenti di migrazione automatizzati, introducesse livelli di compatibilità espliciti, modificasse la semantica delle sessioni dell'Agents API, ampliasse o riducesse il supporto agli ambienti self-hosted, o modificasse la politica di supporto per l'Agents SDK.",{},{"id":698,"data":1177,"type":226,"tunes":1179},{"text":1178},"Cambierebbe anche se i requisiti del tuo prodotto cambiassero. Un semplice assistente richiesta-risposta potrebbe non aver bisogno affatto di un harness gestito durevole. Un agente di coding, ricerca o operations a lunga esecuzione può trarre molto più vantaggio dal modello di ownership dell'Agents API.",{},{"id":703,"data":1181,"type":42,"tunes":1182},{"text":705,"level":219},{},{"id":708,"data":1184,"type":226,"tunes":1186},{"text":1185},"Non esiste una mappa di migrazione universale uno-a-uno da SDK ad API perché le applicazioni usano l'Agents SDK in modi diversi. Alcune si affidano pesantemente a sessioni e handoff; altre lo usano come un sottile runner attorno a function tool. La migrazione corretta dipende da quali responsabilità la tua applicazione possiede effettivamente oggi.",{},{"id":713,"data":1188,"type":226,"tunes":1190},{"text":1189},"L'Agents API è anche in beta pubblica, quindi i dettagli di implementazione possono evolvere. Considera i principi di ownership in questo articolo come più durevoli di qualsiasi forma di endpoint individuale.",{},{"id":718,"data":1192,"type":42,"tunes":1193},{"text":720,"level":219},{},{"id":723,"data":1195,"type":226,"tunes":1197},{"text":1196},"Migrare dall'Agents SDK all'Agents API è meglio inteso come spostare il confine dell'agent-runtime. L'harness gestito assume il controllo di una parte maggiore del loop, della continuità della sessione, della compattazione e del ripristino. La tua applicazione dovrebbe diventare più esplicita riguardo alle responsabilità che rimangono tue: verità di dominio, autorizzazione, effetti collaterali delle funzioni, artefatti, auditabilità e ciclo di vita del prodotto.",{},{"id":728,"data":1199,"type":226,"tunes":1201},{"text":1200},"Se una migrazione lascia in piedi tutta la vecchia macchina di orchestrazione e si limita a sostituire le chiamate SDK con chiamate Agents API, probabilmente ha perso l'opportunità architetturale. L'obiettivo non è riprodurre il vecchio runtime sopra quello nuovo. L'obiettivo è decidere quali responsabilità del runtime non appartengono più alla tua applicazione.",{},{"id":733,"data":1203,"type":42,"tunes":1204},{"text":735,"level":219},{},{"id":738,"data":1206,"type":738,"tunes":1221},{"items":1207,"title":1220},[1208,1211,1213,1216,1218],{"id":742,"answer":1209,"question":1210},"No. Il cambiamento principale è l'ownership del runtime: l'Agents SDK esegue il loop dell'agente nella tua applicazione, mentre l'Agents API esegue un harness Codex gestito e una sessione durevole. Stato, ciclo di vita, gestione degli eventi e ripristino dovrebbero essere rivisti come questioni architetturali.","Migrare dall'Agents SDK all'Agents API è solo una riscrittura di API?",{"id":746,"answer":1212,"question":748},"L'implementazione di business spesso può essere riutilizzata se è già dietro un'interfaccia applicativa stabile. L'integrazione rivolta all'agente cambia perché le chiamate di funzione dell'Agents API sono gestite tramite azioni richieste e risultati della sessione.",{"id":750,"answer":1214,"question":1215},"In genere no. Mantieni lo stato autorevole di business e prodotto nei tuoi database o servizi. Usa la sessione dell'agente per la continuità dell'agente e il contesto di lavoro, non come unica fonte di verità per il tuo prodotto.","Dovrei spostare lo stato di business nella sessione dell'Agents API?",{"id":754,"answer":755,"question":1217},"Ho bisogno di webhook per l'Agents API?",{"id":758,"answer":759,"question":1219},"Ogni applicazione esistente basata su Agents SDK dovrebbe migrare ora?","Migrare da Agents SDK ad Agents API",{},{"id":764,"data":1223,"type":42,"tunes":1224},{"text":766,"level":219},{},{"id":769,"data":1226,"type":769,"tunes":1238},{"title":771,"entries":1227},[1228,1229,1230,1232,1234,1236],{"term":774,"anchor":775,"definition":776},{"term":778,"anchor":779,"definition":780},{"term":782,"anchor":783,"definition":1231},"Un'istanza durevole dell'Agents API che conserva la configurazione di un agente, la conversazione e il lavoro salvato tra i turni.",{"term":786,"anchor":787,"definition":1233},"Uno stato della sessione in cui l'Agents API necessita di input esterno, come il risultato di una funzione o una connessione ambientale, prima che il lavoro possa continuare.",{"term":509,"anchor":790,"definition":1235},"Un ambiente di esecuzione gestito dalla tua infrastruttura e connesso all'harness gestito dell'Agents API.",{"term":793,"anchor":794,"definition":1237},"Un metodo di validazione a fasi che confronta il nuovo runtime con baseline comportamentali, iniezioni di guasto, tracce e criteri di cutover reversibile.",{},{"id":798,"data":1240,"type":42,"tunes":1242},{"text":1241,"level":219},"Fonti primarie e ulteriori letture",{},{"id":803,"data":1244,"type":810,"tunes":1248},{"link":805,"meta":1245},{"image":1246,"title":808,"description":1247},{"url":417},"Politica di supporto attuale: l'Agents SDK è completo di funzionalità, rimane mantenuto e le nuove applicazioni dovrebbero iniziare con l'Agents API.",{},{"id":813,"data":1250,"type":810,"tunes":1255},{"link":815,"meta":1251},{"image":1252,"title":1253,"description":1254},{"url":417},"OpenAI — Esecuzione di agenti con l'Agents SDK","Documentazione del ciclo dell'agente di proprietà dell'applicazione dell'SDK e del modello di continuazione.",{},{"id":822,"data":1257,"type":810,"tunes":1262},{"link":824,"meta":1258},{"image":1259,"title":1260,"description":1261},{"url":417},"OpenAI — Panoramica dell'Agents API","Definisce i concetti fondamentali dell'Agents API: agente, ambiente, sessione, eventi ed elementi.",{},{"id":831,"data":1264,"type":810,"tunes":1269},{"link":833,"meta":1265},{"image":1266,"title":1267,"description":1268},{"url":417},"OpenAI — Architettura dell'Agents API","Spiega i confini dell'harness ospitato, del server applicativo, dell'ambiente di esecuzione ospitato da OpenAI e self-hosted.",{},{"id":840,"data":1271,"type":810,"tunes":1275},{"link":842,"meta":1272},{"image":1273,"title":1274,"description":846},{"url":417},"OpenAI — Configurazione degli agenti",{},{"id":849,"data":1277,"type":810,"tunes":1281},{"link":851,"meta":1278},{"image":1279,"title":854,"description":1280},{"url":417},"Documenta le sessioni durevoli, i turni asincroni, lo streaming e lo steering.",{},{"id":858,"data":1283,"type":810,"tunes":1288},{"link":860,"meta":1284},{"image":1285,"title":1286,"description":1287},{"url":417},"OpenAI — Funzioni dell'Agents API","Definizione dello strumento funzione e confine del gestore dell'applicazione per i risultati delle funzioni richiesti.",{},{"id":867,"data":1290,"type":810,"tunes":1294},{"link":869,"meta":1291},{"image":1292,"title":872,"description":1293},{"url":417},"Eventi del ciclo di vita per sessioni asincrone, azioni richieste e connessioni all'ambiente self-hosted.",{},{"id":876,"data":1296,"type":810,"tunes":1301},{"link":878,"meta":1297},{"image":1298,"title":1299,"description":1300},{"url":417},"OpenAI — Osservabilità e utilizzo dell'Agents API","Log di sessione, eventi, turni, chiamate agli strumenti, subagenti, tracce e ispezione dell'utilizzo dei token.",{},"2.31","La migrazione dall'SDK OpenAI Agents alla nuova Agents API non è una semplice rinomina degli import. Il confine di runtime cambia: il ciclo dell'agente, la sessione durevole, l'orchestrazione, la compattazione del contesto e il ripristino si spostano verso un harness gestito. Questa guida mostra cosa dovrebbe essere spostato, cosa dovrebbe rimanere nella tua applicazione e come dimostrare la migrazione prima del passaggio.","\u002Fuploads\u002F2026\u002F09\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally-1790352171968-ienxr9.webp","migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally-1790352171968-ienxr9","PUBLISHED","2026-09-25T12:01:00.000Z","2026-09-25T16:01:18.925Z","2026-09-25T16:11:21.632Z",{"en":1311,"de":1312,"sr":1313,"es":1314,"fr":1315,"it":1316,"ru":1317,"zh":1318},"\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fde\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fsr\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fes\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Ffr\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fit\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fru\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fzh\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally",[1320,1324,1328],{"id":1321,"name":1322,"slug":1323},70,"Fasi (Pianifica → Esegui → Verifica)","phases",{"id":1325,"name":1326,"slug":1327},73,"Verifica e diff","verification-and-diffing",{"id":1329,"name":1330,"slug":1331},71,"Registro dei rischi","risk-register",{"id":1333,"login":1334,"email":1335,"displayName":1336},"20","rooth8233","aleksandar@stajic.de","Aleksandar Stajić",[1338,2212],{"lang":1339,"title":1340,"content":1341,"contentJson":1342,"excerpt":2211},"en","Migrating from OpenAI Agents SDK to the Agents API: What Actually Changes Architecturally?","{\"time\":1790352173087,\"blocks\":[{\"id\":\"24Foq4L2Wb\",\"type\":\"tableOfContents\",\"data\":{\"title\":\"Contents\",\"minLevel\":2,\"maxLevel\":3},\"tunes\":{}},{\"id\":\"intro\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migrating from the OpenAI Agents SDK to the Agents API is not an import rename. The core architectural boundary changes: the SDK runs the agent loop inside your application, while the Agents API runs a managed Codex harness and durable session on OpenAI's side. The migration question is therefore not “Which classes map to which endpoints?” but “Which runtime responsibilities move across the boundary, which stay in our application, and which need to be redesigned?”\"},\"tunes\":{}},{\"id\":\"direct\",\"type\":\"callout\",\"data\":{\"variant\":\"info\",\"title\":\"Direct answer\",\"body\":\"\u003Cstrong>A real Agents SDK → Agents API migration changes runtime ownership.\u003C\u002Fstrong> Your reusable agent configuration can still contain model, instructions and tools, but the loop, durable session, orchestration, context compaction and recovery move toward the managed Agents API runtime. Your application should keep domain state, authorization, business rules, function implementations and audit logic outside the agent session. Treat the migration as a boundary redesign, not a mechanical code conversion.\"},\"tunes\":{}},{\"id\":\"current\",\"type\":\"callout\",\"data\":{\"variant\":\"warning\",\"title\":\"Current as of 25 September 2026\",\"body\":\"OpenAI currently marks the Agents SDK as \u003Cstrong>feature complete\u003C\u002Fstrong> and recommends the Agents API for new agent applications. The Agents API is in public beta. Existing SDK applications remain supported, and immediate migration is not automatically required.\"},\"tunes\":{}},{\"id\":\"model-note\",\"type\":\"callout\",\"data\":{\"variant\":\"note\",\"title\":\"About the migration model\",\"body\":\"The Runtime Boundary Migration Map and Migration Proof Test in this article are practical architecture tools, not official OpenAI migration frameworks. They are derived from the current runtime differences documented by OpenAI.\"},\"tunes\":{}},{\"id\":\"h-boundary\",\"type\":\"header\",\"data\":{\"text\":\"The migration is from an application-owned loop to a managed harness\",\"level\":2},\"tunes\":{}},{\"id\":\"p-boundary-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"In the Agents SDK, one run is an application-level turn. The SDK runner calls the model, inspects the output, executes tools, follows handoffs and continues until it reaches a stopping point. Your process hosts that loop and therefore owns its lifecycle.\"},\"tunes\":{}},{\"id\":\"p-boundary-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"In the Agents API, OpenAI runs the harness. A session is a durable instance of an agent configuration that accepts tasks, produces events, can pause for required actions, and can continue over time. OpenAI manages sessions, orchestration, context compaction and recovery; your application sends work, handles function tools, receives events and optionally manages a self-hosted execution environment.\"},\"tunes\":{}},{\"id\":\"p-boundary-3\",\"type\":\"paragraph\",\"data\":{\"text\":\"That ownership shift is the migration. Everything else — API syntax, tool schemas, event handling, session IDs — follows from it.\"},\"tunes\":{}},{\"id\":\"h-map\",\"type\":\"header\",\"data\":{\"text\":\"The Runtime Boundary Migration Map\",\"level\":2},\"tunes\":{}},{\"id\":\"migration-map\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Concern\",\"Agents SDK\",\"Agents API migration target\"],[\"Agent loop\",\"Runs in your application through the SDK runner\",\"Runs in the managed Codex harness\"],[\"Reusable agent definition\",\"Agent object in application code\",\"Saved or inline agent configuration with model, instructions and tools\"],[\"Conversation \u002F work continuity\",\"SDK session strategy, history, result continuation or application storage\",\"Durable Agents API session\"],[\"Tool execution\",\"SDK coordinates tool calls in your runtime\",\"Harness requests function calls; your application returns results\"],[\"Context management\",\"Your runtime \u002F SDK session strategy\",\"Managed session context, compaction and recovery, plus your own application data boundaries\"],[\"Handoffs \u002F specialists\",\"SDK orchestration primitives\",\"Harness \u002F subagent behaviour in Agents API; do not assume one-to-one semantics\"],[\"Execution environment\",\"Your application runtime or tool-specific environment\",\"Optional OpenAI-hosted or self-hosted environment attached to the session\"],[\"Streaming\",\"SDK streaming from the run\",\"Agents API session event stream\"],[\"Async lifecycle\",\"Usually application-managed around the SDK run\",\"Native session states, asynchronous turns and webhooks\"],[\"Tracing \u002F observability\",\"Agents SDK tracing and application logs\",\"Agents session logs, events, turns, tool calls, subagents and exportable traces\"],[\"Recovery\",\"Application responsibility\",\"Managed harness\u002Fsession recovery plus application-owned recovery for external systems and self-hosted environments\"]]},\"tunes\":{}},{\"id\":\"h-conceptual\",\"type\":\"header\",\"data\":{\"text\":\"What can migrate conceptually without changing ownership\",\"level\":2},\"tunes\":{}},{\"id\":\"p-conceptual-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Several application concepts survive the migration cleanly even though their representation changes. Models, instructions, JSON-schema function definitions, MCP access, tool descriptions and structured output requirements are still agent configuration concerns.\"},\"tunes\":{}},{\"id\":\"p-conceptual-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"OpenAI's Agents API configuration model explicitly defines an agent through model, instructions, tools, reasoning and output behaviour. Function tools remain application code: the harness requests a function call, and your handler returns the result. OpenAI also notes that function implementations used with the Responses API can be reused with the Agents API session flow.\"},\"tunes\":{}},{\"id\":\"good-candidate\",\"type\":\"callout\",\"data\":{\"variant\":\"success\",\"title\":\"Good migration candidate\",\"body\":\"A pure business function such as \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> should not need to know whether the caller is the Agents SDK or the Agents API. Keep its domain logic behind a stable application interface and migrate only the agent-facing adapter.\"},\"tunes\":{}},{\"id\":\"h-no-one\",\"type\":\"header\",\"data\":{\"text\":\"What should not be migrated one-to-one\",\"level\":2},\"tunes\":{}},{\"id\":\"p-no-one-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The dangerous migration pattern is to recreate every SDK runtime abstraction inside the Agents API. That can leave you paying for a managed harness while still operating a shadow harness in your application.\"},\"tunes\":{}},{\"id\":\"no-one-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"SDK-era assumption\",\"Why a direct copy is risky\",\"Migration question\"],[\"Application loop owns every continuation\",\"The Agents API already owns the harness loop\",\"Which continuation logic is product logic, and which should move to the managed session?\"],[\"Local session object is the primary continuity mechanism\",\"Agents API sessions are durable resources with their own lifecycle\",\"Which state belongs in the session versus the product database?\"],[\"Every interruption is handled synchronously\",\"Agents API turns are asynchronous and can surface action_required states\",\"Which actions need webhooks, workers, idempotency and resumable handlers?\"],[\"All tool execution happens where the SDK process runs\",\"Function handlers and execution environments can be separate\",\"Where should each tool actually execute?\"],[\"SDK trace is the operational timeline\",\"Agents API exposes session events, turns and managed traces\",\"What application-level audit data still needs its own record?\"],[\"Handoff object maps directly to a hosted subagent model\",\"Runtime semantics can differ\",\"What user-visible ownership and specialist behaviour must be preserved, not merely the old class structure?\"]]},\"tunes\":{}},{\"id\":\"h-domain\",\"type\":\"header\",\"data\":{\"text\":\"Step 1 — Separate domain state from agent session state\",\"level\":2},\"tunes\":{}},{\"id\":\"p-domain-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Before touching API calls, classify the state your SDK application currently carries. Some state exists only to keep the agent conversation moving. Other state is business truth: user permissions, project status, order data, workflow approval, customer records, document versions, policy state or application configuration.\"},\"tunes\":{}},{\"id\":\"p-domain-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The second category should not become dependent on an Agents API session. A durable session is useful continuity for the agent; it is not a replacement for your product's source of truth. If the session disappears, expires, is rebuilt, or changes implementation, your application must still know what is true.\"},\"tunes\":{}},{\"id\":\"state-test\",\"type\":\"comparison\",\"data\":{\"title\":\"State placement test\",\"layout\":\"table\",\"columns\":[{\"id\":\"type\",\"label\":\"State type\"},{\"id\":\"place\",\"label\":\"Preferred owner\"},{\"id\":\"reason\",\"label\":\"Reason\"}],\"rows\":[{\"id\":\"conversation\",\"label\":\"Conversation continuity\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"domain\",\"label\":\"Business truth\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"artifact\",\"label\":\"Durable artifact\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"ephemeral\",\"label\":\"Working scratch state\",\"values\":[\"\",\"\",\"\"]}]},\"tunes\":{}},{\"id\":\"h-events\",\"type\":\"header\",\"data\":{\"text\":\"Step 2 — Convert the runner mindset into a session-and-events mindset\",\"level\":2},\"tunes\":{}},{\"id\":\"p-events-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"SDK applications often think in terms of calling run and receiving a result. The Agents API thinks in terms of a durable session whose turns can run asynchronously. A message to an idle session starts work; a message during an active turn can steer it. Progress arrives through streaming or webhooks.\"},\"tunes\":{}},{\"id\":\"p-events-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"This affects application architecture. Long-running production work should not depend on one HTTP request remaining alive. Your product needs stable session identifiers, lifecycle persistence, webhook verification, idempotent handlers and a way to reconcile current session state after process restarts.\"},\"tunes\":{}},{\"id\":\"h-functions\",\"type\":\"header\",\"data\":{\"text\":\"Step 3 — Redesign function tools around required actions\",\"level\":2},\"tunes\":{}},{\"id\":\"p-functions-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Function tools remain an important application boundary. You define the function and its JSON schema in the agent configuration. When the harness needs the function, the session can enter an action-required state. Your application retrieves the required action, executes the business logic and returns the result.\"},\"tunes\":{}},{\"id\":\"p-functions-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"That means the function implementation should be safe to resume. A webhook may be delivered while another worker is processing. A network failure can occur after the external side effect but before the result is returned. Migration is therefore a good moment to add call IDs, idempotency keys, explicit authorization, timeout policies and audit records to consequential tools.\"},\"tunes\":{}},{\"id\":\"tool-trap\",\"type\":\"callout\",\"data\":{\"variant\":\"warning\",\"title\":\"Tool migration trap\",\"body\":\"Do not treat a function call from the managed harness as authorization to perform the action. The harness decides \u003Cem>what it wants to call\u003C\u002Fem>; your application still decides whether the current user, session and business state allow that action.\"},\"tunes\":{}},{\"id\":\"h-environment\",\"type\":\"header\",\"data\":{\"text\":\"Step 4 — Decide where execution should happen\",\"level\":2},\"tunes\":{}},{\"id\":\"p-env-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The Agents API separates the managed harness from the execution environment. An agent can operate without a dedicated environment, in an OpenAI-hosted sandbox, or through a self-hosted environment connected to the session.\"},\"tunes\":{}},{\"id\":\"p-env-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"This creates a migration decision that SDK applications may never have made explicitly: which code should run as an application function, which code belongs in a sandbox, and which workloads require infrastructure you control?\"},\"tunes\":{}},{\"id\":\"environment-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Need\",\"Likely boundary\"],[\"Call an existing internal service through controlled business logic\",\"Function tool handled by your application\"],[\"Run isolated code or work with temporary files without private infrastructure\",\"OpenAI-hosted environment\"],[\"Access private network resources, custom system software or controlled local compute\",\"Self-hosted environment\"],[\"Persist accepted product artifacts\",\"Application-owned storage, not only sandbox filesystem\"],[\"Execute a high-impact business side effect\",\"Application function with authorization and audit controls\"]]},\"tunes\":{}},{\"id\":\"h-recovery\",\"type\":\"header\",\"data\":{\"text\":\"Step 5 — Replace implicit recovery with explicit lifecycle handling\",\"level\":2},\"tunes\":{}},{\"id\":\"p-recovery-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The managed harness provides session-level recovery, but your application still owns every external dependency around it. Self-hosted environments need provisioning, reconnection and shutdown. Function handlers can fail. Webhooks can be retried. Product-side state can change while an agent is idle.\"},\"tunes\":{}},{\"id\":\"p-recovery-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migration therefore needs two recovery models: agent-runtime recovery and business-operation recovery. The first is increasingly managed by the Agents API. The second remains your responsibility.\"},\"tunes\":{}},{\"id\":\"h-observability\",\"type\":\"header\",\"data\":{\"text\":\"Step 6 — Rebuild observability around the new trace boundary\",\"level\":2},\"tunes\":{}},{\"id\":\"p-obs-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Agents API sessions expose events, saved history, turns, tool calls, subagents and token usage. OpenAI also provides session logs in the platform and trace export.\"},\"tunes\":{}},{\"id\":\"p-obs-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"Do not discard your application observability because platform traces improved. Product logs still need to connect the agent session to user identity, authorization decision, domain object, tool side effect, approval record and final accepted result. The useful production trace is the join between agent-runtime evidence and business-runtime evidence.\"},\"tunes\":{}},{\"id\":\"ref-reliability\",\"type\":\"referralArticle\",\"data\":{\"url\":\"https:\u002F\u002Fstajic.de\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough\",\"title\":\"AI Agent Reliability: Why the Final Answer Is Not Enough\",\"excerpt\":\"Agent reliability depends on the execution path, tools and intermediate decisions — not only the final output.\",\"ctaLabel\":\"Read the reliability article\"},\"tunes\":{}},{\"id\":\"h-evals\",\"type\":\"header\",\"data\":{\"text\":\"Step 7 — Preserve evals before changing the runtime\",\"level\":2},\"tunes\":{}},{\"id\":\"p-evals-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"A migration can appear successful because the new system still produces plausible answers while silently changing tool choice, session continuity, handoff behaviour, latency or failure recovery. Build the behavioural baseline before switching runtimes.\"},\"tunes\":{}},{\"id\":\"p-evals-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The baseline should include representative tasks, expected tool calls, forbidden actions, approval points, state continuity, recovery scenarios and final-output acceptance criteria. Run the old and new architectures against the same cases wherever possible.\"},\"tunes\":{}},{\"id\":\"h-proof\",\"type\":\"header\",\"data\":{\"text\":\"The Migration Proof Test\",\"level\":2},\"tunes\":{}},{\"id\":\"proof-flow\",\"type\":\"processFlow\",\"data\":{\"title\":\"Prove the new runtime before cutting over\",\"orientation\":\"auto\",\"steps\":[{\"label\":\"1. Freeze the behavioural baseline\",\"description\":\"Capture representative SDK traces, expected outputs, tool paths, approval points and failure cases.\"},{\"label\":\"2. Inventory state ownership\",\"description\":\"Mark each state field as agent-session state, authoritative domain state, durable artifact or ephemeral working state.\"},{\"label\":\"3. Reuse stable tool implementations\",\"description\":\"Keep business functions behind application interfaces; replace only the agent-facing integration where possible.\"},{\"label\":\"4. Build one Agents API vertical slice\",\"description\":\"Migrate one production-shaped workflow including session creation, tools, events, environment and persistence.\"},{\"label\":\"5. Inject interruptions\",\"description\":\"Test process restart, webhook retry, function timeout, self-hosted environment reconnect and stale domain state.\"},{\"label\":\"6. Compare traces, not only answers\",\"description\":\"Verify tool choice, authorization, evidence path, state transitions and side effects against the baseline.\"},{\"label\":\"7. Run shadow traffic\",\"description\":\"Where feasible, replay or mirror representative tasks before making the new runtime authoritative.\"},{\"label\":\"8. Cut over behind a reversible boundary\",\"description\":\"Keep integration adapters and rollback capability until production behaviour is stable.\"}]},\"tunes\":{}},{\"id\":\"h-metrics\",\"type\":\"header\",\"data\":{\"text\":\"What to measure during migration\",\"level\":2},\"tunes\":{}},{\"id\":\"metrics-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Dimension\",\"Migration check\"],[\"Task success\",\"Does the new runtime meet the same or better acceptance criteria?\"],[\"Tool correctness\",\"Does it call the right tool with valid arguments and authorization?\"],[\"State continuity\",\"Can work resume across turns, restarts and asynchronous waits?\"],[\"Recovery\",\"What happens after webhook loss, handler failure, environment disconnect or timeout?\"],[\"Traceability\",\"Can every consequential action be joined to session, user, tool call and domain object?\"],[\"Context behaviour\",\"Do long-running sessions preserve constraints without carrying stale application truth?\"],[\"Latency\",\"How do session startup, environment provisioning and multi-turn work affect user-visible time?\"],[\"Cost\",\"What changes in model usage, sandbox usage, repeated context and infrastructure operations?\"],[\"Operational load\",\"Which previously application-owned responsibilities actually disappeared, and which merely moved?\"]]},\"tunes\":{}},{\"id\":\"h-not-yet\",\"type\":\"header\",\"data\":{\"text\":\"When not to migrate yet\",\"level\":2},\"tunes\":{}},{\"id\":\"p-not-yet-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"An existing Agents SDK application does not become bad architecture simply because the platform direction changed. OpenAI continues maintenance, security fixes, critical bug fixes and compatibility work. If the application is stable, well evaluated and has no blocked roadmap requirement, an immediate runtime migration may not be justified.\"},\"tunes\":{}},{\"id\":\"not-yet-list\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"A required SDK capability is not yet available in the Agents API.\",\"The migration would disrupt a critical production period without delivering near-term value.\",\"The application depends on custom orchestration semantics that have not been validated on the managed harness.\",\"Provider portability is a hard requirement and the current SDK abstraction is materially valuable.\",\"Your team has not yet separated business state from agent runtime state, making cutover unsafe.\",\"The new Agents API behaviour has not been tested against representative production workloads.\"]},\"tunes\":{}},{\"id\":\"h-when\",\"type\":\"header\",\"data\":{\"text\":\"When the migration becomes strategically important\",\"level\":2},\"tunes\":{}},{\"id\":\"p-when-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migration becomes more compelling when product requirements align with the managed harness: durable long-running work, platform-managed context compaction and recovery, newer agent-runtime capabilities, sandboxed execution, richer hosted lifecycle management, or a desire to reduce the amount of orchestration code your application operates.\"},\"tunes\":{}},{\"id\":\"p-when-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The strongest signal is not “the old SDK is feature complete.” It is “our roadmap now depends on capabilities whose natural home is the managed Agents API runtime.”\"},\"tunes\":{}},{\"id\":\"h-change\",\"type\":\"header\",\"data\":{\"text\":\"What would change this answer?\",\"level\":2},\"tunes\":{}},{\"id\":\"p-change-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The migration strategy would change if OpenAI publishes automated migration tooling, introduces explicit compatibility layers, changes Agents API session semantics, expands or narrows self-hosted environment support, or changes the support policy for the Agents SDK.\"},\"tunes\":{}},{\"id\":\"p-change-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"It would also change if your product requirements change. A simple request-response assistant may not need a durable managed harness at all. A long-running coding, research or operations agent can benefit much more from the Agents API ownership model.\"},\"tunes\":{}},{\"id\":\"h-limitations\",\"type\":\"header\",\"data\":{\"text\":\"Limitations\",\"level\":2},\"tunes\":{}},{\"id\":\"p-limit-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"There is no universal one-to-one SDK-to-API migration map because applications use the Agents SDK differently. Some rely heavily on sessions and handoffs; others use it as a thin runner around function tools. The correct migration depends on which responsibilities your application actually owns today.\"},\"tunes\":{}},{\"id\":\"p-limit-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The Agents API is also in public beta, so implementation details can evolve. Treat the ownership principles in this article as more durable than any individual endpoint shape.\"},\"tunes\":{}},{\"id\":\"h-conclusion\",\"type\":\"header\",\"data\":{\"text\":\"Conclusion\",\"level\":2},\"tunes\":{}},{\"id\":\"p-conclusion-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migrating from the Agents SDK to the Agents API is best understood as moving the agent-runtime boundary. The managed harness takes over more of the loop, session continuity, compaction and recovery. Your application should become more explicit about the responsibilities that remain yours: domain truth, authorization, function side effects, artifacts, auditability and product lifecycle.\"},\"tunes\":{}},{\"id\":\"p-conclusion-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"If a migration leaves all of the old orchestration machinery in place and merely replaces SDK calls with Agents API calls, it has probably missed the architectural opportunity. The goal is not to reproduce the old runtime on top of the new one. The goal is to decide which runtime responsibilities no longer belong in your application.\"},\"tunes\":{}},{\"id\":\"h-faq\",\"type\":\"header\",\"data\":{\"text\":\"FAQ\",\"level\":2},\"tunes\":{}},{\"id\":\"faq\",\"type\":\"faq\",\"data\":{\"title\":\"Migrating from Agents SDK to Agents API\",\"items\":[{\"id\":\"faq1\",\"question\":\"Is migrating from the Agents SDK to the Agents API just an API rewrite?\",\"answer\":\"No. The main change is runtime ownership: the Agents SDK runs the agent loop in your application, while the Agents API runs a managed Codex harness and durable session. State, lifecycle, event handling and recovery should be reviewed as architecture concerns.\"},{\"id\":\"faq2\",\"question\":\"Do my function tools need to be rewritten?\",\"answer\":\"The business implementation often can be reused if it is already behind a stable application interface. The agent-facing integration changes because Agents API function calls are handled through session required actions and results.\"},{\"id\":\"faq3\",\"question\":\"Should I move business state into the Agents API session?\",\"answer\":\"Generally no. Keep authoritative business and product state in your own databases or services. Use the agent session for agent continuity and working context, not as the sole source of truth for your product.\"},{\"id\":\"faq4\",\"question\":\"Do I need webhooks for the Agents API?\",\"answer\":\"Not always, because streaming is also available. Webhooks are especially useful for long-running or asynchronous sessions where your application should react to lifecycle changes without holding an open stream.\"},{\"id\":\"faq5\",\"question\":\"Should every existing Agents SDK application migrate now?\",\"answer\":\"No. The SDK remains supported in maintenance mode. Migrate when the new runtime provides meaningful roadmap value and after required behaviour has been validated against production-shaped evals.\"}]},\"tunes\":{}},{\"id\":\"h-glossary\",\"type\":\"header\",\"data\":{\"text\":\"Glossary\",\"level\":2},\"tunes\":{}},{\"id\":\"glossary\",\"type\":\"glossary\",\"data\":{\"title\":\"Key migration terms\",\"entries\":[{\"term\":\"Runtime boundary\",\"definition\":\"The division of responsibility between the platform-managed agent runtime and the application-owned runtime.\",\"anchor\":\"runtime-boundary\"},{\"term\":\"Harness\",\"definition\":\"The agent runtime that coordinates model calls, tools, context, orchestration and continued execution.\",\"anchor\":\"harness\"},{\"term\":\"Session\",\"definition\":\"A durable Agents API instance that holds an agent's configuration, conversation and saved work across turns.\",\"anchor\":\"session\"},{\"term\":\"Required action\",\"definition\":\"A session state in which the Agents API needs external input such as a function result or environment connection before work can continue.\",\"anchor\":\"required-action\"},{\"term\":\"Self-hosted environment\",\"definition\":\"An execution environment operated by your infrastructure and connected to the managed Agents API harness.\",\"anchor\":\"self-hosted-environment\"},{\"term\":\"Migration proof test\",\"definition\":\"A staged validation method that compares the new runtime against behavioural baselines, failure injections, traces and reversible cutover criteria.\",\"anchor\":\"migration-proof-test\"}]},\"tunes\":{}},{\"id\":\"h-sources\",\"type\":\"header\",\"data\":{\"text\":\"Primary sources and further reading\",\"level\":2},\"tunes\":{}},{\"id\":\"src-sdk\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents SDK\",\"description\":\"Current support policy: the Agents SDK is feature complete, remains maintained, and new applications should start with the Agents API.\"}},\"tunes\":{}},{\"id\":\"src-running-sdk\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Running agents with the Agents SDK\",\"description\":\"Documentation of the SDK application-owned agent loop and continuation model.\"}},\"tunes\":{}},{\"id\":\"src-api-overview\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API overview\",\"description\":\"Defines the Agents API core concepts: agent, environment, session, events and items.\"}},\"tunes\":{}},{\"id\":\"src-api-architecture\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API architecture\",\"description\":\"Explains the hosted harness, application server, OpenAI-hosted and self-hosted execution environment boundaries.\"}},\"tunes\":{}},{\"id\":\"src-api-config\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Configuring Agents\",\"description\":\"Defines reusable agent configuration and session-level customization.\"}},\"tunes\":{}},{\"id\":\"src-api-sessions\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Run and continue sessions\",\"description\":\"Documents durable sessions, asynchronous turns, streaming and steering.\"}},\"tunes\":{}},{\"id\":\"src-api-functions\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API Functions\",\"description\":\"Function-tool definition and the application handler boundary for required function results.\"}},\"tunes\":{}},{\"id\":\"src-api-webhooks\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Session webhooks\",\"description\":\"Lifecycle events for asynchronous sessions, required actions and self-hosted environment connections.\"}},\"tunes\":{}},{\"id\":\"src-api-observability\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API observability and usage\",\"description\":\"Session logs, events, turns, tool calls, subagents, traces and token-usage inspection.\"}},\"tunes\":{}},{\"id\":\"intro\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migrating from the OpenAI Agents SDK to the Agents API is not an import rename. The core architectural boundary changes: the SDK runs the agent loop inside your application, while the Agents API runs a managed Codex harness and durable session on OpenAI's side. The migration question is therefore not “Which classes map to which endpoints?” but “Which runtime responsibilities move across the boundary, which stay in our application, and which need to be redesigned?”\"},\"tunes\":{}},{\"id\":\"direct\",\"type\":\"callout\",\"data\":{\"variant\":\"info\",\"title\":\"Direct answer\",\"body\":\"\u003Cstrong>A real Agents SDK → Agents API migration changes runtime ownership.\u003C\u002Fstrong> Your reusable agent configuration can still contain model, instructions and tools, but the loop, durable session, orchestration, context compaction and recovery move toward the managed Agents API runtime. Your application should keep domain state, authorization, business rules, function implementations and audit logic outside the agent session. Treat the migration as a boundary redesign, not a mechanical code conversion.\"},\"tunes\":{}},{\"id\":\"current\",\"type\":\"callout\",\"data\":{\"variant\":\"warning\",\"title\":\"Current as of 25 September 2026\",\"body\":\"OpenAI currently marks the Agents SDK as \u003Cstrong>feature complete\u003C\u002Fstrong> and recommends the Agents API for new agent applications. The Agents API is in public beta. Existing SDK applications remain supported, and immediate migration is not automatically required.\"},\"tunes\":{}},{\"id\":\"model-note\",\"type\":\"callout\",\"data\":{\"variant\":\"note\",\"title\":\"About the migration model\",\"body\":\"The Runtime Boundary Migration Map and Migration Proof Test in this article are practical architecture tools, not official OpenAI migration frameworks. They are derived from the current runtime differences documented by OpenAI.\"},\"tunes\":{}},{\"id\":\"toc\",\"type\":\"tableOfContents\",\"data\":{\"title\":\"Contents\",\"minLevel\":2,\"maxLevel\":3},\"tunes\":{}},{\"id\":\"h-boundary\",\"type\":\"header\",\"data\":{\"text\":\"The migration is from an application-owned loop to a managed harness\",\"level\":2},\"tunes\":{}},{\"id\":\"p-boundary-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"In the Agents SDK, one run is an application-level turn. The SDK runner calls the model, inspects the output, executes tools, follows handoffs and continues until it reaches a stopping point. Your process hosts that loop and therefore owns its lifecycle.\"},\"tunes\":{}},{\"id\":\"p-boundary-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"In the Agents API, OpenAI runs the harness. A session is a durable instance of an agent configuration that accepts tasks, produces events, can pause for required actions, and can continue over time. OpenAI manages sessions, orchestration, context compaction and recovery; your application sends work, handles function tools, receives events and optionally manages a self-hosted execution environment.\"},\"tunes\":{}},{\"id\":\"p-boundary-3\",\"type\":\"paragraph\",\"data\":{\"text\":\"That ownership shift is the migration. Everything else — API syntax, tool schemas, event handling, session IDs — follows from it.\"},\"tunes\":{}},{\"id\":\"h-map\",\"type\":\"header\",\"data\":{\"text\":\"The Runtime Boundary Migration Map\",\"level\":2},\"tunes\":{}},{\"id\":\"migration-map\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Concern\",\"Agents SDK\",\"Agents API migration target\"],[\"Agent loop\",\"Runs in your application through the SDK runner\",\"Runs in the managed Codex harness\"],[\"Reusable agent definition\",\"Agent object in application code\",\"Saved or inline agent configuration with model, instructions and tools\"],[\"Conversation \u002F work continuity\",\"SDK session strategy, history, result continuation or application storage\",\"Durable Agents API session\"],[\"Tool execution\",\"SDK coordinates tool calls in your runtime\",\"Harness requests function calls; your application returns results\"],[\"Context management\",\"Your runtime \u002F SDK session strategy\",\"Managed session context, compaction and recovery, plus your own application data boundaries\"],[\"Handoffs \u002F specialists\",\"SDK orchestration primitives\",\"Harness \u002F subagent behaviour in Agents API; do not assume one-to-one semantics\"],[\"Execution environment\",\"Your application runtime or tool-specific environment\",\"Optional OpenAI-hosted or self-hosted environment attached to the session\"],[\"Streaming\",\"SDK streaming from the run\",\"Agents API session event stream\"],[\"Async lifecycle\",\"Usually application-managed around the SDK run\",\"Native session states, asynchronous turns and webhooks\"],[\"Tracing \u002F observability\",\"Agents SDK tracing and application logs\",\"Agents session logs, events, turns, tool calls, subagents and exportable traces\"],[\"Recovery\",\"Application responsibility\",\"Managed harness\u002Fsession recovery plus application-owned recovery for external systems and self-hosted environments\"]]},\"tunes\":{}},{\"id\":\"h-conceptual\",\"type\":\"header\",\"data\":{\"text\":\"What can migrate conceptually without changing ownership\",\"level\":2},\"tunes\":{}},{\"id\":\"p-conceptual-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Several application concepts survive the migration cleanly even though their representation changes. Models, instructions, JSON-schema function definitions, MCP access, tool descriptions and structured output requirements are still agent configuration concerns.\"},\"tunes\":{}},{\"id\":\"p-conceptual-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"OpenAI's Agents API configuration model explicitly defines an agent through model, instructions, tools, reasoning and output behaviour. Function tools remain application code: the harness requests a function call, and your handler returns the result. OpenAI also notes that function implementations used with the Responses API can be reused with the Agents API session flow.\"},\"tunes\":{}},{\"id\":\"good-candidate\",\"type\":\"callout\",\"data\":{\"variant\":\"success\",\"title\":\"Good migration candidate\",\"body\":\"A pure business function such as \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> should not need to know whether the caller is the Agents SDK or the Agents API. Keep its domain logic behind a stable application interface and migrate only the agent-facing adapter.\"},\"tunes\":{}},{\"id\":\"h-no-one\",\"type\":\"header\",\"data\":{\"text\":\"What should not be migrated one-to-one\",\"level\":2},\"tunes\":{}},{\"id\":\"p-no-one-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The dangerous migration pattern is to recreate every SDK runtime abstraction inside the Agents API. That can leave you paying for a managed harness while still operating a shadow harness in your application.\"},\"tunes\":{}},{\"id\":\"no-one-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"SDK-era assumption\",\"Why a direct copy is risky\",\"Migration question\"],[\"Application loop owns every continuation\",\"The Agents API already owns the harness loop\",\"Which continuation logic is product logic, and which should move to the managed session?\"],[\"Local session object is the primary continuity mechanism\",\"Agents API sessions are durable resources with their own lifecycle\",\"Which state belongs in the session versus the product database?\"],[\"Every interruption is handled synchronously\",\"Agents API turns are asynchronous and can surface action_required states\",\"Which actions need webhooks, workers, idempotency and resumable handlers?\"],[\"All tool execution happens where the SDK process runs\",\"Function handlers and execution environments can be separate\",\"Where should each tool actually execute?\"],[\"SDK trace is the operational timeline\",\"Agents API exposes session events, turns and managed traces\",\"What application-level audit data still needs its own record?\"],[\"Handoff object maps directly to a hosted subagent model\",\"Runtime semantics can differ\",\"What user-visible ownership and specialist behaviour must be preserved, not merely the old class structure?\"]]},\"tunes\":{}},{\"id\":\"h-domain\",\"type\":\"header\",\"data\":{\"text\":\"Step 1 — Separate domain state from agent session state\",\"level\":2},\"tunes\":{}},{\"id\":\"p-domain-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Before touching API calls, classify the state your SDK application currently carries. Some state exists only to keep the agent conversation moving. Other state is business truth: user permissions, project status, order data, workflow approval, customer records, document versions, policy state or application configuration.\"},\"tunes\":{}},{\"id\":\"p-domain-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The second category should not become dependent on an Agents API session. A durable session is useful continuity for the agent; it is not a replacement for your product's source of truth. If the session disappears, expires, is rebuilt, or changes implementation, your application must still know what is true.\"},\"tunes\":{}},{\"id\":\"state-test\",\"type\":\"comparison\",\"data\":{\"title\":\"State placement test\",\"layout\":\"table\",\"columns\":[{\"id\":\"type\",\"label\":\"State type\"},{\"id\":\"place\",\"label\":\"Preferred owner\"},{\"id\":\"reason\",\"label\":\"Reason\"}],\"rows\":[{\"id\":\"conversation\",\"label\":\"Conversation continuity\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"domain\",\"label\":\"Business truth\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"artifact\",\"label\":\"Durable artifact\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"ephemeral\",\"label\":\"Working scratch state\",\"values\":[\"\",\"\",\"\"]}]},\"tunes\":{}},{\"id\":\"h-events\",\"type\":\"header\",\"data\":{\"text\":\"Step 2 — Convert the runner mindset into a session-and-events mindset\",\"level\":2},\"tunes\":{}},{\"id\":\"p-events-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"SDK applications often think in terms of calling run and receiving a result. The Agents API thinks in terms of a durable session whose turns can run asynchronously. A message to an idle session starts work; a message during an active turn can steer it. Progress arrives through streaming or webhooks.\"},\"tunes\":{}},{\"id\":\"p-events-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"This affects application architecture. Long-running production work should not depend on one HTTP request remaining alive. Your product needs stable session identifiers, lifecycle persistence, webhook verification, idempotent handlers and a way to reconcile current session state after process restarts.\"},\"tunes\":{}},{\"id\":\"h-functions\",\"type\":\"header\",\"data\":{\"text\":\"Step 3 — Redesign function tools around required actions\",\"level\":2},\"tunes\":{}},{\"id\":\"p-functions-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Function tools remain an important application boundary. You define the function and its JSON schema in the agent configuration. When the harness needs the function, the session can enter an action-required state. Your application retrieves the required action, executes the business logic and returns the result.\"},\"tunes\":{}},{\"id\":\"p-functions-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"That means the function implementation should be safe to resume. A webhook may be delivered while another worker is processing. A network failure can occur after the external side effect but before the result is returned. Migration is therefore a good moment to add call IDs, idempotency keys, explicit authorization, timeout policies and audit records to consequential tools.\"},\"tunes\":{}},{\"id\":\"tool-trap\",\"type\":\"callout\",\"data\":{\"variant\":\"warning\",\"title\":\"Tool migration trap\",\"body\":\"Do not treat a function call from the managed harness as authorization to perform the action. The harness decides \u003Cem>what it wants to call\u003C\u002Fem>; your application still decides whether the current user, session and business state allow that action.\"},\"tunes\":{}},{\"id\":\"h-environment\",\"type\":\"header\",\"data\":{\"text\":\"Step 4 — Decide where execution should happen\",\"level\":2},\"tunes\":{}},{\"id\":\"p-env-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The Agents API separates the managed harness from the execution environment. An agent can operate without a dedicated environment, in an OpenAI-hosted sandbox, or through a self-hosted environment connected to the session.\"},\"tunes\":{}},{\"id\":\"p-env-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"This creates a migration decision that SDK applications may never have made explicitly: which code should run as an application function, which code belongs in a sandbox, and which workloads require infrastructure you control?\"},\"tunes\":{}},{\"id\":\"environment-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Need\",\"Likely boundary\"],[\"Call an existing internal service through controlled business logic\",\"Function tool handled by your application\"],[\"Run isolated code or work with temporary files without private infrastructure\",\"OpenAI-hosted environment\"],[\"Access private network resources, custom system software or controlled local compute\",\"Self-hosted environment\"],[\"Persist accepted product artifacts\",\"Application-owned storage, not only sandbox filesystem\"],[\"Execute a high-impact business side effect\",\"Application function with authorization and audit controls\"]]},\"tunes\":{}},{\"id\":\"h-recovery\",\"type\":\"header\",\"data\":{\"text\":\"Step 5 — Replace implicit recovery with explicit lifecycle handling\",\"level\":2},\"tunes\":{}},{\"id\":\"p-recovery-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The managed harness provides session-level recovery, but your application still owns every external dependency around it. Self-hosted environments need provisioning, reconnection and shutdown. Function handlers can fail. Webhooks can be retried. Product-side state can change while an agent is idle.\"},\"tunes\":{}},{\"id\":\"p-recovery-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migration therefore needs two recovery models: agent-runtime recovery and business-operation recovery. The first is increasingly managed by the Agents API. The second remains your responsibility.\"},\"tunes\":{}},{\"id\":\"h-observability\",\"type\":\"header\",\"data\":{\"text\":\"Step 6 — Rebuild observability around the new trace boundary\",\"level\":2},\"tunes\":{}},{\"id\":\"p-obs-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Agents API sessions expose events, saved history, turns, tool calls, subagents and token usage. OpenAI also provides session logs in the platform and trace export.\"},\"tunes\":{}},{\"id\":\"p-obs-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"Do not discard your application observability because platform traces improved. Product logs still need to connect the agent session to user identity, authorization decision, domain object, tool side effect, approval record and final accepted result. The useful production trace is the join between agent-runtime evidence and business-runtime evidence.\"},\"tunes\":{}},{\"id\":\"ref-reliability\",\"type\":\"referralArticle\",\"data\":{\"url\":\"https:\u002F\u002Fstajic.de\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough\",\"title\":\"AI Agent Reliability: Why the Final Answer Is Not Enough\",\"excerpt\":\"Agent reliability depends on the execution path, tools and intermediate decisions — not only the final output.\",\"ctaLabel\":\"Read the reliability article\"},\"tunes\":{}},{\"id\":\"h-evals\",\"type\":\"header\",\"data\":{\"text\":\"Step 7 — Preserve evals before changing the runtime\",\"level\":2},\"tunes\":{}},{\"id\":\"p-evals-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"A migration can appear successful because the new system still produces plausible answers while silently changing tool choice, session continuity, handoff behaviour, latency or failure recovery. Build the behavioural baseline before switching runtimes.\"},\"tunes\":{}},{\"id\":\"p-evals-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The baseline should include representative tasks, expected tool calls, forbidden actions, approval points, state continuity, recovery scenarios and final-output acceptance criteria. Run the old and new architectures against the same cases wherever possible.\"},\"tunes\":{}},{\"id\":\"h-proof\",\"type\":\"header\",\"data\":{\"text\":\"The Migration Proof Test\",\"level\":2},\"tunes\":{}},{\"id\":\"proof-flow\",\"type\":\"processFlow\",\"data\":{\"title\":\"Prove the new runtime before cutting over\",\"orientation\":\"auto\",\"steps\":[{\"label\":\"1. Freeze the behavioural baseline\",\"description\":\"Capture representative SDK traces, expected outputs, tool paths, approval points and failure cases.\"},{\"label\":\"2. Inventory state ownership\",\"description\":\"Mark each state field as agent-session state, authoritative domain state, durable artifact or ephemeral working state.\"},{\"label\":\"3. Reuse stable tool implementations\",\"description\":\"Keep business functions behind application interfaces; replace only the agent-facing integration where possible.\"},{\"label\":\"4. Build one Agents API vertical slice\",\"description\":\"Migrate one production-shaped workflow including session creation, tools, events, environment and persistence.\"},{\"label\":\"5. Inject interruptions\",\"description\":\"Test process restart, webhook retry, function timeout, self-hosted environment reconnect and stale domain state.\"},{\"label\":\"6. Compare traces, not only answers\",\"description\":\"Verify tool choice, authorization, evidence path, state transitions and side effects against the baseline.\"},{\"label\":\"7. Run shadow traffic\",\"description\":\"Where feasible, replay or mirror representative tasks before making the new runtime authoritative.\"},{\"label\":\"8. Cut over behind a reversible boundary\",\"description\":\"Keep integration adapters and rollback capability until production behaviour is stable.\"}]},\"tunes\":{}},{\"id\":\"h-metrics\",\"type\":\"header\",\"data\":{\"text\":\"What to measure during migration\",\"level\":2},\"tunes\":{}},{\"id\":\"metrics-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Dimension\",\"Migration check\"],[\"Task success\",\"Does the new runtime meet the same or better acceptance criteria?\"],[\"Tool correctness\",\"Does it call the right tool with valid arguments and authorization?\"],[\"State continuity\",\"Can work resume across turns, restarts and asynchronous waits?\"],[\"Recovery\",\"What happens after webhook loss, handler failure, environment disconnect or timeout?\"],[\"Traceability\",\"Can every consequential action be joined to session, user, tool call and domain object?\"],[\"Context behaviour\",\"Do long-running sessions preserve constraints without carrying stale application truth?\"],[\"Latency\",\"How do session startup, environment provisioning and multi-turn work affect user-visible time?\"],[\"Cost\",\"What changes in model usage, sandbox usage, repeated context and infrastructure operations?\"],[\"Operational load\",\"Which previously application-owned responsibilities actually disappeared, and which merely moved?\"]]},\"tunes\":{}},{\"id\":\"h-not-yet\",\"type\":\"header\",\"data\":{\"text\":\"When not to migrate yet\",\"level\":2},\"tunes\":{}},{\"id\":\"p-not-yet-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"An existing Agents SDK application does not become bad architecture simply because the platform direction changed. OpenAI continues maintenance, security fixes, critical bug fixes and compatibility work. If the application is stable, well evaluated and has no blocked roadmap requirement, an immediate runtime migration may not be justified.\"},\"tunes\":{}},{\"id\":\"not-yet-list\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"A required SDK capability is not yet available in the Agents API.\",\"The migration would disrupt a critical production period without delivering near-term value.\",\"The application depends on custom orchestration semantics that have not been validated on the managed harness.\",\"Provider portability is a hard requirement and the current SDK abstraction is materially valuable.\",\"Your team has not yet separated business state from agent runtime state, making cutover unsafe.\",\"The new Agents API behaviour has not been tested against representative production workloads.\"]},\"tunes\":{}},{\"id\":\"h-when\",\"type\":\"header\",\"data\":{\"text\":\"When the migration becomes strategically important\",\"level\":2},\"tunes\":{}},{\"id\":\"p-when-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migration becomes more compelling when product requirements align with the managed harness: durable long-running work, platform-managed context compaction and recovery, newer agent-runtime capabilities, sandboxed execution, richer hosted lifecycle management, or a desire to reduce the amount of orchestration code your application operates.\"},\"tunes\":{}},{\"id\":\"p-when-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The strongest signal is not “the old SDK is feature complete.” It is “our roadmap now depends on capabilities whose natural home is the managed Agents API runtime.”\"},\"tunes\":{}},{\"id\":\"h-change\",\"type\":\"header\",\"data\":{\"text\":\"What would change this answer?\",\"level\":2},\"tunes\":{}},{\"id\":\"p-change-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The migration strategy would change if OpenAI publishes automated migration tooling, introduces explicit compatibility layers, changes Agents API session semantics, expands or narrows self-hosted environment support, or changes the support policy for the Agents SDK.\"},\"tunes\":{}},{\"id\":\"p-change-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"It would also change if your product requirements change. A simple request-response assistant may not need a durable managed harness at all. A long-running coding, research or operations agent can benefit much more from the Agents API ownership model.\"},\"tunes\":{}},{\"id\":\"h-limitations\",\"type\":\"header\",\"data\":{\"text\":\"Limitations\",\"level\":2},\"tunes\":{}},{\"id\":\"p-limit-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"There is no universal one-to-one SDK-to-API migration map because applications use the Agents SDK differently. Some rely heavily on sessions and handoffs; others use it as a thin runner around function tools. The correct migration depends on which responsibilities your application actually owns today.\"},\"tunes\":{}},{\"id\":\"p-limit-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The Agents API is also in public beta, so implementation details can evolve. Treat the ownership principles in this article as more durable than any individual endpoint shape.\"},\"tunes\":{}},{\"id\":\"h-conclusion\",\"type\":\"header\",\"data\":{\"text\":\"Conclusion\",\"level\":2},\"tunes\":{}},{\"id\":\"p-conclusion-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migrating from the Agents SDK to the Agents API is best understood as moving the agent-runtime boundary. The managed harness takes over more of the loop, session continuity, compaction and recovery. Your application should become more explicit about the responsibilities that remain yours: domain truth, authorization, function side effects, artifacts, auditability and product lifecycle.\"},\"tunes\":{}},{\"id\":\"p-conclusion-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"If a migration leaves all of the old orchestration machinery in place and merely replaces SDK calls with Agents API calls, it has probably missed the architectural opportunity. The goal is not to reproduce the old runtime on top of the new one. The goal is to decide which runtime responsibilities no longer belong in your application.\"},\"tunes\":{}},{\"id\":\"h-faq\",\"type\":\"header\",\"data\":{\"text\":\"FAQ\",\"level\":2},\"tunes\":{}},{\"id\":\"faq\",\"type\":\"faq\",\"data\":{\"title\":\"Migrating from Agents SDK to Agents API\",\"items\":[{\"id\":\"faq1\",\"question\":\"Is migrating from the Agents SDK to the Agents API just an API rewrite?\",\"answer\":\"No. The main change is runtime ownership: the Agents SDK runs the agent loop in your application, while the Agents API runs a managed Codex harness and durable session. State, lifecycle, event handling and recovery should be reviewed as architecture concerns.\"},{\"id\":\"faq2\",\"question\":\"Do my function tools need to be rewritten?\",\"answer\":\"The business implementation often can be reused if it is already behind a stable application interface. The agent-facing integration changes because Agents API function calls are handled through session required actions and results.\"},{\"id\":\"faq3\",\"question\":\"Should I move business state into the Agents API session?\",\"answer\":\"Generally no. Keep authoritative business and product state in your own databases or services. Use the agent session for agent continuity and working context, not as the sole source of truth for your product.\"},{\"id\":\"faq4\",\"question\":\"Do I need webhooks for the Agents API?\",\"answer\":\"Not always, because streaming is also available. Webhooks are especially useful for long-running or asynchronous sessions where your application should react to lifecycle changes without holding an open stream.\"},{\"id\":\"faq5\",\"question\":\"Should every existing Agents SDK application migrate now?\",\"answer\":\"No. The SDK remains supported in maintenance mode. Migrate when the new runtime provides meaningful roadmap value and after required behaviour has been validated against production-shaped evals.\"}]},\"tunes\":{}},{\"id\":\"h-glossary\",\"type\":\"header\",\"data\":{\"text\":\"Glossary\",\"level\":2},\"tunes\":{}},{\"id\":\"glossary\",\"type\":\"glossary\",\"data\":{\"title\":\"Key migration terms\",\"entries\":[{\"term\":\"Runtime boundary\",\"definition\":\"The division of responsibility between the platform-managed agent runtime and the application-owned runtime.\",\"anchor\":\"runtime-boundary\"},{\"term\":\"Harness\",\"definition\":\"The agent runtime that coordinates model calls, tools, context, orchestration and continued execution.\",\"anchor\":\"harness\"},{\"term\":\"Session\",\"definition\":\"A durable Agents API instance that holds an agent's configuration, conversation and saved work across turns.\",\"anchor\":\"session\"},{\"term\":\"Required action\",\"definition\":\"A session state in which the Agents API needs external input such as a function result or environment connection before work can continue.\",\"anchor\":\"required-action\"},{\"term\":\"Self-hosted environment\",\"definition\":\"An execution environment operated by your infrastructure and connected to the managed Agents API harness.\",\"anchor\":\"self-hosted-environment\"},{\"term\":\"Migration proof test\",\"definition\":\"A staged validation method that compares the new runtime against behavioural baselines, failure injections, traces and reversible cutover criteria.\",\"anchor\":\"migration-proof-test\"}]},\"tunes\":{}},{\"id\":\"h-sources\",\"type\":\"header\",\"data\":{\"text\":\"Primary sources and further reading\",\"level\":2},\"tunes\":{}},{\"id\":\"src-sdk\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents SDK\",\"description\":\"Current support policy: the Agents SDK is feature complete, remains maintained, and new applications should start with the Agents API.\"}},\"tunes\":{}},{\"id\":\"src-running-sdk\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Running agents with the Agents SDK\",\"description\":\"Documentation of the SDK application-owned agent loop and continuation model.\"}},\"tunes\":{}},{\"id\":\"src-api-overview\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API overview\",\"description\":\"Defines the Agents API core concepts: agent, environment, session, events and items.\"}},\"tunes\":{}},{\"id\":\"src-api-architecture\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API architecture\",\"description\":\"Explains the hosted harness, application server, OpenAI-hosted and self-hosted execution environment boundaries.\"}},\"tunes\":{}},{\"id\":\"src-api-config\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Configuring Agents\",\"description\":\"Defines reusable agent configuration and session-level customization.\"}},\"tunes\":{}},{\"id\":\"src-api-sessions\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Run and continue sessions\",\"description\":\"Documents durable sessions, asynchronous turns, streaming and steering.\"}},\"tunes\":{}},{\"id\":\"src-api-functions\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API Functions\",\"description\":\"Function-tool definition and the application handler boundary for required function results.\"}},\"tunes\":{}},{\"id\":\"src-api-webhooks\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Session webhooks\",\"description\":\"Lifecycle events for asynchronous sessions, required actions and self-hosted environment connections.\"}},\"tunes\":{}},{\"id\":\"src-api-observability\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API observability and usage\",\"description\":\"Session logs, events, turns, tool calls, subagents, traces and token-usage inspection.\"}},\"tunes\":{}}],\"version\":\"2.31.6\"}",{"time":1343,"blocks":1344,"version":2210},1790352173087,[1345,1349,1353,1358,1363,1368,1372,1376,1380,1384,1388,1438,1442,1446,1450,1455,1459,1463,1495,1499,1503,1507,1531,1535,1539,1543,1547,1551,1555,1560,1564,1568,1572,1594,1598,1602,1606,1610,1614,1618,1625,1629,1633,1637,1641,1670,1674,1707,1711,1715,1726,1730,1734,1738,1742,1746,1750,1754,1758,1762,1766,1770,1774,1777,1797,1801,1822,1826,1832,1839,1846,1853,1860,1867,1874,1881,1888,1891,1894,1897,1900,1903,1906,1909,1912,1915,1918,1934,1937,1940,1943,1946,1949,1952,1963,1966,1969,1972,1988,1991,1994,1997,2000,2003,2006,2009,2012,2015,2018,2028,2031,2034,2037,2040,2043,2046,2049,2052,2055,2058,2061,2073,2076,2090,2093,2096,2101,2104,2107,2110,2113,2116,2119,2122,2125,2128,2131,2134,2137,2140,2149,2152,2162,2165,2170,2175,2180,2185,2190,2195,2200,2205],{"id":215,"data":1346,"type":220,"tunes":1348},{"title":1347,"maxLevel":218,"minLevel":219},"Contents",{},{"id":223,"data":1350,"type":226,"tunes":1352},{"text":1351},"Migrating from the OpenAI Agents SDK to the Agents API is not an import rename. The core architectural boundary changes: the SDK runs the agent loop inside your application, while the Agents API runs a managed Codex harness and durable session on OpenAI's side. The migration question is therefore not “Which classes map to which endpoints?” but “Which runtime responsibilities move across the boundary, which stay in our application, and which need to be redesigned?”",{},{"id":229,"data":1354,"type":234,"tunes":1357},{"body":1355,"title":1356,"variant":233},"\u003Cstrong>A real Agents SDK → Agents API migration changes runtime ownership.\u003C\u002Fstrong> Your reusable agent configuration can still contain model, instructions and tools, but the loop, durable session, orchestration, context compaction and recovery move toward the managed Agents API runtime. Your application should keep domain state, authorization, business rules, function implementations and audit logic outside the agent session. Treat the migration as a boundary redesign, not a mechanical code conversion.","Direct answer",{},{"id":237,"data":1359,"type":234,"tunes":1362},{"body":1360,"title":1361,"variant":241},"OpenAI currently marks the Agents SDK as \u003Cstrong>feature complete\u003C\u002Fstrong> and recommends the Agents API for new agent applications. The Agents API is in public beta. Existing SDK applications remain supported, and immediate migration is not automatically required.","Current as of 25 September 2026",{},{"id":244,"data":1364,"type":234,"tunes":1367},{"body":1365,"title":1366,"variant":248},"The Runtime Boundary Migration Map and Migration Proof Test in this article are practical architecture tools, not official OpenAI migration frameworks. They are derived from the current runtime differences documented by OpenAI.","About the migration model",{},{"id":251,"data":1369,"type":42,"tunes":1371},{"text":1370,"level":219},"The migration is from an application-owned loop to a managed harness",{},{"id":256,"data":1373,"type":226,"tunes":1375},{"text":1374},"In the Agents SDK, one run is an application-level turn. The SDK runner calls the model, inspects the output, executes tools, follows handoffs and continues until it reaches a stopping point. Your process hosts that loop and therefore owns its lifecycle.",{},{"id":261,"data":1377,"type":226,"tunes":1379},{"text":1378},"In the Agents API, OpenAI runs the harness. A session is a durable instance of an agent configuration that accepts tasks, produces events, can pause for required actions, and can continue over time. OpenAI manages sessions, orchestration, context compaction and recovery; your application sends work, handles function tools, receives events and optionally manages a self-hosted execution environment.",{},{"id":266,"data":1381,"type":226,"tunes":1383},{"text":1382},"That ownership shift is the migration. Everything else — API syntax, tool schemas, event handling, session IDs — follows from it.",{},{"id":271,"data":1385,"type":42,"tunes":1387},{"text":1386,"level":219},"The Runtime Boundary Migration Map",{},{"id":276,"data":1389,"type":327,"tunes":1437},{"content":1390,"stretched":43,"withHeadings":14},[1391,1394,1398,1402,1406,1410,1414,1418,1422,1425,1429,1433],[1392,281,1393],"Concern","Agents API migration target",[1395,1396,1397],"Agent loop","Runs in your application through the SDK runner","Runs in the managed Codex harness",[1399,1400,1401],"Reusable agent definition","Agent object in application code","Saved or inline agent configuration with model, instructions and tools",[1403,1404,1405],"Conversation \u002F work continuity","SDK session strategy, history, result continuation or application storage","Durable Agents API session",[1407,1408,1409],"Tool execution","SDK coordinates tool calls in your runtime","Harness requests function calls; your application returns results",[1411,1412,1413],"Context management","Your runtime \u002F SDK session strategy","Managed session context, compaction and recovery, plus your own application data boundaries",[1415,1416,1417],"Handoffs \u002F specialists","SDK orchestration primitives","Harness \u002F subagent behaviour in Agents API; do not assume one-to-one semantics",[1419,1420,1421],"Execution environment","Your application runtime or tool-specific environment","Optional OpenAI-hosted or self-hosted environment attached to the session",[312,1423,1424],"SDK streaming from the run","Agents API session event stream",[1426,1427,1428],"Async lifecycle","Usually application-managed around the SDK run","Native session states, asynchronous turns and webhooks",[1430,1431,1432],"Tracing \u002F observability","Agents SDK tracing and application logs","Agents session logs, events, turns, tool calls, subagents and exportable traces",[1434,1435,1436],"Recovery","Application responsibility","Managed harness\u002Fsession recovery plus application-owned recovery for external systems and self-hosted environments",{},{"id":330,"data":1439,"type":42,"tunes":1441},{"text":1440,"level":219},"What can migrate conceptually without changing ownership",{},{"id":335,"data":1443,"type":226,"tunes":1445},{"text":1444},"Several application concepts survive the migration cleanly even though their representation changes. Models, instructions, JSON-schema function definitions, MCP access, tool descriptions and structured output requirements are still agent configuration concerns.",{},{"id":340,"data":1447,"type":226,"tunes":1449},{"text":1448},"OpenAI's Agents API configuration model explicitly defines an agent through model, instructions, tools, reasoning and output behaviour. Function tools remain application code: the harness requests a function call, and your handler returns the result. OpenAI also notes that function implementations used with the Responses API can be reused with the Agents API session flow.",{},{"id":345,"data":1451,"type":234,"tunes":1454},{"body":1452,"title":1453,"variant":349},"A pure business function such as \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> should not need to know whether the caller is the Agents SDK or the Agents API. Keep its domain logic behind a stable application interface and migrate only the agent-facing adapter.","Good migration candidate",{},{"id":352,"data":1456,"type":42,"tunes":1458},{"text":1457,"level":219},"What should not be migrated one-to-one",{},{"id":357,"data":1460,"type":226,"tunes":1462},{"text":1461},"The dangerous migration pattern is to recreate every SDK runtime abstraction inside the Agents API. That can leave you paying for a managed harness while still operating a shadow harness in your application.",{},{"id":362,"data":1464,"type":327,"tunes":1494},{"content":1465,"stretched":43,"withHeadings":14},[1466,1470,1474,1478,1482,1486,1490],[1467,1468,1469],"SDK-era assumption","Why a direct copy is risky","Migration question",[1471,1472,1473],"Application loop owns every continuation","The Agents API already owns the harness loop","Which continuation logic is product logic, and which should move to the managed session?",[1475,1476,1477],"Local session object is the primary continuity mechanism","Agents API sessions are durable resources with their own lifecycle","Which state belongs in the session versus the product database?",[1479,1480,1481],"Every interruption is handled synchronously","Agents API turns are asynchronous and can surface action_required states","Which actions need webhooks, workers, idempotency and resumable handlers?",[1483,1484,1485],"All tool execution happens where the SDK process runs","Function handlers and execution environments can be separate","Where should each tool actually execute?",[1487,1488,1489],"SDK trace is the operational timeline","Agents API exposes session events, turns and managed traces","What application-level audit data still needs its own record?",[1491,1492,1493],"Handoff object maps directly to a hosted subagent model","Runtime semantics can differ","What user-visible ownership and specialist behaviour must be preserved, not merely the old class structure?",{},{"id":395,"data":1496,"type":42,"tunes":1498},{"text":1497,"level":219},"Step 1 — Separate domain state from agent session state",{},{"id":400,"data":1500,"type":226,"tunes":1502},{"text":1501},"Before touching API calls, classify the state your SDK application currently carries. Some state exists only to keep the agent conversation moving. Other state is business truth: user permissions, project status, order data, workflow approval, customer records, document versions, policy state or application configuration.",{},{"id":405,"data":1504,"type":226,"tunes":1506},{"text":1505},"The second category should not become dependent on an Agents API session. A durable session is useful continuity for the agent; it is not a replacement for your product's source of truth. If the session disappears, expires, is rebuilt, or changes implementation, your application must still know what is true.",{},{"id":410,"data":1508,"type":441,"tunes":1530},{"rows":1509,"title":1522,"layout":327,"columns":1523},[1510,1513,1516,1519],{"id":414,"label":1511,"values":1512},"Conversation continuity",[417,417,417],{"id":419,"label":1514,"values":1515},"Business truth",[417,417,417],{"id":423,"label":1517,"values":1518},"Durable artifact",[417,417,417],{"id":427,"label":1520,"values":1521},"Working scratch state",[417,417,417],"State placement test",[1524,1526,1528],{"id":433,"label":1525},"State type",{"id":436,"label":1527},"Preferred owner",{"id":439,"label":1529},"Reason",{},{"id":444,"data":1532,"type":42,"tunes":1534},{"text":1533,"level":219},"Step 2 — Convert the runner mindset into a session-and-events mindset",{},{"id":449,"data":1536,"type":226,"tunes":1538},{"text":1537},"SDK applications often think in terms of calling run and receiving a result. The Agents API thinks in terms of a durable session whose turns can run asynchronously. A message to an idle session starts work; a message during an active turn can steer it. Progress arrives through streaming or webhooks.",{},{"id":454,"data":1540,"type":226,"tunes":1542},{"text":1541},"This affects application architecture. Long-running production work should not depend on one HTTP request remaining alive. Your product needs stable session identifiers, lifecycle persistence, webhook verification, idempotent handlers and a way to reconcile current session state after process restarts.",{},{"id":459,"data":1544,"type":42,"tunes":1546},{"text":1545,"level":219},"Step 3 — Redesign function tools around required actions",{},{"id":464,"data":1548,"type":226,"tunes":1550},{"text":1549},"Function tools remain an important application boundary. You define the function and its JSON schema in the agent configuration. When the harness needs the function, the session can enter an action-required state. Your application retrieves the required action, executes the business logic and returns the result.",{},{"id":469,"data":1552,"type":226,"tunes":1554},{"text":1553},"That means the function implementation should be safe to resume. A webhook may be delivered while another worker is processing. A network failure can occur after the external side effect but before the result is returned. Migration is therefore a good moment to add call IDs, idempotency keys, explicit authorization, timeout policies and audit records to consequential tools.",{},{"id":474,"data":1556,"type":234,"tunes":1559},{"body":1557,"title":1558,"variant":241},"Do not treat a function call from the managed harness as authorization to perform the action. The harness decides \u003Cem>what it wants to call\u003C\u002Fem>; your application still decides whether the current user, session and business state allow that action.","Tool migration trap",{},{"id":480,"data":1561,"type":42,"tunes":1563},{"text":1562,"level":219},"Step 4 — Decide where execution should happen",{},{"id":485,"data":1565,"type":226,"tunes":1567},{"text":1566},"The Agents API separates the managed harness from the execution environment. An agent can operate without a dedicated environment, in an OpenAI-hosted sandbox, or through a self-hosted environment connected to the session.",{},{"id":490,"data":1569,"type":226,"tunes":1571},{"text":1570},"This creates a migration decision that SDK applications may never have made explicitly: which code should run as an application function, which code belongs in a sandbox, and which workloads require infrastructure you control?",{},{"id":495,"data":1573,"type":327,"tunes":1593},{"content":1574,"stretched":43,"withHeadings":14},[1575,1578,1581,1584,1587,1590],[1576,1577],"Need","Likely boundary",[1579,1580],"Call an existing internal service through controlled business logic","Function tool handled by your application",[1582,1583],"Run isolated code or work with temporary files without private infrastructure","OpenAI-hosted environment",[1585,1586],"Access private network resources, custom system software or controlled local compute","Self-hosted environment",[1588,1589],"Persist accepted product artifacts","Application-owned storage, not only sandbox filesystem",[1591,1592],"Execute a high-impact business side effect","Application function with authorization and audit controls",{},{"id":518,"data":1595,"type":42,"tunes":1597},{"text":1596,"level":219},"Step 5 — Replace implicit recovery with explicit lifecycle handling",{},{"id":523,"data":1599,"type":226,"tunes":1601},{"text":1600},"The managed harness provides session-level recovery, but your application still owns every external dependency around it. Self-hosted environments need provisioning, reconnection and shutdown. Function handlers can fail. Webhooks can be retried. Product-side state can change while an agent is idle.",{},{"id":528,"data":1603,"type":226,"tunes":1605},{"text":1604},"Migration therefore needs two recovery models: agent-runtime recovery and business-operation recovery. The first is increasingly managed by the Agents API. The second remains your responsibility.",{},{"id":533,"data":1607,"type":42,"tunes":1609},{"text":1608,"level":219},"Step 6 — Rebuild observability around the new trace boundary",{},{"id":538,"data":1611,"type":226,"tunes":1613},{"text":1612},"Agents API sessions expose events, saved history, turns, tool calls, subagents and token usage. OpenAI also provides session logs in the platform and trace export.",{},{"id":543,"data":1615,"type":226,"tunes":1617},{"text":1616},"Do not discard your application observability because platform traces improved. Product logs still need to connect the agent session to user identity, authorization decision, domain object, tool side effect, approval record and final accepted result. The useful production trace is the join between agent-runtime evidence and business-runtime evidence.",{},{"id":548,"data":1619,"type":554,"tunes":1624},{"url":1620,"title":1621,"excerpt":1622,"ctaLabel":1623},"https:\u002F\u002Fstajic.de\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough","AI Agent Reliability: Why the Final Answer Is Not Enough","Agent reliability depends on the execution path, tools and intermediate decisions — not only the final output.","Read the reliability article",{},{"id":557,"data":1626,"type":42,"tunes":1628},{"text":1627,"level":219},"Step 7 — Preserve evals before changing the runtime",{},{"id":562,"data":1630,"type":226,"tunes":1632},{"text":1631},"A migration can appear successful because the new system still produces plausible answers while silently changing tool choice, session continuity, handoff behaviour, latency or failure recovery. Build the behavioural baseline before switching runtimes.",{},{"id":567,"data":1634,"type":226,"tunes":1636},{"text":1635},"The baseline should include representative tasks, expected tool calls, forbidden actions, approval points, state continuity, recovery scenarios and final-output acceptance criteria. Run the old and new architectures against the same cases wherever possible.",{},{"id":572,"data":1638,"type":42,"tunes":1640},{"text":1639,"level":219},"The Migration Proof Test",{},{"id":577,"data":1642,"type":606,"tunes":1669},{"steps":1643,"title":1668,"orientation":605},[1644,1647,1650,1653,1656,1659,1662,1665],{"label":1645,"description":1646},"1. Freeze the behavioural baseline","Capture representative SDK traces, expected outputs, tool paths, approval points and failure cases.",{"label":1648,"description":1649},"2. Inventory state ownership","Mark each state field as agent-session state, authoritative domain state, durable artifact or ephemeral working state.",{"label":1651,"description":1652},"3. Reuse stable tool implementations","Keep business functions behind application interfaces; replace only the agent-facing integration where possible.",{"label":1654,"description":1655},"4. Build one Agents API vertical slice","Migrate one production-shaped workflow including session creation, tools, events, environment and persistence.",{"label":1657,"description":1658},"5. Inject interruptions","Test process restart, webhook retry, function timeout, self-hosted environment reconnect and stale domain state.",{"label":1660,"description":1661},"6. Compare traces, not only answers","Verify tool choice, authorization, evidence path, state transitions and side effects against the baseline.",{"label":1663,"description":1664},"7. Run shadow traffic","Where feasible, replay or mirror representative tasks before making the new runtime authoritative.",{"label":1666,"description":1667},"8. Cut over behind a reversible boundary","Keep integration adapters and rollback capability until production behaviour is stable.","Prove the new runtime before cutting over",{},{"id":609,"data":1671,"type":42,"tunes":1673},{"text":1672,"level":219},"What to measure during migration",{},{"id":614,"data":1675,"type":327,"tunes":1706},{"content":1676,"stretched":43,"withHeadings":14},[1677,1680,1683,1686,1689,1691,1694,1697,1700,1703],[1678,1679],"Dimension","Migration check",[1681,1682],"Task success","Does the new runtime meet the same or better acceptance criteria?",[1684,1685],"Tool correctness","Does it call the right tool with valid arguments and authorization?",[1687,1688],"State continuity","Can work resume across turns, restarts and asynchronous waits?",[1434,1690],"What happens after webhook loss, handler failure, environment disconnect or timeout?",[1692,1693],"Traceability","Can every consequential action be joined to session, user, tool call and domain object?",[1695,1696],"Context behaviour","Do long-running sessions preserve constraints without carrying stale application truth?",[1698,1699],"Latency","How do session startup, environment provisioning and multi-turn work affect user-visible time?",[1701,1702],"Cost","What changes in model usage, sandbox usage, repeated context and infrastructure operations?",[1704,1705],"Operational load","Which previously application-owned responsibilities actually disappeared, and which merely moved?",{},{"id":649,"data":1708,"type":42,"tunes":1710},{"text":1709,"level":219},"When not to migrate yet",{},{"id":654,"data":1712,"type":226,"tunes":1714},{"text":1713},"An existing Agents SDK application does not become bad architecture simply because the platform direction changed. OpenAI continues maintenance, security fixes, critical bug fixes and compatibility work. If the application is stable, well evaluated and has no blocked roadmap requirement, an immediate runtime migration may not be justified.",{},{"id":659,"data":1716,"type":670,"tunes":1725},{"meta":1717,"items":1718,"style":669},{},[1719,1720,1721,1722,1723,1724],"A required SDK capability is not yet available in the Agents API.","The migration would disrupt a critical production period without delivering near-term value.","The application depends on custom orchestration semantics that have not been validated on the managed harness.","Provider portability is a hard requirement and the current SDK abstraction is materially valuable.","Your team has not yet separated business state from agent runtime state, making cutover unsafe.","The new Agents API behaviour has not been tested against representative production workloads.",{},{"id":673,"data":1727,"type":42,"tunes":1729},{"text":1728,"level":219},"When the migration becomes strategically important",{},{"id":678,"data":1731,"type":226,"tunes":1733},{"text":1732},"Migration becomes more compelling when product requirements align with the managed harness: durable long-running work, platform-managed context compaction and recovery, newer agent-runtime capabilities, sandboxed execution, richer hosted lifecycle management, or a desire to reduce the amount of orchestration code your application operates.",{},{"id":683,"data":1735,"type":226,"tunes":1737},{"text":1736},"The strongest signal is not “the old SDK is feature complete.” It is “our roadmap now depends on capabilities whose natural home is the managed Agents API runtime.”",{},{"id":688,"data":1739,"type":42,"tunes":1741},{"text":1740,"level":219},"What would change this answer?",{},{"id":693,"data":1743,"type":226,"tunes":1745},{"text":1744},"The migration strategy would change if OpenAI publishes automated migration tooling, introduces explicit compatibility layers, changes Agents API session semantics, expands or narrows self-hosted environment support, or changes the support policy for the Agents SDK.",{},{"id":698,"data":1747,"type":226,"tunes":1749},{"text":1748},"It would also change if your product requirements change. A simple request-response assistant may not need a durable managed harness at all. A long-running coding, research or operations agent can benefit much more from the Agents API ownership model.",{},{"id":703,"data":1751,"type":42,"tunes":1753},{"text":1752,"level":219},"Limitations",{},{"id":708,"data":1755,"type":226,"tunes":1757},{"text":1756},"There is no universal one-to-one SDK-to-API migration map because applications use the Agents SDK differently. Some rely heavily on sessions and handoffs; others use it as a thin runner around function tools. The correct migration depends on which responsibilities your application actually owns today.",{},{"id":713,"data":1759,"type":226,"tunes":1761},{"text":1760},"The Agents API is also in public beta, so implementation details can evolve. Treat the ownership principles in this article as more durable than any individual endpoint shape.",{},{"id":718,"data":1763,"type":42,"tunes":1765},{"text":1764,"level":219},"Conclusion",{},{"id":723,"data":1767,"type":226,"tunes":1769},{"text":1768},"Migrating from the Agents SDK to the Agents API is best understood as moving the agent-runtime boundary. The managed harness takes over more of the loop, session continuity, compaction and recovery. Your application should become more explicit about the responsibilities that remain yours: domain truth, authorization, function side effects, artifacts, auditability and product lifecycle.",{},{"id":728,"data":1771,"type":226,"tunes":1773},{"text":1772},"If a migration leaves all of the old orchestration machinery in place and merely replaces SDK calls with Agents API calls, it has probably missed the architectural opportunity. The goal is not to reproduce the old runtime on top of the new one. The goal is to decide which runtime responsibilities no longer belong in your application.",{},{"id":733,"data":1775,"type":42,"tunes":1776},{"text":735,"level":219},{},{"id":738,"data":1778,"type":738,"tunes":1796},{"items":1779,"title":1795},[1780,1783,1786,1789,1792],{"id":742,"answer":1781,"question":1782},"No. The main change is runtime ownership: the Agents SDK runs the agent loop in your application, while the Agents API runs a managed Codex harness and durable session. State, lifecycle, event handling and recovery should be reviewed as architecture concerns.","Is migrating from the Agents SDK to the Agents API just an API rewrite?",{"id":746,"answer":1784,"question":1785},"The business implementation often can be reused if it is already behind a stable application interface. The agent-facing integration changes because Agents API function calls are handled through session required actions and results.","Do my function tools need to be rewritten?",{"id":750,"answer":1787,"question":1788},"Generally no. Keep authoritative business and product state in your own databases or services. Use the agent session for agent continuity and working context, not as the sole source of truth for your product.","Should I move business state into the Agents API session?",{"id":754,"answer":1790,"question":1791},"Not always, because streaming is also available. Webhooks are especially useful for long-running or asynchronous sessions where your application should react to lifecycle changes without holding an open stream.","Do I need webhooks for the Agents API?",{"id":758,"answer":1793,"question":1794},"No. The SDK remains supported in maintenance mode. Migrate when the new runtime provides meaningful roadmap value and after required behaviour has been validated against production-shaped evals.","Should every existing Agents SDK application migrate now?","Migrating from Agents SDK to Agents API",{},{"id":764,"data":1798,"type":42,"tunes":1800},{"text":1799,"level":219},"Glossary",{},{"id":769,"data":1802,"type":769,"tunes":1821},{"title":1803,"entries":1804},"Key migration terms",[1805,1808,1810,1813,1816,1818],{"term":1806,"anchor":775,"definition":1807},"Runtime boundary","The division of responsibility between the platform-managed agent runtime and the application-owned runtime.",{"term":778,"anchor":779,"definition":1809},"The agent runtime that coordinates model calls, tools, context, orchestration and continued execution.",{"term":1811,"anchor":783,"definition":1812},"Session","A durable Agents API instance that holds an agent's configuration, conversation and saved work across turns.",{"term":1814,"anchor":787,"definition":1815},"Required action","A session state in which the Agents API needs external input such as a function result or environment connection before work can continue.",{"term":1586,"anchor":790,"definition":1817},"An execution environment operated by your infrastructure and connected to the managed Agents API harness.",{"term":1819,"anchor":794,"definition":1820},"Migration proof test","A staged validation method that compares the new runtime against behavioural baselines, failure injections, traces and reversible cutover criteria.",{},{"id":798,"data":1823,"type":42,"tunes":1825},{"text":1824,"level":219},"Primary sources and further reading",{},{"id":803,"data":1827,"type":810,"tunes":1831},{"link":805,"meta":1828},{"image":1829,"title":808,"description":1830},{"url":417},"Current support policy: the Agents SDK is feature complete, remains maintained, and new applications should start with the Agents API.",{},{"id":813,"data":1833,"type":810,"tunes":1838},{"link":815,"meta":1834},{"image":1835,"title":1836,"description":1837},{"url":417},"OpenAI — Running agents with the Agents SDK","Documentation of the SDK application-owned agent loop and continuation model.",{},{"id":822,"data":1840,"type":810,"tunes":1845},{"link":824,"meta":1841},{"image":1842,"title":1843,"description":1844},{"url":417},"OpenAI — Agents API overview","Defines the Agents API core concepts: agent, environment, session, events and items.",{},{"id":831,"data":1847,"type":810,"tunes":1852},{"link":833,"meta":1848},{"image":1849,"title":1850,"description":1851},{"url":417},"OpenAI — Agents API architecture","Explains the hosted harness, application server, OpenAI-hosted and self-hosted execution environment boundaries.",{},{"id":840,"data":1854,"type":810,"tunes":1859},{"link":842,"meta":1855},{"image":1856,"title":1857,"description":1858},{"url":417},"OpenAI — Configuring Agents","Defines reusable agent configuration and session-level customization.",{},{"id":849,"data":1861,"type":810,"tunes":1866},{"link":851,"meta":1862},{"image":1863,"title":1864,"description":1865},{"url":417},"OpenAI — Run and continue sessions","Documents durable sessions, asynchronous turns, streaming and steering.",{},{"id":858,"data":1868,"type":810,"tunes":1873},{"link":860,"meta":1869},{"image":1870,"title":1871,"description":1872},{"url":417},"OpenAI — Agents API Functions","Function-tool definition and the application handler boundary for required function results.",{},{"id":867,"data":1875,"type":810,"tunes":1880},{"link":869,"meta":1876},{"image":1877,"title":1878,"description":1879},{"url":417},"OpenAI — Session webhooks","Lifecycle events for asynchronous sessions, required actions and self-hosted environment connections.",{},{"id":876,"data":1882,"type":810,"tunes":1887},{"link":878,"meta":1883},{"image":1884,"title":1885,"description":1886},{"url":417},"OpenAI — Agents API observability and usage","Session logs, events, turns, tool calls, subagents, traces and token-usage inspection.",{},{"id":223,"data":1889,"type":226,"tunes":1890},{"text":1351},{},{"id":229,"data":1892,"type":234,"tunes":1893},{"body":1355,"title":1356,"variant":233},{},{"id":237,"data":1895,"type":234,"tunes":1896},{"body":1360,"title":1361,"variant":241},{},{"id":244,"data":1898,"type":234,"tunes":1899},{"body":1365,"title":1366,"variant":248},{},{"id":901,"data":1901,"type":220,"tunes":1902},{"title":1347,"maxLevel":218,"minLevel":219},{},{"id":251,"data":1904,"type":42,"tunes":1905},{"text":1370,"level":219},{},{"id":256,"data":1907,"type":226,"tunes":1908},{"text":1374},{},{"id":261,"data":1910,"type":226,"tunes":1911},{"text":1378},{},{"id":266,"data":1913,"type":226,"tunes":1914},{"text":1382},{},{"id":271,"data":1916,"type":42,"tunes":1917},{"text":1386,"level":219},{},{"id":276,"data":1919,"type":327,"tunes":1933},{"content":1920,"stretched":43,"withHeadings":14},[1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932],[1392,281,1393],[1395,1396,1397],[1399,1400,1401],[1403,1404,1405],[1407,1408,1409],[1411,1412,1413],[1415,1416,1417],[1419,1420,1421],[312,1423,1424],[1426,1427,1428],[1430,1431,1432],[1434,1435,1436],{},{"id":330,"data":1935,"type":42,"tunes":1936},{"text":1440,"level":219},{},{"id":335,"data":1938,"type":226,"tunes":1939},{"text":1444},{},{"id":340,"data":1941,"type":226,"tunes":1942},{"text":1448},{},{"id":345,"data":1944,"type":234,"tunes":1945},{"body":1452,"title":1453,"variant":349},{},{"id":352,"data":1947,"type":42,"tunes":1948},{"text":1457,"level":219},{},{"id":357,"data":1950,"type":226,"tunes":1951},{"text":1461},{},{"id":362,"data":1953,"type":327,"tunes":1962},{"content":1954,"stretched":43,"withHeadings":14},[1955,1956,1957,1958,1959,1960,1961],[1467,1468,1469],[1471,1472,1473],[1475,1476,1477],[1479,1480,1481],[1483,1484,1485],[1487,1488,1489],[1491,1492,1493],{},{"id":395,"data":1964,"type":42,"tunes":1965},{"text":1497,"level":219},{},{"id":400,"data":1967,"type":226,"tunes":1968},{"text":1501},{},{"id":405,"data":1970,"type":226,"tunes":1971},{"text":1505},{},{"id":410,"data":1973,"type":441,"tunes":1987},{"rows":1974,"title":1522,"layout":327,"columns":1983},[1975,1977,1979,1981],{"id":414,"label":1511,"values":1976},[417,417,417],{"id":419,"label":1514,"values":1978},[417,417,417],{"id":423,"label":1517,"values":1980},[417,417,417],{"id":427,"label":1520,"values":1982},[417,417,417],[1984,1985,1986],{"id":433,"label":1525},{"id":436,"label":1527},{"id":439,"label":1529},{},{"id":444,"data":1989,"type":42,"tunes":1990},{"text":1533,"level":219},{},{"id":449,"data":1992,"type":226,"tunes":1993},{"text":1537},{},{"id":454,"data":1995,"type":226,"tunes":1996},{"text":1541},{},{"id":459,"data":1998,"type":42,"tunes":1999},{"text":1545,"level":219},{},{"id":464,"data":2001,"type":226,"tunes":2002},{"text":1549},{},{"id":469,"data":2004,"type":226,"tunes":2005},{"text":1553},{},{"id":474,"data":2007,"type":234,"tunes":2008},{"body":1557,"title":1558,"variant":241},{},{"id":480,"data":2010,"type":42,"tunes":2011},{"text":1562,"level":219},{},{"id":485,"data":2013,"type":226,"tunes":2014},{"text":1566},{},{"id":490,"data":2016,"type":226,"tunes":2017},{"text":1570},{},{"id":495,"data":2019,"type":327,"tunes":2027},{"content":2020,"stretched":43,"withHeadings":14},[2021,2022,2023,2024,2025,2026],[1576,1577],[1579,1580],[1582,1583],[1585,1586],[1588,1589],[1591,1592],{},{"id":518,"data":2029,"type":42,"tunes":2030},{"text":1596,"level":219},{},{"id":523,"data":2032,"type":226,"tunes":2033},{"text":1600},{},{"id":528,"data":2035,"type":226,"tunes":2036},{"text":1604},{},{"id":533,"data":2038,"type":42,"tunes":2039},{"text":1608,"level":219},{},{"id":538,"data":2041,"type":226,"tunes":2042},{"text":1612},{},{"id":543,"data":2044,"type":226,"tunes":2045},{"text":1616},{},{"id":548,"data":2047,"type":554,"tunes":2048},{"url":1620,"title":1621,"excerpt":1622,"ctaLabel":1623},{},{"id":557,"data":2050,"type":42,"tunes":2051},{"text":1627,"level":219},{},{"id":562,"data":2053,"type":226,"tunes":2054},{"text":1631},{},{"id":567,"data":2056,"type":226,"tunes":2057},{"text":1635},{},{"id":572,"data":2059,"type":42,"tunes":2060},{"text":1639,"level":219},{},{"id":577,"data":2062,"type":606,"tunes":2072},{"steps":2063,"title":1668,"orientation":605},[2064,2065,2066,2067,2068,2069,2070,2071],{"label":1645,"description":1646},{"label":1648,"description":1649},{"label":1651,"description":1652},{"label":1654,"description":1655},{"label":1657,"description":1658},{"label":1660,"description":1661},{"label":1663,"description":1664},{"label":1666,"description":1667},{},{"id":609,"data":2074,"type":42,"tunes":2075},{"text":1672,"level":219},{},{"id":614,"data":2077,"type":327,"tunes":2089},{"content":2078,"stretched":43,"withHeadings":14},[2079,2080,2081,2082,2083,2084,2085,2086,2087,2088],[1678,1679],[1681,1682],[1684,1685],[1687,1688],[1434,1690],[1692,1693],[1695,1696],[1698,1699],[1701,1702],[1704,1705],{},{"id":649,"data":2091,"type":42,"tunes":2092},{"text":1709,"level":219},{},{"id":654,"data":2094,"type":226,"tunes":2095},{"text":1713},{},{"id":659,"data":2097,"type":670,"tunes":2100},{"meta":2098,"items":2099,"style":669},{},[1719,1720,1721,1722,1723,1724],{},{"id":673,"data":2102,"type":42,"tunes":2103},{"text":1728,"level":219},{},{"id":678,"data":2105,"type":226,"tunes":2106},{"text":1732},{},{"id":683,"data":2108,"type":226,"tunes":2109},{"text":1736},{},{"id":688,"data":2111,"type":42,"tunes":2112},{"text":1740,"level":219},{},{"id":693,"data":2114,"type":226,"tunes":2115},{"text":1744},{},{"id":698,"data":2117,"type":226,"tunes":2118},{"text":1748},{},{"id":703,"data":2120,"type":42,"tunes":2121},{"text":1752,"level":219},{},{"id":708,"data":2123,"type":226,"tunes":2124},{"text":1756},{},{"id":713,"data":2126,"type":226,"tunes":2127},{"text":1760},{},{"id":718,"data":2129,"type":42,"tunes":2130},{"text":1764,"level":219},{},{"id":723,"data":2132,"type":226,"tunes":2133},{"text":1768},{},{"id":728,"data":2135,"type":226,"tunes":2136},{"text":1772},{},{"id":733,"data":2138,"type":42,"tunes":2139},{"text":735,"level":219},{},{"id":738,"data":2141,"type":738,"tunes":2148},{"items":2142,"title":1795},[2143,2144,2145,2146,2147],{"id":742,"answer":1781,"question":1782},{"id":746,"answer":1784,"question":1785},{"id":750,"answer":1787,"question":1788},{"id":754,"answer":1790,"question":1791},{"id":758,"answer":1793,"question":1794},{},{"id":764,"data":2150,"type":42,"tunes":2151},{"text":1799,"level":219},{},{"id":769,"data":2153,"type":769,"tunes":2161},{"title":1803,"entries":2154},[2155,2156,2157,2158,2159,2160],{"term":1806,"anchor":775,"definition":1807},{"term":778,"anchor":779,"definition":1809},{"term":1811,"anchor":783,"definition":1812},{"term":1814,"anchor":787,"definition":1815},{"term":1586,"anchor":790,"definition":1817},{"term":1819,"anchor":794,"definition":1820},{},{"id":798,"data":2163,"type":42,"tunes":2164},{"text":1824,"level":219},{},{"id":803,"data":2166,"type":810,"tunes":2169},{"link":805,"meta":2167},{"image":2168,"title":808,"description":1830},{"url":417},{},{"id":813,"data":2171,"type":810,"tunes":2174},{"link":815,"meta":2172},{"image":2173,"title":1836,"description":1837},{"url":417},{},{"id":822,"data":2176,"type":810,"tunes":2179},{"link":824,"meta":2177},{"image":2178,"title":1843,"description":1844},{"url":417},{},{"id":831,"data":2181,"type":810,"tunes":2184},{"link":833,"meta":2182},{"image":2183,"title":1850,"description":1851},{"url":417},{},{"id":840,"data":2186,"type":810,"tunes":2189},{"link":842,"meta":2187},{"image":2188,"title":1857,"description":1858},{"url":417},{},{"id":849,"data":2191,"type":810,"tunes":2194},{"link":851,"meta":2192},{"image":2193,"title":1864,"description":1865},{"url":417},{},{"id":858,"data":2196,"type":810,"tunes":2199},{"link":860,"meta":2197},{"image":2198,"title":1871,"description":1872},{"url":417},{},{"id":867,"data":2201,"type":810,"tunes":2204},{"link":869,"meta":2202},{"image":2203,"title":1878,"description":1879},{"url":417},{},{"id":876,"data":2206,"type":810,"tunes":2209},{"link":878,"meta":2207},{"image":2208,"title":1885,"description":1886},{"url":417},{},"2.31.6","Migrating from the OpenAI Agents SDK to the new Agents API is not an import rename. The runtime boundary changes: the agent loop, durable session, orchestration, context compaction and recovery move toward a managed harness. This guide shows what should move, what should stay in your application, and how to prove the migration before cutover.",{"lang":7,"title":208,"content":210,"contentJson":2213,"excerpt":1303},{"time":212,"blocks":2214,"version":1302},[2215,2218,2221,2224,2227,2230,2233,2236,2239,2242,2245,2261,2264,2267,2270,2273,2276,2279,2290,2293,2296,2299,2315,2318,2321,2324,2327,2330,2333,2336,2339,2342,2345,2355,2358,2361,2364,2367,2370,2373,2376,2379,2382,2385,2388,2400,2403,2417,2420,2423,2428,2431,2434,2437,2440,2443,2446,2449,2452,2455,2458,2461,2464,2467,2476,2479,2489,2492,2497,2502,2507,2512,2517,2522,2527,2532,2537,2540,2543,2546,2549,2552,2555,2558,2561,2564,2567,2583,2586,2589,2592,2595,2598,2601,2612,2615,2618,2621,2637,2640,2643,2646,2649,2652,2655,2658,2661,2664,2667,2677,2680,2683,2686,2689,2692,2695,2698,2701,2704,2707,2710,2722,2725,2739,2742,2745,2750,2753,2756,2759,2762,2765,2768,2771,2774,2777,2780,2783,2786,2789,2798,2801,2811,2814,2819,2824,2829,2834,2839,2844,2849,2854],{"id":215,"data":2216,"type":220,"tunes":2217},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":223,"data":2219,"type":226,"tunes":2220},{"text":225},{},{"id":229,"data":2222,"type":234,"tunes":2223},{"body":231,"title":232,"variant":233},{},{"id":237,"data":2225,"type":234,"tunes":2226},{"body":239,"title":240,"variant":241},{},{"id":244,"data":2228,"type":234,"tunes":2229},{"body":246,"title":247,"variant":248},{},{"id":251,"data":2231,"type":42,"tunes":2232},{"text":253,"level":219},{},{"id":256,"data":2234,"type":226,"tunes":2235},{"text":258},{},{"id":261,"data":2237,"type":226,"tunes":2238},{"text":263},{},{"id":266,"data":2240,"type":226,"tunes":2241},{"text":268},{},{"id":271,"data":2243,"type":42,"tunes":2244},{"text":273,"level":219},{},{"id":276,"data":2246,"type":327,"tunes":2260},{"content":2247,"stretched":43,"withHeadings":14},[2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259],[280,281,282],[284,285,286],[288,289,290],[292,293,294],[296,297,298],[300,301,302],[304,305,306],[308,309,310],[312,313,314],[316,317,318],[320,321,322],[324,325,326],{},{"id":330,"data":2262,"type":42,"tunes":2263},{"text":332,"level":219},{},{"id":335,"data":2265,"type":226,"tunes":2266},{"text":337},{},{"id":340,"data":2268,"type":226,"tunes":2269},{"text":342},{},{"id":345,"data":2271,"type":234,"tunes":2272},{"body":347,"title":348,"variant":349},{},{"id":352,"data":2274,"type":42,"tunes":2275},{"text":354,"level":219},{},{"id":357,"data":2277,"type":226,"tunes":2278},{"text":359},{},{"id":362,"data":2280,"type":327,"tunes":2289},{"content":2281,"stretched":43,"withHeadings":14},[2282,2283,2284,2285,2286,2287,2288],[366,367,368],[370,371,372],[374,375,376],[378,379,380],[382,383,384],[386,387,388],[390,391,392],{},{"id":395,"data":2291,"type":42,"tunes":2292},{"text":397,"level":219},{},{"id":400,"data":2294,"type":226,"tunes":2295},{"text":402},{},{"id":405,"data":2297,"type":226,"tunes":2298},{"text":407},{},{"id":410,"data":2300,"type":441,"tunes":2314},{"rows":2301,"title":430,"layout":327,"columns":2310},[2302,2304,2306,2308],{"id":414,"label":415,"values":2303},[417,417,417],{"id":419,"label":420,"values":2305},[417,417,417],{"id":423,"label":424,"values":2307},[417,417,417],{"id":427,"label":428,"values":2309},[417,417,417],[2311,2312,2313],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2316,"type":42,"tunes":2317},{"text":446,"level":219},{},{"id":449,"data":2319,"type":226,"tunes":2320},{"text":451},{},{"id":454,"data":2322,"type":226,"tunes":2323},{"text":456},{},{"id":459,"data":2325,"type":42,"tunes":2326},{"text":461,"level":219},{},{"id":464,"data":2328,"type":226,"tunes":2329},{"text":466},{},{"id":469,"data":2331,"type":226,"tunes":2332},{"text":471},{},{"id":474,"data":2334,"type":234,"tunes":2335},{"body":476,"title":477,"variant":241},{},{"id":480,"data":2337,"type":42,"tunes":2338},{"text":482,"level":219},{},{"id":485,"data":2340,"type":226,"tunes":2341},{"text":487},{},{"id":490,"data":2343,"type":226,"tunes":2344},{"text":492},{},{"id":495,"data":2346,"type":327,"tunes":2354},{"content":2347,"stretched":43,"withHeadings":14},[2348,2349,2350,2351,2352,2353],[499,500],[502,503],[505,506],[508,509],[511,512],[514,515],{},{"id":518,"data":2356,"type":42,"tunes":2357},{"text":520,"level":219},{},{"id":523,"data":2359,"type":226,"tunes":2360},{"text":525},{},{"id":528,"data":2362,"type":226,"tunes":2363},{"text":530},{},{"id":533,"data":2365,"type":42,"tunes":2366},{"text":535,"level":219},{},{"id":538,"data":2368,"type":226,"tunes":2369},{"text":540},{},{"id":543,"data":2371,"type":226,"tunes":2372},{"text":545},{},{"id":548,"data":2374,"type":554,"tunes":2375},{"url":550,"title":551,"excerpt":552,"ctaLabel":553},{},{"id":557,"data":2377,"type":42,"tunes":2378},{"text":559,"level":219},{},{"id":562,"data":2380,"type":226,"tunes":2381},{"text":564},{},{"id":567,"data":2383,"type":226,"tunes":2384},{"text":569},{},{"id":572,"data":2386,"type":42,"tunes":2387},{"text":574,"level":219},{},{"id":577,"data":2389,"type":606,"tunes":2399},{"steps":2390,"title":604,"orientation":605},[2391,2392,2393,2394,2395,2396,2397,2398],{"label":581,"description":582},{"label":584,"description":585},{"label":587,"description":588},{"label":590,"description":591},{"label":593,"description":594},{"label":596,"description":597},{"label":599,"description":600},{"label":602,"description":603},{},{"id":609,"data":2401,"type":42,"tunes":2402},{"text":611,"level":219},{},{"id":614,"data":2404,"type":327,"tunes":2416},{"content":2405,"stretched":43,"withHeadings":14},[2406,2407,2408,2409,2410,2411,2412,2413,2414,2415],[618,619],[621,622],[624,625],[627,628],[630,631],[633,634],[636,637],[639,640],[642,643],[645,646],{},{"id":649,"data":2418,"type":42,"tunes":2419},{"text":651,"level":219},{},{"id":654,"data":2421,"type":226,"tunes":2422},{"text":656},{},{"id":659,"data":2424,"type":670,"tunes":2427},{"meta":2425,"items":2426,"style":669},{},[663,664,665,666,667,668],{},{"id":673,"data":2429,"type":42,"tunes":2430},{"text":675,"level":219},{},{"id":678,"data":2432,"type":226,"tunes":2433},{"text":680},{},{"id":683,"data":2435,"type":226,"tunes":2436},{"text":685},{},{"id":688,"data":2438,"type":42,"tunes":2439},{"text":690,"level":219},{},{"id":693,"data":2441,"type":226,"tunes":2442},{"text":695},{},{"id":698,"data":2444,"type":226,"tunes":2445},{"text":700},{},{"id":703,"data":2447,"type":42,"tunes":2448},{"text":705,"level":219},{},{"id":708,"data":2450,"type":226,"tunes":2451},{"text":710},{},{"id":713,"data":2453,"type":226,"tunes":2454},{"text":715},{},{"id":718,"data":2456,"type":42,"tunes":2457},{"text":720,"level":219},{},{"id":723,"data":2459,"type":226,"tunes":2460},{"text":725},{},{"id":728,"data":2462,"type":226,"tunes":2463},{"text":730},{},{"id":733,"data":2465,"type":42,"tunes":2466},{"text":735,"level":219},{},{"id":738,"data":2468,"type":738,"tunes":2475},{"items":2469,"title":761},[2470,2471,2472,2473,2474],{"id":742,"answer":743,"question":744},{"id":746,"answer":747,"question":748},{"id":750,"answer":751,"question":752},{"id":754,"answer":755,"question":756},{"id":758,"answer":759,"question":760},{},{"id":764,"data":2477,"type":42,"tunes":2478},{"text":766,"level":219},{},{"id":769,"data":2480,"type":769,"tunes":2488},{"title":771,"entries":2481},[2482,2483,2484,2485,2486,2487],{"term":774,"anchor":775,"definition":776},{"term":778,"anchor":779,"definition":780},{"term":782,"anchor":783,"definition":784},{"term":786,"anchor":787,"definition":788},{"term":509,"anchor":790,"definition":791},{"term":793,"anchor":794,"definition":795},{},{"id":798,"data":2490,"type":42,"tunes":2491},{"text":800,"level":219},{},{"id":803,"data":2493,"type":810,"tunes":2496},{"link":805,"meta":2494},{"image":2495,"title":808,"description":809},{"url":417},{},{"id":813,"data":2498,"type":810,"tunes":2501},{"link":815,"meta":2499},{"image":2500,"title":818,"description":819},{"url":417},{},{"id":822,"data":2503,"type":810,"tunes":2506},{"link":824,"meta":2504},{"image":2505,"title":827,"description":828},{"url":417},{},{"id":831,"data":2508,"type":810,"tunes":2511},{"link":833,"meta":2509},{"image":2510,"title":836,"description":837},{"url":417},{},{"id":840,"data":2513,"type":810,"tunes":2516},{"link":842,"meta":2514},{"image":2515,"title":845,"description":846},{"url":417},{},{"id":849,"data":2518,"type":810,"tunes":2521},{"link":851,"meta":2519},{"image":2520,"title":854,"description":855},{"url":417},{},{"id":858,"data":2523,"type":810,"tunes":2526},{"link":860,"meta":2524},{"image":2525,"title":863,"description":864},{"url":417},{},{"id":867,"data":2528,"type":810,"tunes":2531},{"link":869,"meta":2529},{"image":2530,"title":872,"description":873},{"url":417},{},{"id":876,"data":2533,"type":810,"tunes":2536},{"link":878,"meta":2534},{"image":2535,"title":881,"description":882},{"url":417},{},{"id":223,"data":2538,"type":226,"tunes":2539},{"text":886},{},{"id":229,"data":2541,"type":234,"tunes":2542},{"body":890,"title":232,"variant":233},{},{"id":237,"data":2544,"type":234,"tunes":2545},{"body":894,"title":240,"variant":241},{},{"id":244,"data":2547,"type":234,"tunes":2548},{"body":898,"title":247,"variant":248},{},{"id":901,"data":2550,"type":220,"tunes":2551},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":251,"data":2553,"type":42,"tunes":2554},{"text":906,"level":219},{},{"id":256,"data":2556,"type":226,"tunes":2557},{"text":910},{},{"id":261,"data":2559,"type":226,"tunes":2560},{"text":914},{},{"id":266,"data":2562,"type":226,"tunes":2563},{"text":268},{},{"id":271,"data":2565,"type":42,"tunes":2566},{"text":273,"level":219},{},{"id":276,"data":2568,"type":327,"tunes":2582},{"content":2569,"stretched":43,"withHeadings":14},[2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581],[280,281,926],[928,285,286],[288,289,290],[292,293,931],[296,297,933],[300,301,302],[304,305,936],[308,938,310],[312,313,940],[316,317,318],[320,943,944],[324,325,946],{},{"id":330,"data":2584,"type":42,"tunes":2585},{"text":332,"level":219},{},{"id":335,"data":2587,"type":226,"tunes":2588},{"text":953},{},{"id":340,"data":2590,"type":226,"tunes":2591},{"text":957},{},{"id":345,"data":2593,"type":234,"tunes":2594},{"body":961,"title":348,"variant":349},{},{"id":352,"data":2596,"type":42,"tunes":2597},{"text":965,"level":219},{},{"id":357,"data":2599,"type":226,"tunes":2600},{"text":969},{},{"id":362,"data":2602,"type":327,"tunes":2611},{"content":2603,"stretched":43,"withHeadings":14},[2604,2605,2606,2607,2608,2609,2610],[366,367,368],[370,371,372],[374,375,977],[979,379,980],[982,383,384],[984,387,985],[987,391,988],{},{"id":395,"data":2613,"type":42,"tunes":2614},{"text":992,"level":219},{},{"id":400,"data":2616,"type":226,"tunes":2617},{"text":402},{},{"id":405,"data":2619,"type":226,"tunes":2620},{"text":999},{},{"id":410,"data":2622,"type":441,"tunes":2636},{"rows":2623,"title":430,"layout":327,"columns":2632},[2624,2626,2628,2630],{"id":414,"label":415,"values":2625},[417,417,417],{"id":419,"label":420,"values":2627},[417,417,417],{"id":423,"label":424,"values":2629},[417,417,417],{"id":427,"label":428,"values":2631},[417,417,417],[2633,2634,2635],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2638,"type":42,"tunes":2639},{"text":446,"level":219},{},{"id":449,"data":2641,"type":226,"tunes":2642},{"text":1022},{},{"id":454,"data":2644,"type":226,"tunes":2645},{"text":1026},{},{"id":459,"data":2647,"type":42,"tunes":2648},{"text":461,"level":219},{},{"id":464,"data":2650,"type":226,"tunes":2651},{"text":1033},{},{"id":469,"data":2653,"type":226,"tunes":2654},{"text":1037},{},{"id":474,"data":2656,"type":234,"tunes":2657},{"body":476,"title":477,"variant":241},{},{"id":480,"data":2659,"type":42,"tunes":2660},{"text":482,"level":219},{},{"id":485,"data":2662,"type":226,"tunes":2663},{"text":1047},{},{"id":490,"data":2665,"type":226,"tunes":2666},{"text":1051},{},{"id":495,"data":2668,"type":327,"tunes":2676},{"content":2669,"stretched":43,"withHeadings":14},[2670,2671,2672,2673,2674,2675],[499,500],[502,503],[505,506],[508,509],[511,1061],[514,515],{},{"id":518,"data":2678,"type":42,"tunes":2679},{"text":520,"level":219},{},{"id":523,"data":2681,"type":226,"tunes":2682},{"text":1069},{},{"id":528,"data":2684,"type":226,"tunes":2685},{"text":1073},{},{"id":533,"data":2687,"type":42,"tunes":2688},{"text":1077,"level":219},{},{"id":538,"data":2690,"type":226,"tunes":2691},{"text":1081},{},{"id":543,"data":2693,"type":226,"tunes":2694},{"text":1085},{},{"id":548,"data":2696,"type":554,"tunes":2697},{"url":550,"title":551,"excerpt":1089,"ctaLabel":553},{},{"id":557,"data":2699,"type":42,"tunes":2700},{"text":1093,"level":219},{},{"id":562,"data":2702,"type":226,"tunes":2703},{"text":564},{},{"id":567,"data":2705,"type":226,"tunes":2706},{"text":1100},{},{"id":572,"data":2708,"type":42,"tunes":2709},{"text":574,"level":219},{},{"id":577,"data":2711,"type":606,"tunes":2721},{"steps":2712,"title":604,"orientation":605},[2713,2714,2715,2716,2717,2718,2719,2720],{"label":581,"description":582},{"label":584,"description":585},{"label":1111,"description":588},{"label":1113,"description":1114},{"label":593,"description":594},{"label":596,"description":1117},{"label":599,"description":1119},{"label":602,"description":1121},{},{"id":609,"data":2723,"type":42,"tunes":2724},{"text":611,"level":219},{},{"id":614,"data":2726,"type":327,"tunes":2738},{"content":2727,"stretched":43,"withHeadings":14},[2728,2729,2730,2731,2732,2733,2734,2735,2736,2737],[618,619],[1131,622],[624,625],[627,1134],[630,631],[633,634],[636,637],[639,640],[642,1140],[645,646],{},{"id":649,"data":2740,"type":42,"tunes":2741},{"text":651,"level":219},{},{"id":654,"data":2743,"type":226,"tunes":2744},{"text":656},{},{"id":659,"data":2746,"type":670,"tunes":2749},{"meta":2747,"items":2748,"style":669},{},[1153,664,1154,1155,667,1156],{},{"id":673,"data":2751,"type":42,"tunes":2752},{"text":675,"level":219},{},{"id":678,"data":2754,"type":226,"tunes":2755},{"text":1163},{},{"id":683,"data":2757,"type":226,"tunes":2758},{"text":1167},{},{"id":688,"data":2760,"type":42,"tunes":2761},{"text":690,"level":219},{},{"id":693,"data":2763,"type":226,"tunes":2764},{"text":1174},{},{"id":698,"data":2766,"type":226,"tunes":2767},{"text":1178},{},{"id":703,"data":2769,"type":42,"tunes":2770},{"text":705,"level":219},{},{"id":708,"data":2772,"type":226,"tunes":2773},{"text":1185},{},{"id":713,"data":2775,"type":226,"tunes":2776},{"text":1189},{},{"id":718,"data":2778,"type":42,"tunes":2779},{"text":720,"level":219},{},{"id":723,"data":2781,"type":226,"tunes":2782},{"text":1196},{},{"id":728,"data":2784,"type":226,"tunes":2785},{"text":1200},{},{"id":733,"data":2787,"type":42,"tunes":2788},{"text":735,"level":219},{},{"id":738,"data":2790,"type":738,"tunes":2797},{"items":2791,"title":1220},[2792,2793,2794,2795,2796],{"id":742,"answer":1209,"question":1210},{"id":746,"answer":1212,"question":748},{"id":750,"answer":1214,"question":1215},{"id":754,"answer":755,"question":1217},{"id":758,"answer":759,"question":1219},{},{"id":764,"data":2799,"type":42,"tunes":2800},{"text":766,"level":219},{},{"id":769,"data":2802,"type":769,"tunes":2810},{"title":771,"entries":2803},[2804,2805,2806,2807,2808,2809],{"term":774,"anchor":775,"definition":776},{"term":778,"anchor":779,"definition":780},{"term":782,"anchor":783,"definition":1231},{"term":786,"anchor":787,"definition":1233},{"term":509,"anchor":790,"definition":1235},{"term":793,"anchor":794,"definition":1237},{},{"id":798,"data":2812,"type":42,"tunes":2813},{"text":1241,"level":219},{},{"id":803,"data":2815,"type":810,"tunes":2818},{"link":805,"meta":2816},{"image":2817,"title":808,"description":1247},{"url":417},{},{"id":813,"data":2820,"type":810,"tunes":2823},{"link":815,"meta":2821},{"image":2822,"title":1253,"description":1254},{"url":417},{},{"id":822,"data":2825,"type":810,"tunes":2828},{"link":824,"meta":2826},{"image":2827,"title":1260,"description":1261},{"url":417},{},{"id":831,"data":2830,"type":810,"tunes":2833},{"link":833,"meta":2831},{"image":2832,"title":1267,"description":1268},{"url":417},{},{"id":840,"data":2835,"type":810,"tunes":2838},{"link":842,"meta":2836},{"image":2837,"title":1274,"description":846},{"url":417},{},{"id":849,"data":2840,"type":810,"tunes":2843},{"link":851,"meta":2841},{"image":2842,"title":854,"description":1280},{"url":417},{},{"id":858,"data":2845,"type":810,"tunes":2848},{"link":860,"meta":2846},{"image":2847,"title":1286,"description":1287},{"url":417},{},{"id":867,"data":2850,"type":810,"tunes":2853},{"link":869,"meta":2851},{"image":2852,"title":872,"description":1293},{"url":417},{},{"id":876,"data":2855,"type":810,"tunes":2858},{"link":878,"meta":2856},{"image":2857,"title":1299,"description":1300},{"url":417},{},"Post erfolgreich abgerufen",{"items":2861,"source":2883,"manualIds":2884,"manualMatchedIds":2885},[2862,2869,2876],{"id":2863,"slug":2864,"title":2865,"excerpt":2866,"featuredImage":2867,"publishedAt":2868},"477","computer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system","Agenti per l'uso del computer: perché una demo di successo può comunque essere un sistema inaffidabile","Gli agenti computer-use possono ora completare impressionanti flussi di lavoro su browser e desktop, ma una singola esecuzione riuscita dimostra la capacità—non l'affidabilità. Questo articolo mostra come testare la ripetibilità, la robustezza ambientale, il controllo a lungo orizzonte, la consapevolezza dello stato, la verifica dei risultati e la gestione sicura degli obiettivi.","\u002Fuploads\u002F2026\u002F09\u002Fcomputer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system-1790352854690-75qnrg.webp","2026-09-25T12:13:00.000Z",{"id":2870,"slug":2871,"title":2872,"excerpt":2873,"featuredImage":2874,"publishedAt":2875},"451","test-dev-enterprise","Comprehensive Guide to Test Dev Enterprise Stajic.de: Architecture and Best Practices","Explore the architectural principles, benefits, and technical details of managing an enterprise-grade development and testing environment with Test DEv Enterprise Stajic.de.","\u002Fuploads\u002F2026\u002F05\u002Ftest-dev-enterprise-1779534260081-r4dvxn.webp","2026-05-22T23:01:00.000Z",{"id":2877,"slug":2878,"title":2879,"excerpt":2880,"featuredImage":2881,"publishedAt":2882},"457","should-you-buy-5g-openwrt-router-old-firmware","Dovresti Acquistare un Router OpenWrt 5G con Firmware Vecchio? ZBT Z8102AX come Esempio Pratico","Acquistare un router 5G OpenWrt con firmware più vecchio può avere senso, ma solo nelle giuste condizioni. Lo ZBT Z8102AX mostra chiaramente entrambi i lati: l'hardware è utile, il modem funziona e il router è rimasto stabile durante i test, ma OpenWrt 21.02, il packaging debole e i percorsi di aggiornamento poco chiari richiedono una decisione d'acquisto attenta.","\u002Fuploads\u002F2026\u002F06\u002Fopenwrt-router-review-dual-sim-05-1781620596218-5ldld4.webp","2026-06-16T10:41:00.000Z","fallback",[],[]]