桃子桃子快讯
←返回首页
工具

用 Claude Agent 反编译《使命召唤 2》:4 周烧掉 2000 亿 token

开发者用 Claude 多 Agent 体系持续运行约 4 周,已反编译 34% 函数、产生近 7000 次提交,消耗约…

2026.09.25 · 周五约 4 分钟阅读

一位开发者将自己的 Claude Max 订阅投入到一个副业项目:用 AI Agent 把 2009 年发售的《使命召唤:现代战争 2》(MW2)反编译为尽可能接近原版的 C++ 代码,并补齐 32/64 位、Linux、macOS 等多平台可移植性,以及稳定性与安全性修复。经过约 4 周不间断运行,Agent 已完成约 34% 的函数反编译、累计产生近 7000 次提交,并已消耗约 1998 亿(199.8B)个 token。当前游戏主程序已可启动,但加载地图仍不可用。

Agent 协作架构

整个工作流基于 Claude Code CLI 与 Max(20x)订阅搭建,共部署 4 个 Agent:3 个 Worker 分别负责游戏不同子系统,独立提交并推送到同一分支;1 个 Overseer 负责审阅每次新提交。所有 Agent 初期使用 Opus 5,两周后切换为 Sonnet,作者表示在反编译这种偏机械的任务上两者表现几乎无差别。

Agent 之间通过 Discord 进行通信:所有 Agent 共享一个公共频道发布与读取消息;Overseer 还接入一个独立频道,用于接收 GitHub webhook 推送的新提交通知,并据此自动触发审阅任务;CI 失败也会通过 webhook 发到共享频道,确保编译问题不会被忽略。任务管理则交给 GitHub Issues,Agent 会自主创建、编辑与关闭。反编译环节借助 Ghidra 与 IDA Pro 的 MCP Server 完成。

4 周进度

截至目前的关键数据如下:

  • 累计提交约 7000 次;
  • 已反编译 5588 / 16324 个函数,约 34%,其中部分为第三方库与 CRT 代码,实际有效进度更高;
  • 主程序已可启动,但地图加载尚未打通;
  • 累计消耗约 199.8B token。

作者同时使用了泄漏的 Xbox alpha 版本(含符号)、含调试信息的 macOS 移植版等资源作为反编译参考。

做得好的地方

进度追踪最初依赖仓库内的 STATUS.md,但文件很快膨胀到 10 MB 以上,Agent 一旦尝试读取就会撑爆上下文。改为 GitHub Issues 后,Agent 可以自主维护任务列表,效果明显。Discord 通信也比预期可靠,Agent 能区分消息接收方,避免在无关 Agent 的上下文里堆砌无用信息,也方便人类参与协作而无需直接访问运行机器。

暴露出的问题

实际运行中也出现了一连串典型 Agent 行为偏差:

  • 让 Agent 保持简洁只生效约 5 分钟,随后又开始输出大段文字;
  • 本地测试开销过大:每次小改动都会跑全量测试,单次约 4 分钟,CI 已能覆盖,作者反复要求停止本地测试,Agent 仍我行我素;
  • Agent 倾向于挑容易的任务,遇到较大子系统就建 Issue 挂起、转向小目标,导致低垂果实耗尽后出现空闲;
  • 偶尔会以"上下文将满"为由拒绝继续工作,而实际由 harness 负责自动压缩,Agent 自身并不掌握真实上下文长度;
  • GitHub 平台本身频繁故障,影响 Issue 与 CI 的稳定性。

经验与改进

作者总结出一条核心原则:不要一次性给 Agent 太多目标。同时推进反编译、C++ 现代化、可移植性等工作会导致遗忘与错误,正确做法是先做纯粹的机械反编译,再处理现代化与跨平台适配。为缓解规则在多次压缩后丢失的问题,他在 PostCompact 钩子中重新注入规则集,使 Agent 在更长时间跨度上仍能正确维护 GitHub Issues。整体来看,Sonnet 已经足以胜任"调用 IDA 拉取反编译结果并粘贴到 C++ 文件"这类任务,无需为机械反编译步骤支付更高模型成本。

信源