Migrating a codebase with a coding agent: what the 2026 runs cost and how they checked the result GitHub Distinguished Engineer Stephen Toub migrated the GitHub Copilot agent runtime from TypeScript to 832,378 lines of production Rust across 128 pull requests between 12 May and 21 August 2026, at a cost of about $120,000 in tokens and roughly three weeks of his own time, according to a GitHub blog post published 16 September 2026. Asana moved off Enzyme to React Testing Library in two calendar weeks for about $11,000 in OpenAI Codex usage plus about $1,000 in infrastructure, and a VB6-to-C# study ported 12 features in 59 agent minutes for $50.29, with a person confirming 70% of behavior survived. Each team verified results independently of the agent — via the old test suite and CI, human behavior scoring, or running the old system alongside the new one — because, as the SWE Refactor Bench authors noted in August 2026, "a correct migration and an untouched repository can therefore receive the same perfect test score. Migrating a codebase with a coding agent: what the 2026 runs cost and how they checked the result The best-documented agent-driven migration of 2026 is GitHub's. Between 12 May and 21 August, Stephen Toub, a Microsoft Distinguished Engineer writing on the GitHub blog, moved the GitHub Copilot agent runtime from TypeScript to 832,378 lines of production Rust with GitHub Copilot https://stackness.dev/tools/github-copilot , across 128 pull requests, for about $120,000 of tokens and, by his own estimate, three weeks of his time. Asana took Enzyme out of its tests in two calendar weeks for about $11,000 of OpenAI Codex https://stackness.dev/tools/codex-cli usage. A VB6 to C study ported 12 features in 59 agent minutes for $50.29, and a person checked that 70% of the behaviour survived. Each team checked the result with something besides the agent's word: the old test suite and CI, a person scoring behaviour, or the old system running beside the new one. These are other people's runs. I link each one, quote their numbers as published and mark where a number is self-reported. What is an agent-driven migration? An agent-driven migration is a change where a coding agent replaces the implementation underneath a system language, framework, test library, database while the behaviour has to stay the same. A refactor reshapes code inside one stack and has no fixed finish line. A migration has two: the old stack is gone, and the new system does what the old one did. In a bug fix, a failing test turning green is the proof. In a migration no test should change colour at all, so, as the authors of SWE Refactor Bench https://arxiv.org/abs/2608.23564 put it in August 2026, "a correct migration and an untouched repository can therefore receive the same perfect test score". Toub's rule for his port was "Translate first, redesign second." Four 2026 runs with published numbers Four agent-driven migrations published in 2026 give time, size or cost: GitHub's TypeScript to Rust port, Asana's Enzyme to React Testing Library move, a VB6 to C research case study, and Temporal's billing store move to ClickHouse. Two 2025 runs from Airbnb and Google are the usual comparison points. All are self-reported. The VB6 study releases its instruction files, Asana prints its whole prompt and GitHub its review prompt. | Run | Who, when | Agent | Size | Calendar time | Human time | Cost | |---|---|---|---|---|---|---| | Copilot runtime, TypeScript to Rust | Stephen Toub, GitHub https://github.blog/ai-and-ml/generative-ai/migrating-the-github-copilot-runtime-to-rust-using-copilot/ , 16 Sep 2026 | Copilot app and CLI, several models | ~430,000 TS lines in, 832,378 Rust lines out, 128 PRs | ~14.5 weeks | ~3 weeks his estimate | ~$120,000 | | Enzyme to React Testing Library | Asana https://asana.com/inside-asana/migrating-off-enzyme-2-weeks , 7 Aug 2026 | Codex, up to 4 agents | Not given | 2 weeks | ~1.5 engineer-weeks | ~$11,000 model + ~$1,000 infra | | VB6 ERP to C .NET 10 | Alves et al. https://arxiv.org/abs/2608.28972 , 29 Aug 2026 | Claude Code https://stackness.dev/tools/claude-code 2.1.96, Opus 4.6 | 12 features, 35,970 lines | 59 agent minutes | Not measured | $50.29 | | Billing read path to ClickHouse https://stackness.dev/tools/clickhouse | Temporal https://temporal.io/blog/migrating-temporal-clouds-billing-store-to-clickhouse , 11 Aug 2026 | Not named | "the few dozen queries" | 6 weeks of shadowing | Not given | Not given | | Enzyme to RTL 2025 | Airbnb https://medium.com/airbnb-engineering/accelerating-large-scale-test-migration-with-llms-9565c208023b , 13 Mar 2025 | LLM pipeline | ~3,500 test files | 6 weeks | Not given | Not given | | int32 to int64 IDs 2025 | Google https://arxiv.org/abs/2504.09691 , Apr 2025 | Internal Gemini | 39 migrations, 595 changes | 12 months | 3 developers | Not given | Conflicts to know: GitHub wrote about its own product, and Asana's post says it is "part of an ongoing collaboration and partnership between Asana and OpenAI". The VB6 study's first author maintains the system being ported. Temporal's agents did mostly the cleanup: its saved prompts, the follow-up post https://temporal.io/blog/using-coding-agents-on-a-migration-three-practices-that-mattered says, "covered most of the code we deleted and very little of the code we wrote", and it declines to claim a speed-up: "We would like to report that these practices made the migration dramatically faster. We cannot support that." Two DEV posts are not in the table: one moved 90 Cypress specs https://dev.to/yureki lab/how-i-migrated-90-cypress-tests-to-playwright-with-claude-code-in-4-days-1im6 from Cypress https://stackness.dev/tools/cypress to Playwright https://stackness.dev/tools/playwright in four days, the other added OpenTelemetry https://stackness.dev/tools/opentelemetry to 47 services https://dev.to/yureki lab/how-i-added-opentelemetry-tracing-to-47-services-with-claude-code-in-9-days-36ea in nine. Both come from an anonymous account that has published 97 posts since June, nearly all titled "How I ...", each about a different project, and neither names a company, repository, model or cost. The stack behind the runs The tools in these runs split into the agent, the old and new stacks, and the checks. Copilot, Codex and Claude Code each did one of the 2026 runs, so the choice of agent did not decide the outcome. What the runs share is a check outside the agent: an existing test suite and CI, a person scoring behaviour, or the old and new systems compared side by side. - Agents: GitHub Copilot https://stackness.dev/tools/github-copilot app and CLI GitHub , OpenAI Codex https://stackness.dev/tools/codex-cli Asana , Claude Code https://stackness.dev/tools/claude-code VB6 study . - Models: GitHub's subagents ran on Claude Opus https://stackness.dev/tools/claude-opus 4.8, GPT https://stackness.dev/tools/gpt -5.6 Sol, Claude Haiku https://stackness.dev/tools/claude-haiku 4.5, GPT-5.5, Gemini https://stackness.dev/tools/gemini 3.1 Pro and Claude Opus 5. The VB6 study used Opus 4.6 with a 1M context. Asana says only "frontier models on extra-high reasoning". - From and to: TypeScript https://stackness.dev/tools/typescript to Rust https://stackness.dev/tools/rust ; Enzyme https://stackness.dev/tools/enzyme to React Testing Library https://stackness.dev/tools/react-testing-library ; Visual Basic https://stackness.dev/tools/visual-basic 6 to C https://stackness.dev/tools/csharp on .NET https://stackness.dev/tools/dotnet 10; a billing store to ClickHouse. For more agents and harnesses side by side, see the AI coding tools developers list on Stackness https://stackness.dev/categories/ai-tools . The spec names the end state and what the agent may not touch The spec for an agent-driven migration has to say what done looks like and which files are off limits. GitHub found that "Port XYZ component to Rust" got read as "only the hot paths". Results improved once the instructions said the end state was "a native binary built from a 100% Rust codebase, with no execution environment left for TypeScript even if we wanted one". The VB6 study split its spec into three CLAUDE.md files, released on Zenodo https://zenodo.org/records/21983175 for one example feature: one at the root with the objective, scope and conventions, one marking the legacy VB6 directory read-only, one fixing the target stack. The prompt for every feature was the same: Perform the migration of the functionality contained in the current directory. Structure: - CLAUDE.md directory root --- contains objective, scope, methodology, metrics, and conventions. Read it entirely before starting. -