Anthropic retires older models on a schedule and warns ahead of time, usually a couple of months. The problem is not the deadline, it is that a model name lives in a dozen places and half of them are remembered only after something falls over.
Here is the order of work.
Step 1. Find every reference
Start by grepping the whole repository, configuration and infrastructure included:
grep -rn "claude-" . \
--include="*.ts" --include="*.tsx" --include="*.py" \
--include="*.go" --include="*.yml" --include="*.yaml" \
--include="*.json" --include="*.env*" --include="*.tf"
Do not stop at code. The model is often baked into a runner config or a Terraform file.
Step 2. Walk the places grep cannot reach
This list covers most of what gets forgotten:
- environment variables in your hosting panel, on every stage separately
- CI secrets
- dashboards and alerts with the model name in a filter
- schedulers and background jobs that run weekly or monthly
- documentation and READMEs, where a new developer will copy a dead ID
- fixtures and seeds in test data
Step 3. Decide the migration target
The swap is usually a string change. Anthropic names a recommended replacement in the notice, and behaviour barely shifts.
If you jump to a brand-new model rather than the nearest replacement, budget time to check prompts: newer versions often differ in answer length and formatting habits.
Step 4. Put the model name in one constant
This is what removes the problem permanently. One environment variable or one constant, not literals scattered around.
export const MODEL = process.env.LLM_MODEL ?? 'claude-opus-4-8'
The next migration becomes a one-line change in one place.
Step 5. Verify against the real API, not unit tests
Unit tests usually mock the provider, so they will not catch a model change. You need at least one integration run that actually calls the API.
Step 6. Set a reminder
Watch the deprecation page and set a reminder a month ahead of each date. Cheaper than fixing production after the fact.
What changes behind a gateway
We expose stable model IDs through our endpoint, so a version change on the provider side does not break your code. The available list is always on the pricing page.
The format stays the same, Anthropic Messages and OpenAI-compatible, so leaving us is as easy as arriving.