What we promise
Adjectives are free. Each of these is written so it can actually fail, and so you can catch us failing it.
Right, before fast
An unrecognized code shape gets a checklist item, never a guess.
Corrupting your code is the one unrecoverable failure this product has. Everything else is an inconvenience. So when the scanner finds a call it understands and a transform it has a tested fixture for, it rewrites it. When it finds something it does not recognize, it writes a line in the checklist and leaves your code alone.
Under-transforming is a worse PR. It is not a worse outcome.
Findings under .github/workflows/ are report-only and filtered out before any
transform runs, because we cannot write there and would rather say so than fail
half way.
Reliable
Every claim carries the vendor page it came from and the date it was checked.
The registry is not a list we typed once. A job runs daily against the OpenAI, Anthropic and Google deprecation pages, and when a page changes it opens a pull request rather than writing to a database. A human merges it. That means every change to the facts is reviewable, reversible, and has a diff.
Each row carries source_url and verified_at: the vendor page it came from and
the date that row was last confirmed against it. The poller reads every page daily
but moves verified_at only when a row changes, so an old date means the page has
said the same thing since then, not that nobody looked. You can audit any claim we
make without trusting us, which is the point.
A parse returning zero rows for a provider that has rows is treated as a fetch anomaly, never as a mass removal.
Fast
Static pages are prerendered and served from the edge. Scans are measured in seconds against a repo tarball held in memory. Webhook handlers answer inside GitHub's timeout and queue the real work, because a webhook that times out is a webhook GitHub stops sending.
If a page needs a spinner, it was built wrong.
Secure
Three GitHub permissions, and never a fourth: metadata read, contents read and write, pull requests read and write. Comparable tools ask for ten. Adding a fourth is a product decision that would have to be argued in public, not an implementation detail, because the three-permission claim is on our security page and our landing page.
A consequence we accept: we can never write to .github/workflows/. The eval
workflow ships as a file in the PR with a one-line move-it step, rather than us
asking for the permission that would let us place it.
We never hold your model keys. Eval runs happen in your CI with your keys. One
exception, disclosed on the security page and in the onboarding PR body: our own
Anthropic key is used for eval-case extraction, and only when your repo opts in
with evals: true.
We store findings, never source. Repo tarballs are fetched, scanned in memory, and discarded. What persists is a path, a line number, a matched identifier, and a registry row id. Nothing in our database can reconstruct your code.
We email only addresses you typed. The notify list in .github/aidep.json
gets a plain-text digest when a scan finds a new exposure or a retirement is inside
30 days; the waitlist form gets one mail per retirement date inside 14 days. Both
go through Resend. Before any of that, the address gets exactly one confirmation
mail with a link; nothing else is sent until it is clicked, because the person who
typed an address is not always the person who owns it. We never read an email
address from GitHub, because that would be a fourth permission. Remove the address
and the mail stops.
We never emit hosted prompt references. OpenAI's own migration guide points at
reusable prompt objects. /v1/prompts shuts down on 2026-11-30. Following the
official guidance would migrate you into a second migration three months later, so
we inline configs instead, and there are tests that fail if that ever changes.
Easy
npx aidep <dir> needs no account, no token, and no write access to anything.
It scans a directory on your machine and prints a report. If that is all you ever
use, that is a success.
Installing the GitHub App is for people who want the watch to keep running without being asked.
Premium where it counts
Free is not a demo here. Free gets scanning on every repo public or private with no cap, deprecation alerts, the onboarding audit PR, and the migration PRs themselves. No card, no seat limit.
The paid line buys the thing that is genuinely expensive to do well: proof. aidep Proof runs your repo's own prompts against the old model and the new one, in your CI, on your keys, and reports held-or-drifted per prompt before you merge. An unpaid install still gets the complete migration PR, with a one-line skip reason where the eval block would be. We do not hold the PR hostage.
See how we make money.
When we break these
Every claim on this page is checkable. If you find one that is not true, that is a bug report and it will be treated as one. The security page carries the technical detail: /security.