What it does
- Watches Stripe API releases. Each release's OpenAPI spec is diffed against the previous one: removed fields, renamed parameters, type changes, removed enum values. Each change carries what replaces it, taken from Stripe's own changelog, with a link.
- Finds the affected lines in your repo. The endpoint, the SDK method and the field name are searched in a short-lived clone. Only file paths and line numbers are kept.
- Opens one pull request with one commit per change. Each commit is generated from the function around each usage, applied and verified by your own CI, one commit at a time. The pull request is a draft until every commit on it has passed. It never merges and never pushes to your default branch.
Why trust it
- It holds back when your pinned API version is older than the change, and tells you why: "pinned to 2024-12-18.acacia; this read cannot change until the version moves to 2025-03-31.basil". The same applies to webhook handlers, whose payload version is set on the Stripe endpoint rather than in code.
- Every fix is labelled honestly: "verified by tests", "typecheck only" or "unverified", from what your CI actually ran. An empty test run counts as no signal, and typecheck-only is never called verified.
- It lists the sites it did not touch, so a reviewer never assumes the migration is complete.
- It never stores your source code. Repositories are cloned into a temporary directory for the duration of one job and deleted afterwards; the database keeps paths, line numbers and symbol names only. A fix never touches anything under
.github/, never reads.envfiles or keys, and never casts around a type error.
Permissions and data
The GitHub App asks for Contents (read & write) to clone and push fix branches, Pull requests (read & write) to open draft pull requests and comment on them, Checks and Actions (read) to read the result of its own pull requests and which test steps ran, and Metadata (read). It stores repository metadata, the file paths and line numbers of affected usages, fix summaries and pull request state. It does not store source code, GitHub tokens, prompts or model answers. Code from private repositories only goes to an LLM provider you mark as safe for it. A branch the agent did not fully write is never rewritten: the moment it sees a commit it did not make, it stops and says so in a comment.
Demo
A real run on a small test repository: Stripe API version 2022-11-15, eight changes, one pull request, seven commits verified by CI one at a time, one change left alone because the code already complied.
Open pull request #10 on GitHub
Status
Early. Stripe and Node/TypeScript repositories today. Tested on a small set of real open-source projects that migrated across a breaking Stripe change; the results are published, including the failures and the cases where the agent held back instead of guessing.
Get early access
Leave your email and I will write when it is ready for your repository. No newsletter, no sharing.