AI Coding

28万Star的REA,让AI学会拆软件:先看懂,再动手。

用 AI 写软件时,有句话特别容易说出口,也特别难说明白。 “这个功能,我想做得跟它一样。” 界面还好办,可以截图。 但一个导出按钮按下去,文件究竟写到哪里?Notion 里的内容复制出去,再粘贴回来,为什么还能保留块的结构?一个小游戏,又是按照什么规则越跑越快的? 这些细节,截图里没有。 只给 A

内容来源:作者提供原稿,经授权发布 · 日期为本站发布/更新日期
REA 官方封面

封面:REA 官方公开分享图。

用 AI 写软件时,有句话特别容易说出口,也特别难说明白。

“这个功能,我想做得跟它一样。”

界面还好办,可以截图。

但一个导出按钮按下去,文件究竟写到哪里?Notion 里的内容复制出去,再粘贴回来,为什么还能保留块的结构?一个小游戏,又是按照什么规则越跑越快的?

这些细节,截图里没有。

只给 AI 看结果,它就得补猜中间的过程。猜错一点,做出来的东西可能看着像,用起来却总差那么一口气。

最近值得关注的开源项目 REA,就是来补这一层的。

名字展开是 Reverse Engineer Anything。截至 10 月 16 日,GitHub 上已经超过 28 万 Star。

它给 Claude Code、Codex、Cursor 这类编程助手接上一套分析工具,让助手能沿着软件里的代码和调用关系,去找一个功能究竟如何实现。

你问“这个按钮做了什么”,它能帮 AI 往按钮后面继续查。

这才是 REA 最有意思的地方。

REA 中文官网与安装入口,完整区域截图。

REA 中文官网与安装入口,完整区域截图。

01 先看一个每天都在用的动作

复制,粘贴。

听起来实在普通。但如果你做过笔记工具,就会发现:复制几个字很简单,把一整块内容的结构带过去,是另一件事。

REA 官方拿 Notion 做了一个案例。

调查从桌面应用里的剪贴板接口开始,沿着页面、桥接层和主进程往下追,最后找到调用 Electron 系统剪贴板 API 的位置。

这里面有个细节,挺巧。

在这个案例里,Notion 会把文本和 HTML 交给系统剪贴板,同时在本地留下内容块的数据,再往 HTML 里放一个 ID,把两边联系起来。

粘贴时,读出这个 ID,找到对应的本地记录,就能取回块数据。

你可以把它理解成一张取件码:剪贴板里带着码,本地保存着那份更完整的内容。匹配成功,结构就能跟着回来;记录失效,就退回到文本和 HTML。

官方 Notion 案例:剪贴板中的 ID 与本地块数据如何关联。

官方 Notion 案例:剪贴板中的 ID 与本地块数据如何关联。

看懂这一步,才知道自己真正要复现的是什么。

如果正在做个人知识库,接下来就有了具体的问题:该保存哪些结构?复制记录什么时候失效?粘到别的软件时怎么兼容?

“做得像 Notion”,终于变成了能讨论、能实现、能检查的细节。

这是官方公开的分析案例,本文没有重新运行 Notion。我们接下来用一个更小的例子,把这套方法走一遍。

02 装好之后,先拆一个导出按钮

先准备一个你已经在用的编程助手。Claude Code、Codex、Cursor 都可以,普通网页聊天框不适合直接照做。

还需要 Node.js。想少折腾版本,可以装 24.11 或以上的 24.x 版本;本文验证用的是 24.19.0。

项目地址放这里:github.com/morluto/rea。

第一步 把工具接上

在终端运行:

npx rea-agents@latest setup

按提示选择自己的编程助手,查看它准备写入的配置,确认后完成安装。然后把助手完整退出,再重新打开。

不熟悉终端,也可以把下面这段话交给支持执行命令的编程助手:

帮我配置官方 REA 项目,仓库是 https://github.com/morluto/rea 。先检查 Node.js 版本,再使用 npx rea-agents@latest setup 。只连接我现在使用的这个助手。把配置计划给我看,确认后执行,并检查工具是否已经可用。

这里有个容易漏掉的地方:要接通 MCP 工具,光装一份 Skill 说明不够。

MCP 可以理解成助手调用外部工具的接口。接通之后,AI 才能真正把文件交给 REA 分析。

这次先分析 JavaScript 小程序,不需要额外安装 Hopper。碰到可执行文件等原生程序,再按目标准备 Hopper、Ghidra 或 IDA 等分析环境。

第二步 只问一个足够小的问题

官方准备了一个只有六个文件的 Notes 示例,其中有个 Export notes 按钮。

不用先把桌面程序跑起来,直接检查文件就行。

把这段发给助手:

下载 https://rea.tools/examples/notes-example.zip ,解压到一个新文件夹。用 REA 静态分析这个示例:点击 Export notes 后,哪些文件参与了处理?导出的文件存在哪里,包含哪些列?请列出对应文件和行号,把直接看到的代码与推断分开,暂时不要修改文件。

如果它没能下载,手动解压后,把文件夹路径交给它即可。

你要拿到的,应该是一条能顺着读下去的解释:页面响应按钮,桥接层发送 notes:export 消息,主进程收到后调用格式化函数,最后写入文件。

文件名叫 notes.csv,代码把它放到用户的下载目录;表头是 id 和 title。

官方 Notes 示例:从按钮到文件写入的完整链路。

官方 Notes 示例:从按钮到文件写入的完整链路。

为这篇文章做的复核,使用了 REA 6.5.0 的命令行静态分析。结果中确实识别出了 notes:export 处理函数,位置是 main.js 第 8—12 行;桥接 API 则落在 preload.js 第 3—5 行。

注意这里的区别:找到“代码打算把文件写到哪”,还不等于已经打开软件、完成了一次导出。

所以,还有第三步。

第三步 别急着相信,改一条输入

继续发:

找到 csv.js 里的格式化函数。用 id 为 1、标题为 Hello, "REA" 的笔记测试它。先给出预期 CSV,再实际运行这个函数,对比输出。说明逗号和双引号分别如何处理,不必启动 Electron。

为什么挑这个标题?

因为它同时带了逗号和双引号。普通标题导出成功,未必能暴露格式处理的疏漏,这一条就更值得检查。

本次直接运行官方 csv.js,得到的是:

id,title
1,"Hello, ""REA"""

标题外面包了一层引号,里面原有的双引号变成了两个。这样,标题里的逗号就不会被误认成新的一列。

普通标题、带引号标题、中文加逗号标题,三组断言均通过。这里只验证了格式化函数,没有启动 Electron 界面。

本次实际运行输出,经阅读排版;原始日志随文保存。

本次实际运行输出,经阅读排版;原始日志随文保存。

到这一步,你已经完成了一件很扎实的小事:从一个按钮,找到背后的规则,再用输入和输出检查它。

以后让 AI 改成其他导出格式,至少知道该从哪里下手,也知道改完该检查什么。

03 它最值得学的,其实是提问方式

六个文件的小程序,直接读代码也能搞懂,不必为了这个例子专门造神。

这个练习的价值,是把过程缩到足够小,让你能判断 AI 的解释究竟有没有根据。

真正遇到打包后的应用、跨文件的调用关系,或者旧程序里的某个小功能,REA 这类工具才更有发挥空间。

不过,“Reverse Engineer Anything”是项目名字,不能理解成扔进去一个软件,就能拿回完整原始源码。原生程序的反编译结果通常是伪代码;本地拿不到的服务端实现,也不会凭空出现。

REA 本身按 MIT 协议开源,免费的是这套工具。所用模型的调用、部分第三方分析软件,仍可能另有费用。

如果你已经在用 AI 做小工具,我建议先换一种问法。

别急着丢一个庞大的“帮我做同款”。把你最在意的那个动作挑出来:导出、粘贴、排序,或者一个计算规则。

让助手找到它,讲清它,再验证它。

等这一步站稳了,再讨论哪些地方值得借鉴,哪些地方可以按自己的需要重做。

我觉得,REA 带来的一个变化是:当我们喜欢某个软件里的小设计时,有机会继续追问一句——

它为什么这样工作?

知道了原因,才更容易做出自己的选择。

---

项目与教程:REA 仓库 · 中文安装指南 · 官方 Notes 示例 · Notion 案例

资料核对于 2026 年 10 月 16 日。Star 为当日累计数量;截图来自官网,Notes 静态分析与 CSV 函数验证另有本次运行记录。