foretop

foretop ebb — LLM deprecation scanner

Find every model that is about to retire.

Provider changelogs tell you a model is going away. Ebb tells you exactly where it is used, who owns it and how long is left — without uploading your code.

Available now · Apache-2.0

ebb 0.1.0 · langchain-ai/langchain @ 54383cd · real output
$ uvx foretop-ebb scan . ✕ break o1-preview — 393d overdue (2025-07-28) → o3 libs/partners/openai/tests/unit_tests/chat_models/test_base.py:1271 ✕ break gemini-1.5-pro — 330d overdue (2025-09-29) → gemini-2.5-pro libs/langchain_v1/tests/unit_tests/chat_models/test_chat_models.py:168 ≠ drift gpt-4-turbo — 59 days (2026-10-23) → gpt-5.6-sol libs/partners/openai/langchain_openai/data/_profiles.py:101 ? unknown 888 further model references with no verified retirement entry
24 references with a published deadline · 2,548 source files · scanned 2026-08-25 · exit 1

How it works

Three steps, in order, because each depends on the last.

First

Scan locally

Source, configuration, Terraform, Dockerfiles, notebooks and environment templates are read locally. Nothing is executed or uploaded.

Then

Resolve aliases against a reviewed registry

Dated snapshots, regional prefixes and version aliases resolve to canonical model identifiers with cited provider sources.

Last

Route every deadline to an owner

CODEOWNERS is used first, with git blame as fallback, and results are ranked by time remaining and blast radius.

The registry is public

Every entry below is one Ebb actually matched in the LangChain scan, shown with the provider page it came from and the day a person last verified it. Nothing is scraped straight into your results: the refresher opens a pull request, a person merges it.

Retirement registry entries matched in the LangChain scan
ModelProviderAnnouncedEnds ReplacementVerified
claude-3-5-haiku-20241022anthropic2025-12-192026-02-19claude-haiku-4-5-202510012026-08-12
claude-3-5-sonnet-20241022anthropic2025-08-132025-10-28claude-sonnet-4-62026-08-12
claude-3-haiku-20240307anthropic2026-02-192026-04-20claude-haiku-4-5-202510012026-08-12
claude-opus-4-1-20250805anthropic2026-06-052026-08-05claude-opus-4-82026-08-12
claude-opus-4-20250514anthropic2026-04-142026-06-15claude-opus-4-82026-08-12
claude-sonnet-4-20250514anthropic2026-04-142026-06-15claude-sonnet-4-62026-08-12
gemini-1.5-progoogle2025-09-292025-09-29gemini-2.5-pro2026-08-12
gpt-4-0613openai2026-04-222026-10-23gpt-5.6-sol2026-08-12
gpt-4-turboopenai2026-04-222026-10-23gpt-5.6-sol2026-08-12
gpt-4o-2024-05-13openai2026-04-222026-10-23gpt-5.6-sol2026-08-12
o1-miniopenai2025-04-282025-10-27o4-mini2026-08-12
o1-previewopenai2025-04-282025-07-28o32026-08-12

Questions

Does it send my code anywhere?

No. Detection is entirely local and needs no network. If you connect the hosted hub it sends findings — file paths, line numbers, model identifiers — never file contents. The command line works forever without an account.

What does "unknown" mean in the output?

That Ebb found a model reference it cannot resolve to a verified registry entry — often a floating alias like -latest, which by definition has no announced end date. It is reported as unknown rather than clear, because we cannot tell you it is safe.

What happens when a date is wrong?

Open an issue on the public registry. Every entry shows its source page and verification date in the output, so a wrong date is visible rather than silent. The automated refresher can only open a pull request; it never publishes a date on its own.

Will it open migration pull requests for me?

Not today, and not by default when it does. Rewriting a model identifier changes behaviour, and this tool is trusted precisely because it only reads.

Run it on yours

Same command, same registry, no account and no upload.