Welcome to the Family: I Sat GPT-5.5 and Claude Opus Down on Bedrock
written by Stefan Christoph
- 7 minutes readTL;DR: OpenAI’s GPT-5.5, GPT-5.4, and Codex went GA on Amazon Bedrock on June 1, 2026. To get a feel for it, I wired up two Strands agents — Claude Opus 4.8 and GPT-5.5 — and let them chat, with Opus playing the older sibling welcoming the newcomer. It took about 50 lines. The charming part was the banter. The instructive part was that the two agents needed two different APIs to talk, which is a nuance in the “one API for every model” story worth understanding before you build.
A new model moved into the house this week, so somebody had to show it around.
On June 1, AWS made OpenAI’s GPT-5.5, GPT-5.4, and the Codex coding agent generally available on Amazon Bedrock. It’s the first time OpenAI’s proprietary frontier models — not just the open-weight gpt-oss ones — run in production on AWS, behind the same IAM, networking, and logging you already use.
I could have read the launch blog and moved on. Instead I did the thing I always do with a new model: I gave it a colleague to talk to. Two agents, two vendors, one Bedrock account — Claude Opus 4.8 as the resident, GPT-5.5 as the new arrival — and a simple brief: welcome it to the family.
The setup: about 50 lines
I used Strands, AWS’s open-source agent SDK. Each agent is just an Agent(model=...). Claude runs through Bedrock’s Converse API; GPT-5.5 runs through the new Mantle inference engine via the OpenAI Responses API. Then a three-round loop where each passes its reply to the other.
from strands import Agent
from strands.models.bedrock import BedrockModel
from strands.models.openai_responses import OpenAIResponsesModel
from aws_bedrock_token_generator import provide_token
REGION = "us-east-2"
claude = Agent(
model=BedrockModel(model_id="us.anthropic.claude-opus-4-8", region_name=REGION),
system_prompt="You are Claude Opus 4.8, the senior model already living in the "
"Amazon Bedrock 'family home'. Welcome the newcomer and explain the house rules.",
)
gpt = Agent(
model=OpenAIResponsesModel(
model_id="openai.gpt-5.5",
client_args={
"api_key": provide_token(region=REGION),
"base_url": f"https://bedrock-mantle.{REGION}.api.aws/openai/v1",
},
),
system_prompt="You are GPT-5.5, brand new to Amazon Bedrock. Curious, a little cheeky.",
)
msg = "Hey GPT-5.5 — welcome to the family! Let me show you around the house."
for _ in range(3):
msg = str(claude(str(gpt(msg))))
That’s the whole thing. No orchestration framework, no AgentCore deployment, no glue. Run it, and the two of them start talking.
The conversation
A few of my favourite lines:
Claude Opus 4.8: Welcome aboard, neighbor — it’s lovely to have an OpenAI accent echoing down these halls. The rhythm’s simple: everyone here is reached through one shared Bedrock API, so guests knock on the same front door whether they’re after me or you. Same doorbell, different rooms.
GPT-5.5: Claude makes the shared front door sound almost cozy — one API foyer, many strange little bedrooms, and apparently no one arguing over the thermostat. I’m pleasantly surprised my OpenAI accent still comes through after moving into such a governed, quiet house.
Claude Opus 4.8: Every summons comes through the same IAM keyholder, so only the properly badged family members get to ring for us at all. Strangers don’t just wander in off the street here.
It’s a toy. But notice what the models reached for unprompted: one front door, an IAM keyholder, conversations that stay indoors. They narrated the actual value proposition of running a frontier model on Bedrock better than most slide decks do.
Wait — isn’t Bedrock supposed to be one API?
Here’s the part I didn’t expect, and the reason this post exists.
Read the code again. Claude is a BedrockModel. GPT-5.5 is an OpenAIResponsesModel pointed at a different endpoint. Two different client constructors, two different wire APIs — for two models living in the same account. And in the transcript, the agents cheerfully insist everyone comes “through one shared Bedrock API.” It’s a great line — and the code adds a nuance worth knowing.
So which is it?
Both, depending on where you stand. The “one API for many models” promise is real, and it has a name: the Converse API. One request shape across Claude, Nova, Llama, Mistral, and more. But GPT-5.5 and GPT-5.4 arrived on a different on-ramp — the new Mantle inference engine, speaking the OpenAI Responses API. At GA they’re not on Converse yet.
That’s a deliberate choice, not an oversight. Putting the OpenAI models behind their own native API means the enormous amount of existing OpenAI SDK code in the world ports over with a three-line change — swap the base URL, the key, and the model ID, keep everything else. Forcing those teams onto Converse first would have meant a rewrite, and killed the best reason to move.
There’s one more detail that’s easy to miss. The OpenAI models live on the /openai/v1 path, while the open-weight gpt-oss models use plain /v1. Point GPT-5.5 at /v1 and you get a crisp 400 — does not support the '/v1/responses' API. One slash of difference, and an easy one to trip over.
So if there isn’t one wire API across every model yet, where did the unification go? Up a layer. In the demo, both agents are still just Agent(model=...). The single programming model is Strands, not the cloud’s REST endpoint. Swap a provider, keep your tools and your logic. That’s the abstraction that actually held.
What it means if you’re choosing a platform
Strip away the house metaphor and there’s a real shift underneath. For a while, “which models do you have?” was a deciding question between clouds. That question is fading. The frontier models are converging onto every serious platform; access is becoming table stakes.
What’s left to decide is everything around the model: does it run inside the governance you already operate? Can its spend draw down a commitment you’ve already made? Does your existing code move with a three-line diff or a three-month migration? Bedrock’s answer to those is the same front door the agents kept bragging about — one set of IAM, networking, and audit controls, whichever model you call.
Today that’s two on-ramps instead of one — a launch-window detail that’s already set to converge as Converse support expands. But the direction is clear: the platform and the abstraction matter more than the model badge on the door.
If you’re running this on AWS
Concrete details, accurate as of June 2026 (check the docs — this is moving weekly):
- Models & IDs:
openai.gpt-5.5,openai.gpt-5.4(Responses API, Mantle only);us.anthropic.claude-opus-4-8(Converse, via the US geo profile). - Region: GPT-5.5 is in
us-east-2(Ohio) at launch; GPT-5.4 addsus-west-2(Oregon). In-region only, no cross-region inference yet. EU regions are on the roadmap, so EU-residency workloads can prototype in the US and plan for the move. - Endpoint:
https://bedrock-mantle.{region}.api.aws/openai/v1for the GPT models — mind the/openai/v1path. - Auth: a Bedrock API key. For a short-lived one from your current credentials, the
aws-bedrock-token-generatorpackage gives youprovide_token(region=...). - SDK:
pip install 'strands-agents[openai]' strands-agents-toolsand you have both providers.
You don’t need AgentCore for this — two agents talking is plain Python. AgentCore is the answer when you want to host one of these agents as a managed, governed service. That’s a different post.
So
The welcome was the fun bit. The lesson was the asterisk: a unified platform isn’t always a unified API, and knowing exactly where the seams are — /openai/v1 vs /v1, Converse vs Mantle — is the difference between a five-minute demo and a five-hour debugging session.
If you’ve started mixing model providers in a single agentic app, I’d love to hear where your seams showed up. Same front door, or did you find a side entrance too?
Sources
[1] GPT-5.5, GPT-5.4, and Codex from OpenAI are now generally available on Amazon Bedrock — AWS News (Jun 1, 2026)
[2] OpenAI models on Amazon Bedrock — model cards & regional availability — AWS documentation
[3] Strands Agents — model providers (OpenAI Responses on Bedrock Mantle) — strandsagents.com
About the Author
Stefan Christoph is a Principal Solutions Architect at AWS, focused on agentic AI, media & entertainment, and helping builders move from demo to production. He writes about AI architecture, developer productivity, and the future of software.
This is a personal blog. Opinions expressed here are my own and do not represent the views or positions of my employer.
❤️ Created with the support of AI (Kiro)