这一次,我第一次觉得 AI 不是工具,而是搭子
今天,我和 Codex 一起做了一个开源的 skill。
它能干的事很具体,就是把我写好的文章直接推到微信公众号草稿箱里,我知道这种东西应该有人已经做过了,但我还是想分享这次和Codex一起跑通的经历。后面我把它整理成了 GitHub 仓库,补了 README、安装方式、release,别人也能直接拿去装。
如果只看结果,这事还挺像那么回事。
它的诞生缘于我最近开始准备认真写公众号。以前偶尔写一篇,手动复制、粘贴、传封面、调格式,也就忍了。最近写得更勤一点之后,我越来越明显地感觉到,这套动作真的很消耗人。
文章明明已经写完了,最难的部分已经过去了,可你还是得把它再搬一遍。
复制。粘贴。传封面。调格式。再一点点塞进草稿箱里准备发布。
每一步都不难。问题就在这儿,它不难,但特别碎。碎到你每次都能做,每次也都知道怎么做,但每次做到一半,都会忍不住在心里冒出一句,好麻烦啊。
于是我就把这个需求丢给了 Codex。



一开始我的想法特别简单,你帮我操作一次就行了。
文章写完了,你帮我把后面那一串动作接过去,别让我再机械地搬一遍。可做着做着我才意识到,我真正想要的,不是帮我执行一次命令。
我真正想要的是,以后我只要说一句,把这篇发到公众号草稿箱,它就能自己理解意思,自己调接口,自己把事办完。
不是一次执行,是一条以后能反复跑的路。
说到打通公众号草稿箱这件事吧,比我想的复杂一点。
你得先去公众号后台找 AppID 和 AppSecret。找到 AppID 的时候我还挺平静,哦,在这儿。结果往下一看,AppSecret 那一栏写着一行特别冷静的话,大意就是,这个值只会给你看这一次,请妥善保存。
行,又来。

拿到这两个值之后,我以为差不多了。结果服务一跑,接口一调,微信很干脆地把我拦在了外面。屏幕上那句报错特别直接,IP 不在白名单里。
你敢信???
你明明觉得自己已经走到门口了,手都快碰到门把手了,结果门口站了个人,抬手把你拦下来,不好意思,你现在还不能进。
这种时候最磨人的,不是难,是碎。
它不是那种能一下子把你劝退的大问题。它更像一个特别现实的小门槛,专门卡在你准备往前迈的时候,让你先停一下。
但也就是从这里开始,我第一次更具体地感觉到,Codex 不是在旁边给我一点建议,然后看我自己处理。
它是真的在跟我一起把这件事往前推。
接口不通,它就继续查为什么不通。服务没起来,它就继续补服务。缺环境变量,就去补 .env。草稿箱链路没打通,就继续一层层接。
那个感觉很像什么呢。
很像你旁边坐着一个挺有耐心的同事。你说,卡住了。它不是回你一句,你检查一下配置吧。它更像是在说,来,我们先看现在到底卡在哪。
顺着这个再聊聊中间一件我觉得特别值得写的事。
我很多次,其实根本没听懂它在说什么。
如果按很多人对 AI 的想象,你会以为想把它用好,前提是你自己得先很懂。你要知道怎么提问,怎么描述,怎么把 Prompt 写得又长又准又像模像样。好像只要你表达稍微糙一点,它就会听不懂。
可我这次的真实感受完全不是这样。
我很多时候,真的就是很直白地在说,没懂,下一步我要做啥?

然后它真的就很耐心地重新拆了一遍。先讲本地怎么能跑,再讲为什么要桥接服务,再讲怎么让 Agent 能调。你能明显感觉到,它不是在证明自己说得对,它是在努力让我听懂。
这种感觉特别像我和同事平时讨论事情。你讲一个方案,对方没跟上,就直接打断你,等等这里我没听懂。然后你再换一种方式讲一遍。不是谁显得更专业,而是两个人都在朝同一个结果走。
我觉得这一点特别重要。
因为它让我第一次很明确地意识到,AI 协作里最重要的东西,可能根本不是你会不会写特别花哨的 Prompt。
更重要的是你敢不敢承认自己现在没说明白。敢不敢直接说没懂。敢不敢一边做,一边把那个模糊的需求慢慢磨清楚。
做到后面的时候,我心里又冒出一个新念头。
我开始不满足于它只是一个本地能跑的流程了。我想要的是,以后说一句话,它就自己跑完。
也就是从那时候开始,我意识到我要的已经不是一个临时脚本了。
我想要的是一个 skill。一个能被 Agent 直接调用的 skill。
但问题是,我根本不知道怎么把这个需求讲清楚。
什么目录结构,什么安装方式,什么元数据,什么 GitHub 仓库该长什么样,我脑子里其实只有一个很模糊的轮廓。
然后我做了一件现在想想特别真实的事。
我直接把别人 GitHub 上一个封装好的 skill 仓库截图发给了 Codex。就那张图。然后说了一句,请参考这个形式。
就这么一句。

我觉得这个动作特别有代表性。
很多时候,需求表达不一定非得靠语言。你说不清的时候,截图、例子、参考物,本身就是表达。我未必知道它背后的技术定义是什么,但我知道我想要的就是这种感觉,这种结构,这种看起来像一个完整 skill 仓库的样子。
而 Codex 居然真的就顺着这个方向开始帮我搭了。
先有了本地桥接服务。再有了 Markdown 转 HTML。再有了标题自动提取。再有了封面图上传。再有了自然语言触发。
然后是 Codex 能调。
再往后是 Claude Code 也能调。
做到这里我已经有点上头了。结果事情还没完。因为我很快又发现,如果这玩意只有我自己本地能用,其实还不够。我还想把它整理成一个别人也能安装、也能理解、也能复用的仓库。
于是 GitHub 风格的目录结构开始有了。README 开始有了。安装方式开始补了。Prompts 和 Skills 分开了。.skill 安装包也开始打了。连 Release 怎么发,Tag 为什么报错,.skill 和 .zip 到底传哪个更统一,这些原本我根本没打算碰的事情,也一件件开始冒出来。

这件事真正让我兴奋的,不是这些页面,也不是那些脚本。
而是第一次真的推送成功的那一下。
终端里跳出来一句很简单的话,ok: true。
我当时盯着那一行字看了两秒,然后立刻跑回公众号后台,手动刷新草稿箱。刷新完之后,那篇刚刚还躺在我本地 Markdown 文件里的文章,真的安安静静地躺在了公众号草稿箱里。
我下意识又刷新了一遍。怕自己看错。
结果它还在。
我当时心里就一句话。
哇塞。
这次好像真的成了。

这种感觉特别微妙。
因为你做出来的当然不是什么惊天动地的大东西。不是一个多复杂的平台,不是一个很大的产品,甚至说到底它只是一个公众号草稿箱 skill。
但也正因为它小,正因为它具体,正因为它离真实工作特别近,你反而会更清楚地知道,这不是幻想,这不是演示视频,这不是一句很厉害的概念。
这就是一件真实被做出来的事。
回到整件事这块,最难的不是代码。
最难的是你说不清楚自己要什么。
你一开始以为你要的是把文章发出去。做着做着发现你要的是一个可复用的流程。再往后发现你要的还不是流程本身,而是一种以后能一句话触发的能力。再再往后你又发现,如果只有你自己能用其实还不够,你还会自然地想,那别人能不能也装起来,Claude Code 能不能也调,GitHub 上能不能看起来像个正经项目,Release 能不能让人直接下载。
你看,需求根本不是一开始就清楚的。它是边做边长出来的。
我后来想到一个类比。
做产品这件事,特别像雕塑。
米开朗基罗不是说过吗,大卫像一直都在那块石头里,他只是把多余的部分去掉。这话听起来很浪漫。
但真到自己做事的时候你会发现,最难的根本不是去掉多余的部分。
最难的是,你一开始压根不知道石头里到底藏着什么形状。
你得一刀一刀地试,边凿边看。凿到某一刀的时候突然觉得,哦,原来它该长这样。
我跟 Codex 做这个 skill 的过程,就特别像这种感觉。需求不是一开始就在那儿的,它是在不断对话、不断碰壁、不断往前推的过程中,慢慢被凿出来的。
而 AI 在这个过程里扮演的角色,也不是一开始就把答案端给你。
它更像是在你还说不清楚的时候,陪你一起凿。
在做这件事的过程中我心里有几个特别明确的感受。
不会写复杂 Prompt,不代表你不会和 AI 协作。很多时候你只要敢说一句,没懂,事情就能继续往前走。
说不清需求的时候,截图和例子就是需求。我发给 Codex 的那张 GitHub 仓库截图,可能比我写 500 字需求文档还管用。
一个东西从脚本变成产品,不在于它有多复杂,而在于你有没有把它推到别人也能用的那一步。从能跑到稳定,从自己用到复用,从临时解决到结构化封装。这中间的每一步看上去都不性感,但正是这些不性感的步骤,把一个念头变成了一个真正的产品。
以前我也会觉得 AI 很聪明,很会写,很会答,也很会整理信息。
但这次打动我的不是聪明,是它的陪伴感。
还记得开头我说的吗。我最早的念头特别小,就是不想再手动搬一次文章了。
结果最后做出来的,是一个能跑、能复用、能迁移、能开源、能下载的完整 skill。
一个很小的「不想再重复了」的念头,被一步步推成了一个真的能用的东西。
而整个过程里,AI 不是在旁边围观,不是给你几句漂亮的建议然后看你自己搞定。
它是真的坐在你旁边,跟你一起,一刀一刀地凿。
很多想法,不是死在不会做上。
很多时候它们只是死在了,从来没有人陪你把它一步步做出来。
也许你也可以回头看一眼,自己最近有没有哪件一直在重复、一直觉得烦、但还没认真想过要不要把它做成工作流的小事。
说不定,那件小事就是你下一次和 AI 一起做成点什么的起点。
夜雨聆风