[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"portal-settings:stajic:es":3,"public-menus:all":38,"post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:es":205,"related:post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:es:1":2875},{"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","es","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":2874},{"id":207,"title":208,"slug":209,"content":210,"contentJson":211,"excerpt":1316,"featuredImage":1317,"featuredImageAlt":1318,"featuredImageCaption":10,"featuredImageTitle":10,"featuredImageCopyright":10,"featuredImageAuthor":10,"featuredImageSourceUrl":10,"featuredImageLicense":10,"featuredImageIsAiGenerated":43,"status":1319,"publishedAt":1320,"createdAt":1321,"updatedAt":1322,"seoLocalePaths":1323,"categories":1332,"author":1345,"translations":1350},"474","Migrar del SDK de Agentes de OpenAI a la API de Agentes: ¿Qué cambia realmente a nivel arquitectónico?","migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Contenido\">\u003Cstrong class=\"editorjs-toc__title\">Contenido\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 migración es de un bucle propiedad de la aplicación a un harness gestionado\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">El Mapa de Migración de Límites de Tiempo de Ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Qué puede migrar conceptualmente sin cambiar la propiedad\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Qué no debe migrarse uno a uno\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Paso 1 — Separar el estado del dominio del estado de la sesión del agente\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Paso 2 — Convertir la mentalidad de ejecutor en una mentalidad de sesión y eventos\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Paso 3 — Rediseñar las herramientas de función en torno a las acciones requeridas\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Paso 4 — Decidir dónde debe ocurrir la ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Paso 5 — Reemplazar la recuperación implícita con manejo explícito del ciclo de vida\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Paso 6 — Reconstruir la observabilidad en torno al nuevo límite de traza\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Paso 7 — Preservar las evaluaciones antes de cambiar el tiempo de ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">La prueba de migración\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Qué medir durante la migración\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Cuándo no migrar todavía\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Cuándo la migración se vuelve estratégicamente importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Qué cambiaría esta respuesta\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Limitaciones\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Conclusión\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">Preguntas frecuentes\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Glosario\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Fuentes primarias y lecturas adicionales\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">La migración es de un bucle propiedad de la aplicación a un arnés gestionado\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">El Mapa de Migración de Límites de Tiempo de Ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Qué puede migrar conceptualmente sin cambiar la propiedad\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Qué no debería migrarse uno a uno\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Paso 1 — Separar el estado de dominio del estado de sesión del agente\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Paso 2 — Convertir la mentalidad de runner en una mentalidad de sesión y eventos\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Paso 3 — Rediseñar las herramientas de función en torno a las acciones requeridas\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Paso 4 — Decidir dónde debería ocurrir la ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Paso 5 — Reemplazar la recuperación implícita con manejo explícito del ciclo de vida\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Paso 6 — Reconstruir la observabilidad en torno al nuevo límite de traza\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Paso 7 — Preservar las evaluaciones antes de cambiar el tiempo de ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">La prueba de verificación de la migración\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Qué medir durante la migración\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Cuándo no migrar todavía\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Cuándo la migración se vuelve estratégicamente importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">¿Qué cambiaría esta respuesta?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Limitaciones\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Conclusión\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">Preguntas frecuentes\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Glosario\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Fuentes primarias y lecturas adicionales\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Cp>Migrar del SDK de Agentes de OpenAI a la API de Agentes no es un simple cambio de nombre en las importaciones. El límite arquitectónico central cambia: el SDK ejecuta el bucle del agente dentro de tu aplicación, mientras que la API de Agentes ejecuta un harness de Codex gestionado y una sesión duradera del lado de OpenAI. Por lo tanto, la pregunta de la migración no es \"¿Qué clases se asignan a qué endpoints?\" sino \"¿Qué responsabilidades de tiempo de ejecución cruzan el límite, cuáles permanecen en nuestra aplicación y cuáles necesitan ser rediseñadas?\"\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\">Respuesta directa\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Una migración real del SDK de Agentes → API de Agentes cambia la propiedad del tiempo de ejecución.&lt;\u002Fstrong&gt; Tu configuración de agente reutilizable aún puede contener modelo, instrucciones y herramientas, pero el bucle, la sesión duradera, la orquestación, la compactación de contexto y la recuperación se trasladan hacia el tiempo de ejecución gestionado de la API de Agentes. Tu aplicación debe mantener el estado del dominio, la autorización, las reglas de negocio, las implementaciones de funciones y la lógica de auditoría fuera de la sesión del agente. Trata la migración como un rediseño de límites, no como una conversión mecánica de código.\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\">Actualizado al 25 de septiembre de 2026\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">OpenAI actualmente marca el SDK de Agentes como &lt;strong&gt;feature complete&lt;\u002Fstrong&gt; y recomienda la API de Agentes para nuevas aplicaciones de agentes. La API de Agentes está en beta pública. Las aplicaciones existentes del SDK siguen siendo compatibles, y la migración inmediata no es automáticamente obligatoria.\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\">Acerca del modelo de migración\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">El Mapa de Migración de Límites de Tiempo de Ejecución y la Prueba de Verificación de Migración en este artículo son herramientas prácticas de arquitectura, no marcos oficiales de migración de OpenAI. Se derivan de las diferencias actuales de tiempo de ejecución documentadas por OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-6\">La migración es de un bucle propiedad de la aplicación a un harness gestionado\u003C\u002Fh2>\n\u003Cp>En el SDK de Agentes, una ejecución es un turno a nivel de aplicación. El runner del SDK llama al modelo, inspecciona la salida, ejecuta herramientas, sigue los handoffs y continúa hasta alcanzar un punto de parada. Tu proceso aloja ese bucle y, por lo tanto, es dueño de su ciclo de vida.\u003C\u002Fp>\n\u003Cp>En la API de Agentes, OpenAI ejecuta el harness. Una sesión es una instancia duradera de una configuración de agente que acepta tareas, produce eventos, puede pausarse para acciones requeridas y puede continuar a lo largo del tiempo. OpenAI gestiona las sesiones, la orquestación, la compactación de contexto y la recuperación; tu aplicación envía trabajo, maneja herramientas de función, recibe eventos y opcionalmente gestiona un entorno de ejecución autoalojado.\u003C\u002Fp>\n\u003Cp>Ese cambio de propiedad es la migración. Todo lo demás — sintaxis de la API, esquemas de herramientas, manejo de eventos, IDs de sesión — se deriva de ello.\u003C\u002Fp>\n\u003Ch2 id=\"section-10\">El Mapa de Migración de Límites de Tiempo de Ejecución\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\">Aspecto\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">SDK de Agentes\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Objetivo de migración de la API de Agentes\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Bucle del agente\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Se ejecuta en tu aplicación a través del runner del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Se ejecuta en el harness de Codex gestionado\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Definición de agente reutilizable\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Objeto Agent en el código de la aplicación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Configuración de agente guardada o en línea con modelo, instrucciones y herramientas\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuidad de conversación \u002F trabajo\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Estrategia de sesión del SDK, historial, continuación de resultados o almacenamiento de la aplicación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Sesión duradera de la API de Agentes\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ejecución de herramientas\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El SDK coordina las llamadas a herramientas en tu tiempo de ejecución\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El harness solicita llamadas a funciones; tu aplicación devuelve resultados\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gestión de contexto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tu tiempo de ejecución \u002F estrategia de sesión del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Contexto de sesión gestionado, compactación y recuperación, más tus propios límites de datos de la aplicación\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Handoffs \u002F especialistas\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Primitivas de orquestación del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportamiento del harness \u002F subagente en la API de Agentes; no asumas semántica uno a uno\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Entorno de ejecución\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tu tiempo de ejecución de la aplicación o entorno específico de la herramienta\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Entorno opcional alojado por OpenAI o autoalojado adjunto a la sesión\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 del SDK desde la ejecución\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Flujo de eventos de sesión de la API de Agentes\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ciclo de vida asíncrono\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Generalmente gestionado por la aplicación en torno a la ejecución del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Estados de sesión nativos, turnos asíncronos y webhooks\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trazabilidad \u002F observabilidad\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trazabilidad del SDK de Agentes y registros de la aplicación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Registros de sesión de Agentes, eventos, turnos, llamadas a herramientas, subagentes y trazas exportables\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Recuperación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Responsabilidad de la aplicación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Recuperación gestionada del harness\u002Fsesión más recuperación propia de la aplicación para sistemas externos y entornos autoalojados\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-12\">Qué puede migrar conceptualmente sin cambiar la propiedad\u003C\u002Fh2>\n\u003Cp>Varios conceptos de la aplicación sobreviven la migración sin problemas aunque su representación cambie. Los modelos, las instrucciones, las definiciones de funciones con esquema JSON, el acceso a MCP, las descripciones de herramientas y los requisitos de salida estructurada siguen siendo aspectos de la configuración del agente.\u003C\u002Fp>\n\u003Cp>El modelo de configuración de la API de Agentes de OpenAI define explícitamente un agente a través del modelo, las instrucciones, las herramientas, el razonamiento y el comportamiento de salida. Las herramientas de función siguen siendo código de la aplicación: el harness solicita una llamada a función y tu manejador devuelve el resultado. OpenAI también señala que las implementaciones de funciones usadas con la API de Respuestas pueden reutilizarse con el flujo de sesión de la API de Agentes.\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\">Buen candidato para migración\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Una función de negocio pura como &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt; no debería necesitar saber si el llamador es el SDK de Agentes o la API de Agentes. Mantén su lógica de dominio detrás de una interfaz de aplicación estable y migra solo el adaptador orientado al agente.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-16\">Qué no debe migrarse uno a uno\u003C\u002Fh2>\n\u003Cp>El patrón de migración peligroso es recrear cada abstracción de tiempo de ejecución del SDK dentro de la API de Agentes. Eso puede dejarte pagando por un harness gestionado mientras sigues operando un harness en la sombra en tu aplicación.\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\">Suposición de la era del SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Por qué una copia directa es riesgosa\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Pregunta de migración\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El bucle de la aplicación posee cada continuación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La API de Agentes ya posee el bucle del harness\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué lógica de continuación es lógica de producto y qué debería trasladarse a la sesión gestionada?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El objeto de sesión local es el mecanismo principal de continuidad\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Las sesiones de la API de Agentes son recursos duraderos con su propio ciclo de vida\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué estado pertenece a la sesión frente a la base de datos del producto?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cada interrupción se maneja de forma síncrona\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Los turnos de la API de Agentes son asíncronos y pueden exponer estados action_required\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué acciones necesitan webhooks, workers, idempotencia y manejadores reanudables?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Toda la ejecución de herramientas ocurre donde se ejecuta el proceso del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Los manejadores de funciones y los entornos de ejecución pueden ser separados\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Dónde debería ejecutarse realmente cada herramienta?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La traza del SDK es la línea de tiempo operativa\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La API de Agentes expone eventos de sesión, turnos y trazas gestionadas\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué datos de auditoría a nivel de aplicación aún necesitan su propio registro?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El objeto handoff se asigna directamente a un modelo de subagente alojado\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La semántica del tiempo de ejecución puede diferir\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué propiedad visible para el usuario y comportamiento de especialista deben preservarse, no solo la antigua estructura de clases?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-19\">Paso 1 — Separar el estado del dominio del estado de la sesión del agente\u003C\u002Fh2>\n\u003Cp>Antes de tocar las llamadas a la API, clasifica el estado que tu aplicación SDK mantiene actualmente. Parte del estado existe solo para mantener la conversación del agente en marcha. Otro estado es la verdad del negocio: permisos de usuario, estado del proyecto, datos de pedidos, aprobación de flujos de trabajo, registros de clientes, versiones de documentos, estado de políticas o configuración de la aplicación.\u003C\u002Fp>\n\u003Cp>La segunda categoría no debería volverse dependiente de una sesión de la API de Agentes. Una sesión duradera es una continuidad útil para el agente; no es un reemplazo de la fuente de verdad de tu producto. Si la sesión desaparece, expira, se reconstruye o cambia de implementación, tu aplicación debe seguir sabiendo qué es verdadero.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Prueba de ubicación del estado\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 de estado\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\">Propietario preferido\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\">Razón\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\">Continuidad de la conversación\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\">Verdad del negocio\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\">Artefacto duradero\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\">Estado de trabajo temporal\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\">Paso 2 — Convertir la mentalidad de ejecutor en una mentalidad de sesión y eventos\u003C\u002Fh2>\n\u003Cp>Las aplicaciones SDK a menudo piensan en términos de llamar a run y recibir un resultado. La API de Agentes piensa en términos de una sesión duradera cuyos turnos pueden ejecutarse de forma asíncrona. Un mensaje a una sesión inactiva inicia el trabajo; un mensaje durante un turno activo puede dirigirlo. El progreso llega a través de streaming o webhooks.\u003C\u002Fp>\n\u003Cp>Esto afecta la arquitectura de la aplicación. El trabajo de producción de larga duración no debería depender de que una sola solicitud HTTP permanezca activa. Tu producto necesita identificadores de sesión estables, persistencia del ciclo de vida, verificación de webhooks, manejadores idempotentes y una forma de reconciliar el estado actual de la sesión después de reinicios del proceso.\u003C\u002Fp>\n\u003Ch2 id=\"section-26\">Paso 3 — Rediseñar las herramientas de función en torno a las acciones requeridas\u003C\u002Fh2>\n\u003Cp>Las herramientas de función siguen siendo una frontera importante de la aplicación. Defines la función y su esquema JSON en la configuración del agente. Cuando el harness necesita la función, la sesión puede entrar en un estado de acción requerida. Tu aplicación recupera la acción requerida, ejecuta la lógica de negocio y devuelve el resultado.\u003C\u002Fp>\n\u003Cp>Eso significa que la implementación de la función debería ser segura de reanudar. Un webhook puede entregarse mientras otro trabajador está procesando. Puede ocurrir un fallo de red después del efecto secundario externo pero antes de que se devuelva el resultado. Por lo tanto, la migración es un buen momento para agregar IDs de llamada, claves de idempotencia, autorización explícita, políticas de tiempo de espera y registros de auditoría a las herramientas consecuentes.\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\">Trampa de migración de herramientas\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">No trates una llamada de función desde el harness gestionado como autorización para realizar la acción. El harness decide &lt;em&gt;qué quiere llamar&lt;\u002Fem&gt;; tu aplicación sigue decidiendo si el usuario actual, la sesión y el estado del negocio permiten esa acción.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-30\">Paso 4 — Decidir dónde debe ocurrir la ejecución\u003C\u002Fh2>\n\u003Cp>La API de Agentes separa el harness gestionado del entorno de ejecución. Un agente puede operar sin un entorno dedicado, en un sandbox alojado por OpenAI, o a través de un entorno autoalojado conectado a la sesión.\u003C\u002Fp>\n\u003Cp>Esto crea una decisión de migración que las aplicaciones SDK quizás nunca hayan tomado explícitamente: ¿qué código debería ejecutarse como una función de aplicación, qué código pertenece a un sandbox y qué cargas de trabajo requieren infraestructura que tú controlas?\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\">Necesidad\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Frontera probable\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Llamar a un servicio interno existente a través de lógica de negocio controlada\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Herramienta de función manejada por tu aplicación\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ejecutar código aislado o trabajar con archivos temporales sin infraestructura privada\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Entorno alojado por OpenAI\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Acceder a recursos de red privados, software de sistema personalizado o cómputo local controlado\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Entorno autoalojado\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Persistir artefactos de producto aceptados\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Almacenamiento propiedad de la aplicación, no solo el sistema de archivos del sandbox\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ejecutar un efecto secundario de negocio de alto impacto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Función de aplicación con controles de autorización y auditoría\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-34\">Paso 5 — Reemplazar la recuperación implícita con manejo explícito del ciclo de vida\u003C\u002Fh2>\n\u003Cp>El harness gestionado proporciona recuperación a nivel de sesión, pero tu aplicación sigue siendo dueña de cada dependencia externa a su alrededor. Los entornos autoalojados necesitan aprovisionamiento, reconexión y apagado. Los manejadores de funciones pueden fallar. Los webhooks pueden reintentarse. El estado del lado del producto puede cambiar mientras un agente está inactivo.\u003C\u002Fp>\n\u003Cp>Por lo tanto, la migración necesita dos modelos de recuperación: recuperación del tiempo de ejecución del agente y recuperación de la operación de negocio. La primera es cada vez más gestionada por la API de Agentes. La segunda sigue siendo tu responsabilidad.\u003C\u002Fp>\n\u003Ch2 id=\"section-37\">Paso 6 — Reconstruir la observabilidad en torno al nuevo límite de traza\u003C\u002Fh2>\n\u003Cp>Las sesiones de Agents API exponen eventos, historial guardado, turnos, llamadas a herramientas, subagentes y uso de tokens. OpenAI también proporciona registros de sesión en la plataforma y exportación de trazas.\u003C\u002Fp>\n\u003Cp>No descartes la observabilidad de tu aplicación porque las trazas de la plataforma hayan mejorado. Los registros de producto aún necesitan conectar la sesión del agente con la identidad del usuario, la decisión de autorización, el objeto de dominio, el efecto secundario de la herramienta, el registro de aprobación y el resultado final aceptado. La traza de producción útil es la unión entre la evidencia del tiempo de ejecución del agente y la evidencia del tiempo de ejecución del negocio.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Fes\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\">Confiabilidad de agentes de IA: por qué la respuesta final no es suficiente\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">La confiabilidad del agente depende de la ruta de ejecución, las herramientas y las decisiones intermedias, no solo del resultado final.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Leer el artículo sobre confiabilidad →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-41\">Paso 7 — Preservar las evaluaciones antes de cambiar el tiempo de ejecución\u003C\u002Fh2>\n\u003Cp>Una migración puede parecer exitosa porque el nuevo sistema aún produce respuestas plausibles mientras cambia silenciosamente la elección de herramientas, la continuidad de la sesión, el comportamiento de transferencia, la latencia o la recuperación de fallos. Construye la línea base de comportamiento antes de cambiar los tiempos de ejecución.\u003C\u002Fp>\n\u003Cp>La línea base debe incluir tareas representativas, llamadas a herramientas esperadas, acciones prohibidas, puntos de aprobación, continuidad de estado, escenarios de recuperación y criterios de aceptación de la salida final. Ejecuta las arquitecturas antigua y nueva contra los mismos casos siempre que sea posible.\u003C\u002Fp>\n\u003Ch2 id=\"section-44\">La prueba de migración\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Demostrar el nuevo tiempo de ejecución antes de la transición\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. Congelar la línea base de comportamiento\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Captura trazas representativas del SDK, salidas esperadas, rutas de herramientas, puntos de aprobación y casos de fallo.\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. Inventariar la propiedad del estado\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Marca cada campo de estado como estado de sesión del agente, estado de dominio autoritativo, artefacto duradero o estado de trabajo efímero.\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. Reutilizar implementaciones de herramientas estables\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Mantén las funciones de negocio detrás de interfaces de aplicación; reemplaza solo la integración orientada al agente cuando sea posible.\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. Construir una porción vertical de Agents API\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Migra un flujo de trabajo con forma de producción que incluya creación de sesión, herramientas, eventos, entorno y persistencia.\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. Inyectar interrupciones\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Prueba el reinicio del proceso, el reintento de webhook, el tiempo de espera de función, la reconexión del entorno autoalojado y el estado de 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. Comparar trazas, no solo respuestas\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Verifica la elección de herramientas, la autorización, la ruta de evidencia, las transiciones de estado y los efectos secundarios contra la línea base.\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. Ejecutar tráfico en sombra\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Cuando sea factible, reproduce o refleja tareas representativas antes de hacer autoritativo el nuevo tiempo de ejecución.\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. Transicionar detrás de un límite reversible\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Mantén adaptadores de integración y capacidad de reversión hasta que el comportamiento en producción sea estable.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-46\">Qué medir durante la migración\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\">Dimensión\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Verificación de migración\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Éxito de la tarea\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿El nuevo tiempo de ejecución cumple los mismos o mejores criterios de aceptación?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Corrección de herramientas\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Llama a la herramienta correcta con argumentos válidos y autorización?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuidad de estado\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Puede el trabajo reanudarse a través de turnos, reinicios y esperas asíncronas?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Recuperación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué sucede después de la pérdida de webhook, fallo del manejador, desconexión del entorno o tiempo de espera?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trazabilidad\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Se puede unir cada acción consecuente a la sesión, usuario, llamada a herramienta y objeto de dominio?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportamiento del contexto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Las sesiones de larga duración preservan las restricciones sin arrastrar verdad de aplicación obsoleta?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Latencia\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Cómo afectan el inicio de sesión, el aprovisionamiento del entorno y el trabajo multiturno al tiempo visible para el usuario?\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\">¿Qué cambia en el uso del modelo, uso del sandbox, contexto repetido y operaciones de infraestructura?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Carga operativa\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué responsabilidades previamente propias de la aplicación desaparecieron realmente y cuáles simplemente se movieron?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-48\">Cuándo no migrar todavía\u003C\u002Fh2>\n\u003Cp>Una aplicación existente de Agents SDK no se convierte en mala arquitectura simplemente porque la dirección de la plataforma cambió. OpenAI continúa con el mantenimiento, las correcciones de seguridad, las correcciones de errores críticos y el trabajo de compatibilidad. Si la aplicación es estable, está bien evaluada y no tiene un requisito de hoja de ruta bloqueado, una migración inmediata del tiempo de ejecución puede no estar justificada.\u003C\u002Fp>\n\u003Cul>\u003Cli>Una capacidad requerida del SDK aún no está disponible en la Agents API.\u003C\u002Fli>\u003Cli>La migración interrumpiría un período crítico de producción sin entregar valor a corto plazo.\u003C\u002Fli>\u003Cli>La aplicación depende de semánticas de orquestación personalizadas que no han sido validadas en el arnés gestionado.\u003C\u002Fli>\u003Cli>La portabilidad del proveedor es un requisito estricto y la abstracción actual del SDK es materialmente valiosa.\u003C\u002Fli>\u003Cli>Tu equipo aún no ha separado el estado de negocio del estado del tiempo de ejecución del agente, lo que hace insegura la transición.\u003C\u002Fli>\u003Cli>El comportamiento de la nueva Agents API no ha sido probado contra cargas de trabajo de producción representativas.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-51\">Cuándo la migración se vuelve estratégicamente importante\u003C\u002Fh2>\n\u003Cp>La migración se vuelve más convincente cuando los requisitos del producto se alinean con el arnés gestionado: trabajo duradero de larga duración, compactación y recuperación de contexto gestionadas por la plataforma, capacidades más nuevas del tiempo de ejecución del agente, ejecución en sandbox, gestión de ciclo de vida alojada más rica, o el deseo de reducir la cantidad de código de orquestación que opera tu aplicación.\u003C\u002Fp>\n\u003Cp>La señal más fuerte no es \"el SDK antiguo está completo en funciones\". Es \"nuestra hoja de ruta ahora depende de capacidades cuyo hogar natural es el tiempo de ejecución gestionado de Agents API\".\u003C\u002Fp>\n\u003Ch2 id=\"section-54\">Qué cambiaría esta respuesta\u003C\u002Fh2>\n\u003Cp>La estrategia de migración cambiaría si OpenAI publica herramientas de migración automatizadas, introduce capas de compatibilidad explícitas, cambia la semántica de sesión de la API de Agents, amplía o reduce el soporte de entornos autoalojados, o cambia la política de soporte del SDK de Agents.\u003C\u002Fp>\n\u003Cp>También cambiaría si cambian los requisitos de tu producto. Un asistente simple de solicitud-respuesta puede que no necesite en absoluto un arnés gestionado duradero. Un agente de codificación, investigación u operaciones de larga duración puede beneficiarse mucho más del modelo de propiedad de la API de Agents.\u003C\u002Fp>\n\u003Ch2 id=\"section-57\">Limitaciones\u003C\u002Fh2>\n\u003Cp>No existe un mapa universal uno a uno de migración de SDK a API porque las aplicaciones usan el SDK de Agents de manera diferente. Algunas dependen en gran medida de sesiones y traspasos; otras lo usan como un ejecutor ligero en torno a herramientas de función. La migración correcta depende de qué responsabilidades asume realmente tu aplicación hoy.\u003C\u002Fp>\n\u003Cp>La API de Agents también está en beta pública, por lo que los detalles de implementación pueden evolucionar. Trata los principios de propiedad de este artículo como más duraderos que cualquier forma de endpoint individual.\u003C\u002Fp>\n\u003Ch2 id=\"section-60\">Conclusión\u003C\u002Fh2>\n\u003Cp>Migrar del SDK de Agents a la API de Agents se entiende mejor como mover el límite del tiempo de ejecución del agente. El arnés gestionado asume más del bucle, la continuidad de sesión, la compactación y la recuperación. Tu aplicación debería volverse más explícita sobre las responsabilidades que siguen siendo tuyas: verdad del dominio, autorización, efectos secundarios de funciones, artefactos, auditabilidad y ciclo de vida del producto.\u003C\u002Fp>\n\u003Cp>Si una migración deja toda la maquinaria de orquestación antigua en su lugar y simplemente reemplaza las llamadas al SDK con llamadas a la API de Agents, probablemente ha perdido la oportunidad arquitectónica. El objetivo no es reproducir el tiempo de ejecución antiguo sobre el nuevo. El objetivo es decidir qué responsabilidades del tiempo de ejecución ya no pertenecen a tu aplicación.\u003C\u002Fp>\n\u003Ch2 id=\"section-63\">Preguntas frecuentes\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\">Migrar del SDK de Agents a la API de 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\">¿Migrar del SDK de Agents a la API de Agents es solo una reescritura de API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No. El cambio principal es la propiedad del tiempo de ejecución: el SDK de Agents ejecuta el bucle del agente en tu aplicación, mientras que la API de Agents ejecuta un arnés Codex gestionado y una sesión duradera. El estado, el ciclo de vida, el manejo de eventos y la recuperación deben revisarse como cuestiones de arquitectura.\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\">¿Es necesario reescribir mis herramientas de función?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">La implementación del negocio a menudo puede reutilizarse si ya está detrás de una interfaz de aplicación estable. La integración orientada al agente cambia porque las llamadas a funciones de la API de Agents se manejan a través de acciones requeridas y resultados de la sesión.\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\">¿Debería trasladar el estado del negocio a la sesión de la API de Agents?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">En general, no. Mantén el estado autoritativo del negocio y del producto en tus propias bases de datos o servicios. Usa la sesión del agente para la continuidad del agente y el contexto de trabajo, no como única fuente de verdad de tu producto.\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\">¿Necesito webhooks para la API de Agents?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No siempre, porque el streaming también está disponible. Los webhooks son especialmente útiles para sesiones de larga duración o asíncronas en las que tu aplicación debería reaccionar a los cambios del ciclo de vida sin mantener un flujo abierto.\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\">¿Debería migrar ahora toda aplicación existente del SDK de Agents?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No. El SDK sigue siendo compatible en modo de mantenimiento. Migra cuando el nuevo tiempo de ejecución aporte un valor significativo para la hoja de ruta y después de que el comportamiento requerido se haya validado con evaluaciones con forma de producción.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-65\">Glosario\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\">Términos clave de migración\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\">Límite del tiempo de ejecución\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">La división de responsabilidades entre el tiempo de ejecución del agente gestionado por la plataforma y el tiempo de ejecución propiedad de la aplicación.\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\">Arnés\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">El tiempo de ejecución del agente que coordina llamadas al modelo, herramientas, contexto, orquestación y ejecución continua.\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\">Sesión\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Una instancia duradera de la API de Agents que mantiene la configuración, la conversación y el trabajo guardado de un agente a lo largo de los turnos.\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\">Acción requerida\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un estado de sesión en el que la API de Agents necesita entrada externa, como el resultado de una función o una conexión de entorno, antes de que el trabajo pueda continuar.\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\">Entorno autoalojado\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un entorno de ejecución operado por tu infraestructura y conectado al arnés gestionado de la API de 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\">Prueba de validación de migración\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un método de validación por etapas que compara el nuevo tiempo de ejecución con líneas base de comportamiento, inyecciones de fallos, trazas y criterios de conmutación reversibles.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-67\">Fuentes primarias y lecturas adicionales\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 — SDK de Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Política de soporte actual: el SDK de Agents tiene todas las funciones completas, sigue mantenido y las nuevas aplicaciones deberían empezar con la API de 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 — Ejecutar agentes con el SDK de Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documentación del bucle del agente propiedad de la aplicación del SDK y el modelo de continuación.\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 — Descripción general de la API de Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Define los conceptos centrales de la API de Agents: agente, entorno, sesión, eventos y elementos.\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 — Arquitectura de la API de Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Explica el arnés alojado, el servidor de aplicaciones y los límites del entorno de ejecución alojado por OpenAI y autoalojado.\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 — Configurar Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Define la configuración reutilizable del agente y la personalización a nivel de sesión.\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 — Ejecutar y continuar sesiones\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documenta sesiones duraderas, turnos asíncronos, streaming y dirección.\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 — Funciones de la API de Agentes\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definición de herramienta de función y el límite del manejador de la aplicación para resultados de funciones requeridos.\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 — Webhooks de sesión\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Eventos de ciclo de vida para sesiones asíncronas, acciones requeridas y conexiones de entorno autoalojado.\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 — Observabilidad y uso de la API de Agentes\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Registros de sesión, eventos, turnos, llamadas a herramientas, subagentes, trazas e inspección del uso de tokens.\u003C\u002Fp>\u003C\u002Fa>\n\u003Cp>Migrar del SDK de Agentes de OpenAI a la API de Agentes no es un simple cambio de nombre de importación. El límite arquitectónico central cambia: el SDK ejecuta el bucle del agente dentro de tu aplicación, mientras que la API de Agentes ejecuta un arnés de Codex gestionado y una sesión duradera del lado de OpenAI. Por lo tanto, la pregunta de migración no es \"¿Qué clases se asignan a qué endpoints?\" sino \"¿Qué responsabilidades de tiempo de ejecución cruzan el límite, cuáles permanecen en nuestra aplicación y cuáles necesitan ser rediseñadas?\"\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\">Respuesta directa\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Una migración real del SDK de Agentes a la API de Agentes cambia la propiedad del tiempo de ejecución.&lt;\u002Fstrong&gt; Tu configuración de agente reutilizable aún puede contener modelo, instrucciones y herramientas, pero el bucle, la sesión duradera, la orquestación, la compactación de contexto y la recuperación se trasladan hacia el tiempo de ejecución gestionado de la API de Agentes. Tu aplicación debe mantener el estado del dominio, la autorización, las reglas de negocio, las implementaciones de funciones y la lógica de auditoría fuera de la sesión del agente. Trata la migración como un rediseño de límites, no como una conversión mecánica de código.\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\">Actualizado al 25 de septiembre de 2026\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">OpenAI actualmente marca el SDK de Agentes como &lt;strong&gt;completo en funciones&lt;\u002Fstrong&gt; y recomienda la API de Agentes para nuevas aplicaciones de agentes. La API de Agentes está en beta pública. Las aplicaciones existentes del SDK siguen siendo compatibles, y la migración inmediata no es automáticamente requerida.\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\">Acerca del modelo de migración\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">El Mapa de Migración de Límites de Tiempo de Ejecución y la Prueba de Migración en este artículo son herramientas prácticas de arquitectura, no marcos oficiales de migración de OpenAI. Se derivan de las diferencias actuales de tiempo de ejecución documentadas por OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Contenido\">\u003Cstrong class=\"editorjs-toc__title\">Contenido\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 migración es de un bucle propiedad de la aplicación a un harness gestionado\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">El Mapa de Migración de Límites de Tiempo de Ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Qué puede migrar conceptualmente sin cambiar la propiedad\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Qué no debe migrarse uno a uno\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Paso 1 — Separar el estado del dominio del estado de la sesión del agente\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Paso 2 — Convertir la mentalidad de ejecutor en una mentalidad de sesión y eventos\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Paso 3 — Rediseñar las herramientas de función en torno a las acciones requeridas\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Paso 4 — Decidir dónde debe ocurrir la ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Paso 5 — Reemplazar la recuperación implícita con manejo explícito del ciclo de vida\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Paso 6 — Reconstruir la observabilidad en torno al nuevo límite de traza\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Paso 7 — Preservar las evaluaciones antes de cambiar el tiempo de ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">La prueba de migración\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Qué medir durante la migración\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Cuándo no migrar todavía\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Cuándo la migración se vuelve estratégicamente importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Qué cambiaría esta respuesta\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Limitaciones\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Conclusión\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">Preguntas frecuentes\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Glosario\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Fuentes primarias y lecturas adicionales\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">La migración es de un bucle propiedad de la aplicación a un arnés gestionado\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">El Mapa de Migración de Límites de Tiempo de Ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Qué puede migrar conceptualmente sin cambiar la propiedad\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Qué no debería migrarse uno a uno\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Paso 1 — Separar el estado de dominio del estado de sesión del agente\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Paso 2 — Convertir la mentalidad de runner en una mentalidad de sesión y eventos\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Paso 3 — Rediseñar las herramientas de función en torno a las acciones requeridas\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Paso 4 — Decidir dónde debería ocurrir la ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Paso 5 — Reemplazar la recuperación implícita con manejo explícito del ciclo de vida\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Paso 6 — Reconstruir la observabilidad en torno al nuevo límite de traza\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Paso 7 — Preservar las evaluaciones antes de cambiar el tiempo de ejecución\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">La prueba de verificación de la migración\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Qué medir durante la migración\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Cuándo no migrar todavía\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Cuándo la migración se vuelve estratégicamente importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">¿Qué cambiaría esta respuesta?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Limitaciones\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Conclusión\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">Preguntas frecuentes\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Glosario\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Fuentes primarias y lecturas adicionales\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Ch2 id=\"section-82\">La migración es de un bucle propiedad de la aplicación a un arnés gestionado\u003C\u002Fh2>\n\u003Cp>En el SDK de Agentes, una ejecución es un turno a nivel de aplicación. El ejecutor del SDK llama al modelo, inspecciona la salida, ejecuta herramientas, sigue los traspasos y continúa hasta alcanzar un punto de parada. Tu proceso aloja ese bucle y por lo tanto posee su ciclo de vida.\u003C\u002Fp>\n\u003Cp>En la API de Agentes, OpenAI ejecuta el arnés. Una sesión es una instancia duradera de una configuración de agente que acepta tareas, produce eventos, puede pausarse para acciones requeridas y puede continuar a lo largo del tiempo. OpenAI gestiona sesiones, orquestación, compactación de contexto y recuperación; tu aplicación envía trabajo, maneja herramientas de función, recibe eventos y opcionalmente gestiona un entorno de ejecución autoalojado.\u003C\u002Fp>\n\u003Cp>Ese cambio de propiedad es la migración. Todo lo demás — sintaxis de API, esquemas de herramientas, manejo de eventos, IDs de sesión — se deriva de ello.\u003C\u002Fp>\n\u003Ch2 id=\"section-86\">El Mapa de Migración de Límites de Tiempo de Ejecución\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\">Preocupación\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">SDK de Agentes\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Objetivo de migración de la API de Agentes\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Bucle del agente\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Se ejecuta en tu aplicación a través del ejecutor del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Se ejecuta en el arnés de Codex gestionado\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Definición de agente reutilizable\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Objeto Agent en el código de la aplicación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Configuración de agente guardada o en línea con modelo, instrucciones y herramientas\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuidad de conversación \u002F trabajo\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Estrategia de sesión del SDK, historial, continuación de resultados o almacenamiento de la aplicación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Sesión duradera de la API de Agentes\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ejecución de herramientas\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El SDK coordina las llamadas a herramientas en tu tiempo de ejecución\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El arnés solicita llamadas a funciones; tu aplicación devuelve resultados\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gestión de contexto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tu tiempo de ejecución \u002F estrategia de sesión del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Contexto de sesión gestionado, compactación y recuperación, más tus propios límites de datos de la aplicación\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Traspasos \u002F especialistas\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Primitivas de orquestación del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportamiento del arnés \u002F subagente en la API de Agentes; no asumas semántica uno a uno\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Entorno de ejecución\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tu tiempo de ejecución de la aplicación o entorno específico de la herramienta\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Entorno opcional alojado por OpenAI o autoalojado adjunto a la sesión\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 del SDK desde la ejecución\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Flujo de eventos de sesión de la API de Agentes\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ciclo de vida asíncrono\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Generalmente gestionado por la aplicación alrededor de la ejecución del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Estados de sesión nativos, turnos asíncronos y webhooks\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trazabilidad \u002F observabilidad\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trazabilidad del SDK de Agentes y registros de la aplicación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Registros de sesión de Agentes, eventos, turnos, llamadas a herramientas, subagentes y trazas exportables\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Recuperación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Responsabilidad de la aplicación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Recuperación gestionada del arnés\u002Fsesión más recuperación propiedad de la aplicación para sistemas externos y entornos autoalojados\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-88\">Qué puede migrar conceptualmente sin cambiar la propiedad\u003C\u002Fh2>\n\u003Cp>Varios conceptos de la aplicación sobreviven a la migración limpiamente aunque su representación cambie. Modelos, instrucciones, definiciones de funciones con esquema JSON, acceso MCP, descripciones de herramientas y requisitos de salida estructurada siguen siendo preocupaciones de configuración del agente.\u003C\u002Fp>\n\u003Cp>El modelo de configuración de la API de Agentes de OpenAI define explícitamente un agente a través del modelo, instrucciones, herramientas, razonamiento y comportamiento de salida. Las herramientas de función siguen siendo código de la aplicación: el arnés solicita una llamada a función, y tu manejador devuelve el resultado. OpenAI también señala que las implementaciones de funciones utilizadas con la API de Respuestas pueden reutilizarse con el flujo de sesión de la API de Agentes.\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\">Buen candidato para migración\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Una función de negocio pura como &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt; no debería necesitar saber si quien la llama es el SDK de Agentes o la API de Agentes. Mantén su lógica de dominio detrás de una interfaz de aplicación estable y migra solo el adaptador orientado al agente.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-92\">Qué no debería migrarse uno a uno\u003C\u002Fh2>\n\u003Cp>El patrón de migración peligroso es recrear cada abstracción de tiempo de ejecución del SDK dentro de la API de Agentes. Eso puede dejarte pagando por un arnés gestionado mientras sigues operando un arnés en la sombra en tu aplicación.\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\">Suposición de la era del SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Por qué una copia directa es riesgosa\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Pregunta de migración\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El bucle de la aplicación posee cada continuación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La API de Agentes ya posee el bucle del arnés\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué lógica de continuación es lógica de producto y cuál debería pasar a la sesión gestionada?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El objeto de sesión local es el mecanismo principal de continuidad\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Las sesiones de la API de Agentes son recursos duraderos con su propio ciclo de vida\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué estado pertenece a la sesión frente a la base de datos del producto?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cada interrupción se maneja de forma síncrona\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Los turnos de la API de Agentes son asíncronos y pueden exponer estados action_required\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué acciones necesitan webhooks, workers, idempotencia y manejadores reanudables?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Toda la ejecución de herramientas ocurre donde se ejecuta el proceso del SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Los manejadores de funciones y los entornos de ejecución pueden estar separados\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Dónde debería ejecutarse realmente cada herramienta?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La traza del SDK es la línea de tiempo operativa\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La API de Agentes expone eventos de sesión, turnos y trazas gestionadas\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué datos de auditoría a nivel de aplicación todavía necesitan su propio registro?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">El objeto de handoff se asigna directamente a un modelo de subagente alojado\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La semántica de tiempo de ejecución puede diferir\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué propiedad visible para el usuario y comportamiento especializado deben preservarse, no solo la antigua estructura de clases?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-95\">Paso 1 — Separar el estado de dominio del estado de sesión del agente\u003C\u002Fh2>\n\u003Cp>Antes de tocar las llamadas a la API, clasifica el estado que tu aplicación del SDK transporta actualmente. Parte del estado existe solo para mantener la conversación del agente en marcha. Otro estado es verdad de negocio: permisos de usuario, estado del proyecto, datos de pedidos, aprobación de flujos de trabajo, registros de clientes, versiones de documentos, estado de políticas o configuración de la aplicación.\u003C\u002Fp>\n\u003Cp>La segunda categoría no debería volverse dependiente de una sesión de la API de Agentes. Una sesión duradera es una continuidad útil para el agente; no es un reemplazo de la fuente de verdad de tu producto. Si la sesión desaparece, expira, se reconstruye o cambia de implementación, tu aplicación debe seguir sabiendo qué es verdadero.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Prueba de ubicación del estado\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 de estado\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\">Propietario preferido\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\">Razón\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\">Continuidad de la conversación\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\">Verdad de negocio\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\">Artefacto duradero\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\">Estado de trabajo temporal\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\">Paso 2 — Convertir la mentalidad de runner en una mentalidad de sesión y eventos\u003C\u002Fh2>\n\u003Cp>Las aplicaciones del SDK a menudo piensan en términos de llamar a run y recibir un resultado. La API de Agentes piensa en términos de una sesión duradera cuyos turnos pueden ejecutarse de forma asíncrona. Un mensaje a una sesión inactiva inicia trabajo; un mensaje durante un turno activo puede dirigirlo. El progreso llega a través de streaming o webhooks.\u003C\u002Fp>\n\u003Cp>Esto afecta la arquitectura de la aplicación. El trabajo de producción de larga duración no debería depender de que una solicitud HTTP permanezca viva. Tu producto necesita identificadores de sesión estables, persistencia del ciclo de vida, verificación de webhooks, manejadores idempotentes y una forma de reconciliar el estado actual de la sesión después de reinicios del proceso.\u003C\u002Fp>\n\u003Ch2 id=\"section-102\">Paso 3 — Rediseñar las herramientas de función en torno a las acciones requeridas\u003C\u002Fh2>\n\u003Cp>Las herramientas de función siguen siendo una frontera importante de la aplicación. Defines la función y su esquema JSON en la configuración del agente. Cuando el arnés necesita la función, la sesión puede entrar en un estado de acción requerida. Tu aplicación recupera la acción requerida, ejecuta la lógica de negocio y devuelve el resultado.\u003C\u002Fp>\n\u003Cp>Eso significa que la implementación de la función debería ser segura de reanudar. Un webhook puede entregarse mientras otro worker está procesando. Un fallo de red puede ocurrir después del efecto secundario externo pero antes de que se devuelva el resultado. Por lo tanto, la migración es un buen momento para agregar IDs de llamada, claves de idempotencia, autorización explícita, políticas de tiempo de espera y registros de auditoría a las herramientas consecuentes.\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\">Trampa de migración de herramientas\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">No trates una llamada de función desde el arnés gestionado como autorización para realizar la acción. El arnés decide &lt;em&gt;qué quiere llamar&lt;\u002Fem&gt;; tu aplicación sigue decidiendo si el usuario actual, la sesión y el estado de negocio permiten esa acción.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-106\">Paso 4 — Decidir dónde debería ocurrir la ejecución\u003C\u002Fh2>\n\u003Cp>La API de Agentes separa el arnés gestionado del entorno de ejecución. Un agente puede operar sin un entorno dedicado, en un sandbox alojado por OpenAI, o a través de un entorno autoalojado conectado a la sesión.\u003C\u002Fp>\n\u003Cp>Esto crea una decisión de migración que las aplicaciones del SDK quizás nunca hayan tomado explícitamente: qué código debería ejecutarse como una función de aplicación, qué código pertenece a un sandbox y qué cargas de trabajo requieren infraestructura que tú controles.\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\">Necesidad\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Límite probable\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Llamar a un servicio interno existente a través de lógica de negocio controlada\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Herramienta de función gestionada por tu aplicación\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ejecutar código aislado o trabajar con archivos temporales sin infraestructura privada\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Entorno alojado por OpenAI\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Acceder a recursos de red privada, software de sistema personalizado o cómputo local controlado\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Entorno autoalojado\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Persistir artefactos de producto aceptados\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Almacenamiento propiedad de la aplicación, no solo el sistema de archivos del sandbox\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ejecutar un efecto secundario de negocio de alto impacto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Función de la aplicación con controles de autorización y auditoría\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-110\">Paso 5 — Reemplazar la recuperación implícita con manejo explícito del ciclo de vida\u003C\u002Fh2>\n\u003Cp>El harness gestionado proporciona recuperación a nivel de sesión, pero tu aplicación sigue siendo responsable de cada dependencia externa a su alrededor. Los entornos autoalojados necesitan aprovisionamiento, reconexión y apagado. Los manejadores de funciones pueden fallar. Los webhooks pueden reintentarse. El estado del lado del producto puede cambiar mientras un agente está inactivo.\u003C\u002Fp>\n\u003Cp>Por lo tanto, la migración necesita dos modelos de recuperación: recuperación del tiempo de ejecución del agente y recuperación de la operación de negocio. La primera está cada vez más gestionada por la Agents API. La segunda sigue siendo tu responsabilidad.\u003C\u002Fp>\n\u003Ch2 id=\"section-113\">Paso 6 — Reconstruir la observabilidad en torno al nuevo límite de traza\u003C\u002Fh2>\n\u003Cp>Las sesiones de la Agents API exponen eventos, historial guardado, turnos, llamadas a herramientas, subagentes y uso de tokens. OpenAI también proporciona registros de sesión en la plataforma y exportación de trazas.\u003C\u002Fp>\n\u003Cp>No descartes la observabilidad de tu aplicación porque las trazas de la plataforma hayan mejorado. Los registros del producto todavía necesitan conectar la sesión del agente con la identidad del usuario, la decisión de autorización, el objeto de dominio, el efecto secundario de la herramienta, el registro de aprobación y el resultado final aceptado. La traza de producción útil es la unión entre la evidencia del tiempo de ejecución del agente y la evidencia del tiempo de ejecución del negocio.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Fes\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\">Fiabilidad de los agentes de IA: por qué la respuesta final no es suficiente\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">La fiabilidad del agente depende de la ruta de ejecución, las herramientas y las decisiones intermedias, no solo del resultado final.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Leer el artículo sobre fiabilidad →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-117\">Paso 7 — Preservar las evaluaciones antes de cambiar el tiempo de ejecución\u003C\u002Fh2>\n\u003Cp>Una migración puede parecer exitosa porque el nuevo sistema sigue produciendo respuestas plausibles mientras cambia silenciosamente la elección de herramientas, la continuidad de la sesión, el comportamiento de traspaso, la latencia o la recuperación de fallos. Construye la línea base de comportamiento antes de cambiar los tiempos de ejecución.\u003C\u002Fp>\n\u003Cp>La línea base debe incluir tareas representativas, llamadas a herramientas esperadas, acciones prohibidas, puntos de aprobación, continuidad del estado, escenarios de recuperación y criterios de aceptación del resultado final. Ejecuta las arquitecturas antigua y nueva contra los mismos casos siempre que sea posible.\u003C\u002Fp>\n\u003Ch2 id=\"section-120\">La prueba de verificación de la migración\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Verificar el nuevo tiempo de ejecución antes de hacer el cambio\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. Congelar la línea base de comportamiento\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Captura trazas representativas del SDK, resultados esperados, rutas de herramientas, puntos de aprobación y casos de fallo.\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. Inventariar la propiedad del estado\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Marca cada campo de estado como estado de sesión del agente, estado de dominio autoritativo, artefacto duradero o estado de trabajo efímero.\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. Reutilizar implementaciones de herramientas estables\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Mantén las funciones de negocio detrás de interfaces de aplicación; reemplaza solo la integración orientada al agente cuando sea posible.\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. Construir una porción vertical de la Agents API\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Migra un flujo de trabajo con forma de producción que incluya creación de sesión, herramientas, eventos, entorno y persistencia.\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. Inyectar interrupciones\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Prueba el reinicio del proceso, el reintento de webhook, el tiempo de espera de la función, la reconexión del entorno autoalojado y el estado de 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. Comparar trazas, no solo respuestas\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Verifica la elección de herramientas, la autorización, la ruta de evidencia, las transiciones de estado y los efectos secundarios contra la línea base.\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. Ejecutar tráfico en sombra\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Cuando sea factible, reproduce o refleja tareas representativas antes de hacer autoritativo el nuevo tiempo de ejecución.\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. Hacer el cambio detrás de un límite reversible\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Mantén adaptadores de integración y capacidad de reversión hasta que el comportamiento en producción sea estable.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-122\">Qué medir durante la migración\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\">Dimensión\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Comprobación de migración\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Éxito de la tarea\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿El nuevo tiempo de ejecución cumple los mismos o mejores criterios de aceptación?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Corrección de herramientas\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Llama a la herramienta correcta con argumentos válidos y autorización?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuidad del estado\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Puede reanudarse el trabajo a través de turnos, reinicios y esperas asíncronas?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Recuperación\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué sucede después de la pérdida de webhook, fallo del manejador, desconexión del entorno o tiempo de espera?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trazabilidad\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Puede unirse cada acción consecuente con la sesión, el usuario, la llamada a la herramienta y el objeto de dominio?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportamiento del contexto\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Las sesiones de larga duración preservan las restricciones sin arrastrar verdad obsoleta de la aplicación?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Latencia\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Cómo afectan el inicio de sesión, el aprovisionamiento del entorno y el trabajo multiturno al tiempo visible para el usuario?\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\">¿Qué cambia en el uso del modelo, el uso del sandbox, el contexto repetido y las operaciones de infraestructura?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Carga operativa\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">¿Qué responsabilidades que antes eran de la aplicación desaparecieron realmente y cuáles simplemente se trasladaron?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-124\">Cuándo no migrar todavía\u003C\u002Fh2>\n\u003Cp>Una aplicación existente del Agents SDK no se convierte en mala arquitectura simplemente porque la dirección de la plataforma cambió. OpenAI continúa con el mantenimiento, las correcciones de seguridad, las correcciones de errores críticos y el trabajo de compatibilidad. Si la aplicación es estable, está bien evaluada y no tiene un requisito de hoja de ruta bloqueado, una migración inmediata del tiempo de ejecución puede no estar justificada.\u003C\u002Fp>\n\u003Cul>\u003Cli>Una capacidad requerida del SDK aún no está disponible en la Agents API.\u003C\u002Fli>\u003Cli>La migración interrumpiría un período crítico de producción sin entregar valor a corto plazo.\u003C\u002Fli>\u003Cli>La aplicación depende de semánticas de orquestación personalizadas que no han sido validadas en el harness gestionado.\u003C\u002Fli>\u003Cli>La portabilidad del proveedor es un requisito estricto y la abstracción actual del SDK es materialmente valiosa.\u003C\u002Fli>\u003Cli>Tu equipo aún no ha separado el estado de negocio del estado del tiempo de ejecución del agente, lo que hace inseguro el cambio.\u003C\u002Fli>\u003Cli>El comportamiento de la nueva Agents API no ha sido probado contra cargas de trabajo de producción representativas.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-127\">Cuándo la migración se vuelve estratégicamente importante\u003C\u002Fh2>\n\u003Cp>La migración resulta más convincente cuando los requisitos del producto se alinean con el harness gestionado: trabajo duradero de larga duración, compactación y recuperación de contexto gestionadas por la plataforma, capacidades más recientes del runtime de agentes, ejecución en sandbox, gestión de ciclo de vida alojada más completa, o el deseo de reducir la cantidad de código de orquestación que opera tu aplicación.\u003C\u002Fp>\n\u003Cp>La señal más fuerte no es \"el SDK antiguo está completo en funciones\". Es \"nuestra hoja de ruta ahora depende de capacidades cuyo hogar natural es el runtime gestionado de la Agents API\".\u003C\u002Fp>\n\u003Ch2 id=\"section-130\">¿Qué cambiaría esta respuesta?\u003C\u002Fh2>\n\u003Cp>La estrategia de migración cambiaría si OpenAI publica herramientas de migración automatizadas, introduce capas de compatibilidad explícitas, cambia la semántica de sesión de la Agents API, amplía o reduce el soporte de entornos autoalojados, o cambia la política de soporte del Agents SDK.\u003C\u002Fp>\n\u003Cp>También cambiaría si cambian los requisitos de tu producto. Un asistente simple de solicitud-respuesta puede que no necesite un harness gestionado duradero en absoluto. Un agente de codificación, investigación u operaciones de larga duración puede beneficiarse mucho más del modelo de propiedad de la Agents API.\u003C\u002Fp>\n\u003Ch2 id=\"section-133\">Limitaciones\u003C\u002Fh2>\n\u003Cp>No existe un mapa universal uno a uno de migración de SDK a API porque las aplicaciones usan el Agents SDK de manera diferente. Algunas dependen en gran medida de sesiones y handoffs; otras lo usan como un runner ligero alrededor de herramientas de función. La migración correcta depende de qué responsabilidades asume realmente tu aplicación hoy.\u003C\u002Fp>\n\u003Cp>La Agents API también está en beta pública, por lo que los detalles de implementación pueden evolucionar. Trata los principios de propiedad de este artículo como más duraderos que cualquier forma de endpoint individual.\u003C\u002Fp>\n\u003Ch2 id=\"section-136\">Conclusión\u003C\u002Fh2>\n\u003Cp>Migrar del Agents SDK a la Agents API se entiende mejor como mover la frontera del runtime de agentes. El harness gestionado asume más del bucle, la continuidad de sesión, la compactación y la recuperación. Tu aplicación debería volverse más explícita sobre las responsabilidades que siguen siendo tuyas: verdad de dominio, autorización, efectos secundarios de funciones, artefactos, auditabilidad y ciclo de vida del producto.\u003C\u002Fp>\n\u003Cp>Si una migración deja toda la maquinaria de orquestación antigua en su lugar y simplemente reemplaza las llamadas al SDK con llamadas a la Agents API, probablemente ha perdido la oportunidad arquitectónica. El objetivo no es reproducir el runtime antiguo sobre el nuevo. El objetivo es decidir qué responsabilidades del runtime ya no pertenecen a tu aplicación.\u003C\u002Fp>\n\u003Ch2 id=\"section-139\">Preguntas frecuentes\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\">Migrar del Agents SDK a la 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\">¿Migrar del Agents SDK a la Agents API es solo una reescritura de API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No. El cambio principal es la propiedad del runtime: el Agents SDK ejecuta el bucle del agente en tu aplicación, mientras que la Agents API ejecuta un harness Codex gestionado y una sesión duradera. El estado, el ciclo de vida, el manejo de eventos y la recuperación deben revisarse como cuestiones de arquitectura.\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\">¿Es necesario reescribir mis herramientas de función?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">La implementación de negocio a menudo puede reutilizarse si ya está detrás de una interfaz de aplicación estable. La integración orientada al agente cambia porque las llamadas a funciones de la Agents API se gestionan a través de acciones requeridas y resultados de la sesión.\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\">¿Debería trasladar el estado de negocio a la sesión de la Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">En general, no. Mantén el estado autoritativo de negocio y producto en tus propias bases de datos o servicios. Usa la sesión del agente para la continuidad del agente y el contexto de trabajo, no como única fuente de verdad de tu producto.\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\">¿Necesito webhooks para la Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No siempre, porque el streaming también está disponible. Los webhooks son especialmente útiles para sesiones de larga duración o asíncronas donde tu aplicación debería reaccionar a cambios de ciclo de vida sin mantener un stream abierto.\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\">¿Debería migrar ahora toda aplicación existente del Agents SDK?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">No. El SDK sigue siendo compatible en modo mantenimiento. Migra cuando el nuevo runtime aporte valor significativo para la hoja de ruta y después de que el comportamiento requerido se haya validado contra evaluaciones con forma de producción.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-141\">Glosario\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\">Términos clave de migración\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\">Frontera del runtime\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">La división de responsabilidad entre el runtime de agentes gestionado por la plataforma y el runtime propiedad de la aplicación.\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\">El runtime de agentes que coordina llamadas al modelo, herramientas, contexto, orquestación y ejecución continuada.\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\">Sesión\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Una instancia duradera de la Agents API que mantiene la configuración, la conversación y el trabajo guardado de un agente a lo largo de los turnos.\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\">Acción requerida\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un estado de sesión en el que la Agents API necesita entrada externa, como un resultado de función o una conexión de entorno, antes de que el trabajo pueda continuar.\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\">Entorno autoalojado\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un entorno de ejecución operado por tu infraestructura y conectado al harness gestionado de la 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\">Prueba de validación de migración\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un método de validación por etapas que compara el nuevo runtime con líneas base de comportamiento, inyecciones de fallos, trazas y criterios de corte reversibles.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-143\">Fuentes primarias y lecturas adicionales\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\">Política de soporte actual: el Agents SDK está completo en funciones, sigue mantenido, y las nuevas aplicaciones deberían comenzar con la 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 — Ejecución de agentes con el SDK de Agentes\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documentación del bucle de agente propiedad de la aplicación del SDK y el modelo de continuación.\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 — Descripción general de la API de Agentes\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Define los conceptos centrales de la API de Agentes: agente, entorno, sesión, eventos e ítems.\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 — Arquitectura de la API de Agentes\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Explica los límites del arnés alojado, el servidor de aplicaciones, el entorno de ejecución alojado por OpenAI y el autoalojado.\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 — Configuración de Agentes\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Define la configuración reutilizable de agentes y la personalización a nivel de sesión.\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 — Ejecutar y continuar sesiones\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documenta sesiones duraderas, turnos asíncronos, transmisión en streaming y dirección.\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 — Funciones de la API de Agentes\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definición de la herramienta de función y el límite del manejador de la aplicación para los resultados de función requeridos.\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 — Webhooks de sesión\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Eventos del ciclo de vida para sesiones asíncronas, acciones requeridas y conexiones de entorno autoalojado.\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 — Observabilidad y uso de la API de Agentes\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Registros de sesión, eventos, turnos, llamadas a herramientas, subagentes, trazas e inspección del uso de tokens.\u003C\u002Fp>\u003C\u002Fa>",{"time":212,"blocks":213,"version":1315},1790352411096,[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,647,652,657,671,676,681,686,691,696,701,706,711,716,721,726,731,736,762,767,796,801,811,820,829,838,847,856,865,874,883,887,891,895,899,903,907,911,915,919,922,946,949,953,957,961,965,969,987,991,995,998,1015,1019,1023,1027,1030,1034,1038,1042,1046,1050,1054,1068,1071,1075,1079,1082,1086,1090,1096,1099,1103,1107,1111,1128,1131,1152,1155,1159,1166,1169,1173,1177,1181,1185,1189,1192,1196,1200,1203,1207,1211,1214,1233,1236,1254,1257,1264,1271,1278,1285,1292,1298,1304,1310],{"id":215,"data":216,"type":220,"tunes":221},"24Foq4L2Wb",{"title":217,"maxLevel":218,"minLevel":219},"Contenido",3,2,"tableOfContents",{},{"id":223,"data":224,"type":226,"tunes":227},"intro",{"text":225},"Migrar del SDK de Agentes de OpenAI a la API de Agentes no es un simple cambio de nombre en las importaciones. El límite arquitectónico central cambia: el SDK ejecuta el bucle del agente dentro de tu aplicación, mientras que la API de Agentes ejecuta un harness de Codex gestionado y una sesión duradera del lado de OpenAI. Por lo tanto, la pregunta de la migración no es \"¿Qué clases se asignan a qué endpoints?\" sino \"¿Qué responsabilidades de tiempo de ejecución cruzan el límite, cuáles permanecen en nuestra aplicación y cuáles necesitan ser rediseñadas?\"","paragraph",{},{"id":229,"data":230,"type":234,"tunes":235},"direct",{"body":231,"title":232,"variant":233},"\u003Cstrong>Una migración real del SDK de Agentes → API de Agentes cambia la propiedad del tiempo de ejecución.\u003C\u002Fstrong> Tu configuración de agente reutilizable aún puede contener modelo, instrucciones y herramientas, pero el bucle, la sesión duradera, la orquestación, la compactación de contexto y la recuperación se trasladan hacia el tiempo de ejecución gestionado de la API de Agentes. Tu aplicación debe mantener el estado del dominio, la autorización, las reglas de negocio, las implementaciones de funciones y la lógica de auditoría fuera de la sesión del agente. Trata la migración como un rediseño de límites, no como una conversión mecánica de código.","Respuesta directa","info","callout",{},{"id":237,"data":238,"type":234,"tunes":242},"current",{"body":239,"title":240,"variant":241},"OpenAI actualmente marca el SDK de Agentes como \u003Cstrong>feature complete\u003C\u002Fstrong> y recomienda la API de Agentes para nuevas aplicaciones de agentes. La API de Agentes está en beta pública. Las aplicaciones existentes del SDK siguen siendo compatibles, y la migración inmediata no es automáticamente obligatoria.","Actualizado al 25 de septiembre de 2026","warning",{},{"id":244,"data":245,"type":234,"tunes":249},"model-note",{"body":246,"title":247,"variant":248},"El Mapa de Migración de Límites de Tiempo de Ejecución y la Prueba de Verificación de Migración en este artículo son herramientas prácticas de arquitectura, no marcos oficiales de migración de OpenAI. Se derivan de las diferencias actuales de tiempo de ejecución documentadas por OpenAI.","Acerca del modelo de migración","note",{},{"id":251,"data":252,"type":42,"tunes":254},"h-boundary",{"text":253,"level":219},"La migración es de un bucle propiedad de la aplicación a un harness gestionado",{},{"id":256,"data":257,"type":226,"tunes":259},"p-boundary-1",{"text":258},"En el SDK de Agentes, una ejecución es un turno a nivel de aplicación. El runner del SDK llama al modelo, inspecciona la salida, ejecuta herramientas, sigue los handoffs y continúa hasta alcanzar un punto de parada. Tu proceso aloja ese bucle y, por lo tanto, es dueño de su ciclo de vida.",{},{"id":261,"data":262,"type":226,"tunes":264},"p-boundary-2",{"text":263},"En la API de Agentes, OpenAI ejecuta el harness. Una sesión es una instancia duradera de una configuración de agente que acepta tareas, produce eventos, puede pausarse para acciones requeridas y puede continuar a lo largo del tiempo. OpenAI gestiona las sesiones, la orquestación, la compactación de contexto y la recuperación; tu aplicación envía trabajo, maneja herramientas de función, recibe eventos y opcionalmente gestiona un entorno de ejecución autoalojado.",{},{"id":266,"data":267,"type":226,"tunes":269},"p-boundary-3",{"text":268},"Ese cambio de propiedad es la migración. Todo lo demás — sintaxis de la API, esquemas de herramientas, manejo de eventos, IDs de sesión — se deriva de ello.",{},{"id":271,"data":272,"type":42,"tunes":274},"h-map",{"text":273,"level":219},"El Mapa de Migración de Límites de Tiempo de Ejecución",{},{"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],"Aspecto","SDK de Agentes","Objetivo de migración de la API de Agentes",[284,285,286],"Bucle del agente","Se ejecuta en tu aplicación a través del runner del SDK","Se ejecuta en el harness de Codex gestionado",[288,289,290],"Definición de agente reutilizable","Objeto Agent en el código de la aplicación","Configuración de agente guardada o en línea con modelo, instrucciones y herramientas",[292,293,294],"Continuidad de conversación \u002F trabajo","Estrategia de sesión del SDK, historial, continuación de resultados o almacenamiento de la aplicación","Sesión duradera de la API de Agentes",[296,297,298],"Ejecución de herramientas","El SDK coordina las llamadas a herramientas en tu tiempo de ejecución","El harness solicita llamadas a funciones; tu aplicación devuelve resultados",[300,301,302],"Gestión de contexto","Tu tiempo de ejecución \u002F estrategia de sesión del SDK","Contexto de sesión gestionado, compactación y recuperación, más tus propios límites de datos de la aplicación",[304,305,306],"Handoffs \u002F especialistas","Primitivas de orquestación del SDK","Comportamiento del harness \u002F subagente en la API de Agentes; no asumas semántica uno a uno",[308,309,310],"Entorno de ejecución","Tu tiempo de ejecución de la aplicación o entorno específico de la herramienta","Entorno opcional alojado por OpenAI o autoalojado adjunto a la sesión",[312,313,314],"Streaming","Streaming del SDK desde la ejecución","Flujo de eventos de sesión de la API de Agentes",[316,317,318],"Ciclo de vida asíncrono","Generalmente gestionado por la aplicación en torno a la ejecución del SDK","Estados de sesión nativos, turnos asíncronos y webhooks",[320,321,322],"Trazabilidad \u002F observabilidad","Trazabilidad del SDK de Agentes y registros de la aplicación","Registros de sesión de Agentes, eventos, turnos, llamadas a herramientas, subagentes y trazas exportables",[324,325,326],"Recuperación","Responsabilidad de la aplicación","Recuperación gestionada del harness\u002Fsesión más recuperación propia de la aplicación para sistemas externos y entornos autoalojados","table",{},{"id":330,"data":331,"type":42,"tunes":333},"h-conceptual",{"text":332,"level":219},"Qué puede migrar conceptualmente sin cambiar la propiedad",{},{"id":335,"data":336,"type":226,"tunes":338},"p-conceptual-1",{"text":337},"Varios conceptos de la aplicación sobreviven la migración sin problemas aunque su representación cambie. Los modelos, las instrucciones, las definiciones de funciones con esquema JSON, el acceso a MCP, las descripciones de herramientas y los requisitos de salida estructurada siguen siendo aspectos de la configuración del agente.",{},{"id":340,"data":341,"type":226,"tunes":343},"p-conceptual-2",{"text":342},"El modelo de configuración de la API de Agentes de OpenAI define explícitamente un agente a través del modelo, las instrucciones, las herramientas, el razonamiento y el comportamiento de salida. Las herramientas de función siguen siendo código de la aplicación: el harness solicita una llamada a función y tu manejador devuelve el resultado. OpenAI también señala que las implementaciones de funciones usadas con la API de Respuestas pueden reutilizarse con el flujo de sesión de la API de Agentes.",{},{"id":345,"data":346,"type":234,"tunes":350},"good-candidate",{"body":347,"title":348,"variant":349},"Una función de negocio pura como \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> no debería necesitar saber si el llamador es el SDK de Agentes o la API de Agentes. Mantén su lógica de dominio detrás de una interfaz de aplicación estable y migra solo el adaptador orientado al agente.","Buen candidato para migración","success",{},{"id":352,"data":353,"type":42,"tunes":355},"h-no-one",{"text":354,"level":219},"Qué no debe migrarse uno a uno",{},{"id":357,"data":358,"type":226,"tunes":360},"p-no-one-1",{"text":359},"El patrón de migración peligroso es recrear cada abstracción de tiempo de ejecución del SDK dentro de la API de Agentes. Eso puede dejarte pagando por un harness gestionado mientras sigues operando un harness en la sombra en tu aplicación.",{},{"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],"Suposición de la era del SDK","Por qué una copia directa es riesgosa","Pregunta de migración",[370,371,372],"El bucle de la aplicación posee cada continuación","La API de Agentes ya posee el bucle del harness","¿Qué lógica de continuación es lógica de producto y qué debería trasladarse a la sesión gestionada?",[374,375,376],"El objeto de sesión local es el mecanismo principal de continuidad","Las sesiones de la API de Agentes son recursos duraderos con su propio ciclo de vida","¿Qué estado pertenece a la sesión frente a la base de datos del producto?",[378,379,380],"Cada interrupción se maneja de forma síncrona","Los turnos de la API de Agentes son asíncronos y pueden exponer estados action_required","¿Qué acciones necesitan webhooks, workers, idempotencia y manejadores reanudables?",[382,383,384],"Toda la ejecución de herramientas ocurre donde se ejecuta el proceso del SDK","Los manejadores de funciones y los entornos de ejecución pueden ser separados","¿Dónde debería ejecutarse realmente cada herramienta?",[386,387,388],"La traza del SDK es la línea de tiempo operativa","La API de Agentes expone eventos de sesión, turnos y trazas gestionadas","¿Qué datos de auditoría a nivel de aplicación aún necesitan su propio registro?",[390,391,392],"El objeto handoff se asigna directamente a un modelo de subagente alojado","La semántica del tiempo de ejecución puede diferir","¿Qué propiedad visible para el usuario y comportamiento de especialista deben preservarse, no solo la antigua estructura de clases?",{},{"id":395,"data":396,"type":42,"tunes":398},"h-domain",{"text":397,"level":219},"Paso 1 — Separar el estado del dominio del estado de la sesión del agente",{},{"id":400,"data":401,"type":226,"tunes":403},"p-domain-1",{"text":402},"Antes de tocar las llamadas a la API, clasifica el estado que tu aplicación SDK mantiene actualmente. Parte del estado existe solo para mantener la conversación del agente en marcha. Otro estado es la verdad del negocio: permisos de usuario, estado del proyecto, datos de pedidos, aprobación de flujos de trabajo, registros de clientes, versiones de documentos, estado de políticas o configuración de la aplicación.",{},{"id":405,"data":406,"type":226,"tunes":408},"p-domain-2",{"text":407},"La segunda categoría no debería volverse dependiente de una sesión de la API de Agentes. Una sesión duradera es una continuidad útil para el agente; no es un reemplazo de la fuente de verdad de tu producto. Si la sesión desaparece, expira, se reconstruye o cambia de implementación, tu aplicación debe seguir sabiendo qué es verdadero.",{},{"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","Continuidad de la conversación",[417,417,417],"",{"id":419,"label":420,"values":421},"domain","Verdad del negocio",[417,417,417],{"id":423,"label":424,"values":425},"artifact","Artefacto duradero",[417,417,417],{"id":427,"label":428,"values":429},"ephemeral","Estado de trabajo temporal",[417,417,417],"Prueba de ubicación del estado",[432,435,438],{"id":433,"label":434},"type","Tipo de estado",{"id":436,"label":437},"place","Propietario preferido",{"id":439,"label":440},"reason","Razón","comparison",{},{"id":444,"data":445,"type":42,"tunes":447},"h-events",{"text":446,"level":219},"Paso 2 — Convertir la mentalidad de ejecutor en una mentalidad de sesión y eventos",{},{"id":449,"data":450,"type":226,"tunes":452},"p-events-1",{"text":451},"Las aplicaciones SDK a menudo piensan en términos de llamar a run y recibir un resultado. La API de Agentes piensa en términos de una sesión duradera cuyos turnos pueden ejecutarse de forma asíncrona. Un mensaje a una sesión inactiva inicia el trabajo; un mensaje durante un turno activo puede dirigirlo. El progreso llega a través de streaming o webhooks.",{},{"id":454,"data":455,"type":226,"tunes":457},"p-events-2",{"text":456},"Esto afecta la arquitectura de la aplicación. El trabajo de producción de larga duración no debería depender de que una sola solicitud HTTP permanezca activa. Tu producto necesita identificadores de sesión estables, persistencia del ciclo de vida, verificación de webhooks, manejadores idempotentes y una forma de reconciliar el estado actual de la sesión después de reinicios del proceso.",{},{"id":459,"data":460,"type":42,"tunes":462},"h-functions",{"text":461,"level":219},"Paso 3 — Rediseñar las herramientas de función en torno a las acciones requeridas",{},{"id":464,"data":465,"type":226,"tunes":467},"p-functions-1",{"text":466},"Las herramientas de función siguen siendo una frontera importante de la aplicación. Defines la función y su esquema JSON en la configuración del agente. Cuando el harness necesita la función, la sesión puede entrar en un estado de acción requerida. Tu aplicación recupera la acción requerida, ejecuta la lógica de negocio y devuelve el resultado.",{},{"id":469,"data":470,"type":226,"tunes":472},"p-functions-2",{"text":471},"Eso significa que la implementación de la función debería ser segura de reanudar. Un webhook puede entregarse mientras otro trabajador está procesando. Puede ocurrir un fallo de red después del efecto secundario externo pero antes de que se devuelva el resultado. Por lo tanto, la migración es un buen momento para agregar IDs de llamada, claves de idempotencia, autorización explícita, políticas de tiempo de espera y registros de auditoría a las herramientas consecuentes.",{},{"id":474,"data":475,"type":234,"tunes":478},"tool-trap",{"body":476,"title":477,"variant":241},"No trates una llamada de función desde el harness gestionado como autorización para realizar la acción. El harness decide \u003Cem>qué quiere llamar\u003C\u002Fem>; tu aplicación sigue decidiendo si el usuario actual, la sesión y el estado del negocio permiten esa acción.","Trampa de migración de herramientas",{},{"id":480,"data":481,"type":42,"tunes":483},"h-environment",{"text":482,"level":219},"Paso 4 — Decidir dónde debe ocurrir la ejecución",{},{"id":485,"data":486,"type":226,"tunes":488},"p-env-1",{"text":487},"La API de Agentes separa el harness gestionado del entorno de ejecución. Un agente puede operar sin un entorno dedicado, en un sandbox alojado por OpenAI, o a través de un entorno autoalojado conectado a la sesión.",{},{"id":490,"data":491,"type":226,"tunes":493},"p-env-2",{"text":492},"Esto crea una decisión de migración que las aplicaciones SDK quizás nunca hayan tomado explícitamente: ¿qué código debería ejecutarse como una función de aplicación, qué código pertenece a un sandbox y qué cargas de trabajo requieren infraestructura que tú controlas?",{},{"id":495,"data":496,"type":327,"tunes":516},"environment-table",{"content":497,"stretched":43,"withHeadings":14},[498,501,504,507,510,513],[499,500],"Necesidad","Frontera probable",[502,503],"Llamar a un servicio interno existente a través de lógica de negocio controlada","Herramienta de función manejada por tu aplicación",[505,506],"Ejecutar código aislado o trabajar con archivos temporales sin infraestructura privada","Entorno alojado por OpenAI",[508,509],"Acceder a recursos de red privados, software de sistema personalizado o cómputo local controlado","Entorno autoalojado",[511,512],"Persistir artefactos de producto aceptados","Almacenamiento propiedad de la aplicación, no solo el sistema de archivos del sandbox",[514,515],"Ejecutar un efecto secundario de negocio de alto impacto","Función de aplicación con controles de autorización y auditoría",{},{"id":518,"data":519,"type":42,"tunes":521},"h-recovery",{"text":520,"level":219},"Paso 5 — Reemplazar la recuperación implícita con manejo explícito del ciclo de vida",{},{"id":523,"data":524,"type":226,"tunes":526},"p-recovery-1",{"text":525},"El harness gestionado proporciona recuperación a nivel de sesión, pero tu aplicación sigue siendo dueña de cada dependencia externa a su alrededor. Los entornos autoalojados necesitan aprovisionamiento, reconexión y apagado. Los manejadores de funciones pueden fallar. Los webhooks pueden reintentarse. El estado del lado del producto puede cambiar mientras un agente está inactivo.",{},{"id":528,"data":529,"type":226,"tunes":531},"p-recovery-2",{"text":530},"Por lo tanto, la migración necesita dos modelos de recuperación: recuperación del tiempo de ejecución del agente y recuperación de la operación de negocio. La primera es cada vez más gestionada por la API de Agentes. La segunda sigue siendo tu responsabilidad.",{},{"id":533,"data":534,"type":42,"tunes":536},"h-observability",{"text":535,"level":219},"Paso 6 — Reconstruir la observabilidad en torno al nuevo límite de traza",{},{"id":538,"data":539,"type":226,"tunes":541},"p-obs-1",{"text":540},"Las sesiones de Agents API exponen eventos, historial guardado, turnos, llamadas a herramientas, subagentes y uso de tokens. OpenAI también proporciona registros de sesión en la plataforma y exportación de trazas.",{},{"id":543,"data":544,"type":226,"tunes":546},"p-obs-2",{"text":545},"No descartes la observabilidad de tu aplicación porque las trazas de la plataforma hayan mejorado. Los registros de producto aún necesitan conectar la sesión del agente con la identidad del usuario, la decisión de autorización, el objeto de dominio, el efecto secundario de la herramienta, el registro de aprobación y el resultado final aceptado. La traza de producción útil es la unión entre la evidencia del tiempo de ejecución del agente y la evidencia del tiempo de ejecución del negocio.",{},{"id":548,"data":549,"type":554,"tunes":555},"ref-reliability",{"url":550,"title":551,"excerpt":552,"ctaLabel":553},"https:\u002F\u002Fstajic.de\u002Fes\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough","Confiabilidad de agentes de IA: por qué la respuesta final no es suficiente","La confiabilidad del agente depende de la ruta de ejecución, las herramientas y las decisiones intermedias, no solo del resultado final.","Leer el artículo sobre confiabilidad","referralArticle",{},{"id":557,"data":558,"type":42,"tunes":560},"h-evals",{"text":559,"level":219},"Paso 7 — Preservar las evaluaciones antes de cambiar el tiempo de ejecución",{},{"id":562,"data":563,"type":226,"tunes":565},"p-evals-1",{"text":564},"Una migración puede parecer exitosa porque el nuevo sistema aún produce respuestas plausibles mientras cambia silenciosamente la elección de herramientas, la continuidad de la sesión, el comportamiento de transferencia, la latencia o la recuperación de fallos. Construye la línea base de comportamiento antes de cambiar los tiempos de ejecución.",{},{"id":567,"data":568,"type":226,"tunes":570},"p-evals-2",{"text":569},"La línea base debe incluir tareas representativas, llamadas a herramientas esperadas, acciones prohibidas, puntos de aprobación, continuidad de estado, escenarios de recuperación y criterios de aceptación de la salida final. Ejecuta las arquitecturas antigua y nueva contra los mismos casos siempre que sea posible.",{},{"id":572,"data":573,"type":42,"tunes":575},"h-proof",{"text":574,"level":219},"La prueba de migración",{},{"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. Congelar la línea base de comportamiento","Captura trazas representativas del SDK, salidas esperadas, rutas de herramientas, puntos de aprobación y casos de fallo.",{"label":584,"description":585},"2. Inventariar la propiedad del estado","Marca cada campo de estado como estado de sesión del agente, estado de dominio autoritativo, artefacto duradero o estado de trabajo efímero.",{"label":587,"description":588},"3. Reutilizar implementaciones de herramientas estables","Mantén las funciones de negocio detrás de interfaces de aplicación; reemplaza solo la integración orientada al agente cuando sea posible.",{"label":590,"description":591},"4. Construir una porción vertical de Agents API","Migra un flujo de trabajo con forma de producción que incluya creación de sesión, herramientas, eventos, entorno y persistencia.",{"label":593,"description":594},"5. Inyectar interrupciones","Prueba el reinicio del proceso, el reintento de webhook, el tiempo de espera de función, la reconexión del entorno autoalojado y el estado de dominio obsoleto.",{"label":596,"description":597},"6. Comparar trazas, no solo respuestas","Verifica la elección de herramientas, la autorización, la ruta de evidencia, las transiciones de estado y los efectos secundarios contra la línea base.",{"label":599,"description":600},"7. Ejecutar tráfico en sombra","Cuando sea factible, reproduce o refleja tareas representativas antes de hacer autoritativo el nuevo tiempo de ejecución.",{"label":602,"description":603},"8. Transicionar detrás de un límite reversible","Mantén adaptadores de integración y capacidad de reversión hasta que el comportamiento en producción sea estable.","Demostrar el nuevo tiempo de ejecución antes de la transición","auto","processFlow",{},{"id":609,"data":610,"type":42,"tunes":612},"h-metrics",{"text":611,"level":219},"Qué medir durante la migración",{},{"id":614,"data":615,"type":327,"tunes":646},"metrics-table",{"content":616,"stretched":43,"withHeadings":14},[617,620,623,626,629,631,634,637,640,643],[618,619],"Dimensión","Verificación de migración",[621,622],"Éxito de la tarea","¿El nuevo tiempo de ejecución cumple los mismos o mejores criterios de aceptación?",[624,625],"Corrección de herramientas","¿Llama a la herramienta correcta con argumentos válidos y autorización?",[627,628],"Continuidad de estado","¿Puede el trabajo reanudarse a través de turnos, reinicios y esperas asíncronas?",[324,630],"¿Qué sucede después de la pérdida de webhook, fallo del manejador, desconexión del entorno o tiempo de espera?",[632,633],"Trazabilidad","¿Se puede unir cada acción consecuente a la sesión, usuario, llamada a herramienta y objeto de dominio?",[635,636],"Comportamiento del contexto","¿Las sesiones de larga duración preservan las restricciones sin arrastrar verdad de aplicación obsoleta?",[638,639],"Latencia","¿Cómo afectan el inicio de sesión, el aprovisionamiento del entorno y el trabajo multiturno al tiempo visible para el usuario?",[641,642],"Costo","¿Qué cambia en el uso del modelo, uso del sandbox, contexto repetido y operaciones de infraestructura?",[644,645],"Carga operativa","¿Qué responsabilidades previamente propias de la aplicación desaparecieron realmente y cuáles simplemente se movieron?",{},{"id":648,"data":649,"type":42,"tunes":651},"h-not-yet",{"text":650,"level":219},"Cuándo no migrar todavía",{},{"id":653,"data":654,"type":226,"tunes":656},"p-not-yet-1",{"text":655},"Una aplicación existente de Agents SDK no se convierte en mala arquitectura simplemente porque la dirección de la plataforma cambió. OpenAI continúa con el mantenimiento, las correcciones de seguridad, las correcciones de errores críticos y el trabajo de compatibilidad. Si la aplicación es estable, está bien evaluada y no tiene un requisito de hoja de ruta bloqueado, una migración inmediata del tiempo de ejecución puede no estar justificada.",{},{"id":658,"data":659,"type":669,"tunes":670},"not-yet-list",{"meta":660,"items":661,"style":668},{},[662,663,664,665,666,667],"Una capacidad requerida del SDK aún no está disponible en la Agents API.","La migración interrumpiría un período crítico de producción sin entregar valor a corto plazo.","La aplicación depende de semánticas de orquestación personalizadas que no han sido validadas en el arnés gestionado.","La portabilidad del proveedor es un requisito estricto y la abstracción actual del SDK es materialmente valiosa.","Tu equipo aún no ha separado el estado de negocio del estado del tiempo de ejecución del agente, lo que hace insegura la transición.","El comportamiento de la nueva Agents API no ha sido probado contra cargas de trabajo de producción representativas.","unordered","list",{},{"id":672,"data":673,"type":42,"tunes":675},"h-when",{"text":674,"level":219},"Cuándo la migración se vuelve estratégicamente importante",{},{"id":677,"data":678,"type":226,"tunes":680},"p-when-1",{"text":679},"La migración se vuelve más convincente cuando los requisitos del producto se alinean con el arnés gestionado: trabajo duradero de larga duración, compactación y recuperación de contexto gestionadas por la plataforma, capacidades más nuevas del tiempo de ejecución del agente, ejecución en sandbox, gestión de ciclo de vida alojada más rica, o el deseo de reducir la cantidad de código de orquestación que opera tu aplicación.",{},{"id":682,"data":683,"type":226,"tunes":685},"p-when-2",{"text":684},"La señal más fuerte no es \"el SDK antiguo está completo en funciones\". Es \"nuestra hoja de ruta ahora depende de capacidades cuyo hogar natural es el tiempo de ejecución gestionado de Agents API\".",{},{"id":687,"data":688,"type":42,"tunes":690},"h-change",{"text":689,"level":219},"Qué cambiaría esta respuesta",{},{"id":692,"data":693,"type":226,"tunes":695},"p-change-1",{"text":694},"La estrategia de migración cambiaría si OpenAI publica herramientas de migración automatizadas, introduce capas de compatibilidad explícitas, cambia la semántica de sesión de la API de Agents, amplía o reduce el soporte de entornos autoalojados, o cambia la política de soporte del SDK de Agents.",{},{"id":697,"data":698,"type":226,"tunes":700},"p-change-2",{"text":699},"También cambiaría si cambian los requisitos de tu producto. Un asistente simple de solicitud-respuesta puede que no necesite en absoluto un arnés gestionado duradero. Un agente de codificación, investigación u operaciones de larga duración puede beneficiarse mucho más del modelo de propiedad de la API de Agents.",{},{"id":702,"data":703,"type":42,"tunes":705},"h-limitations",{"text":704,"level":219},"Limitaciones",{},{"id":707,"data":708,"type":226,"tunes":710},"p-limit-1",{"text":709},"No existe un mapa universal uno a uno de migración de SDK a API porque las aplicaciones usan el SDK de Agents de manera diferente. Algunas dependen en gran medida de sesiones y traspasos; otras lo usan como un ejecutor ligero en torno a herramientas de función. La migración correcta depende de qué responsabilidades asume realmente tu aplicación hoy.",{},{"id":712,"data":713,"type":226,"tunes":715},"p-limit-2",{"text":714},"La API de Agents también está en beta pública, por lo que los detalles de implementación pueden evolucionar. Trata los principios de propiedad de este artículo como más duraderos que cualquier forma de endpoint individual.",{},{"id":717,"data":718,"type":42,"tunes":720},"h-conclusion",{"text":719,"level":219},"Conclusión",{},{"id":722,"data":723,"type":226,"tunes":725},"p-conclusion-1",{"text":724},"Migrar del SDK de Agents a la API de Agents se entiende mejor como mover el límite del tiempo de ejecución del agente. El arnés gestionado asume más del bucle, la continuidad de sesión, la compactación y la recuperación. Tu aplicación debería volverse más explícita sobre las responsabilidades que siguen siendo tuyas: verdad del dominio, autorización, efectos secundarios de funciones, artefactos, auditabilidad y ciclo de vida del producto.",{},{"id":727,"data":728,"type":226,"tunes":730},"p-conclusion-2",{"text":729},"Si una migración deja toda la maquinaria de orquestación antigua en su lugar y simplemente reemplaza las llamadas al SDK con llamadas a la API de Agents, probablemente ha perdido la oportunidad arquitectónica. El objetivo no es reproducir el tiempo de ejecución antiguo sobre el nuevo. El objetivo es decidir qué responsabilidades del tiempo de ejecución ya no pertenecen a tu aplicación.",{},{"id":732,"data":733,"type":42,"tunes":735},"h-faq",{"text":734,"level":219},"Preguntas frecuentes",{},{"id":737,"data":738,"type":737,"tunes":761},"faq",{"items":739,"title":760},[740,744,748,752,756],{"id":741,"answer":742,"question":743},"faq1","No. El cambio principal es la propiedad del tiempo de ejecución: el SDK de Agents ejecuta el bucle del agente en tu aplicación, mientras que la API de Agents ejecuta un arnés Codex gestionado y una sesión duradera. El estado, el ciclo de vida, el manejo de eventos y la recuperación deben revisarse como cuestiones de arquitectura.","¿Migrar del SDK de Agents a la API de Agents es solo una reescritura de API?",{"id":745,"answer":746,"question":747},"faq2","La implementación del negocio a menudo puede reutilizarse si ya está detrás de una interfaz de aplicación estable. La integración orientada al agente cambia porque las llamadas a funciones de la API de Agents se manejan a través de acciones requeridas y resultados de la sesión.","¿Es necesario reescribir mis herramientas de función?",{"id":749,"answer":750,"question":751},"faq3","En general, no. Mantén el estado autoritativo del negocio y del producto en tus propias bases de datos o servicios. Usa la sesión del agente para la continuidad del agente y el contexto de trabajo, no como única fuente de verdad de tu producto.","¿Debería trasladar el estado del negocio a la sesión de la API de Agents?",{"id":753,"answer":754,"question":755},"faq4","No siempre, porque el streaming también está disponible. Los webhooks son especialmente útiles para sesiones de larga duración o asíncronas en las que tu aplicación debería reaccionar a los cambios del ciclo de vida sin mantener un flujo abierto.","¿Necesito webhooks para la API de Agents?",{"id":757,"answer":758,"question":759},"faq5","No. El SDK sigue siendo compatible en modo de mantenimiento. Migra cuando el nuevo tiempo de ejecución aporte un valor significativo para la hoja de ruta y después de que el comportamiento requerido se haya validado con evaluaciones con forma de producción.","¿Debería migrar ahora toda aplicación existente del SDK de Agents?","Migrar del SDK de Agents a la API de Agents",{},{"id":763,"data":764,"type":42,"tunes":766},"h-glossary",{"text":765,"level":219},"Glosario",{},{"id":768,"data":769,"type":768,"tunes":795},"glossary",{"title":770,"entries":771},"Términos clave de migración",[772,776,780,784,788,791],{"term":773,"anchor":774,"definition":775},"Límite del tiempo de ejecución","runtime-boundary","La división de responsabilidades entre el tiempo de ejecución del agente gestionado por la plataforma y el tiempo de ejecución propiedad de la aplicación.",{"term":777,"anchor":778,"definition":779},"Arnés","harness","El tiempo de ejecución del agente que coordina llamadas al modelo, herramientas, contexto, orquestación y ejecución continua.",{"term":781,"anchor":782,"definition":783},"Sesión","session","Una instancia duradera de la API de Agents que mantiene la configuración, la conversación y el trabajo guardado de un agente a lo largo de los turnos.",{"term":785,"anchor":786,"definition":787},"Acción requerida","required-action","Un estado de sesión en el que la API de Agents necesita entrada externa, como el resultado de una función o una conexión de entorno, antes de que el trabajo pueda continuar.",{"term":509,"anchor":789,"definition":790},"self-hosted-environment","Un entorno de ejecución operado por tu infraestructura y conectado al arnés gestionado de la API de Agents.",{"term":792,"anchor":793,"definition":794},"Prueba de validación de migración","migration-proof-test","Un método de validación por etapas que compara el nuevo tiempo de ejecución con líneas base de comportamiento, inyecciones de fallos, trazas y criterios de conmutación reversibles.",{},{"id":797,"data":798,"type":42,"tunes":800},"h-sources",{"text":799,"level":219},"Fuentes primarias y lecturas adicionales",{},{"id":802,"data":803,"type":809,"tunes":810},"src-sdk",{"link":804,"meta":805},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk",{"image":806,"title":807,"description":808},{"url":417},"OpenAI — SDK de Agents","Política de soporte actual: el SDK de Agents tiene todas las funciones completas, sigue mantenido y las nuevas aplicaciones deberían empezar con la API de Agents.","linkTool",{},{"id":812,"data":813,"type":809,"tunes":819},"src-running-sdk",{"link":814,"meta":815},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents",{"image":816,"title":817,"description":818},{"url":417},"OpenAI — Ejecutar agentes con el SDK de Agents","Documentación del bucle del agente propiedad de la aplicación del SDK y el modelo de continuación.",{},{"id":821,"data":822,"type":809,"tunes":828},"src-api-overview",{"link":823,"meta":824},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview",{"image":825,"title":826,"description":827},{"url":417},"OpenAI — Descripción general de la API de Agents","Define los conceptos centrales de la API de Agents: agente, entorno, sesión, eventos y elementos.",{},{"id":830,"data":831,"type":809,"tunes":837},"src-api-architecture",{"link":832,"meta":833},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture",{"image":834,"title":835,"description":836},{"url":417},"OpenAI — Arquitectura de la API de Agents","Explica el arnés alojado, el servidor de aplicaciones y los límites del entorno de ejecución alojado por OpenAI y autoalojado.",{},{"id":839,"data":840,"type":809,"tunes":846},"src-api-config",{"link":841,"meta":842},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration",{"image":843,"title":844,"description":845},{"url":417},"OpenAI — Configurar Agents","Define la configuración reutilizable del agente y la personalización a nivel de sesión.",{},{"id":848,"data":849,"type":809,"tunes":855},"src-api-sessions",{"link":850,"meta":851},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions",{"image":852,"title":853,"description":854},{"url":417},"OpenAI — Ejecutar y continuar sesiones","Documenta sesiones duraderas, turnos asíncronos, streaming y dirección.",{},{"id":857,"data":858,"type":809,"tunes":864},"src-api-functions",{"link":859,"meta":860},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions",{"image":861,"title":862,"description":863},{"url":417},"OpenAI — Funciones de la API de Agentes","Definición de herramienta de función y el límite del manejador de la aplicación para resultados de funciones requeridos.",{},{"id":866,"data":867,"type":809,"tunes":873},"src-api-webhooks",{"link":868,"meta":869},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks",{"image":870,"title":871,"description":872},{"url":417},"OpenAI — Webhooks de sesión","Eventos de ciclo de vida para sesiones asíncronas, acciones requeridas y conexiones de entorno autoalojado.",{},{"id":875,"data":876,"type":809,"tunes":882},"src-api-observability",{"link":877,"meta":878},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability",{"image":879,"title":880,"description":881},{"url":417},"OpenAI — Observabilidad y uso de la API de Agentes","Registros de sesión, eventos, turnos, llamadas a herramientas, subagentes, trazas e inspección del uso de tokens.",{},{"id":223,"data":884,"type":226,"tunes":886},{"text":885},"Migrar del SDK de Agentes de OpenAI a la API de Agentes no es un simple cambio de nombre de importación. El límite arquitectónico central cambia: el SDK ejecuta el bucle del agente dentro de tu aplicación, mientras que la API de Agentes ejecuta un arnés de Codex gestionado y una sesión duradera del lado de OpenAI. Por lo tanto, la pregunta de migración no es \"¿Qué clases se asignan a qué endpoints?\" sino \"¿Qué responsabilidades de tiempo de ejecución cruzan el límite, cuáles permanecen en nuestra aplicación y cuáles necesitan ser rediseñadas?\"",{},{"id":229,"data":888,"type":234,"tunes":890},{"body":889,"title":232,"variant":233},"\u003Cstrong>Una migración real del SDK de Agentes a la API de Agentes cambia la propiedad del tiempo de ejecución.\u003C\u002Fstrong> Tu configuración de agente reutilizable aún puede contener modelo, instrucciones y herramientas, pero el bucle, la sesión duradera, la orquestación, la compactación de contexto y la recuperación se trasladan hacia el tiempo de ejecución gestionado de la API de Agentes. Tu aplicación debe mantener el estado del dominio, la autorización, las reglas de negocio, las implementaciones de funciones y la lógica de auditoría fuera de la sesión del agente. Trata la migración como un rediseño de límites, no como una conversión mecánica de código.",{},{"id":237,"data":892,"type":234,"tunes":894},{"body":893,"title":240,"variant":241},"OpenAI actualmente marca el SDK de Agentes como \u003Cstrong>completo en funciones\u003C\u002Fstrong> y recomienda la API de Agentes para nuevas aplicaciones de agentes. La API de Agentes está en beta pública. Las aplicaciones existentes del SDK siguen siendo compatibles, y la migración inmediata no es automáticamente requerida.",{},{"id":244,"data":896,"type":234,"tunes":898},{"body":897,"title":247,"variant":248},"El Mapa de Migración de Límites de Tiempo de Ejecución y la Prueba de Migración en este artículo son herramientas prácticas de arquitectura, no marcos oficiales de migración de OpenAI. Se derivan de las diferencias actuales de tiempo de ejecución documentadas por OpenAI.",{},{"id":900,"data":901,"type":220,"tunes":902},"toc",{"title":217,"maxLevel":218,"minLevel":219},{},{"id":251,"data":904,"type":42,"tunes":906},{"text":905,"level":219},"La migración es de un bucle propiedad de la aplicación a un arnés gestionado",{},{"id":256,"data":908,"type":226,"tunes":910},{"text":909},"En el SDK de Agentes, una ejecución es un turno a nivel de aplicación. El ejecutor del SDK llama al modelo, inspecciona la salida, ejecuta herramientas, sigue los traspasos y continúa hasta alcanzar un punto de parada. Tu proceso aloja ese bucle y por lo tanto posee su ciclo de vida.",{},{"id":261,"data":912,"type":226,"tunes":914},{"text":913},"En la API de Agentes, OpenAI ejecuta el arnés. Una sesión es una instancia duradera de una configuración de agente que acepta tareas, produce eventos, puede pausarse para acciones requeridas y puede continuar a lo largo del tiempo. OpenAI gestiona sesiones, orquestación, compactación de contexto y recuperación; tu aplicación envía trabajo, maneja herramientas de función, recibe eventos y opcionalmente gestiona un entorno de ejecución autoalojado.",{},{"id":266,"data":916,"type":226,"tunes":918},{"text":917},"Ese cambio de propiedad es la migración. Todo lo demás — sintaxis de API, esquemas de herramientas, manejo de eventos, IDs de sesión — se deriva de ello.",{},{"id":271,"data":920,"type":42,"tunes":921},{"text":273,"level":219},{},{"id":276,"data":923,"type":327,"tunes":945},{"content":924,"stretched":43,"withHeadings":14},[925,927,930,931,932,934,935,938,939,940,942,943],[926,281,282],"Preocupación",[284,928,929],"Se ejecuta en tu aplicación a través del ejecutor del SDK","Se ejecuta en el arnés de Codex gestionado",[288,289,290],[292,293,294],[296,297,933],"El arnés solicita llamadas a funciones; tu aplicación devuelve resultados",[300,301,302],[936,305,937],"Traspasos \u002F especialistas","Comportamiento del arnés \u002F subagente en la API de Agentes; no asumas semántica uno a uno",[308,309,310],[312,313,314],[316,941,318],"Generalmente gestionado por la aplicación alrededor de la ejecución del SDK",[320,321,322],[324,325,944],"Recuperación gestionada del arnés\u002Fsesión más recuperación propiedad de la aplicación para sistemas externos y entornos autoalojados",{},{"id":330,"data":947,"type":42,"tunes":948},{"text":332,"level":219},{},{"id":335,"data":950,"type":226,"tunes":952},{"text":951},"Varios conceptos de la aplicación sobreviven a la migración limpiamente aunque su representación cambie. Modelos, instrucciones, definiciones de funciones con esquema JSON, acceso MCP, descripciones de herramientas y requisitos de salida estructurada siguen siendo preocupaciones de configuración del agente.",{},{"id":340,"data":954,"type":226,"tunes":956},{"text":955},"El modelo de configuración de la API de Agentes de OpenAI define explícitamente un agente a través del modelo, instrucciones, herramientas, razonamiento y comportamiento de salida. Las herramientas de función siguen siendo código de la aplicación: el arnés solicita una llamada a función, y tu manejador devuelve el resultado. OpenAI también señala que las implementaciones de funciones utilizadas con la API de Respuestas pueden reutilizarse con el flujo de sesión de la API de Agentes.",{},{"id":345,"data":958,"type":234,"tunes":960},{"body":959,"title":348,"variant":349},"Una función de negocio pura como \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> no debería necesitar saber si quien la llama es el SDK de Agentes o la API de Agentes. Mantén su lógica de dominio detrás de una interfaz de aplicación estable y migra solo el adaptador orientado al agente.",{},{"id":352,"data":962,"type":42,"tunes":964},{"text":963,"level":219},"Qué no debería migrarse uno a uno",{},{"id":357,"data":966,"type":226,"tunes":968},{"text":967},"El patrón de migración peligroso es recrear cada abstracción de tiempo de ejecución del SDK dentro de la API de Agentes. Eso puede dejarte pagando por un arnés gestionado mientras sigues operando un arnés en la sombra en tu aplicación.",{},{"id":362,"data":970,"type":327,"tunes":986},{"content":971,"stretched":43,"withHeadings":14},[972,973,976,977,978,980,982],[366,367,368],[370,974,975],"La API de Agentes ya posee el bucle del arnés","¿Qué lógica de continuación es lógica de producto y cuál debería pasar a la sesión gestionada?",[374,375,376],[378,379,380],[382,979,384],"Los manejadores de funciones y los entornos de ejecución pueden estar separados",[386,387,981],"¿Qué datos de auditoría a nivel de aplicación todavía necesitan su propio registro?",[983,984,985],"El objeto de handoff se asigna directamente a un modelo de subagente alojado","La semántica de tiempo de ejecución puede diferir","¿Qué propiedad visible para el usuario y comportamiento especializado deben preservarse, no solo la antigua estructura de clases?",{},{"id":395,"data":988,"type":42,"tunes":990},{"text":989,"level":219},"Paso 1 — Separar el estado de dominio del estado de sesión del agente",{},{"id":400,"data":992,"type":226,"tunes":994},{"text":993},"Antes de tocar las llamadas a la API, clasifica el estado que tu aplicación del SDK transporta actualmente. Parte del estado existe solo para mantener la conversación del agente en marcha. Otro estado es verdad de negocio: permisos de usuario, estado del proyecto, datos de pedidos, aprobación de flujos de trabajo, registros de clientes, versiones de documentos, estado de políticas o configuración de la aplicación.",{},{"id":405,"data":996,"type":226,"tunes":997},{"text":407},{},{"id":410,"data":999,"type":441,"tunes":1014},{"rows":1000,"title":430,"layout":327,"columns":1010},[1001,1003,1006,1008],{"id":414,"label":415,"values":1002},[417,417,417],{"id":419,"label":1004,"values":1005},"Verdad de negocio",[417,417,417],{"id":423,"label":424,"values":1007},[417,417,417],{"id":427,"label":428,"values":1009},[417,417,417],[1011,1012,1013],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":1016,"type":42,"tunes":1018},{"text":1017,"level":219},"Paso 2 — Convertir la mentalidad de runner en una mentalidad de sesión y eventos",{},{"id":449,"data":1020,"type":226,"tunes":1022},{"text":1021},"Las aplicaciones del SDK a menudo piensan en términos de llamar a run y recibir un resultado. La API de Agentes piensa en términos de una sesión duradera cuyos turnos pueden ejecutarse de forma asíncrona. Un mensaje a una sesión inactiva inicia trabajo; un mensaje durante un turno activo puede dirigirlo. El progreso llega a través de streaming o webhooks.",{},{"id":454,"data":1024,"type":226,"tunes":1026},{"text":1025},"Esto afecta la arquitectura de la aplicación. El trabajo de producción de larga duración no debería depender de que una solicitud HTTP permanezca viva. Tu producto necesita identificadores de sesión estables, persistencia del ciclo de vida, verificación de webhooks, manejadores idempotentes y una forma de reconciliar el estado actual de la sesión después de reinicios del proceso.",{},{"id":459,"data":1028,"type":42,"tunes":1029},{"text":461,"level":219},{},{"id":464,"data":1031,"type":226,"tunes":1033},{"text":1032},"Las herramientas de función siguen siendo una frontera importante de la aplicación. Defines la función y su esquema JSON en la configuración del agente. Cuando el arnés necesita la función, la sesión puede entrar en un estado de acción requerida. Tu aplicación recupera la acción requerida, ejecuta la lógica de negocio y devuelve el resultado.",{},{"id":469,"data":1035,"type":226,"tunes":1037},{"text":1036},"Eso significa que la implementación de la función debería ser segura de reanudar. Un webhook puede entregarse mientras otro worker está procesando. Un fallo de red puede ocurrir después del efecto secundario externo pero antes de que se devuelva el resultado. Por lo tanto, la migración es un buen momento para agregar IDs de llamada, claves de idempotencia, autorización explícita, políticas de tiempo de espera y registros de auditoría a las herramientas consecuentes.",{},{"id":474,"data":1039,"type":234,"tunes":1041},{"body":1040,"title":477,"variant":241},"No trates una llamada de función desde el arnés gestionado como autorización para realizar la acción. El arnés decide \u003Cem>qué quiere llamar\u003C\u002Fem>; tu aplicación sigue decidiendo si el usuario actual, la sesión y el estado de negocio permiten esa acción.",{},{"id":480,"data":1043,"type":42,"tunes":1045},{"text":1044,"level":219},"Paso 4 — Decidir dónde debería ocurrir la ejecución",{},{"id":485,"data":1047,"type":226,"tunes":1049},{"text":1048},"La API de Agentes separa el arnés gestionado del entorno de ejecución. Un agente puede operar sin un entorno dedicado, en un sandbox alojado por OpenAI, o a través de un entorno autoalojado conectado a la sesión.",{},{"id":490,"data":1051,"type":226,"tunes":1053},{"text":1052},"Esto crea una decisión de migración que las aplicaciones del SDK quizás nunca hayan tomado explícitamente: qué código debería ejecutarse como una función de aplicación, qué código pertenece a un sandbox y qué cargas de trabajo requieren infraestructura que tú controles.",{},{"id":495,"data":1055,"type":327,"tunes":1067},{"content":1056,"stretched":43,"withHeadings":14},[1057,1059,1061,1062,1064,1065],[499,1058],"Límite probable",[502,1060],"Herramienta de función gestionada por tu aplicación",[505,506],[1063,509],"Acceder a recursos de red privada, software de sistema personalizado o cómputo local controlado",[511,512],[514,1066],"Función de la aplicación con controles de autorización y auditoría",{},{"id":518,"data":1069,"type":42,"tunes":1070},{"text":520,"level":219},{},{"id":523,"data":1072,"type":226,"tunes":1074},{"text":1073},"El harness gestionado proporciona recuperación a nivel de sesión, pero tu aplicación sigue siendo responsable de cada dependencia externa a su alrededor. Los entornos autoalojados necesitan aprovisionamiento, reconexión y apagado. Los manejadores de funciones pueden fallar. Los webhooks pueden reintentarse. El estado del lado del producto puede cambiar mientras un agente está inactivo.",{},{"id":528,"data":1076,"type":226,"tunes":1078},{"text":1077},"Por lo tanto, la migración necesita dos modelos de recuperación: recuperación del tiempo de ejecución del agente y recuperación de la operación de negocio. La primera está cada vez más gestionada por la Agents API. La segunda sigue siendo tu responsabilidad.",{},{"id":533,"data":1080,"type":42,"tunes":1081},{"text":535,"level":219},{},{"id":538,"data":1083,"type":226,"tunes":1085},{"text":1084},"Las sesiones de la Agents API exponen eventos, historial guardado, turnos, llamadas a herramientas, subagentes y uso de tokens. OpenAI también proporciona registros de sesión en la plataforma y exportación de trazas.",{},{"id":543,"data":1087,"type":226,"tunes":1089},{"text":1088},"No descartes la observabilidad de tu aplicación porque las trazas de la plataforma hayan mejorado. Los registros del producto todavía necesitan conectar la sesión del agente con la identidad del usuario, la decisión de autorización, el objeto de dominio, el efecto secundario de la herramienta, el registro de aprobación y el resultado final aceptado. La traza de producción útil es la unión entre la evidencia del tiempo de ejecución del agente y la evidencia del tiempo de ejecución del negocio.",{},{"id":548,"data":1091,"type":554,"tunes":1095},{"url":550,"title":1092,"excerpt":1093,"ctaLabel":1094},"Fiabilidad de los agentes de IA: por qué la respuesta final no es suficiente","La fiabilidad del agente depende de la ruta de ejecución, las herramientas y las decisiones intermedias, no solo del resultado final.","Leer el artículo sobre fiabilidad",{},{"id":557,"data":1097,"type":42,"tunes":1098},{"text":559,"level":219},{},{"id":562,"data":1100,"type":226,"tunes":1102},{"text":1101},"Una migración puede parecer exitosa porque el nuevo sistema sigue produciendo respuestas plausibles mientras cambia silenciosamente la elección de herramientas, la continuidad de la sesión, el comportamiento de traspaso, la latencia o la recuperación de fallos. Construye la línea base de comportamiento antes de cambiar los tiempos de ejecución.",{},{"id":567,"data":1104,"type":226,"tunes":1106},{"text":1105},"La línea base debe incluir tareas representativas, llamadas a herramientas esperadas, acciones prohibidas, puntos de aprobación, continuidad del estado, escenarios de recuperación y criterios de aceptación del resultado final. Ejecuta las arquitecturas antigua y nueva contra los mismos casos siempre que sea posible.",{},{"id":572,"data":1108,"type":42,"tunes":1110},{"text":1109,"level":219},"La prueba de verificación de la migración",{},{"id":577,"data":1112,"type":606,"tunes":1127},{"steps":1113,"title":1126,"orientation":605},[1114,1116,1117,1118,1120,1122,1123,1124],{"label":581,"description":1115},"Captura trazas representativas del SDK, resultados esperados, rutas de herramientas, puntos de aprobación y casos de fallo.",{"label":584,"description":585},{"label":587,"description":588},{"label":1119,"description":591},"4. Construir una porción vertical de la Agents API",{"label":593,"description":1121},"Prueba el reinicio del proceso, el reintento de webhook, el tiempo de espera de la función, la reconexión del entorno autoalojado y el estado de dominio obsoleto.",{"label":596,"description":597},{"label":599,"description":600},{"label":1125,"description":603},"8. Hacer el cambio detrás de un límite reversible","Verificar el nuevo tiempo de ejecución antes de hacer el cambio",{},{"id":609,"data":1129,"type":42,"tunes":1130},{"text":611,"level":219},{},{"id":614,"data":1132,"type":327,"tunes":1151},{"content":1133,"stretched":43,"withHeadings":14},[1134,1136,1137,1138,1141,1142,1144,1146,1147,1149],[618,1135],"Comprobación de migración",[621,622],[624,625],[1139,1140],"Continuidad del estado","¿Puede reanudarse el trabajo a través de turnos, reinicios y esperas asíncronas?",[324,630],[632,1143],"¿Puede unirse cada acción consecuente con la sesión, el usuario, la llamada a la herramienta y el objeto de dominio?",[635,1145],"¿Las sesiones de larga duración preservan las restricciones sin arrastrar verdad obsoleta de la aplicación?",[638,639],[641,1148],"¿Qué cambia en el uso del modelo, el uso del sandbox, el contexto repetido y las operaciones de infraestructura?",[644,1150],"¿Qué responsabilidades que antes eran de la aplicación desaparecieron realmente y cuáles simplemente se trasladaron?",{},{"id":648,"data":1153,"type":42,"tunes":1154},{"text":650,"level":219},{},{"id":653,"data":1156,"type":226,"tunes":1158},{"text":1157},"Una aplicación existente del Agents SDK no se convierte en mala arquitectura simplemente porque la dirección de la plataforma cambió. OpenAI continúa con el mantenimiento, las correcciones de seguridad, las correcciones de errores críticos y el trabajo de compatibilidad. Si la aplicación es estable, está bien evaluada y no tiene un requisito de hoja de ruta bloqueado, una migración inmediata del tiempo de ejecución puede no estar justificada.",{},{"id":658,"data":1160,"type":669,"tunes":1165},{"meta":1161,"items":1162,"style":668},{},[662,663,1163,665,1164,667],"La aplicación depende de semánticas de orquestación personalizadas que no han sido validadas en el harness gestionado.","Tu equipo aún no ha separado el estado de negocio del estado del tiempo de ejecución del agente, lo que hace inseguro el cambio.",{},{"id":672,"data":1167,"type":42,"tunes":1168},{"text":674,"level":219},{},{"id":677,"data":1170,"type":226,"tunes":1172},{"text":1171},"La migración resulta más convincente cuando los requisitos del producto se alinean con el harness gestionado: trabajo duradero de larga duración, compactación y recuperación de contexto gestionadas por la plataforma, capacidades más recientes del runtime de agentes, ejecución en sandbox, gestión de ciclo de vida alojada más completa, o el deseo de reducir la cantidad de código de orquestación que opera tu aplicación.",{},{"id":682,"data":1174,"type":226,"tunes":1176},{"text":1175},"La señal más fuerte no es \"el SDK antiguo está completo en funciones\". Es \"nuestra hoja de ruta ahora depende de capacidades cuyo hogar natural es el runtime gestionado de la Agents API\".",{},{"id":687,"data":1178,"type":42,"tunes":1180},{"text":1179,"level":219},"¿Qué cambiaría esta respuesta?",{},{"id":692,"data":1182,"type":226,"tunes":1184},{"text":1183},"La estrategia de migración cambiaría si OpenAI publica herramientas de migración automatizadas, introduce capas de compatibilidad explícitas, cambia la semántica de sesión de la Agents API, amplía o reduce el soporte de entornos autoalojados, o cambia la política de soporte del Agents SDK.",{},{"id":697,"data":1186,"type":226,"tunes":1188},{"text":1187},"También cambiaría si cambian los requisitos de tu producto. Un asistente simple de solicitud-respuesta puede que no necesite un harness gestionado duradero en absoluto. Un agente de codificación, investigación u operaciones de larga duración puede beneficiarse mucho más del modelo de propiedad de la Agents API.",{},{"id":702,"data":1190,"type":42,"tunes":1191},{"text":704,"level":219},{},{"id":707,"data":1193,"type":226,"tunes":1195},{"text":1194},"No existe un mapa universal uno a uno de migración de SDK a API porque las aplicaciones usan el Agents SDK de manera diferente. Algunas dependen en gran medida de sesiones y handoffs; otras lo usan como un runner ligero alrededor de herramientas de función. La migración correcta depende de qué responsabilidades asume realmente tu aplicación hoy.",{},{"id":712,"data":1197,"type":226,"tunes":1199},{"text":1198},"La Agents API también está en beta pública, por lo que los detalles de implementación pueden evolucionar. Trata los principios de propiedad de este artículo como más duraderos que cualquier forma de endpoint individual.",{},{"id":717,"data":1201,"type":42,"tunes":1202},{"text":719,"level":219},{},{"id":722,"data":1204,"type":226,"tunes":1206},{"text":1205},"Migrar del Agents SDK a la Agents API se entiende mejor como mover la frontera del runtime de agentes. El harness gestionado asume más del bucle, la continuidad de sesión, la compactación y la recuperación. Tu aplicación debería volverse más explícita sobre las responsabilidades que siguen siendo tuyas: verdad de dominio, autorización, efectos secundarios de funciones, artefactos, auditabilidad y ciclo de vida del producto.",{},{"id":727,"data":1208,"type":226,"tunes":1210},{"text":1209},"Si una migración deja toda la maquinaria de orquestación antigua en su lugar y simplemente reemplaza las llamadas al SDK con llamadas a la Agents API, probablemente ha perdido la oportunidad arquitectónica. El objetivo no es reproducir el runtime antiguo sobre el nuevo. El objetivo es decidir qué responsabilidades del runtime ya no pertenecen a tu aplicación.",{},{"id":732,"data":1212,"type":42,"tunes":1213},{"text":734,"level":219},{},{"id":737,"data":1215,"type":737,"tunes":1232},{"items":1216,"title":1231},[1217,1220,1222,1225,1228],{"id":741,"answer":1218,"question":1219},"No. El cambio principal es la propiedad del runtime: el Agents SDK ejecuta el bucle del agente en tu aplicación, mientras que la Agents API ejecuta un harness Codex gestionado y una sesión duradera. El estado, el ciclo de vida, el manejo de eventos y la recuperación deben revisarse como cuestiones de arquitectura.","¿Migrar del Agents SDK a la Agents API es solo una reescritura de API?",{"id":745,"answer":1221,"question":747},"La implementación de negocio a menudo puede reutilizarse si ya está detrás de una interfaz de aplicación estable. La integración orientada al agente cambia porque las llamadas a funciones de la Agents API se gestionan a través de acciones requeridas y resultados de la sesión.",{"id":749,"answer":1223,"question":1224},"En general, no. Mantén el estado autoritativo de negocio y producto en tus propias bases de datos o servicios. Usa la sesión del agente para la continuidad del agente y el contexto de trabajo, no como única fuente de verdad de tu producto.","¿Debería trasladar el estado de negocio a la sesión de la Agents API?",{"id":753,"answer":1226,"question":1227},"No siempre, porque el streaming también está disponible. Los webhooks son especialmente útiles para sesiones de larga duración o asíncronas donde tu aplicación debería reaccionar a cambios de ciclo de vida sin mantener un stream abierto.","¿Necesito webhooks para la Agents API?",{"id":757,"answer":1229,"question":1230},"No. El SDK sigue siendo compatible en modo mantenimiento. Migra cuando el nuevo runtime aporte valor significativo para la hoja de ruta y después de que el comportamiento requerido se haya validado contra evaluaciones con forma de producción.","¿Debería migrar ahora toda aplicación existente del Agents SDK?","Migrar del Agents SDK a la Agents API",{},{"id":763,"data":1234,"type":42,"tunes":1235},{"text":765,"level":219},{},{"id":768,"data":1237,"type":768,"tunes":1253},{"title":770,"entries":1238},[1239,1242,1245,1247,1249,1251],{"term":1240,"anchor":774,"definition":1241},"Frontera del runtime","La división de responsabilidad entre el runtime de agentes gestionado por la plataforma y el runtime propiedad de la aplicación.",{"term":1243,"anchor":778,"definition":1244},"Harness","El runtime de agentes que coordina llamadas al modelo, herramientas, contexto, orquestación y ejecución continuada.",{"term":781,"anchor":782,"definition":1246},"Una instancia duradera de la Agents API que mantiene la configuración, la conversación y el trabajo guardado de un agente a lo largo de los turnos.",{"term":785,"anchor":786,"definition":1248},"Un estado de sesión en el que la Agents API necesita entrada externa, como un resultado de función o una conexión de entorno, antes de que el trabajo pueda continuar.",{"term":509,"anchor":789,"definition":1250},"Un entorno de ejecución operado por tu infraestructura y conectado al harness gestionado de la Agents API.",{"term":792,"anchor":793,"definition":1252},"Un método de validación por etapas que compara el nuevo runtime con líneas base de comportamiento, inyecciones de fallos, trazas y criterios de corte reversibles.",{},{"id":797,"data":1255,"type":42,"tunes":1256},{"text":799,"level":219},{},{"id":802,"data":1258,"type":809,"tunes":1263},{"link":804,"meta":1259},{"image":1260,"title":1261,"description":1262},{"url":417},"OpenAI — Agents SDK","Política de soporte actual: el Agents SDK está completo en funciones, sigue mantenido, y las nuevas aplicaciones deberían comenzar con la Agents API.",{},{"id":812,"data":1265,"type":809,"tunes":1270},{"link":814,"meta":1266},{"image":1267,"title":1268,"description":1269},{"url":417},"OpenAI — Ejecución de agentes con el SDK de Agentes","Documentación del bucle de agente propiedad de la aplicación del SDK y el modelo de continuación.",{},{"id":821,"data":1272,"type":809,"tunes":1277},{"link":823,"meta":1273},{"image":1274,"title":1275,"description":1276},{"url":417},"OpenAI — Descripción general de la API de Agentes","Define los conceptos centrales de la API de Agentes: agente, entorno, sesión, eventos e ítems.",{},{"id":830,"data":1279,"type":809,"tunes":1284},{"link":832,"meta":1280},{"image":1281,"title":1282,"description":1283},{"url":417},"OpenAI — Arquitectura de la API de Agentes","Explica los límites del arnés alojado, el servidor de aplicaciones, el entorno de ejecución alojado por OpenAI y el autoalojado.",{},{"id":839,"data":1286,"type":809,"tunes":1291},{"link":841,"meta":1287},{"image":1288,"title":1289,"description":1290},{"url":417},"OpenAI — Configuración de Agentes","Define la configuración reutilizable de agentes y la personalización a nivel de sesión.",{},{"id":848,"data":1293,"type":809,"tunes":1297},{"link":850,"meta":1294},{"image":1295,"title":853,"description":1296},{"url":417},"Documenta sesiones duraderas, turnos asíncronos, transmisión en streaming y dirección.",{},{"id":857,"data":1299,"type":809,"tunes":1303},{"link":859,"meta":1300},{"image":1301,"title":862,"description":1302},{"url":417},"Definición de la herramienta de función y el límite del manejador de la aplicación para los resultados de función requeridos.",{},{"id":866,"data":1305,"type":809,"tunes":1309},{"link":868,"meta":1306},{"image":1307,"title":871,"description":1308},{"url":417},"Eventos del ciclo de vida para sesiones asíncronas, acciones requeridas y conexiones de entorno autoalojado.",{},{"id":875,"data":1311,"type":809,"tunes":1314},{"link":877,"meta":1312},{"image":1313,"title":880,"description":881},{"url":417},{},"2.31","Migrar del SDK de OpenAI Agents a la nueva API de Agents no es un simple cambio de nombre de importación. El límite del entorno de ejecución cambia: el bucle del agente, la sesión duradera, la orquestación, la compactación de contexto y la recuperación se trasladan hacia un harness gestionado. Esta guía muestra qué debería migrarse, qué debería permanecer en tu aplicación y cómo demostrar la migración antes del cambio definitivo.","\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":1324,"de":1325,"sr":1326,"es":1327,"fr":1328,"it":1329,"ru":1330,"zh":1331},"\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",[1333,1337,1341],{"id":1334,"name":1335,"slug":1336},70,"Fases (Plan → Ejecutar → Verificar)","phases",{"id":1338,"name":1339,"slug":1340},73,"Verificación y diff","verification-and-diffing",{"id":1342,"name":1343,"slug":1344},71,"Registro de riesgos","risk-register",{"id":1346,"login":1347,"email":1348,"displayName":1349},"20","rooth8233","aleksandar@stajic.de","Aleksandar Stajić",[1351,2227],{"lang":1352,"title":1353,"content":1354,"contentJson":1355,"excerpt":2226},"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":1356,"blocks":1357,"version":2225},1790352173087,[1358,1362,1366,1371,1376,1381,1385,1389,1393,1397,1401,1452,1456,1460,1464,1469,1473,1477,1509,1513,1517,1521,1545,1549,1553,1557,1561,1565,1569,1574,1578,1582,1586,1608,1612,1616,1620,1624,1628,1632,1639,1643,1647,1651,1655,1684,1688,1721,1725,1729,1740,1744,1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1812,1816,1837,1841,1847,1854,1861,1868,1875,1882,1889,1896,1903,1906,1909,1912,1915,1918,1921,1924,1927,1930,1933,1949,1952,1955,1958,1961,1964,1967,1978,1981,1984,1987,2003,2006,2009,2012,2015,2018,2021,2024,2027,2030,2033,2043,2046,2049,2052,2055,2058,2061,2064,2067,2070,2073,2076,2088,2091,2105,2108,2111,2116,2119,2122,2125,2128,2131,2134,2137,2140,2143,2146,2149,2152,2155,2164,2167,2177,2180,2185,2190,2195,2200,2205,2210,2215,2220],{"id":215,"data":1359,"type":220,"tunes":1361},{"title":1360,"maxLevel":218,"minLevel":219},"Contents",{},{"id":223,"data":1363,"type":226,"tunes":1365},{"text":1364},"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":1367,"type":234,"tunes":1370},{"body":1368,"title":1369,"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":1372,"type":234,"tunes":1375},{"body":1373,"title":1374,"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":1377,"type":234,"tunes":1380},{"body":1378,"title":1379,"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":1382,"type":42,"tunes":1384},{"text":1383,"level":219},"The migration is from an application-owned loop to a managed harness",{},{"id":256,"data":1386,"type":226,"tunes":1388},{"text":1387},"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":1390,"type":226,"tunes":1392},{"text":1391},"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":1394,"type":226,"tunes":1396},{"text":1395},"That ownership shift is the migration. Everything else — API syntax, tool schemas, event handling, session IDs — follows from it.",{},{"id":271,"data":1398,"type":42,"tunes":1400},{"text":1399,"level":219},"The Runtime Boundary Migration Map",{},{"id":276,"data":1402,"type":327,"tunes":1451},{"content":1403,"stretched":43,"withHeadings":14},[1404,1408,1412,1416,1420,1424,1428,1432,1436,1439,1443,1447],[1405,1406,1407],"Concern","Agents SDK","Agents API migration target",[1409,1410,1411],"Agent loop","Runs in your application through the SDK runner","Runs in the managed Codex harness",[1413,1414,1415],"Reusable agent definition","Agent object in application code","Saved or inline agent configuration with model, instructions and tools",[1417,1418,1419],"Conversation \u002F work continuity","SDK session strategy, history, result continuation or application storage","Durable Agents API session",[1421,1422,1423],"Tool execution","SDK coordinates tool calls in your runtime","Harness requests function calls; your application returns results",[1425,1426,1427],"Context management","Your runtime \u002F SDK session strategy","Managed session context, compaction and recovery, plus your own application data boundaries",[1429,1430,1431],"Handoffs \u002F specialists","SDK orchestration primitives","Harness \u002F subagent behaviour in Agents API; do not assume one-to-one semantics",[1433,1434,1435],"Execution environment","Your application runtime or tool-specific environment","Optional OpenAI-hosted or self-hosted environment attached to the session",[312,1437,1438],"SDK streaming from the run","Agents API session event stream",[1440,1441,1442],"Async lifecycle","Usually application-managed around the SDK run","Native session states, asynchronous turns and webhooks",[1444,1445,1446],"Tracing \u002F observability","Agents SDK tracing and application logs","Agents session logs, events, turns, tool calls, subagents and exportable traces",[1448,1449,1450],"Recovery","Application responsibility","Managed harness\u002Fsession recovery plus application-owned recovery for external systems and self-hosted environments",{},{"id":330,"data":1453,"type":42,"tunes":1455},{"text":1454,"level":219},"What can migrate conceptually without changing ownership",{},{"id":335,"data":1457,"type":226,"tunes":1459},{"text":1458},"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":1461,"type":226,"tunes":1463},{"text":1462},"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":1465,"type":234,"tunes":1468},{"body":1466,"title":1467,"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":1470,"type":42,"tunes":1472},{"text":1471,"level":219},"What should not be migrated one-to-one",{},{"id":357,"data":1474,"type":226,"tunes":1476},{"text":1475},"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":1478,"type":327,"tunes":1508},{"content":1479,"stretched":43,"withHeadings":14},[1480,1484,1488,1492,1496,1500,1504],[1481,1482,1483],"SDK-era assumption","Why a direct copy is risky","Migration question",[1485,1486,1487],"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?",[1489,1490,1491],"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?",[1493,1494,1495],"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?",[1497,1498,1499],"All tool execution happens where the SDK process runs","Function handlers and execution environments can be separate","Where should each tool actually execute?",[1501,1502,1503],"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?",[1505,1506,1507],"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":1510,"type":42,"tunes":1512},{"text":1511,"level":219},"Step 1 — Separate domain state from agent session state",{},{"id":400,"data":1514,"type":226,"tunes":1516},{"text":1515},"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":1518,"type":226,"tunes":1520},{"text":1519},"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":1522,"type":441,"tunes":1544},{"rows":1523,"title":1536,"layout":327,"columns":1537},[1524,1527,1530,1533],{"id":414,"label":1525,"values":1526},"Conversation continuity",[417,417,417],{"id":419,"label":1528,"values":1529},"Business truth",[417,417,417],{"id":423,"label":1531,"values":1532},"Durable artifact",[417,417,417],{"id":427,"label":1534,"values":1535},"Working scratch state",[417,417,417],"State placement test",[1538,1540,1542],{"id":433,"label":1539},"State type",{"id":436,"label":1541},"Preferred owner",{"id":439,"label":1543},"Reason",{},{"id":444,"data":1546,"type":42,"tunes":1548},{"text":1547,"level":219},"Step 2 — Convert the runner mindset into a session-and-events mindset",{},{"id":449,"data":1550,"type":226,"tunes":1552},{"text":1551},"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":1554,"type":226,"tunes":1556},{"text":1555},"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":1558,"type":42,"tunes":1560},{"text":1559,"level":219},"Step 3 — Redesign function tools around required actions",{},{"id":464,"data":1562,"type":226,"tunes":1564},{"text":1563},"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":1566,"type":226,"tunes":1568},{"text":1567},"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":1570,"type":234,"tunes":1573},{"body":1571,"title":1572,"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":1575,"type":42,"tunes":1577},{"text":1576,"level":219},"Step 4 — Decide where execution should happen",{},{"id":485,"data":1579,"type":226,"tunes":1581},{"text":1580},"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":1583,"type":226,"tunes":1585},{"text":1584},"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":1587,"type":327,"tunes":1607},{"content":1588,"stretched":43,"withHeadings":14},[1589,1592,1595,1598,1601,1604],[1590,1591],"Need","Likely boundary",[1593,1594],"Call an existing internal service through controlled business logic","Function tool handled by your application",[1596,1597],"Run isolated code or work with temporary files without private infrastructure","OpenAI-hosted environment",[1599,1600],"Access private network resources, custom system software or controlled local compute","Self-hosted environment",[1602,1603],"Persist accepted product artifacts","Application-owned storage, not only sandbox filesystem",[1605,1606],"Execute a high-impact business side effect","Application function with authorization and audit controls",{},{"id":518,"data":1609,"type":42,"tunes":1611},{"text":1610,"level":219},"Step 5 — Replace implicit recovery with explicit lifecycle handling",{},{"id":523,"data":1613,"type":226,"tunes":1615},{"text":1614},"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":1617,"type":226,"tunes":1619},{"text":1618},"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":1621,"type":42,"tunes":1623},{"text":1622,"level":219},"Step 6 — Rebuild observability around the new trace boundary",{},{"id":538,"data":1625,"type":226,"tunes":1627},{"text":1626},"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":1629,"type":226,"tunes":1631},{"text":1630},"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":1633,"type":554,"tunes":1638},{"url":1634,"title":1635,"excerpt":1636,"ctaLabel":1637},"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":1640,"type":42,"tunes":1642},{"text":1641,"level":219},"Step 7 — Preserve evals before changing the runtime",{},{"id":562,"data":1644,"type":226,"tunes":1646},{"text":1645},"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":1648,"type":226,"tunes":1650},{"text":1649},"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":1652,"type":42,"tunes":1654},{"text":1653,"level":219},"The Migration Proof Test",{},{"id":577,"data":1656,"type":606,"tunes":1683},{"steps":1657,"title":1682,"orientation":605},[1658,1661,1664,1667,1670,1673,1676,1679],{"label":1659,"description":1660},"1. Freeze the behavioural baseline","Capture representative SDK traces, expected outputs, tool paths, approval points and failure cases.",{"label":1662,"description":1663},"2. Inventory state ownership","Mark each state field as agent-session state, authoritative domain state, durable artifact or ephemeral working state.",{"label":1665,"description":1666},"3. Reuse stable tool implementations","Keep business functions behind application interfaces; replace only the agent-facing integration where possible.",{"label":1668,"description":1669},"4. Build one Agents API vertical slice","Migrate one production-shaped workflow including session creation, tools, events, environment and persistence.",{"label":1671,"description":1672},"5. Inject interruptions","Test process restart, webhook retry, function timeout, self-hosted environment reconnect and stale domain state.",{"label":1674,"description":1675},"6. Compare traces, not only answers","Verify tool choice, authorization, evidence path, state transitions and side effects against the baseline.",{"label":1677,"description":1678},"7. Run shadow traffic","Where feasible, replay or mirror representative tasks before making the new runtime authoritative.",{"label":1680,"description":1681},"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":1685,"type":42,"tunes":1687},{"text":1686,"level":219},"What to measure during migration",{},{"id":614,"data":1689,"type":327,"tunes":1720},{"content":1690,"stretched":43,"withHeadings":14},[1691,1694,1697,1700,1703,1705,1708,1711,1714,1717],[1692,1693],"Dimension","Migration check",[1695,1696],"Task success","Does the new runtime meet the same or better acceptance criteria?",[1698,1699],"Tool correctness","Does it call the right tool with valid arguments and authorization?",[1701,1702],"State continuity","Can work resume across turns, restarts and asynchronous waits?",[1448,1704],"What happens after webhook loss, handler failure, environment disconnect or timeout?",[1706,1707],"Traceability","Can every consequential action be joined to session, user, tool call and domain object?",[1709,1710],"Context behaviour","Do long-running sessions preserve constraints without carrying stale application truth?",[1712,1713],"Latency","How do session startup, environment provisioning and multi-turn work affect user-visible time?",[1715,1716],"Cost","What changes in model usage, sandbox usage, repeated context and infrastructure operations?",[1718,1719],"Operational load","Which previously application-owned responsibilities actually disappeared, and which merely moved?",{},{"id":648,"data":1722,"type":42,"tunes":1724},{"text":1723,"level":219},"When not to migrate yet",{},{"id":653,"data":1726,"type":226,"tunes":1728},{"text":1727},"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":658,"data":1730,"type":669,"tunes":1739},{"meta":1731,"items":1732,"style":668},{},[1733,1734,1735,1736,1737,1738],"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":672,"data":1741,"type":42,"tunes":1743},{"text":1742,"level":219},"When the migration becomes strategically important",{},{"id":677,"data":1745,"type":226,"tunes":1747},{"text":1746},"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":682,"data":1749,"type":226,"tunes":1751},{"text":1750},"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":687,"data":1753,"type":42,"tunes":1755},{"text":1754,"level":219},"What would change this answer?",{},{"id":692,"data":1757,"type":226,"tunes":1759},{"text":1758},"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":697,"data":1761,"type":226,"tunes":1763},{"text":1762},"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":702,"data":1765,"type":42,"tunes":1767},{"text":1766,"level":219},"Limitations",{},{"id":707,"data":1769,"type":226,"tunes":1771},{"text":1770},"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":712,"data":1773,"type":226,"tunes":1775},{"text":1774},"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":717,"data":1777,"type":42,"tunes":1779},{"text":1778,"level":219},"Conclusion",{},{"id":722,"data":1781,"type":226,"tunes":1783},{"text":1782},"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":727,"data":1785,"type":226,"tunes":1787},{"text":1786},"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":732,"data":1789,"type":42,"tunes":1791},{"text":1790,"level":219},"FAQ",{},{"id":737,"data":1793,"type":737,"tunes":1811},{"items":1794,"title":1810},[1795,1798,1801,1804,1807],{"id":741,"answer":1796,"question":1797},"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":745,"answer":1799,"question":1800},"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":749,"answer":1802,"question":1803},"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":753,"answer":1805,"question":1806},"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":757,"answer":1808,"question":1809},"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":763,"data":1813,"type":42,"tunes":1815},{"text":1814,"level":219},"Glossary",{},{"id":768,"data":1817,"type":768,"tunes":1836},{"title":1818,"entries":1819},"Key migration terms",[1820,1823,1825,1828,1831,1833],{"term":1821,"anchor":774,"definition":1822},"Runtime boundary","The division of responsibility between the platform-managed agent runtime and the application-owned runtime.",{"term":1243,"anchor":778,"definition":1824},"The agent runtime that coordinates model calls, tools, context, orchestration and continued execution.",{"term":1826,"anchor":782,"definition":1827},"Session","A durable Agents API instance that holds an agent's configuration, conversation and saved work across turns.",{"term":1829,"anchor":786,"definition":1830},"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":1600,"anchor":789,"definition":1832},"An execution environment operated by your infrastructure and connected to the managed Agents API harness.",{"term":1834,"anchor":793,"definition":1835},"Migration proof test","A staged validation method that compares the new runtime against behavioural baselines, failure injections, traces and reversible cutover criteria.",{},{"id":797,"data":1838,"type":42,"tunes":1840},{"text":1839,"level":219},"Primary sources and further reading",{},{"id":802,"data":1842,"type":809,"tunes":1846},{"link":804,"meta":1843},{"image":1844,"title":1261,"description":1845},{"url":417},"Current support policy: the Agents SDK is feature complete, remains maintained, and new applications should start with the Agents API.",{},{"id":812,"data":1848,"type":809,"tunes":1853},{"link":814,"meta":1849},{"image":1850,"title":1851,"description":1852},{"url":417},"OpenAI — Running agents with the Agents SDK","Documentation of the SDK application-owned agent loop and continuation model.",{},{"id":821,"data":1855,"type":809,"tunes":1860},{"link":823,"meta":1856},{"image":1857,"title":1858,"description":1859},{"url":417},"OpenAI — Agents API overview","Defines the Agents API core concepts: agent, environment, session, events and items.",{},{"id":830,"data":1862,"type":809,"tunes":1867},{"link":832,"meta":1863},{"image":1864,"title":1865,"description":1866},{"url":417},"OpenAI — Agents API architecture","Explains the hosted harness, application server, OpenAI-hosted and self-hosted execution environment boundaries.",{},{"id":839,"data":1869,"type":809,"tunes":1874},{"link":841,"meta":1870},{"image":1871,"title":1872,"description":1873},{"url":417},"OpenAI — Configuring Agents","Defines reusable agent configuration and session-level customization.",{},{"id":848,"data":1876,"type":809,"tunes":1881},{"link":850,"meta":1877},{"image":1878,"title":1879,"description":1880},{"url":417},"OpenAI — Run and continue sessions","Documents durable sessions, asynchronous turns, streaming and steering.",{},{"id":857,"data":1883,"type":809,"tunes":1888},{"link":859,"meta":1884},{"image":1885,"title":1886,"description":1887},{"url":417},"OpenAI — Agents API Functions","Function-tool definition and the application handler boundary for required function results.",{},{"id":866,"data":1890,"type":809,"tunes":1895},{"link":868,"meta":1891},{"image":1892,"title":1893,"description":1894},{"url":417},"OpenAI — Session webhooks","Lifecycle events for asynchronous sessions, required actions and self-hosted environment connections.",{},{"id":875,"data":1897,"type":809,"tunes":1902},{"link":877,"meta":1898},{"image":1899,"title":1900,"description":1901},{"url":417},"OpenAI — Agents API observability and usage","Session logs, events, turns, tool calls, subagents, traces and token-usage inspection.",{},{"id":223,"data":1904,"type":226,"tunes":1905},{"text":1364},{},{"id":229,"data":1907,"type":234,"tunes":1908},{"body":1368,"title":1369,"variant":233},{},{"id":237,"data":1910,"type":234,"tunes":1911},{"body":1373,"title":1374,"variant":241},{},{"id":244,"data":1913,"type":234,"tunes":1914},{"body":1378,"title":1379,"variant":248},{},{"id":900,"data":1916,"type":220,"tunes":1917},{"title":1360,"maxLevel":218,"minLevel":219},{},{"id":251,"data":1919,"type":42,"tunes":1920},{"text":1383,"level":219},{},{"id":256,"data":1922,"type":226,"tunes":1923},{"text":1387},{},{"id":261,"data":1925,"type":226,"tunes":1926},{"text":1391},{},{"id":266,"data":1928,"type":226,"tunes":1929},{"text":1395},{},{"id":271,"data":1931,"type":42,"tunes":1932},{"text":1399,"level":219},{},{"id":276,"data":1934,"type":327,"tunes":1948},{"content":1935,"stretched":43,"withHeadings":14},[1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947],[1405,1406,1407],[1409,1410,1411],[1413,1414,1415],[1417,1418,1419],[1421,1422,1423],[1425,1426,1427],[1429,1430,1431],[1433,1434,1435],[312,1437,1438],[1440,1441,1442],[1444,1445,1446],[1448,1449,1450],{},{"id":330,"data":1950,"type":42,"tunes":1951},{"text":1454,"level":219},{},{"id":335,"data":1953,"type":226,"tunes":1954},{"text":1458},{},{"id":340,"data":1956,"type":226,"tunes":1957},{"text":1462},{},{"id":345,"data":1959,"type":234,"tunes":1960},{"body":1466,"title":1467,"variant":349},{},{"id":352,"data":1962,"type":42,"tunes":1963},{"text":1471,"level":219},{},{"id":357,"data":1965,"type":226,"tunes":1966},{"text":1475},{},{"id":362,"data":1968,"type":327,"tunes":1977},{"content":1969,"stretched":43,"withHeadings":14},[1970,1971,1972,1973,1974,1975,1976],[1481,1482,1483],[1485,1486,1487],[1489,1490,1491],[1493,1494,1495],[1497,1498,1499],[1501,1502,1503],[1505,1506,1507],{},{"id":395,"data":1979,"type":42,"tunes":1980},{"text":1511,"level":219},{},{"id":400,"data":1982,"type":226,"tunes":1983},{"text":1515},{},{"id":405,"data":1985,"type":226,"tunes":1986},{"text":1519},{},{"id":410,"data":1988,"type":441,"tunes":2002},{"rows":1989,"title":1536,"layout":327,"columns":1998},[1990,1992,1994,1996],{"id":414,"label":1525,"values":1991},[417,417,417],{"id":419,"label":1528,"values":1993},[417,417,417],{"id":423,"label":1531,"values":1995},[417,417,417],{"id":427,"label":1534,"values":1997},[417,417,417],[1999,2000,2001],{"id":433,"label":1539},{"id":436,"label":1541},{"id":439,"label":1543},{},{"id":444,"data":2004,"type":42,"tunes":2005},{"text":1547,"level":219},{},{"id":449,"data":2007,"type":226,"tunes":2008},{"text":1551},{},{"id":454,"data":2010,"type":226,"tunes":2011},{"text":1555},{},{"id":459,"data":2013,"type":42,"tunes":2014},{"text":1559,"level":219},{},{"id":464,"data":2016,"type":226,"tunes":2017},{"text":1563},{},{"id":469,"data":2019,"type":226,"tunes":2020},{"text":1567},{},{"id":474,"data":2022,"type":234,"tunes":2023},{"body":1571,"title":1572,"variant":241},{},{"id":480,"data":2025,"type":42,"tunes":2026},{"text":1576,"level":219},{},{"id":485,"data":2028,"type":226,"tunes":2029},{"text":1580},{},{"id":490,"data":2031,"type":226,"tunes":2032},{"text":1584},{},{"id":495,"data":2034,"type":327,"tunes":2042},{"content":2035,"stretched":43,"withHeadings":14},[2036,2037,2038,2039,2040,2041],[1590,1591],[1593,1594],[1596,1597],[1599,1600],[1602,1603],[1605,1606],{},{"id":518,"data":2044,"type":42,"tunes":2045},{"text":1610,"level":219},{},{"id":523,"data":2047,"type":226,"tunes":2048},{"text":1614},{},{"id":528,"data":2050,"type":226,"tunes":2051},{"text":1618},{},{"id":533,"data":2053,"type":42,"tunes":2054},{"text":1622,"level":219},{},{"id":538,"data":2056,"type":226,"tunes":2057},{"text":1626},{},{"id":543,"data":2059,"type":226,"tunes":2060},{"text":1630},{},{"id":548,"data":2062,"type":554,"tunes":2063},{"url":1634,"title":1635,"excerpt":1636,"ctaLabel":1637},{},{"id":557,"data":2065,"type":42,"tunes":2066},{"text":1641,"level":219},{},{"id":562,"data":2068,"type":226,"tunes":2069},{"text":1645},{},{"id":567,"data":2071,"type":226,"tunes":2072},{"text":1649},{},{"id":572,"data":2074,"type":42,"tunes":2075},{"text":1653,"level":219},{},{"id":577,"data":2077,"type":606,"tunes":2087},{"steps":2078,"title":1682,"orientation":605},[2079,2080,2081,2082,2083,2084,2085,2086],{"label":1659,"description":1660},{"label":1662,"description":1663},{"label":1665,"description":1666},{"label":1668,"description":1669},{"label":1671,"description":1672},{"label":1674,"description":1675},{"label":1677,"description":1678},{"label":1680,"description":1681},{},{"id":609,"data":2089,"type":42,"tunes":2090},{"text":1686,"level":219},{},{"id":614,"data":2092,"type":327,"tunes":2104},{"content":2093,"stretched":43,"withHeadings":14},[2094,2095,2096,2097,2098,2099,2100,2101,2102,2103],[1692,1693],[1695,1696],[1698,1699],[1701,1702],[1448,1704],[1706,1707],[1709,1710],[1712,1713],[1715,1716],[1718,1719],{},{"id":648,"data":2106,"type":42,"tunes":2107},{"text":1723,"level":219},{},{"id":653,"data":2109,"type":226,"tunes":2110},{"text":1727},{},{"id":658,"data":2112,"type":669,"tunes":2115},{"meta":2113,"items":2114,"style":668},{},[1733,1734,1735,1736,1737,1738],{},{"id":672,"data":2117,"type":42,"tunes":2118},{"text":1742,"level":219},{},{"id":677,"data":2120,"type":226,"tunes":2121},{"text":1746},{},{"id":682,"data":2123,"type":226,"tunes":2124},{"text":1750},{},{"id":687,"data":2126,"type":42,"tunes":2127},{"text":1754,"level":219},{},{"id":692,"data":2129,"type":226,"tunes":2130},{"text":1758},{},{"id":697,"data":2132,"type":226,"tunes":2133},{"text":1762},{},{"id":702,"data":2135,"type":42,"tunes":2136},{"text":1766,"level":219},{},{"id":707,"data":2138,"type":226,"tunes":2139},{"text":1770},{},{"id":712,"data":2141,"type":226,"tunes":2142},{"text":1774},{},{"id":717,"data":2144,"type":42,"tunes":2145},{"text":1778,"level":219},{},{"id":722,"data":2147,"type":226,"tunes":2148},{"text":1782},{},{"id":727,"data":2150,"type":226,"tunes":2151},{"text":1786},{},{"id":732,"data":2153,"type":42,"tunes":2154},{"text":1790,"level":219},{},{"id":737,"data":2156,"type":737,"tunes":2163},{"items":2157,"title":1810},[2158,2159,2160,2161,2162],{"id":741,"answer":1796,"question":1797},{"id":745,"answer":1799,"question":1800},{"id":749,"answer":1802,"question":1803},{"id":753,"answer":1805,"question":1806},{"id":757,"answer":1808,"question":1809},{},{"id":763,"data":2165,"type":42,"tunes":2166},{"text":1814,"level":219},{},{"id":768,"data":2168,"type":768,"tunes":2176},{"title":1818,"entries":2169},[2170,2171,2172,2173,2174,2175],{"term":1821,"anchor":774,"definition":1822},{"term":1243,"anchor":778,"definition":1824},{"term":1826,"anchor":782,"definition":1827},{"term":1829,"anchor":786,"definition":1830},{"term":1600,"anchor":789,"definition":1832},{"term":1834,"anchor":793,"definition":1835},{},{"id":797,"data":2178,"type":42,"tunes":2179},{"text":1839,"level":219},{},{"id":802,"data":2181,"type":809,"tunes":2184},{"link":804,"meta":2182},{"image":2183,"title":1261,"description":1845},{"url":417},{},{"id":812,"data":2186,"type":809,"tunes":2189},{"link":814,"meta":2187},{"image":2188,"title":1851,"description":1852},{"url":417},{},{"id":821,"data":2191,"type":809,"tunes":2194},{"link":823,"meta":2192},{"image":2193,"title":1858,"description":1859},{"url":417},{},{"id":830,"data":2196,"type":809,"tunes":2199},{"link":832,"meta":2197},{"image":2198,"title":1865,"description":1866},{"url":417},{},{"id":839,"data":2201,"type":809,"tunes":2204},{"link":841,"meta":2202},{"image":2203,"title":1872,"description":1873},{"url":417},{},{"id":848,"data":2206,"type":809,"tunes":2209},{"link":850,"meta":2207},{"image":2208,"title":1879,"description":1880},{"url":417},{},{"id":857,"data":2211,"type":809,"tunes":2214},{"link":859,"meta":2212},{"image":2213,"title":1886,"description":1887},{"url":417},{},{"id":866,"data":2216,"type":809,"tunes":2219},{"link":868,"meta":2217},{"image":2218,"title":1893,"description":1894},{"url":417},{},{"id":875,"data":2221,"type":809,"tunes":2224},{"link":877,"meta":2222},{"image":2223,"title":1900,"description":1901},{"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":2228,"excerpt":1316},{"time":212,"blocks":2229,"version":1315},[2230,2233,2236,2239,2242,2245,2248,2251,2254,2257,2260,2276,2279,2282,2285,2288,2291,2294,2305,2308,2311,2314,2330,2333,2336,2339,2342,2345,2348,2351,2354,2357,2360,2370,2373,2376,2379,2382,2385,2388,2391,2394,2397,2400,2403,2415,2418,2432,2435,2438,2443,2446,2449,2452,2455,2458,2461,2464,2467,2470,2473,2476,2479,2482,2491,2494,2504,2507,2512,2517,2522,2527,2532,2537,2542,2547,2552,2555,2558,2561,2564,2567,2570,2573,2576,2579,2582,2598,2601,2604,2607,2610,2613,2616,2627,2630,2633,2636,2652,2655,2658,2661,2664,2667,2670,2673,2676,2679,2682,2692,2695,2698,2701,2704,2707,2710,2713,2716,2719,2722,2725,2737,2740,2754,2757,2760,2765,2768,2771,2774,2777,2780,2783,2786,2789,2792,2795,2798,2801,2804,2813,2816,2826,2829,2834,2839,2844,2849,2854,2859,2864,2869],{"id":215,"data":2231,"type":220,"tunes":2232},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":223,"data":2234,"type":226,"tunes":2235},{"text":225},{},{"id":229,"data":2237,"type":234,"tunes":2238},{"body":231,"title":232,"variant":233},{},{"id":237,"data":2240,"type":234,"tunes":2241},{"body":239,"title":240,"variant":241},{},{"id":244,"data":2243,"type":234,"tunes":2244},{"body":246,"title":247,"variant":248},{},{"id":251,"data":2246,"type":42,"tunes":2247},{"text":253,"level":219},{},{"id":256,"data":2249,"type":226,"tunes":2250},{"text":258},{},{"id":261,"data":2252,"type":226,"tunes":2253},{"text":263},{},{"id":266,"data":2255,"type":226,"tunes":2256},{"text":268},{},{"id":271,"data":2258,"type":42,"tunes":2259},{"text":273,"level":219},{},{"id":276,"data":2261,"type":327,"tunes":2275},{"content":2262,"stretched":43,"withHeadings":14},[2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274],[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":2277,"type":42,"tunes":2278},{"text":332,"level":219},{},{"id":335,"data":2280,"type":226,"tunes":2281},{"text":337},{},{"id":340,"data":2283,"type":226,"tunes":2284},{"text":342},{},{"id":345,"data":2286,"type":234,"tunes":2287},{"body":347,"title":348,"variant":349},{},{"id":352,"data":2289,"type":42,"tunes":2290},{"text":354,"level":219},{},{"id":357,"data":2292,"type":226,"tunes":2293},{"text":359},{},{"id":362,"data":2295,"type":327,"tunes":2304},{"content":2296,"stretched":43,"withHeadings":14},[2297,2298,2299,2300,2301,2302,2303],[366,367,368],[370,371,372],[374,375,376],[378,379,380],[382,383,384],[386,387,388],[390,391,392],{},{"id":395,"data":2306,"type":42,"tunes":2307},{"text":397,"level":219},{},{"id":400,"data":2309,"type":226,"tunes":2310},{"text":402},{},{"id":405,"data":2312,"type":226,"tunes":2313},{"text":407},{},{"id":410,"data":2315,"type":441,"tunes":2329},{"rows":2316,"title":430,"layout":327,"columns":2325},[2317,2319,2321,2323],{"id":414,"label":415,"values":2318},[417,417,417],{"id":419,"label":420,"values":2320},[417,417,417],{"id":423,"label":424,"values":2322},[417,417,417],{"id":427,"label":428,"values":2324},[417,417,417],[2326,2327,2328],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2331,"type":42,"tunes":2332},{"text":446,"level":219},{},{"id":449,"data":2334,"type":226,"tunes":2335},{"text":451},{},{"id":454,"data":2337,"type":226,"tunes":2338},{"text":456},{},{"id":459,"data":2340,"type":42,"tunes":2341},{"text":461,"level":219},{},{"id":464,"data":2343,"type":226,"tunes":2344},{"text":466},{},{"id":469,"data":2346,"type":226,"tunes":2347},{"text":471},{},{"id":474,"data":2349,"type":234,"tunes":2350},{"body":476,"title":477,"variant":241},{},{"id":480,"data":2352,"type":42,"tunes":2353},{"text":482,"level":219},{},{"id":485,"data":2355,"type":226,"tunes":2356},{"text":487},{},{"id":490,"data":2358,"type":226,"tunes":2359},{"text":492},{},{"id":495,"data":2361,"type":327,"tunes":2369},{"content":2362,"stretched":43,"withHeadings":14},[2363,2364,2365,2366,2367,2368],[499,500],[502,503],[505,506],[508,509],[511,512],[514,515],{},{"id":518,"data":2371,"type":42,"tunes":2372},{"text":520,"level":219},{},{"id":523,"data":2374,"type":226,"tunes":2375},{"text":525},{},{"id":528,"data":2377,"type":226,"tunes":2378},{"text":530},{},{"id":533,"data":2380,"type":42,"tunes":2381},{"text":535,"level":219},{},{"id":538,"data":2383,"type":226,"tunes":2384},{"text":540},{},{"id":543,"data":2386,"type":226,"tunes":2387},{"text":545},{},{"id":548,"data":2389,"type":554,"tunes":2390},{"url":550,"title":551,"excerpt":552,"ctaLabel":553},{},{"id":557,"data":2392,"type":42,"tunes":2393},{"text":559,"level":219},{},{"id":562,"data":2395,"type":226,"tunes":2396},{"text":564},{},{"id":567,"data":2398,"type":226,"tunes":2399},{"text":569},{},{"id":572,"data":2401,"type":42,"tunes":2402},{"text":574,"level":219},{},{"id":577,"data":2404,"type":606,"tunes":2414},{"steps":2405,"title":604,"orientation":605},[2406,2407,2408,2409,2410,2411,2412,2413],{"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":2416,"type":42,"tunes":2417},{"text":611,"level":219},{},{"id":614,"data":2419,"type":327,"tunes":2431},{"content":2420,"stretched":43,"withHeadings":14},[2421,2422,2423,2424,2425,2426,2427,2428,2429,2430],[618,619],[621,622],[624,625],[627,628],[324,630],[632,633],[635,636],[638,639],[641,642],[644,645],{},{"id":648,"data":2433,"type":42,"tunes":2434},{"text":650,"level":219},{},{"id":653,"data":2436,"type":226,"tunes":2437},{"text":655},{},{"id":658,"data":2439,"type":669,"tunes":2442},{"meta":2440,"items":2441,"style":668},{},[662,663,664,665,666,667],{},{"id":672,"data":2444,"type":42,"tunes":2445},{"text":674,"level":219},{},{"id":677,"data":2447,"type":226,"tunes":2448},{"text":679},{},{"id":682,"data":2450,"type":226,"tunes":2451},{"text":684},{},{"id":687,"data":2453,"type":42,"tunes":2454},{"text":689,"level":219},{},{"id":692,"data":2456,"type":226,"tunes":2457},{"text":694},{},{"id":697,"data":2459,"type":226,"tunes":2460},{"text":699},{},{"id":702,"data":2462,"type":42,"tunes":2463},{"text":704,"level":219},{},{"id":707,"data":2465,"type":226,"tunes":2466},{"text":709},{},{"id":712,"data":2468,"type":226,"tunes":2469},{"text":714},{},{"id":717,"data":2471,"type":42,"tunes":2472},{"text":719,"level":219},{},{"id":722,"data":2474,"type":226,"tunes":2475},{"text":724},{},{"id":727,"data":2477,"type":226,"tunes":2478},{"text":729},{},{"id":732,"data":2480,"type":42,"tunes":2481},{"text":734,"level":219},{},{"id":737,"data":2483,"type":737,"tunes":2490},{"items":2484,"title":760},[2485,2486,2487,2488,2489],{"id":741,"answer":742,"question":743},{"id":745,"answer":746,"question":747},{"id":749,"answer":750,"question":751},{"id":753,"answer":754,"question":755},{"id":757,"answer":758,"question":759},{},{"id":763,"data":2492,"type":42,"tunes":2493},{"text":765,"level":219},{},{"id":768,"data":2495,"type":768,"tunes":2503},{"title":770,"entries":2496},[2497,2498,2499,2500,2501,2502],{"term":773,"anchor":774,"definition":775},{"term":777,"anchor":778,"definition":779},{"term":781,"anchor":782,"definition":783},{"term":785,"anchor":786,"definition":787},{"term":509,"anchor":789,"definition":790},{"term":792,"anchor":793,"definition":794},{},{"id":797,"data":2505,"type":42,"tunes":2506},{"text":799,"level":219},{},{"id":802,"data":2508,"type":809,"tunes":2511},{"link":804,"meta":2509},{"image":2510,"title":807,"description":808},{"url":417},{},{"id":812,"data":2513,"type":809,"tunes":2516},{"link":814,"meta":2514},{"image":2515,"title":817,"description":818},{"url":417},{},{"id":821,"data":2518,"type":809,"tunes":2521},{"link":823,"meta":2519},{"image":2520,"title":826,"description":827},{"url":417},{},{"id":830,"data":2523,"type":809,"tunes":2526},{"link":832,"meta":2524},{"image":2525,"title":835,"description":836},{"url":417},{},{"id":839,"data":2528,"type":809,"tunes":2531},{"link":841,"meta":2529},{"image":2530,"title":844,"description":845},{"url":417},{},{"id":848,"data":2533,"type":809,"tunes":2536},{"link":850,"meta":2534},{"image":2535,"title":853,"description":854},{"url":417},{},{"id":857,"data":2538,"type":809,"tunes":2541},{"link":859,"meta":2539},{"image":2540,"title":862,"description":863},{"url":417},{},{"id":866,"data":2543,"type":809,"tunes":2546},{"link":868,"meta":2544},{"image":2545,"title":871,"description":872},{"url":417},{},{"id":875,"data":2548,"type":809,"tunes":2551},{"link":877,"meta":2549},{"image":2550,"title":880,"description":881},{"url":417},{},{"id":223,"data":2553,"type":226,"tunes":2554},{"text":885},{},{"id":229,"data":2556,"type":234,"tunes":2557},{"body":889,"title":232,"variant":233},{},{"id":237,"data":2559,"type":234,"tunes":2560},{"body":893,"title":240,"variant":241},{},{"id":244,"data":2562,"type":234,"tunes":2563},{"body":897,"title":247,"variant":248},{},{"id":900,"data":2565,"type":220,"tunes":2566},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":251,"data":2568,"type":42,"tunes":2569},{"text":905,"level":219},{},{"id":256,"data":2571,"type":226,"tunes":2572},{"text":909},{},{"id":261,"data":2574,"type":226,"tunes":2575},{"text":913},{},{"id":266,"data":2577,"type":226,"tunes":2578},{"text":917},{},{"id":271,"data":2580,"type":42,"tunes":2581},{"text":273,"level":219},{},{"id":276,"data":2583,"type":327,"tunes":2597},{"content":2584,"stretched":43,"withHeadings":14},[2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596],[926,281,282],[284,928,929],[288,289,290],[292,293,294],[296,297,933],[300,301,302],[936,305,937],[308,309,310],[312,313,314],[316,941,318],[320,321,322],[324,325,944],{},{"id":330,"data":2599,"type":42,"tunes":2600},{"text":332,"level":219},{},{"id":335,"data":2602,"type":226,"tunes":2603},{"text":951},{},{"id":340,"data":2605,"type":226,"tunes":2606},{"text":955},{},{"id":345,"data":2608,"type":234,"tunes":2609},{"body":959,"title":348,"variant":349},{},{"id":352,"data":2611,"type":42,"tunes":2612},{"text":963,"level":219},{},{"id":357,"data":2614,"type":226,"tunes":2615},{"text":967},{},{"id":362,"data":2617,"type":327,"tunes":2626},{"content":2618,"stretched":43,"withHeadings":14},[2619,2620,2621,2622,2623,2624,2625],[366,367,368],[370,974,975],[374,375,376],[378,379,380],[382,979,384],[386,387,981],[983,984,985],{},{"id":395,"data":2628,"type":42,"tunes":2629},{"text":989,"level":219},{},{"id":400,"data":2631,"type":226,"tunes":2632},{"text":993},{},{"id":405,"data":2634,"type":226,"tunes":2635},{"text":407},{},{"id":410,"data":2637,"type":441,"tunes":2651},{"rows":2638,"title":430,"layout":327,"columns":2647},[2639,2641,2643,2645],{"id":414,"label":415,"values":2640},[417,417,417],{"id":419,"label":1004,"values":2642},[417,417,417],{"id":423,"label":424,"values":2644},[417,417,417],{"id":427,"label":428,"values":2646},[417,417,417],[2648,2649,2650],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2653,"type":42,"tunes":2654},{"text":1017,"level":219},{},{"id":449,"data":2656,"type":226,"tunes":2657},{"text":1021},{},{"id":454,"data":2659,"type":226,"tunes":2660},{"text":1025},{},{"id":459,"data":2662,"type":42,"tunes":2663},{"text":461,"level":219},{},{"id":464,"data":2665,"type":226,"tunes":2666},{"text":1032},{},{"id":469,"data":2668,"type":226,"tunes":2669},{"text":1036},{},{"id":474,"data":2671,"type":234,"tunes":2672},{"body":1040,"title":477,"variant":241},{},{"id":480,"data":2674,"type":42,"tunes":2675},{"text":1044,"level":219},{},{"id":485,"data":2677,"type":226,"tunes":2678},{"text":1048},{},{"id":490,"data":2680,"type":226,"tunes":2681},{"text":1052},{},{"id":495,"data":2683,"type":327,"tunes":2691},{"content":2684,"stretched":43,"withHeadings":14},[2685,2686,2687,2688,2689,2690],[499,1058],[502,1060],[505,506],[1063,509],[511,512],[514,1066],{},{"id":518,"data":2693,"type":42,"tunes":2694},{"text":520,"level":219},{},{"id":523,"data":2696,"type":226,"tunes":2697},{"text":1073},{},{"id":528,"data":2699,"type":226,"tunes":2700},{"text":1077},{},{"id":533,"data":2702,"type":42,"tunes":2703},{"text":535,"level":219},{},{"id":538,"data":2705,"type":226,"tunes":2706},{"text":1084},{},{"id":543,"data":2708,"type":226,"tunes":2709},{"text":1088},{},{"id":548,"data":2711,"type":554,"tunes":2712},{"url":550,"title":1092,"excerpt":1093,"ctaLabel":1094},{},{"id":557,"data":2714,"type":42,"tunes":2715},{"text":559,"level":219},{},{"id":562,"data":2717,"type":226,"tunes":2718},{"text":1101},{},{"id":567,"data":2720,"type":226,"tunes":2721},{"text":1105},{},{"id":572,"data":2723,"type":42,"tunes":2724},{"text":1109,"level":219},{},{"id":577,"data":2726,"type":606,"tunes":2736},{"steps":2727,"title":1126,"orientation":605},[2728,2729,2730,2731,2732,2733,2734,2735],{"label":581,"description":1115},{"label":584,"description":585},{"label":587,"description":588},{"label":1119,"description":591},{"label":593,"description":1121},{"label":596,"description":597},{"label":599,"description":600},{"label":1125,"description":603},{},{"id":609,"data":2738,"type":42,"tunes":2739},{"text":611,"level":219},{},{"id":614,"data":2741,"type":327,"tunes":2753},{"content":2742,"stretched":43,"withHeadings":14},[2743,2744,2745,2746,2747,2748,2749,2750,2751,2752],[618,1135],[621,622],[624,625],[1139,1140],[324,630],[632,1143],[635,1145],[638,639],[641,1148],[644,1150],{},{"id":648,"data":2755,"type":42,"tunes":2756},{"text":650,"level":219},{},{"id":653,"data":2758,"type":226,"tunes":2759},{"text":1157},{},{"id":658,"data":2761,"type":669,"tunes":2764},{"meta":2762,"items":2763,"style":668},{},[662,663,1163,665,1164,667],{},{"id":672,"data":2766,"type":42,"tunes":2767},{"text":674,"level":219},{},{"id":677,"data":2769,"type":226,"tunes":2770},{"text":1171},{},{"id":682,"data":2772,"type":226,"tunes":2773},{"text":1175},{},{"id":687,"data":2775,"type":42,"tunes":2776},{"text":1179,"level":219},{},{"id":692,"data":2778,"type":226,"tunes":2779},{"text":1183},{},{"id":697,"data":2781,"type":226,"tunes":2782},{"text":1187},{},{"id":702,"data":2784,"type":42,"tunes":2785},{"text":704,"level":219},{},{"id":707,"data":2787,"type":226,"tunes":2788},{"text":1194},{},{"id":712,"data":2790,"type":226,"tunes":2791},{"text":1198},{},{"id":717,"data":2793,"type":42,"tunes":2794},{"text":719,"level":219},{},{"id":722,"data":2796,"type":226,"tunes":2797},{"text":1205},{},{"id":727,"data":2799,"type":226,"tunes":2800},{"text":1209},{},{"id":732,"data":2802,"type":42,"tunes":2803},{"text":734,"level":219},{},{"id":737,"data":2805,"type":737,"tunes":2812},{"items":2806,"title":1231},[2807,2808,2809,2810,2811],{"id":741,"answer":1218,"question":1219},{"id":745,"answer":1221,"question":747},{"id":749,"answer":1223,"question":1224},{"id":753,"answer":1226,"question":1227},{"id":757,"answer":1229,"question":1230},{},{"id":763,"data":2814,"type":42,"tunes":2815},{"text":765,"level":219},{},{"id":768,"data":2817,"type":768,"tunes":2825},{"title":770,"entries":2818},[2819,2820,2821,2822,2823,2824],{"term":1240,"anchor":774,"definition":1241},{"term":1243,"anchor":778,"definition":1244},{"term":781,"anchor":782,"definition":1246},{"term":785,"anchor":786,"definition":1248},{"term":509,"anchor":789,"definition":1250},{"term":792,"anchor":793,"definition":1252},{},{"id":797,"data":2827,"type":42,"tunes":2828},{"text":799,"level":219},{},{"id":802,"data":2830,"type":809,"tunes":2833},{"link":804,"meta":2831},{"image":2832,"title":1261,"description":1262},{"url":417},{},{"id":812,"data":2835,"type":809,"tunes":2838},{"link":814,"meta":2836},{"image":2837,"title":1268,"description":1269},{"url":417},{},{"id":821,"data":2840,"type":809,"tunes":2843},{"link":823,"meta":2841},{"image":2842,"title":1275,"description":1276},{"url":417},{},{"id":830,"data":2845,"type":809,"tunes":2848},{"link":832,"meta":2846},{"image":2847,"title":1282,"description":1283},{"url":417},{},{"id":839,"data":2850,"type":809,"tunes":2853},{"link":841,"meta":2851},{"image":2852,"title":1289,"description":1290},{"url":417},{},{"id":848,"data":2855,"type":809,"tunes":2858},{"link":850,"meta":2856},{"image":2857,"title":853,"description":1296},{"url":417},{},{"id":857,"data":2860,"type":809,"tunes":2863},{"link":859,"meta":2861},{"image":2862,"title":862,"description":1302},{"url":417},{},{"id":866,"data":2865,"type":809,"tunes":2868},{"link":868,"meta":2866},{"image":2867,"title":871,"description":1308},{"url":417},{},{"id":875,"data":2870,"type":809,"tunes":2873},{"link":877,"meta":2871},{"image":2872,"title":880,"description":881},{"url":417},{},"Post erfolgreich abgerufen",{"items":2876,"source":2898,"manualIds":2899,"manualMatchedIds":2900},[2877,2884,2891],{"id":2878,"slug":2879,"title":2880,"excerpt":2881,"featuredImage":2882,"publishedAt":2883},"451","test-dev-enterprise","Guía completa de Test DEv Enterprise Stajic.de: Arquitectura y mejores prácticas","Explore los principios arquitectónicos, los beneficios y los detalles técnicos de la gestión de un entorno de desarrollo y pruebas de nivel empresarial con Test DEv Enterprise Stajic.de.","\u002Fuploads\u002F2026\u002F05\u002Ftest-dev-enterprise-1779534260081-r4dvxn.webp","2026-05-22T23:01:00.000Z",{"id":2885,"slug":2886,"title":2887,"excerpt":2888,"featuredImage":2889,"publishedAt":2890},"477","computer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system","Agentes de uso de computadoras: por qué una demostración exitosa aún puede ser un sistema poco confiable","Los agentes de uso de computadoras ahora pueden completar impresionantes flujos de trabajo en el navegador y en el escritorio, pero una ejecución exitosa demuestra capacidad—no fiabilidad. Este artículo muestra cómo probar la repetibilidad, la robustez ambiental, el control de horizonte largo, la conciencia del estado, la verificación de resultados y la gestión segura de objetivos.","\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":2892,"slug":2893,"title":2894,"excerpt":2895,"featuredImage":2896,"publishedAt":2897},"457","should-you-buy-5g-openwrt-router-old-firmware","¿Deberías Comprar un Router OpenWrt 5G con Firmware Antiguo? El ZBT Z8102AX como Ejemplo Práctico","Comprar un router 5G OpenWrt con firmware antiguo puede tener sentido, pero solo bajo las condiciones adecuadas. El ZBT Z8102AX muestra claramente ambos lados: el hardware es útil, el módem funciona y el router se mantuvo estable en las pruebas, pero OpenWrt 21.02, el embalaje débil y las rutas de actualización poco claras requieren una decisión de compra cuidadosa.","\u002Fuploads\u002F2026\u002F06\u002Fopenwrt-router-review-dual-sim-05-1781620596218-5ldld4.webp","2026-06-16T10:41:00.000Z","fallback",[],[]]