夜雨聆风学习资料网

ARTICLE · 1199158

AI逆向一切:我把一个月的软件订阅费,换成了复刻它的Token,开放下载,永久免费

AI逆向一切:我把一个月的软件订阅费,换成了复刻它的Token,开放下载,永久免费

几个月前,我用了一款非常好用又有审美的 Markdown 编辑器。

记笔记、批改AI写的文档,都靠它。用了半个月,它弹出一个框:试用结束,请订阅。

价格不算离谱,但是它不是那种我每个月都想交钱的软件。

关掉对话框,一个「邪恶」的念头冒出来:自己复刻一个,好不好?

于是我做了一个决定:用这款软件一个月的订阅费,换成 AI 的 token,自己复刻一个。现在回头看,这决定太对了,哈哈哈。。。

一周后,就有一个能用的版本了。名字叫 Mora,立刻发给朋友使用要反馈。

这篇文章讲三件事:我为什么敢这么干,中间差点卡死在哪,以及你如果想试,从哪一步开始。

【如果你没有兴趣看后面的文章,可以访问 mora.ziduai.art 下载使用,永久免费。但是,文末有复刻资料包,要鸡还是要蛋,你说了算】

01/WHY

我凭什么敢自己写

先说清楚:这个软件,我一行代码都没写——全是 AI 写的。我做的事只有三样:说清楚要什么、指出哪里不对、验收。这在今天有个名字,叫 vibe coding。

做程序员也十来年了,但这一次,我刻意没上手,我想看看,完全放手能做出个什么鬼东西。

真正让我敢开始的,是另一件事:我太清楚自己要什么了。

那款编辑器最让我舒服的一点:所见即所得。标题打完,当场变成标题的样子,不用切出去预览。这种手感我用惯了,也知道该怎么复刻。

需求不用从新研究。因为半个月的使用过程,需要啥早已心知肚明了。

Mora 主界面——标题、正文、引用、表格,写在哪儿就长成什么样

所以第一天,我只想做了一件事:做一个能跑起来的东西,哪怕它很丑。

02/REBUILD

三天后我做出来了,七天后我删了

第一版,在三天后做成,在七天后删除。

这不是什么骚操作,是有点跑偏了。

第一版做出来的也算是个正经能用的东西:31 个测试全绿,安装包 1.96 MB。从「能不能跑」这个角度看,它是成功的。

但我用了两天就发现不对。

有好多的markdown语法都显示不出来,没有所见即所得的那种效果。

删了吧。

我把第一版删了,编辑器换成另一套底层,前面做的快捷键、撤销栈、预览组件,基本推倒重来。

你可能会问:删掉几天的工作,不心疼吗?

不心疼代码,心疼我的token。。。

但更麻烦的是另一件事:

AI 帮你开发的速度太快了。快到你很容易一直做下去,却忘了停下来问一句:我做的方向,对不对?

方向这件事,只有你自己能定。它只能往你指的地方走;你指错了,它跑得越快,你偏得越远。

03/INSIGHT

真正卡住我的,不是代码

第一版推倒之后,我以为接下来会是一场技术苦战——毕竟我一行代码没写,全指着 AI。

事实正相反。

技术上的坑,AI 基本都能解决。真正让我停下来的,是一个发现:AI 给我的帮助几乎全是对的,出错的,往往是我没说出口的假设。

说一个印象最深的。

有个功能:双击桌面上的 .md 文件,用 Mora 打开它。

测试全过,我自己点也全过。

但有个细节——第一次双击,文件确实开进了标签页,窗口却没有跳到前台。我以为程序没反应,得点第二次才行。

测试里永远测不出这个,因为测试里没有「看看它打开了没」这个动作。

查了很久,根因是一行代码:只调用了「聚焦」。而在 Windows 上,这个调用不会把已经最小化的窗口还原。

正确的顺序是三件事:先判断它是不是最小化,还原,再显示,最后才聚焦。

函数没写错。错的是我没告诉它:窗口最小化了,该怎么办。

类似的事还有几件:

打包失败,查了半天,是一个我从没编译过的死文件躺在目录里,打包器认为它应该有一个可执行文件,于是去找,找不到,就崩。AI 没写错,是那个文件不该在那。

我以为查找替换是一个功能,接上去才发现:在 Markdown/富文本编辑器里,它需要结构化文档的坐标计算、响应式状态与快捷键的同步、以及保留撤销历史的受控替换。这三件事在纯文本环境下是没问题的,在结构化文档里都得自己处理。

查找替换——看着简单,背后是三个坑

导出 PDF,必须轮询等文档渲染完再打,否则导出的是一张白纸。测试不会告诉你,因为测试里没有「渲染」这个动作。

你有没有发现共同点?

它们全都发生在「写代码」结束之后。 写的时候一路顺利,跑起来才知道。

这也是我后来坚持「把写和看分开」的原因。

我常用两个工具。

一个管「写」:DeepSeek Harness,里面装着我开发的「编程模式」插件——用十条纪律管住它,别乱写、别写太多。

一个管「看」:ZCode,它能直接操作浏览器,把正在开发的页面打开给我看——长什么样、哪里不对、控制台报什么错,当场就能看到。

你没法指望同一个环节,既产出代码又验收代码。

还有一类错误更安静——它们连报错都没有。

有一次合并后,整条开发线的代码全没了。查出来原因是:合并时 Git 以共同祖先做三方合并,把一侧的改动静默地判定为“已被另一侧覆盖/抵消”,所以零冲突、零提示。如果只看“合并成功”四个字,根本发现不了。

这几件事让我养成了一个习惯:AI 生成的东西,我得负责证明它是对的。

怎么证明?两件很土的事。

一,逐条核对。有一次的需求文档里有 70 条关于文件、行号的断言,我跑了个小脚本,逐条去真实文件里比对。发现有七处行号差 1。不是 AI “数不清”,而是行号这种精确引用本来就不该靠它心算——上下文一截断,基准就偏了。能回填就回填,不能回填就逐条验。

二,真机跑。测试全绿、类型检查零错误,证明的是局部正确;用手点一遍,证明的是集成后的真实行为。两者都只是证据,不是证明——但缺了任何一条,我都不敢说“它是对的”。

最后送你一招,今天就能用:

报错的时候,不要转述,把原文整段贴给它。

你说「打包失败」,它只能猜;你把 os error 2 和那一行路径一起贴过去,它才能查到打包器的源码里去。

04/START

你要开始,照这个顺序来

说了这么多坑,你可能反而觉得门槛很高。

恰恰相反。这些坑没有一个需要「更聪明的脑子」才能过,它们只需要有人先踩一遍。我已经踩完了。

如果你也想试,我走过的顺序是这样,直接抄:

01

从你天天在用的东西开始,从「痛」的那个点开始。

02

第一天不要想架构。先让一个能跑的东西跑起来,哪怕很丑。

03

一次只让它做一件事,做完立刻验证。攒三件事再一起验证,出了问题你分不清是谁的错。

04

报错原文整段贴,别转述。

05

先问「为什么」,再让它改。知道根因,下次才认得出同一个问题。

06

用 git 当安全网,一小步一提交。任何一次「AI 改坏了」都能退回去。

07

写一份项目规则文件,把你的红线写进去。我那份里最重要的一条是「不许回退到两栏分屏」。

08

把「写」和「看」分开。(codex不必)

09

真机跑一遍,才算做完。

10

别怕删。写错了还留着的代码,比删掉更贵。

今天就能做的第一步:挑一个你每天都在用的小工具,跟 AI 说一句——「我要做一个只有这三个功能的版本」。

二十分钟,够了。

∞/THE END

最后

Mora 深色主题——这是它现在的样子

回到开头那个对话框。

那笔订阅费,最后换来一个软件。但真正留下来的,其实不是软件。

是从开发到现在,这几个多月里那些「原来是这样」的瞬间:原来打包失败可能是一个死文件;原来双击没反应,是少了一次还原;原来代码一行没写错,功能也可以不能用。

如果你也在用 AI 干活,只带走一句话就够了:

它给你答案,它不负责证明答案是对的。

剩下的,等你卡住的时候,再翻出来看。

Mora 下载地址:mora.ziduai.art

资 料 包

我把这个项目的需求文档整理成了一个资料包,就是那种「你直接拿去,让 AI 照着做」的文档。在公众号后台聊天框发送「Mora需求文档」,就能拿到下载链接。

E N D

我是子都,探索驯化AI的方法,分享解决真问题的思路。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

相关学习资料