与智能体一起写代码:不必“技术出身”

How I code with agents, without being 'technical'

与智能体一起写代码:不必“技术出身”

How I code with agents, without being 'technical'

Ben Tossell|@bentossell|2025-12-31


推荐理由

如果你一直以为“写代码”是少数技术人的专利,这篇文章会给你一种很具体、很真实的松动感:门槛正在消失,新的能力不再是“会不会写”,而是“会不会和智能体一起把东西做出来”。作者用大量亲身交付的例子(从个人网站、各种 CLI、小工具到自动化视频 demo 系统)证明:普通人也能用终端里的 AI 智能体,把一个念头快速变成可用的软件;遇到 bug 就当作学习入口,不断迭代自己的“说明书”(agents.md),越做越顺。你会读到一种特别令人兴奋的信号——未来每个人都能开发服务于自己独特需求的“生成式应用”,而这场变化,已经开始了。


作者简介

本·托塞尔(Ben Tossell)是无代码学习社区与教育平台 Makerpad 的创始人,该项目于 2021 年被 Zapier 收购;此后他转向 AI 时代的“智能体开发”实践与传播,目前在 Factory 负责开发者关系相关工作,长期深度使用其终端智能体工具 Droid 进行产品构建与实验。他同时运营订阅量超过 15 万的英文通讯 Ben’s Bites,面向不同水平的 AI 构建者分享创业、投资与工具实践洞见。


原文编译

我在四个月里花了 30 亿 token。每一个 token 都是在终端(terminal)里花掉的——看着一个智能体把我自己写不出来的代码写出来。

你可以把我归类为“氛围编程者(vibe-coder)”。但我觉得这个词忽略了工作本身其实也有技能成分——就像 2019 年前后“无代码(no-code)”这个词一样(我就是那会儿开始做无代码教育公司,后来被 Zapier 收购)。

我不读代码。但我会虔诚地读智能体的输出。就这样,我学到了大量知识:代码是怎么工作的、项目是怎么运转的、哪里会失败、哪里会成功。

那就是我版本的“学编程”。新的技术阶层。

我到底交付了什么

这几个月里,我真正做出来的一些东西:

个人网站。 我重做了我的个人站,把它做成了一个终端 CLI 工具的样子,比我今年年初那次尝试好太多了。

信息流(Feed)。 我做了一个简单的社交追踪器,用来跟踪推特(Twitter)上对 Factory 的提及、我们 subreddit(subreddit)里的帖子,以及 GitHub issues。它是开源(open-source)的,拿到了 100+ star,也有好几个人 clone 回去自己用。

Factory Wrapped。 我做了我们“wrapped”的第一版。给团队看了之后他们很喜欢,于是想把它直接烤进产品里——现在已经上线了。新增指南、调整结构。这可能不太像“写代码”,但对我来说就是同一套过程,所以它就是。

自定义 CLI。 我做了几个 CLI——比如一个 Pylon CLI,后来被团队拿去用于客户支持查询;我还做了一个 CLI 帮用户给账户加 token;另外还有 Linear 和 Gmail 的 CLI。

一个加密货币追踪器。 我投了一家公司,他们能在动态数据(金融、天气、健身、蛋白质折叠)里准确预测正面、负面或中性信号。于是我做了一个追踪器:基于预测自动开/平空头或多头仓位——有点像迷你对冲基金。

Droidmas。 12 天,12 个实验或小游戏,触及推特上大家讨论的不同主题——记忆、上下文管理、氛围编程之类的。

一个由 AI 指挥的视频演示系统。 本质上,我给它一个提示词让它生成视频:它会打开 ghostty,跑命令,还能打开其他窗口(比如浏览器),录屏。它像自己的导演、制片人和剪辑师。录制过程中,智能体会“看着”屏幕上发生的一切,并能在事情发生时随时响应:如果出错、遇到 bug、或需要等待某个响应,它就会等。我用它做过一个视频,后来被 OpenAI 发了出来。

一个由 Droid Exec 驱动的 Telegram 机器人。 这样我就能把本地仓库同步到 VPS(VPS)上,然后用聊天的方式把仓库当作聊天机器人来对话。我尽量把体验做得贴近 CLI,但放在消息应用里(我不喜欢 Telegram,但又懒得折腾 WhatsApp Business 那套繁琐的配置)。

以及大概 50 个没提到的东西——或者已经被我放弃的。

我到底怎么工作

我只用 CLI。永远是终端优先,不用 Web 界面。它作为通用智能体更强,而且我能看到它怎么做事。

我可能有个想法、一个痛点,或者遇到某个问题,我觉得可以用代码解决(现在基本所有问题都能)。于是我就在 Droid(Droid)里新开一个项目(Factory 的 CLI)。

通常我会先跟模型聊几轮,把我想做什么的上下文喂进去,然后切到规格模式(spec mode),开始把计划跑起来,明确我到底要做什么。

在规格模式里,我会不断追问一堆问题:比如我不理解这个是什么、为什么要用那个而不是这个、能不能换个做法?

我会贴文档链接和 GitHub 仓库,让智能体去探索。

然后我就让 Opus 4.5 把自主性拉满直接开干。我会盯着输出流,看它在做什么,一旦报错就介入:要么质疑它、要么把它引到另一条路上。

我启动服务器、测试、给反馈、迭代。

所以我的做法是:先把东西做出来,领先于自己的能力。然后我遇到的每一个空白、每一个坑,都是学习机会:这是系统里一个我在别的仓库里也见过的通用问题吗?我是不是该做一套模板化的机制来处理?这是不是应该写进一个会跟着我走、能在我接下来要做的所有仓库里复用的 agents.md?

我的 agents.md 配置

我最近花更多时间在打磨自己的 agents.md,因为它本质上就是“使用说明书”。

我本地有个 repos 文件夹——所有写过代码的项目都放那里。在这个 repos 文件夹里有一个 agents.md,里面会明确:每个新仓库要怎么搭、什么能做什么不能做、怎么用 GitHub、怎么提交(commit)等等;以及到底用我的工作 GitHub 账号还是个人 GitHub 账号。

跑测试。 端到端测试(end-to-end tests)就是我以前从没认真在意过的东西之一。但现在我特别希望每个东西都有端到端测试。以我目前的知识和能力,做东西和测试的时候,经常会有些“低级 bug”,如果一开始就有测试,其实根本不该漏掉。

而且我经常看别人的 agents.md,看看有什么能借鉴。我一直在优化自己的文档,让每一次新的工作会话都更顺滑。

在路上也能写代码

我也会确保我给每个新建仓库都装上 Droid 的 GitHub app。这样我部署到 GitHub 的时候,会走拉取请求(pull request),让 Droid 审查——然后我还能 @Droid,让它用一个自定义提示词自己去修复。无论是 issue 还是 PR,都能触发它。

这让我能用手机写代码,出门在外也能加功能。再配合我的 Telegram 机器人,我不在桌前的时候做事情就非常顺。

我也用 Slack 跟我的智能体协作。我会为每个仓库新建一个频道,随时把事情丢进去。新想法也经常直接开新频道。Slack 是一个很棒的“一人产品”(+ 智能体)。

我在学什么

Bash 命令。 真正“打通”是在我跑了 changelog 流程一段时间之后——就是同一套流程反复来。我终于理解了所谓的“工作流(workflow)”。于是我让 droid 做了一个斜杠命令(slash command)流程,这是我第一次真正把斜杠命令用顺手:它会跑一串 bash 命令,同时还会提示模型做一些事,比如读 GitHub diff、检查哪些在 feature flag 后面哪些不在、把内容归到新功能、bug 修复等不同区块里。

从那之后我更深入到 bash + CLI。我已经不怎么用 MCP(MCP)了——大多数东西我都用 CLI 版本,而不是 MCP。是的,因为 MCP 会吃上下文,但更主要是:我觉得 CLI 更简单——我通常只需要 MCP 里少数几个工具。比如 Supabase、Vercel 和 GitHub,我几乎总是用 CLI,而不是 MCP。

我也经常自己做 CLI。比如我做了一个 Linear CLI,这样我就能在终端里查自己的 issue、把事情都跑在终端里,而不用去桌面端或网页端。

VPS。 我抽象地知道它是什么——就像另一台一直开着、在别处的电脑。但直到我真的需要它之前,我并不知道自己在那上面需要做什么,而且我还有很多要学。现在比如我跑加密货币追踪器,每一分钟都在拉大量数据,我就需要它一直在线。

我也会用 VPS 跑 Droid Telegram 机器人,并用 SyncThing(SyncThing)把本地 repos 同步到 VPS,这样仓库总是最新状态,跟我离开时一模一样。于是我随时都能接着干。

技能(Skills)。 我也更多在用它们了——不只当知识库,还会和 bash 命令 + CLI 结合。我有一个 Gmail CLI,可以拉到任何项目里用:它是可移植的,放在我的根目录。于是系统里任何时候我需要 Gmail——我有一个 Gmail 分拣系统——就直接用 CLI。

新的可编程抽象层

不想变成推特上那种“看到安德烈·卡帕蒂(Andrej Karpathy)发了条推就要跟风”的人,但他说的这句确实戳中了我:我们要掌握一个新的可编程抽象层。

无代码时代,我掌握的抽象层是 Webflow、Zapier、Airtable 这类拖拽工具——把它们缝在一起,让它“看起来像真正的软件”(直到撞上上限)。

但现在,我不再需要先从零学会写代码,才能做这些。我要学的其实是:如何和 AI 智能体一起工作。 我怎么把提示词写好?怎么确保它拿到了正确的上下文?以及它怎么反过来帮助我理解我们在做什么——各个模块如何协作、我怎么持续改进自己的系统?

包括智能体、子智能体、提示词、上下文、记忆、技能、hooks 等所有这些东西。

向别人学习

我会读像彼得·施泰因伯格(Peter Steinberger)这种真正的程序员——他产出非常猛。看他的分享,你会感受到他系统的“朴素”:跟模型聊,让它干活,不太折腾额外的斜杠命令、子智能体、hooks、skills(虽然他也开始用 skills 了)。这给了我一种许可和信心:我不需要一个极端复杂的系统。

在推特上你会看到很多人不断优化、甚至可能过度优化自己的系统。对我这种人来说,这会让人望而生畏。但我也觉得这正是它的美妙之处:它是完全可定制的,你可以按你想要的方式去用。你可以像 Kieran 那样搞一个 plan mode,做一个能跑 20 分钟的自定义斜杠命令;你也可以像 Peter 那样,直接跟模型聊就完事。

跟着其他工程师学习还有一件事:看他们的开源软件,clone 下来自己用,尝试改进;或者干脆拿一部分做成自己的。比如 Peter 最近那个 summarize YouTube,我就把它拿来,去掉 Chrome 扩展那块,只保留 CLI,这样我在任何地方都能直接用它对话。

又比如马里奥(Mario),读了他那篇 MCP 的文章(他说用 CLI 替代 MCP),就推了我一把,让我更深入 bash 和 CLI。

学习的过程

我不是在做一个要给几万人在线上生产环境用的东西。所以一定会有 bug、会有问题,我也经常撞上。它提醒我的只是:这是一块知识空白,不是我“能力不行”。

我的角色是识别空白:找到这些空白,然后问自己——我怎么确保它再也不会发生?或者我怎么理解系统的这一块,以至于它如果再发生,我能提前抓住?

甚至是我刚开始用智能体写代码时那些最简单的问题——比如:我想用动态数据、还想让多个用户使用,那为什么不能用 GitHub Pages?程序员都知道这是非常基础的道理,但我就是在“做东西”的过程中才学到的——因为我想做的东西超出了工具允许的边界。

然后我就会问:那我们该怎么做?你要做的就是问模型。模型知道你不知道的一切,你只要一直问下去就行。它就是你那个永远耐心、站在你身后、随时指导的专家程序员。 你甚至可以在 agents.md 里写:“我不是程序员,你需要非常简单地解释。”你想怎么调就怎么调。

为真实产品做贡献

我甚至还给我们自己的产品贡献过一些改进——都是些小东西,但确实是改进。Factory 的工程团队经验极其丰富,也非常强;我通过看他们的 PR 学了很多。我们内部还有 lunch and learn,会有人分享“我怎么评估新功能范围”“我怎么修 bug”等等,这些都非常有帮助。

所以这一切对我来说,就是一个巨大的学习体验——而我真的很享受“学写代码”,或者说,学着和代码一起工作。

为什么这次不一样

我这辈子尝试学写代码很多次,每次都是:敲这些字符,回车,然后你看到 hello world 了吗?就是“先这样,再那样,然后会发生这个”。也许那条路对我有用,但我仍然觉得,那和今天已经完全不同。

以我现在能做出来的这些东西,如果走那条老路,我得写很多个月、很多年,才可能到一个“我觉得我能自己写代码”的程度。

所以我换了个切入点:我更懂“用代码构建的项目”的系统思维。我其实是在做上一个无代码教育公司的时候意外学到的:Webflow 是前端,Zapier 是 API 路由/连接组织的胶水,数据在其中流动,Airtable 是数据库。我以前就学过这些系统结构,我觉得这在今天帮助我理解了不少模块之间的关系。

你能学的东西太多了。经常我会看到有人在推特上发个东西,我完全不知道那是什么、能做什么——但我会想:我肯定可以玩一玩。

没有任何软件是“高不可攀”的。 我可以直接 git clone,然后问:这玩意到底干嘛?好,我在想这件事——它跟我想的是不是一回事?这就是探索,太有意思了。

问那些“傻问题”

无数次,我会冒出一些我觉得“傻”的问题——或者在程序员眼里根本不会问的问题——但我有许可去问,因为没有人盯着我,也没有人嘲笑我愚蠢或说错了。

比如:为什么我们要用这么多框架、这么多类型的框架?它们是为了让人类写代码更容易的一层抽象。那如果 LLM 这么聪明,为什么不能写更简单的代码、少点依赖、少点潜在 bug 的攻击面?这是个傻想法还是个好想法?

我可以学到:它也许并不傻。但同时,是的,模型训练过太多项目,所以很多时候它会倾向于按既有生态和框架来搭。

于是我就在不断建立对“代码世界”“工程世界”的理解——我以前觉得自己不配进入,但现在我已经明确属于其中。

超越“氛围编程”

你当然可以叫它氛围编程,但我觉得这会错过重点。我是在认真学系统:我在努力理解到底发生了什么、我怎么变得更强、我怎么成为“新时代的程序员”、这新的技术阶层到底是什么?

这才是我觉得最有意思的地方。我不能严格说自己是“非技术”,但我也不能说自己是程序员——而且我也不想这么说。我属于一个新的技术阶层,只是我还不知道它该叫什么。 但“氛围编程”给它带了点负面意味,就像“无代码”当年也被贴上负面标签一样。

它像一场游戏

有人把这种新的编程方式比作游戏,大家常提到《异星工厂(Factorio)》。我没玩过,我也不算游戏玩家。

但对我来说,这整个范式真的像一场游戏,而产出就是:我在造我想造的东西。很多东西最后不会出现在 GitHub,也不会上线,它们只是对系统某个局部、或某个主题的探索。另一些会发布、会被别人用——我甚至有个 CTO fork 了我的个人站拿去用!对我来说这就是“老板级别”的事。

有人发“哦,我做了个 React 抓取工具”。好啊,那我能不能也做一个?为什么不?这个看起来很棒。那我也想做——就这么简单。我可以为了探索而探索。

你曾经有过的每一个点子,都可以被实践、被探索,而且它不需要很优秀。 你会在过程中学习。

丢掉的许可

以前,如果我真的学会写代码,然后做了一个很烂的原型——而那又是我很在意的一个“大想法”——当它没人要、没人买,我会因为投入太深而很难把它扔掉。

无代码让我能在一小时、几小时、一个周末就做出一个版本。如果没人喜欢、没人愿意付费、它很垃圾,那我就能扔掉——因为我没投入太多时间和精力在一个最终不会对别人有价值的东西上。

我觉得今天也是一样。我们会看到软件爆炸式增长。很多会很糟,但很多已经很棒。专业程序员正以疯狂的速度在交付高质量项目。于是世界上会出现大量“可用、可 clone、可 tweak、可 remix”的代码项目。

这比你从头学写代码要快得多;也比你逐行读文件、逐行写文件要快得多。反馈回路更快,过程更快。你随时随地都能做任何事,持续不断地造东西。

向前摔倒

学习代码的方法,就是走在能力之前,然后在失败里向前推进。

我觉得今天任何一个不“技术”、但想进入这个世界、想做这些事的人,都完全做得到。他们只是需要一点许可:去玩、去试。你必须把它当作玩耍。

注册一个 CLI 智能体工具,比如 Droid。说你想做个人网站,做个 RSS 追踪器,做个待办清单,做个健身 app——你想做什么都行。开一个项目,开始做。你遇到的每一个小卡顿、bug、问题——都去追问它:为什么会这样?为什么会出这个错?你本来就不会写代码,所以你不应该被 bug 困住——专业程序员也天天撞 bug。

你也可以把同样的问题带去别的地方:去 ChatGPT、去 Claude,让不同模型给不同视角。你永远都会有选择、有不同的变体。

只选一个

工具太多、选项太多。归根到底:选一个,然后就坚持用它。学透那套系统。它们看起来都差不多,工作方式也差不多。

当然,我用 Droid 是因为我在 Factory 工作。但也因为它在各种模型上能拿到最好的输出(耶,模型无关)。

最终,我对工具的要求是:它能不能让我以最少时间、最少麻烦,走到最远? 我越需要花精力“学怎么用工具本身”,就越难。

像 IDE——我试过不少。我以前长期用过一个,但它多了太多我不需要也不在乎的东西。我只想跟模型说话,让它写代码。如果我需要看 markdown 文件,我现在可以用我最近发现的终端文件管理器;或者我会用 Zed(Zed)——我现在就用它——来查看、编辑 markdown:比如我要稍微改一下 changelog,就开 Zed 改两下,再回到 CLI,让它继续开干。

而任何我觉得缺的工具或功能,我都会尝试自己做——比如一个终端文件查看器。

这一切对我来说,就是一个巨大的学习体验。我真的很享受它。去构建,向前失败,然后持续交付。