When your API changes, we upgrade your customers' code.
Breakwater is an AI agent that rewrites code for breaking SDK changes, proves every upgrade with tests, and opens the pull request.
Free. It runs on public repos still on your old version, so it doesn't need access to your code.
if event.get("type") == "checkout.session.completed":if event.type == "checkout.session.completed": session = event.data.object customer_id = session.get("customer") customer_id = session.customer
Every upgrade we count is checked by tests that run the changed code. For runtime breaks like this one in Stripe's v15, the test has to fail on the new SDK before the change and pass after it. If no test can show the break, the agent writes one first.
Three SDKs so far, every upgrade proven by tests
We ran the agent on public open-source repos still on old SDK versions, and counted only the upgrades their tests could check.
-
OpenAI SDK 0.x to 1.x
Real repos on a $1 budget each, about $0.67 per upgrade. All 16 with a bigger budget.
14 of 16 -
Mistral SDK to 2.x
Repos the agent had never seen, on a $1 budget each, about $0.28 per upgrade.
28 of 30 -
Stripe SDK to v15
Real open-source projects, about $0.72 per upgrade. Where a project's tests couldn't see the break, it first wrote one that fails before the fix. Upgrading your own code? Read the guide.
19 of 22 -
OpenAI's own migration tool
The same 16 repos and the same tests. Rule-based tools miss what they can't see, and they go stale.
1 of 16
Results as of September 2026. Pull requests are on our own forks; we don't open pull requests on projects that haven't asked for them.
From a release note to a tested pull request
- Read the migration guideYour release notes and upgrade docs.
- Find every affected callImports, clients, responses, errors, streaming.
- Rewrite it in a sandboxMinimal diffs, isolated from secrets.
- Run the tests before and afterAnd retry when something fails.
- Open a pull requestExplaining each change, with the evidence.
Step 4 is the difference. We check which tests actually run the code being upgraded, so "tests pass" means the upgrade was checked, not just that the suite was green.
Before, on OpenAI SDK 0.x
import openai
openai.api_key = os.environ["OPENAI_API_KEY"]
resp = openai.Completion.create(
engine="gpt-3.5-turbo-instruct",
prompt=prompt,
)
text = resp["choices"][0]["text"]
After, on OpenAI SDK 1.x
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
resp = client.completions.create(
model="gpt-3.5-turbo-instruct",
prompt=prompt,
)
text = resp.choices[0].text
A typical upgrade. Rule-based tools often miss details like engine= becoming model= or dictionary access becoming attributes; the tests catch them.
See real pull requests
- students-event-tracking-systemThe
engine=tomodel=fix above. Tests pass before and after. - openai-multi-clientMoves an async client to
AsyncOpenAI. 2 tests pass before and after. - llamatryNew client and response handling. 10 tests pass before, 11 after.
On our own forks of public repos, run offline against a fake OpenAI server.
Ship the breaking change. We'll bring your users along.
Customers who never upgrade cost you support time, keep old versions alive for years, and slow down every deprecation. Migration guides only help the users who read them.
Request a free run- Triggered by your releaseYou decide when a migration goes out, not each user.
- Upgrades land in your users' reposAs pull requests they can review and merge.
- Every upgrade is test-checkedAgainst the user's own tests, before anyone sees it.
- Start with public reposWe'll run the agent on open-source projects still on your old version and share what we find.
Three cofounders who build and sell it
Rinoa Oliver
Co-founder and CEO · LinkedIn
MIT '28, computer science and math. Researches motion planning at MIT CSAIL. Runs customer conversations and fundraising.
Oleksandr Sokolov
Co-founder and CTO · LinkedIn · GitHub
MIT '28, math with CS and chemical engineering. Built Breakwater's agent. ML researcher at MIT; co-founded a startup in MIT's Fuse program.
Nazar Serhiienko
Co-founder and COO · LinkedIn
Dickinson '27, biochemistry and molecular biology. Co-founded a startup in MIT's Fuse program. Runs operations and outreach to SDK teams at API companies.
What people ask first
What does the free run cost, and what happens after?
Nothing. If the results are useful and you want your customers upgraded, we agree on pricing with you, based on how many customers we move.
Do you need access to our code or our customers' repos?
Not for the free run. It uses public open-source repos that still depend on your old SDK version, and the upgrades stay on our own forks unless a project opts in.
Do you open pull requests on projects that didn't ask for them?
No. Until a project opts in, upgrades stay on our own forks. Maintainers should decide what lands in their repo.
What happens when the tests fail?
The agent reads the failure and tries again. If the tests still fail, there's no pull request, and we count it as a failure in our results.
What if a repo's tests never touch the code that changed?
Then the tests can't prove anything about the upgrade, so we don't count it as a success. Before changing anything, we check which tests actually run the code being upgraded. For breaks that tests often miss, like Stripe's v15, the agent can first write a test that fails on the new version, and the upgrade has to make it pass without touching it.
Which SDKs do you support?
Python SDKs today, with published results on OpenAI's, Mistral's and Stripe's. Tell us which SDK and version you care about and we'll run it.
Is it safe to run on real code?
Every upgrade runs in an isolated sandbox with no access to secrets or API keys.
Shipping a breaking change soon? Let's talk.
Tell us which SDK and version you're moving users off. Within a couple of days, you'll get:
- The public repos still on your old version that break on the new one
- Tested upgrades for them, as pull requests on our own forks you can review
- How many upgrades passed their tests, and what failed
It's free and needs no access to your code. Nothing is opened on anyone's repo without their OK.