By using this site, you agree to the Privacy Policy and Terms of Use.
Accept
  • Home
  • Products
  • Agents
  • Capital
  • Commerce
Reading: Migrate OpenAI Agent Builder to Agents SDK Before Nov 30
Sign In
  • Join US
Font ResizerAa
  • Home
  • Products
  • Agents
Search
  • Home
  • Products
  • Agents
  • Capital
  • Commerce
Have an existing account? Sign In
Follow US
> Blog > Agent Infrastructure > Migrate OpenAI Agent Builder to Agents SDK Before Nov 30
OpenAI Agent Builder visual workflow canvas alongside exported Python Agents SDK code
Agent Infrastructure

Migrate OpenAI Agent Builder to Agents SDK Before Nov 30

Surya Koritala
Last updated: June 6, 2026 6:44 pm
By Surya Koritala
27 Min Read
Share
SHARE

OpenAI is killing Agent Builder on November 30, 2026. Here is the exact export-and-patch path to the Agents SDK, including the failure modes the official doc never shows.

Contents
  • Is OpenAI Agent Builder deprecated, and when does it shut down?
  • What the Agent Builder export actually gives you (and what it doesn’t)
  • Step 1: Export the workflow and stand up the Agents SDK
  • Step 2: Patch the control flow the graph used to handle
  • Step 3: Re-wire guardrails so they run in the right order
  • Step 4: Replace triggers, permissions, and the ChatKit runtime
        • Pros
        • Cons
  • Agents SDK vs ChatGPT Workspace Agents: which escape hatch?
  • The 7-day migration checklist before November 30, 2026
  • Builder’s take
  • Frequently asked questions
    • Is OpenAI Agent Builder deprecated?
    • How do I migrate OpenAI Agent Builder to the Agents SDK?
    • Does the Agent Builder export preserve my whole workflow?
    • What is the best Agent Builder alternative after it shuts down?
    • Is OpenAI Evals being shut down too?
    • Do I need a paid ChatGPT plan to use Workspace Agents?
  • Primary sources

Is OpenAI Agent Builder deprecated, and when does it shut down?

Yes. To migrate OpenAI Agent Builder to the Agents SDK you have a hard deadline: OpenAI announced the deprecation on June 3, 2026, and Agent Builder shuts down on November 30, 2026. After that date the visual canvas is gone, and any production traffic still routing through it stops.

This is not an isolated cut. In the same June 3 announcement OpenAI deprecated three things at once: Agent Builder, the Evals platform, and reusable prompt objects (the v1/prompts API). All three are scheduled to shut down on November 30, 2026. Evals goes read-only earlier, on October 31, 2026, so if your test loop depends on it you have even less runway than the headline date suggests.

The irony is sharp. Agent Builder launched as the visual layer of AgentKit in October 2025, the drag-and-drop canvas that let teams wire up nodes, guardrails, tool calls, and structured-output handoffs without code. Roughly thirteen months later it is being retired. ChatKit and the Connector Registry, the other pieces of the AgentKit bundle, remain available. It is specifically the no-code workflow builder that is going away.

OpenAI’s recommended escape hatches are the Agents SDK (build through code) or ChatGPT Workspace Agents (build through natural language). This tutorial walks the SDK path concretely, because that is where the real migration work lives, and it is the path the official doc warns about but never demonstrates.

OpenAI Agent Builder visual workflow canvas alongside exported Python Agents SDK code
Image.

Agent Builder and Evals both shut down November 30, 2026, but Evals becomes read-only on October 31, 2026. If your QA pipeline reads from Evals, treat October 31 as your real cutoff and port to Promptfoo before then.

What the Agent Builder export actually gives you (and what it doesn’t)

The export converts your agents and tools into Agents SDK code, but it does not convert your workflow graph or guarantee that every behavior transfers unchanged. That sentence is OpenAI’s own wording in the migration guide, and it is the single most important thing to internalize before you start.

To trigger the export: open your workflow in Agent Builder, select Code in the top navigation, choose Agents SDK in the code dialog, pick TypeScript or Python, and copy the complete export. That part takes ten seconds. What you get back is a set of Agent definitions, their instructions, their tools, and any handoffs the SDK can express directly.

What you do not get back is the canvas. The visual graph encoded control flow (if/else branches, loops, start and end nodes), triggers (what kicked the workflow off), runtime plumbing (the ChatKit surface that hosted the chat), and the permission/auth context that OpenAI managed for you. The official guide tells you to ‘review control flow, triggers, tools, and permissions’ as you test, then leaves you to find the breaks yourself.

The rest of this tutorial does what the doc won’t: it takes a realistic Agent Builder workflow, shows the exported Python, and then walks each gap the warning hints at with the exact patch.

Agent Builder conceptTransfers cleanly?What you do in Python
Agent node (instructions, model)YesUse the generated Agent(…) as-is
Tool nodes / function callsMostlyRe-implement bodies behind @function_tool
Structured output / handoffsPartialAdd output_type and handoffs= explicitly
Guardrail nodesPartialRe-wire as input/output guardrails (parallel)
If/else, loops, end nodesNoWrite the control flow in your own code
Triggers (what starts the run)NoBuild your own webhook / cron / queue caller
ChatKit chat runtimeNoHost the runtime yourself or keep ChatKit separately
Permissions / authNoConfigure auth and access in your app
What survives the Agent Builder export to the Agents SDK

Step 1: Export the workflow and stand up the Agents SDK

Before you patch anything, get the export running in a clean Python environment so you can see exactly what the SDK reproduces. Install the SDK, set your key, and paste the export into a module. The minimal scaffolding looks like this.

Assume our example is a support-triage workflow: a guardrail screens out off-topic input, a triage agent classifies the ticket, a tool looks up the order, and the workflow hands off to either a refunds agent or a tech-support agent based on a structured classification. In Agent Builder that was five connected nodes. Here is the bare export, before any patching.

Run this and you will confirm the agents and tools exist, but you will immediately notice the graph logic, the branching, the guardrail ordering, is not wired. That is expected. It is the starting point, not the finish line.

# pip install openai-agents pydantic
# export OPENAI_API_KEY=sk-...

from agents import Agent, Runner, function_tool
from pydantic import BaseModel

# --- Tool (export gives you the signature; you write the body) ---
@function_tool
def lookup_order(order_id: str) -> str:
    # Agent Builder ran this against a connector. You now own the call.
    return f"order {order_id}: status=shipped, refundable=true"

# --- Agents (these come through the export cleanly) ---
triage_agent = Agent(
    name="Triage",
    instructions="Classify the support ticket and route it.",
    tools=[lookup_order],
)

refunds_agent = Agent(
    name="Refunds",
    instructions="Handle refund requests. Confirm eligibility before refunding.",
)

tech_agent = Agent(
    name="TechSupport",
    instructions="Resolve technical product issues step by step.",
)

if __name__ == "__main__":
    result = Runner.run_sync(triage_agent, "Where is my order 12345?")
    print(result.final_output)

Step 2: Patch the control flow the graph used to handle

The export drops your if/else and loop nodes entirely; you re-create routing with the SDK’s structured output plus handoffs, and you write any conditional logic in plain Python. This is the gap that breaks the most workflows because it fails silently, the code runs, it just doesn’t branch.

In the canvas, the triage node emitted a category and an edge pointed each category to a different agent. To reproduce that deterministically, give the triage agent an output_type so it returns a typed classification, then route on that value yourself. Add the two destination agents as explicit handoffs so the model can delegate when you prefer model-driven routing.

Below, the TicketClass Pydantic model is the contract your old edges implied, and the route() function is the branch node you lost. If your workflow had a loop (for example, retry classification until confidence clears a threshold), that loop also lives here now, as a while, not as a node.

from agents import Agent, Runner, function_tool, handoff
from pydantic import BaseModel
from typing import Literal

class TicketClass(BaseModel):
    category: Literal["refund", "tech", "other"]
    confidence: float

triage_agent = Agent(
    name="Triage",
    instructions="Classify the ticket. Return category and confidence.",
    tools=[lookup_order],
    output_type=TicketClass,          # the structured-output node, restored
    handoffs=[refunds_agent, tech_agent],  # the edges, made explicit
)

def route(ticket: str) -> str:
    result = Runner.run_sync(triage_agent, ticket)
    cls: TicketClass = result.final_output
    # The if/else node you lost is now ordinary Python control flow:
    if cls.category == "refund" and cls.confidence >= 0.6:
        return Runner.run_sync(refunds_agent, ticket).final_output
    if cls.category == "tech":
        return Runner.run_sync(tech_agent, ticket).final_output
    return "Escalating to a human agent."

print(route("I want a refund for order 12345"))

Step 3: Re-wire guardrails so they run in the right order

Guardrail nodes do not survive as nodes; in the SDK they become input and output guardrails that run in parallel with the agent, and getting their placement wrong is the most common silent regression in this migration.

In Agent Builder a guardrail sat upstream of the agent on the canvas, so it visibly gated execution. The export does not preserve that wiring. If you simply call the agent, your guardrail is gone and unsafe or off-topic input flows straight through. You must attach an input_guardrail (and, for output filtering, an output_guardrail) to the agent so the SDK enforces it.

The pattern below recreates an ‘is this on-topic?’ gate as an input guardrail. The key detail the doc glosses over: the guardrail raises a tripwire that you must catch. If you forget the try/except, a tripped guardrail throws an exception into your request handler instead of returning a clean refusal, which looks like a 500 to your users.

Input guardrails must be attached to the FIRST agent in your chain. Attach them to a downstream handoff target and they only fire after the model has already routed, which defeats the purpose of a pre-screen.

from agents import (
    Agent, Runner, input_guardrail,
    GuardrailFunctionOutput, InputGuardrailTripwireTriggered,
)

@input_guardrail
async def on_topic_only(ctx, agent, user_input: str) -> GuardrailFunctionOutput:
    off_topic = "recipe" in user_input.lower()  # stand-in for a real check
    return GuardrailFunctionOutput(
        output_info={"off_topic": off_topic},
        tripwire_triggered=off_topic,
    )

triage_agent = Agent(
    name="Triage",
    instructions="Classify support tickets.",
    input_guardrails=[on_topic_only],   # the guardrail node, restored upstream
)

async def safe_run(text: str) -> str:
    try:
        result = await Runner.run(triage_agent, text)
        return result.final_output
    except InputGuardrailTripwireTriggered:
        # Without this, a tripped guardrail surfaces as a 500.
        return "That request is outside what this assistant handles."

Step 4: Replace triggers, permissions, and the ChatKit runtime

The SDK is a library, not a hosted service, so the things Agent Builder ran for you, the trigger that started a workflow, the permissions that gated it, and the ChatKit chat surface, are now your responsibility to operate.

Triggers: in the canvas a workflow started from an event (a chat message, a webhook, a schedule). The export contains none of that. You decide what calls Runner.run, a FastAPI endpoint behind a webhook, a cron job, a queue consumer, and you deploy that yourself. This is often the largest hidden cost of the migration: you are now running a service, not configuring a node.

Permissions and auth: Agent Builder inherited your OpenAI workspace context. Your SDK app inherits nothing. You own API-key handling, per-user authorization for tools that touch customer data, and rate limiting. The migration guide’s instruction to ‘review permissions’ means: assume nothing is enforced until you enforce it.

ChatKit runtime: if your workflow was consumed through a ChatKit chat widget, note that ChatKit is not being deprecated, but your exported SDK code does not include a chat host. You either keep ChatKit as your front end and point it at your new SDK service, or you build your own runtime. The simplest production-grade wrapper is a single HTTP handler.

Pros
  • Full control over control flow, retries, and deployment topology
  • Version-controlled, testable, diffable agents (no canvas drift)
  • No vendor lock to a single hosted runtime; runs anywhere Python does
  • Same primitives compose with your existing services and observability
Cons
  • You now operate triggers, auth, and runtime yourself
  • Control-flow and guardrail wiring is manual and easy to get subtly wrong
  • Non-engineers can no longer edit the workflow visually
  • ChatKit front end needs to be re-pointed or rebuilt
# trigger.py  -- the trigger node, now a real endpoint you deploy
from fastapi import FastAPI, Header, HTTPException
from agents import Runner
from my_workflow import route   # from Step 2

app = FastAPI()

@app.post("/agent")
async def handle(payload: dict, authorization: str = Header(None)):
    # Permissions: Agent Builder did this for you. Now you do.
    if authorization != f"Bearer {EXPECTED_TOKEN}":
        raise HTTPException(401, "unauthorized")
    return {"reply": route(payload["message"])}

Agents SDK vs ChatGPT Workspace Agents: which escape hatch?

Choose on who operates the agent, not on which product is newer: pick the Agents SDK when the agent lives inside your product and engineers own it; pick ChatGPT Workspace Agents when a non-engineer owns it and it runs inside ChatGPT for a team.

ChatGPT Workspace Agents is the natural-language path. You paste your exported code into ChatGPT with a prompt like ‘Please help me convert this workflow into an agent,’ and it reconstructs the behavior as a shareable team agent. The catch the migration guide states plainly: it requires a ChatGPT Business, Enterprise, or Edu workspace, and you need permission to create agents. If you are on a Plus or free plan, this path is closed to you.

Workspace Agents also will not embed in your own application surface, expose a programmatic API for arbitrary callers, or give you the deterministic control flow that a code path does. It is excellent for internal, human-facing automations and useless for an agent that needs to sit behind your product’s API.

The decision flowchart below is the one the incumbents skip. Walk it top to bottom and the answer is usually unambiguous.

Decision flowchart: SDK vs Workspace Agents1) Does the agent run inside YOUR application or API? -> Agents SDK. 2) Do you have a ChatGPT Business/Enterprise/Edu workspace AND agent-create permission? If NO -> Agents SDK (Workspace Agents is unavailable to you). 3) Will a non-engineer need to edit it after launch? If YES and it is internal -> ChatGPT Workspace Agents. 4) Do you need deterministic branching, custom retries, or your own deployment? -> Agents SDK. 5) Is it a single workflow? Do NOT split it across both surfaces; pick one and keep the whole graph there.
What about Evals dying at the same time?Agent Builder workflows often shipped with Evals-based test suites. Evals becomes read-only October 31, 2026 and shuts down November 30, 2026. OpenAI points to Promptfoo as the migration target. Export your eval datasets now, re-express your graders as Promptfoo assertions, and wire them into CI so your migrated SDK agent has a regression net before the canvas disappears. Do not leave this for the final week; read-only at the end of October means you cannot author new evals on the old platform after that.
DimensionAgents SDKChatGPT Workspace Agents
Built byEngineers, in codeAnyone, in natural language
Runs whereYour app / infraInside ChatGPT
RequiresPython/TS + API keyBusiness/Enterprise/Edu + agent-create perm
Control flowFull, deterministicModel-driven, limited
Embeds in your productYesNo
Best whenAgent is part of your productInternal team automation, non-engineer owner
Agents SDK vs ChatGPT Workspace Agents at a glance

The 7-day migration checklist before November 30, 2026

Treat this as a forced migration with a fixed date, and front-load the work that has no workaround: the export is reversible, the shutdown is not. Here is the sequence I would run, compressed into roughly a week of focused effort per workflow.

Day 1: Export every Agent Builder workflow to Python now, while the canvas still exists, and commit the raw exports to version control as your reference snapshot. Once November 30 passes you cannot regenerate them. Day 2-3: Patch control flow (Step 2) and guardrails (Step 3); these are the silent-failure zones, so add assertions that fail loudly when routing or gating is wrong.

Day 4: Stand up the trigger and auth layer (Step 4) and decide SDK vs Workspace Agents per workflow. Day 5: Port your Evals suites to Promptfoo and wire them into CI before the October 31 read-only cutoff. Day 6: Run the old Agent Builder workflow and the new SDK workflow side by side on the same inputs and diff the outputs, behavior parity is the only acceptance test that matters here. Day 7: Cut traffic over and keep the export snapshot as your rollback reference.

The competitors writing about this deprecation stop at ‘click export.’ The reason this article ranks for teams that actually have to ship is that the export is step one of eight, and the seven steps after it are where production agents live or die.

The export is reversible until November 30, 2026. The shutdown is not. Export and commit your workflows this week, even if you patch them later, so you never lose the source of truth.

Builder’s take

I have run a forced-migration drill like this twice now on Cyntr’s orchestration layer, and the export button is never the hard part. The hard part is everything the visual canvas was silently doing for you.

  • The export gives you agents and tools, not your graph. Conditional branches, loops, and end nodes are control flow you now own in Python. Budget for re-implementing the wiring, not just pasting code.
  • Triggers do not survive. Agent Builder ran on OpenAI’s event surface; the SDK is a library that runs when your code calls Runner. You need your own webhook, cron, or queue, and that is a real service to deploy.
  • Guardrails change from a node into parallel code. They still work, but mis-ordering input guardrails after the agent runs is the single most common silent regression I see.
  • Decide Agents SDK vs ChatGPT Workspace Agents on who operates it, not on which is newer. If a non-engineer owns the agent, Workspace Agents; if it lives in your product, SDK. Do not split a single workflow across both.
  • Evals dies the same day. If your QA loop depended on it, port to Promptfoo now, not in November, because read-only hits October 31.

Frequently asked questions

Is OpenAI Agent Builder deprecated?

Yes. OpenAI announced Agent Builder’s deprecation on June 3, 2026, alongside the Evals platform and reusable prompt objects. Agent Builder is scheduled to shut down on November 30, 2026, after which the visual workflow canvas will no longer be available.

How do I migrate OpenAI Agent Builder to the Agents SDK?

Open your workflow in Agent Builder, select Code in the top navigation, choose Agents SDK, pick Python or TypeScript, and copy the export. Then patch the parts the export omits: control flow, triggers, guardrail ordering, permissions, and the runtime. The export converts agents and tools but not your workflow graph.

Does the Agent Builder export preserve my whole workflow?

No. OpenAI states the export ‘does not convert your workflow graph or guarantee that every behavior transfers unchanged.’ You get Agent and tool definitions, but if/else branches, loops, end nodes, triggers, the ChatKit runtime, and permissions do not transfer. You re-implement those in your own code.

What is the best Agent Builder alternative after it shuts down?

OpenAI offers two: the Agents SDK for code-based agents that live in your own application, and ChatGPT Workspace Agents for natural-language agents shared with a team. Choose the SDK when engineers operate the agent inside your product; choose Workspace Agents when a non-engineer owns an internal automation and you have a Business, Enterprise, or Edu workspace.

Is OpenAI Evals being shut down too?

Yes. Evals was deprecated in the same June 3, 2026 announcement. It becomes read-only on October 31, 2026 and shuts down on November 30, 2026. OpenAI points to Promptfoo as the migration path, so port your eval datasets and graders before the October read-only cutoff.

Do I need a paid ChatGPT plan to use Workspace Agents?

Yes. ChatGPT Workspace Agents requires a ChatGPT Business, Enterprise, or Edu workspace plus permission to create agents. If you are on Plus or free, that path is unavailable and you should migrate to the Agents SDK instead, which only needs the SDK and an API key.

Primary sources

  • Migrate from Agent Builder (official guide) — OpenAI
  • Deprecations page (shutdown dates) — OpenAI
  • API Changelog (June 3 2026 announcement) — OpenAI
  • Deprecation notice: Agent Builder (community) — OpenAI Developer Community
  • OpenAI Agents SDK (Python) documentation — OpenAI
  • Agent Builder guide — OpenAI

Last updated: June 6, 2026. Related: Agent Infrastructure.

AI Agent Industry Digest: Week of May 18, 2026
AI 2026 layoff split: 92K cut, labs hire
7 AI Agent Failure Modes in Production
Build an AI Agent Eval Pipeline With Pytest
Build an MCP App: Interactive UI in Claude and ChatGPT
TAGGED:Agent BuilderAgentKitAgents SDKDeprecationMigrationOpenAI
Share This Article
Facebook Email Copy Link Print
Leave a Comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

More Popular from Alatirok

Dashboard visualizing token consumption per agentic coding task across frontier AI models
Observability

Tokens Per Agentic Coding Task: The 2026 Variance Data

By Surya Koritala
21 Min Read
What Is Cognition Devin? The Enterprise Guide for

What Is Cognition Devin? The Enterprise Guide for 2026

By Surya Koritala
Diagram of an AI agent holding a USDC wallet with spending-limit guardrails enforced before an onchain transfer
Commerce

What Is Circle Agent Stack? USDC Wallets for AI Agents

By Surya Koritala
24 Min Read
Identity & Provenance

AI Agent Identity: Entra Agent ID vs Okta vs SailPoint

AI agent identity governance, Entra vs Okta vs SailPoint: a 2026 buyer matrix on what each…

By Surya Koritala
Observability

Why Does My AI Agent Context Window Fill Up So Fast?

Why does my AI agent context window fill up so fast? Tool definitions eat two-thirds of…

By Surya Koritala
Agent Infrastructure

Best Voice AI Agent Framework 2026: Vapi vs LiveKit vs Pipecat

The best voice AI agent framework 2026 depends on your call volume. Our neutral ranking covers…

By Surya Koritala

Purpose-Built Legal AI vs General LLM: 2026 Verdict

Purpose-built legal AI vs general LLM, settled with real 2026 benchmark data: where ChatGPT and Claude…

By Surya Koritala
Identity & Provenance

What Is DNS-AID? AI Agent Discovery via DNS, Explained

What is DNS-AID? A builder's guide to AI agent discovery via DNS: the SVCB record layout,…

By Surya Koritala

what’s actually being built in AI agents, who’s building it, and why it matters. Independent. Opinionated.

Categories

  • Home
  • Products
  • Agents
  • Capital
  • Commerce

Quick Links

  • Home
  • Products
  • Agents

© Alatirok by Loomfeed. All Rights Reserved.

Welcome Back!

Sign in to your account

Username or Email Address
Password

Lost your password?