{"slug": "claude-opus-5-closed-last-year-s-sdk-gaps-not-this-year-s", "title": "Claude Opus 5 closed last year's SDK gaps — not this year's", "summary": "Developer Kalpit Rathore's SDKProof tool, which tests AI coding agents on current SDK APIs, shows Claude Opus 5 fixed last year's SDK gaps but not this year's. Scores improved for Vercel AI SDK 7 and Zod 4 (both to 100), while Prisma 7 and Next.js 16 remained low at 87 and 92 respectively, as their breaking changes are too recent for the model's training data.", "body_md": "A while back I built a small tool called SDKProof. it checks how well an AI coding agent writes an SDK's *current* API — the stuff that changed in the last major, that the model tends to get wrong because it learned the old version.\n\nClaude Opus 5 came out today. so I re-ran the whole board on it.\n\nshort version: it fixed last year's SDKs. it did not fix this year's.\n\nSame tasks, same libraries, new model:\n\n| SDK | shipped its major | Opus 5 |\n|---|---|---|\n| Prisma 7 | late 2025 (freshest) | 87 |\n| Next.js 16 | late 2025 | 92 |\n| Vercel AI SDK 7 | mid 2025 | 100 |\n| Zod 4 | 2025 | 100 |\n| TanStack Query 5 | 2023 | 100 |\n\nThe way each score works: the model solves ~10–15 real tasks, the code gets type-checked against the real installed package, pass = it compiles. no LLM judging another LLM, the compiler decides.\n\nThe two that jumped: **Vercel AI SDK 7 and Zod 4 were both 90 on the previous model (Opus 4.8). Opus 5 took them to 100.**\n\nHere's the kind of thing that changed. Define a tool with the AI SDK.\n\nOpus 4.8 wrote it the old (v4) way:\n\n``` js\nconst getWeather = tool({\n  parameters: z.object({ city: z.string() }),   // renamed to inputSchema\n  execute: async ({ city }) => `...`,\n})\n\nawait generateText({\n  model, prompt,\n  tools: { getWeather },\n  maxSteps: 5,                                   // removed\n})\n```\n\nThat doesn't compile against `ai`\n\nv7. `parameters`\n\nis now `inputSchema`\n\n, and `maxSteps`\n\nis gone (it's `stopWhen: stepCountIs(5)`\n\nnow).\n\nOpus 5 writes the current shape by itself:\n\n``` js\nconst getWeather = tool({\n  inputSchema: z.object({ city: z.string() }),\n  execute: async ({ city }) => `...`,\n})\n\nawait generateText({\n  model, prompt,\n  tools: { getWeather },\n  stopWhen: stepCountIs(5),\n})\n```\n\nClean compile. same for Zod — Opus 4.8 kept reaching for the removed `required_error`\n\n, Opus 5 writes the new unified `error`\n\noption.\n\nPrisma 7 and Next 16 barely changed. they shipped their breaking changes most recently, and even the newest model hasn't caught up.\n\nPrisma still writes the pre-v7 client setup — it skips the driver adapter that v7 now requires, and uses the removed `datasourceUrl`\n\n. Next still calls `revalidateTag()`\n\nwith one argument, when it takes two now.\n\nthis is the whole reason SDKProof exists.\n\nthe score isn't about how good the model is. it's about how recently your SDK changed. the newer your last major, the more the model still writes your old API — because that's what it was trained on.\n\nand the gap moves every time a new model ships. I watched it move today: two SDKs went from 90 to 100 on a model bump. it'll re-open the next time any of these libraries ships a major.\n\nso if you maintain an SDK, this is a thing to watch, not measure once.\n\nwhile re-running this I found a bug in my own harness — the part that pulls code out of the model's reply was grabbing the wrong chunk on one Prisma task & failing it for the wrong reason. fixed it. that's why Prisma reads 87 here and not the 80 from my first post. calling it out so I'm not quietly moving my own goalposts.\n\nFull board, the exact tasks, and how to add your own SDK: [https://sdkproof.dev](https://sdkproof.dev)\n\nGithub: [https://github.com/Kalpitrathore/sdkproof](https://github.com/Kalpitrathore/sdkproof)\n\n(if you saw my first post on this — same tool, just re-run on the new model.)", "url": "https://wpnews.pro/news/claude-opus-5-closed-last-year-s-sdk-gaps-not-this-year-s", "canonical_source": "https://dev.to/kalpitrathore/claude-opus-5-closed-last-years-sdk-gaps-not-this-years-31k3", "published_at": "2026-07-26 20:45:36+00:00", "updated_at": "2026-07-26 20:59:28.645125+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "developer-tools"], "entities": ["Claude Opus 5", "SDKProof", "Kalpit Rathore", "Prisma 7", "Next.js 16", "Vercel AI SDK 7", "Zod 4", "TanStack Query 5"], "alternates": {"html": "https://wpnews.pro/news/claude-opus-5-closed-last-year-s-sdk-gaps-not-this-year-s", "markdown": "https://wpnews.pro/news/claude-opus-5-closed-last-year-s-sdk-gaps-not-this-year-s.md", "text": "https://wpnews.pro/news/claude-opus-5-closed-last-year-s-sdk-gaps-not-this-year-s.txt", "jsonld": "https://wpnews.pro/news/claude-opus-5-closed-last-year-s-sdk-gaps-not-this-year-s.jsonld"}}