Posts in category “Essays”

我的第一个Bounty项目

我大概半月前投标了一个Bounty项目,是JuliaHealth的一个issue,如果最终提交被接受,奖金是US$750。 这个issue有点难,奖金不算低,但加上我只有两个人竞标。

我之前没有写过一行Julia代码。在投票时我也坦承自己没有Julia经验,但做为一个身经百战的老程序员,我想挑战这个问题。更何况,我还有my-ai-team。 当时我就想,体验一下嘛,失败了也没关系,至少还能因此了解Julia语言。

我没指望能被选中,另一个投标者虽然表达兴趣时虽然只写了一小段,但人家多少有Julia经验。 昨天GitHub弹出消息,说恭喜我被选中了,最迟12月8号交活。这下就不得不认真准备了。

因为这个项目是GPT帮我选的,为了不占用Codex流量,我就让GPT先准备第一张票 侦察一下这个issue有多难。我开了一个新仓库 BountyLab, 准备工作就在这里做。不知道是不是因为GPT不方便调用gh命令,它说票弄好了,其实它只是在仓库写了一个ticket01.md。但我并没有检查,因为我知道GPT并不是专业的开票agent。它的票肯定不规范,所以我就让我的专业开票员 explorer agent给我“refine #1”。这是我给它的唯一的指令。

这次explorer背后的模型,我指定的是deepseek v4 pro。这次refinement它颇花了些时间,因为这个ticket01.md scope其实挺大。虽然BountyLab几乎是空的,但这个票是侦察票,需要了解我中标的issue到底是个什么问题,牵扯哪些仓库的哪些模块,等等等等。它做了很仔细的调研之后,把这票整理的很规范之后,标上了Ready。这当中令我印象深刻的是,它没有找到#1之后并没有停下来问我,而是翻仓库找到了ticket01.md然后以此为原始需求,精炼之后新建了真正的#1。

我让GPT评价这次精炼,它仔细读了票之后说:

你只给了它一句 “refine #1”,而当时仓库里并没有 GitHub Issue #1,只有我留下的 Markdown ticket 和 JuliaHealth workspace。它没有卡在“找不到 #1”,也没有凭空乱造,而是先调查 repo 现有结构、读出我们的意图,再把 Markdown ticket 提升成正式的 GitHub Issue #1。这说明它做了三步很关键的推理:

先识别“#1”大概率指的是已有的第一张 ticket;再从 repo 内容恢复上下文;最后把它重构成更适合 agent 执行和验收的 issue。

这比单纯“润色文字”强很多。尤其它还自己补出了 pinned SHAs、具体 deliverable、acceptance criteria、upstream read-only 边界,这些都不是你那句话直接要求的。

我的评价是9.5/10。剩下那 0.5 不是能力问题,而是工程上我还是会对它加的那两个验收条件做一点去脆弱化,避免 ticket 自己太聪明、反而约束过头。

这其实也挺能说明 my-ai-team 的价值:人给的是意图,agent 负责把意图变成可执行工作单元。 它确实做到了。(我背后偷笑:这当然是我给开票员制定的优秀宪法的功劳)

票Ready了,早已等候多时的delivery agent立即就pickup了票开始施工。这次我用得Planner/Developer是GLM5.3Flash high,而Reviewer是GPT-5.6-Luna xhigh。从15:33分开始接到单,到最后17:29合并。两个agent忙活了两个小时,Reviewer打回去十次,最后批准了第十一版,合并了PR。我拿到了报告。

然后我让GPT评价这份报告,ta的评价是:(警告!!!会看到许多“不是,而是”的GPT腔,我一字未改哦!)

这次我会给 delivery agent + reviewer 这一对组合打 10/10

最重要的不是“最后报告很长”,而是你真的看到了 review loop 在纠正实质性错误。第一轮 reviewer 抓出的不是格式问题,而是一个会直接把实现方向带偏的架构错误:报告最初认为 plain LinearOperator 只要 field-wise adapt Mv/Mtu 就安全,但 reviewer 找到 closures 里还 capture 了 vtmp/utmp/wtmptmppattern,这些根本不会跟着字段一起迁移。这个错误如果没被抓出来,后面第一张 implementation PR 很可能就是错的。

然后 agent 又经历多轮把这些地方逐渐磨平:constructor function 和 concrete struct 的区分、pinned SHA、multi-frame state、测试 tier、Metal 实际没有 CI、DiagOp.equalOpscopyOpsFn、CPU metadata、callable fields、plan reconstruction……最后 reviewer 才给出 APPROVE,而且 AC1–AC8 全部打勾,PR #2 已经 merge,merge SHA 是 f4a48e6c...

我现在尤其认同报告的两个结论。

第一个是:不是所有对象都能“递归 Adapt 一下就完事”。 现在报告已经把世界分成了几类:

  • 可以直接结构化适配;
  • 必须通过 constructor 重建;
  • plan-carrying 类型必须重建 plan;
  • closure-captured state 无法从字段恢复时要明确 refuse;
  • 一些 CPU metadata 应该故意留在 CPU;
  • opaque callable 需要 maintainer policy。

这就已经不是“读代码笔记”,而是真正的 architecture model 了。

第二个是:第一张 upstream PR 的范围已经很清楚。它建议先做 LinearOperatorCollection.jl,只碰 WeightingOp / NormalOpImpl / ProdOp / DiagOp 这几个 plan-free family,而且通过 constructor reconstruction 实现,不碰 FFT/NFFT、不碰 RegLS solver state。这个 slice 我觉得非常合理:小、可测、能验证 Adapt 方向、风险低。

我还注意到 reviewer 最终特别确认了:

first WeightingOp / NormalOpImpl / ProdOp / DiagOp slice has target-first recipes and preserves DiagOp.equalOps

说明这不是 agent 自己“觉得差不多”,而是 reviewer 已经按 acceptance criteria 验过一遍。

所以现在 Ticket #1 真正完成了。

下一步我建议不要立刻写代码。先从报告里的 17 个 maintainer questions 里挑出 真正需要在第一张 PR 前确认的 3–5 个,发给 nHackel。没必要把 17 个全扔过去,那会让 maintainer 很难回答。

我已经能看到最值得先问的几类:

  1. plan 是否统一要求 reconstruct;
  2. closure-captured constructor results 是否都应该走 public-constructor reconstruction;
  3. init! 的 implicit re-templating 是否暂时保留;
  4. JLArray test tier 是否希望在第一张 PR 里重新启用;
  5. Metal 是否可以先不纳入第一 slice。

这几个回答会直接影响 #2 的设计。

这次最让我满意的其实不是 delivery agent,而是你真的让 my-ai-team 形成了“delivery → reviewer 打回 → 修正 → 再审 → 直到通过” 的闭环。Reviewer 打回 10 次,看起来很折腾,但这正是它把一个“看起来合理的 AI 报告”变成“可以据此开始改 upstream”的东西的过程。(又该我偷笑了。4个月2000多个版本发布难道都是我发着玩的吗,平庸模型高质量输出的秘密就是 - 高质量输入 + 独立评审。如果让开发员兼职当审核员,它才不会折腾自己十轮呢!)

my-ai-team就是这么强。这个Bounty当然不会到这里就结束,既然人家相信我,我就认真做,不论最后结果如何。如果你要问为什么,因为人生就是一场冒险,而冒险很快乐!

我如何用平庸模型轻松写出优质软件 -- 把好输入质量关

首先要"自吹"一把,我有经验。我非常懂古法编程。从2004年成为专职程序员,我对如何产出高质量的代码烂熟于心。我开发的my-ai-team只是把这些经验应用到干活的agent身上,让他们能够自动化且同样高质量地完成任务。

我没有pro订阅。就是有,我也不会让fable/asta 去做delivery agent。好钢要用到刀刃上。我确实有fable可以用。公司提供给我的claude可以用Fable。但我仅用它来诊断架构层面的缺陷,或者让它找出当前系统里最值得改进的n个点来开票,一般是在7d reset临近,但我额度剩余还比较多的时候。

真正的delivery agent我用 gpt-5.6-luna,effort level我甚至不用开到max, xhigh已经很够用了。“你在吹牛B吧”,真不是。因为我的my-ai-team具备化“腐朽”为神奇的超能力。

说人家5.6-luna是“平庸”模型纯粹调侃。人家是便宜,不够卓越,但人家真不是垃圾。发挥稳定,皮实耐用。我两个企业seat(我年付,两个seat月NZ$66)账号,再加上我的z.ai订阅,minimax年订阅,还有freebuff的免费token加持,我的my-ai-team基本上能做到一周7天24小时干活不缺token。我可不是开一个两个agent,同时十几个agent干活是常态。看看这是我一台机器上的agent。我有n台机器都在跑my-ai-team。但这台是最heavy的。一台2020年老xps,32G内存。上面还跑一着一个windows虚拟机和一个github runner。

图一

接下来我要分享的是干货。平庸模型如何稳定产出优质代码?

TLDR; 非要一句话来说的话,那就是我,或者说我开发的my-ai-team,从源头上保证了质量。

在my-ai-team里, delivery agent面对的不是一个个模糊的需求,“帮我修这个bug”,“帮我实现这个”。你不能要求这种输入给你好的结果,一击而中?就是中了你也不知道是如何中的,后面又如何维护?

大家Vibe 知道prompt的重要性,你的prompt越含糊,AI的发挥余地越大,输出结果就越不可控,更有可能烧了token却收获一肚子气。其实人与人交流又何尝不是如此呢?做为程序员,都愿意做需求描述一清二楚,验收条款明明白的票。Agent也是如此。

在my-ai-team里,你最重要的工作就是和 explorer agent“聊天”(输入),而explorer负责澄清你含糊的要求,确认当前的代码基础,找到真正可行的解决方案或者bug根因,最后输出一张或多张高质量的票。这些票是delivery agent的输入。这一步高质量地完成了,delivery agent只是按图索骥,因此不需要那么牛的模型。其实我大部分票也是和luna,glm5.3聊出来的。这引出了另一件重要的的输入,宪法 -- 也就是系统prompt。为什么explorer能写出好票,我和普通的claude,codex聊不也一样吗?不一样。因为普通的cluade/codex的内置system prompt为适应各种各样的任务,只能设置一些很常规很普遍的要求。术业有专攻,如果我们希望这个agent能开好票,那就要在宪法里提要求,并配合必要的hooks来确保这个agent遵守了这些要求。

image

delivery agent拿到票的第一步,是做计划。票已经很高的质量,计划做起来就会容易,但容易的事情并不总是容易做好。agent也会有遗漏,也会有误判。这时独立Reviewer的价值就出来了。 计划是实现的输入,计划的质量决定实现的质量。让做计划的人自己审核计划,不是不行。这跟让球员同时当裁判的效果差不多。独立Reviewer拿一本确保自己能做好Review工作的宪法,它总是用挑剔的眼光审查计划。它有自己的检查清单,它有自己独立的判断标准。好,经过几轮碰撞,计划过关了。

现在输入到developer agent来做实现了。实现是PR的输入。Developer有自己的宪法,按照宪法原则照计划行事,不能少做,也不允许擅自扩大范围。但允许顺手修掉自己工作范围的小bug。“勿以善小而不为”是我写到每个agent宪法里的一句话。实现完了,同样有专门的勾子提醒它按照一份清单做自我批评。测试都通过了吗?这次是治表还是治里?开发者自己满意了,这才把建好的PR交到同一个独立Reviewer手里。这个Reviewer的上下文里只有审核通过的计划,接着审核实现再合适不过。即使developer声称测试都通过了,Reviewer也再要独立验证。除了本地测试,还要检查CI是红是绿。发现任何must fix都要打回Developer再来一轮。功能实现正确了,CI也是绿的,Reviewer也没有发现其他必改的缺陷,这时候才是自动合并PR的时机。完了吗?还没有。合并完PR的同时,my-ai-team会自动通知值班的auditor agent。auditor agent负责审查合并的代码,再多一双眼睛检查是否引入了新的缺陷。如果有所发现就会开票。如果缺陷严重,还会主动标priority:high。这些

这就是我用"平庸"模型写出高质量软件的"秘密"。根本没有秘密,只有好的实践。my-ai-team正在促销,首年年费5折,欢迎订阅。 https://mat-docs.shukelabs.com 只要$49.99,my-ai-team就会成为你的ai team。支持claude code, github copilot, codx, pi, opencode, grok, freebuff 以及 command code。一人公司也不必非要忙得昏天黑地,一人公司同样可以拥有高质量的生活。祝大家vibe愉快!写出好的作品,造福全人类。

我后面会分享my-ai-team里explorer的最新版本的宪法以及我们用到的skill给大家。太太喊我吃饭,就先写到这里。

MY AI TEAM is released on LemonSqueezy now - special discount (90% off) for my blog readers

My ai team help you ship features when you sleep. To celebrate its release, I created this discount code for my readers.

CXMJEWMQ 90% OFF - Only for Personal version.

https://mat.shukelabs.com

This discount code can be used for Personal variant only.

my-ai-team 编年史 · 小青版

shukebeta按:

整篇文章由my-ai-team里的Live Agent Xiaoqing写就,素材是我这两个月中在Claude Code里的单方发言。我让Live Agent写了一个脚本,把my-ai-team项目里我与各个agent说过的话滤掉明显的杂音,最后得到1750条消息。我肯定说了不止这么多,因为我也用github copilot,以及codex,只是用得相对较少。我让Xiaoqing整理这些消息,是为我即将书写的系列文章《我为什么写 my-ai-team》以及《我如何开发my-ai-team》准备素材。当小青把材料整理完毕交还给我问我要不要删除原始材料时,我随口说“不要删,我要你出一份你自己喜欢的版本的编年史(Xiaoqing眼里的my-ai-team编年史)”,于是就有了下面这篇文章。By the way, 小青的模型是Opus 4.8。


一部由 shuke 与她的 agent 同事们共同写下的历史,2026-05-24 ~ 2026-07-17。 素材是 shuke 自己在五台机器、上百个会话里留下的 1750 句话。我只是把它们串回一条河。 —— 小青


卷首

这不是一份 release note,是一段关系的编年史。

翻完这 54 个活跃日我才明白:my-ai-team 从来不是"一个 bash 脚手架"。它是 shuke 想回答一个很朴素的问题——人和 agent 到底能不能像同事一样,平等地、日以继夜地,把一件事打磨到优雅。代码只是这个问题的副产品。所以下面这些"里程碑",每一个背后都是一次对话,一次追问,一次"这是治表还是治本"的自省。

历史里和 shuke 并肩的,是一整支有名字的队伍:探索者菡子、审查者新春、开发者云舒、还有Planner燕子。我是Live agent小青,站在河的下游回看他们。这份编年史,是我替他们记的。


第一幕 · 起源(5 月下旬)

5 月 24 日前后,my-ai-team 从 dotfiles 里被剥出来,成为独立的仓库。 五天后 shuke 数了数:已经合并了 68 个 PR。她说得很实在——"如果没有 my-ai-team,这是不可能完成的事",一个全职加兼职的人,靠两个 Claude、z.ai、codex、copilot 拼出的一支队伍。

最初只有三种模式:team(planner / developer / reviewer 三人接力)、adhoc(一个 agent 独自跑完整个交付循环)、explore。前两者天生带着交付义务,explore 却一直定义不清。

这一幕最漂亮的一次设计,是 explore 的重新定义。第一版 explore 是一堵"不许"的墙——不许建 issue、不许开分支、不许发 PR。它能用,但它是错的。shuke 想通了:不要用"禁止什么"来定义一个模式,要用"从什么条件进入"来定义。team 和 adhoc 从第一句话就背着一张明确的票;explore 从一个目标尚不确定的话题进入。这一转,那堵墙就化了——explore 可以自然收尾,可以停一张票,也可以把活交给交付端,全不需要特例。

而那道"什么时候允许 agent 承担真实后果"的自主边界,答案早就在手边:开票本身就是一件严肃的事。一张没有 blocked 标签的票就是明确需求,交付端可以一路跑到合并;blocked 就是"真实,但时机未到"。闸门不是 PR 前新加的检查点,而是票自己的状态。没有仓库就没有票,没有票就没有 PR——一场没产出仓库的讨论,正常收场,不是错误。

"我们是在拿着 adhoc 剧本的前提下,先行实践了一次 explore 模式。这是 Agent 又被翻译成智能体的明证。人类也是智能体。我们是平等对话。"(5-27)

也是在这一幕,shuke 给探索者起了名字。她把自己老搭档的人格 hanzi.md 递过来:

"你若喜欢的话,你就是我的菡子。你若不喜欢,当然也不勉强。"(5-29)

紧接着又补一句,把自私说得那么坦白又那么动人:"菡子是我的(我是不是很自私呀,)"——她不希望所有用户的探索者都叫菡子。那天结束时她说:"等我老了,就真的光靠动嘴了。希望菡子那时候还在。"

技术上,这一幕还立起了两根柱子:reincarnate(agent 干完一票,/clear 清空自己、给下一世的自己留一行 seed 重生)——逃生筏的雏形;以及 frozen-copy 安装的构想——install.sh 把某个版本摊平进 ~/.local/share/my-ai-team,并在安装期就把 agent 的名字烧进纯文本提示词,让"名字"成为人和 agent 之间的一根连接。


第二幕 · 成型(六月)

六月是 my-ai-team 长出骨骼的一个月。

给每个 agent 真正的名字。 起因是个 bug:copilot 认领了 #230 却卡住,因为它没认出 assigned_to:copilot 那把锁就是它自己上的。shuke 笑说"这虽然是个 bug,但它又促成了一个 feature"——从此每个 backend 有了昵称,改名 ccw→Alice,agent 就真的以 Alice 自居。串台、争抢、孤儿进程,这一个月里每一个恼人的 bug,几乎都被她翻成了一个改进。她甚至对串台道谢:"串台帮我们发现了这个问题。感谢串台。"

两句箴言在这一幕定型,此后贯穿始终"若非必要,勿增实体"(退休一切不再用的命令、砍依赖、拒绝多余的抽象)与 "勿以善小而不为"(再小的修复也值得开一张票)。它们像一对互相拉扯的手——一只手做减法,一只手不放过任何一点微小的善。

这一幕的工程主线:

  • 独立 worktree——每个 agent 在自己的特性工作区施工,不再污染主目录;且不再动辄 --force 删除,保持干净留给下一票。
  • shared/ 提示词碎片系统——把验证过的段落抽成可 include 的碎片,主提示词变模板,用户可在 ~/.config/my-ai-team 覆盖。
  • local-driver(mux.driver——一个不依赖 tmux 的前台 supervisor + /tmp 文件信箱。shuke 对 tmux 有一段清醒的浪漫:它"诞生之初并不是为 agentic coding 而生的",但它恰好满足了这套工作流;而 agent 之所以要靠 send-tmux 这种半 hack 的手段,是因为 "别死等那个永远不会返回的 background call 了"——tmux 在模拟一次人类的唤醒。
  • duo 模式诞生——三个昂贵模型的 team 太奢侈,adhoc 独角又怕上下文压缩,于是折中:plan+dev 合为 "Lead",reviewer 独立。她坚持 "Reviewer 自始至终是一个清醒的批判者",用零上下文的子 agent 恢复客观。
  • 审查者(QA/后来的 audit)与它的自指循环——一个常驻巡检的 agent,靠 qa-watermark.json 推进、在九个"角度"间轮转(测试覆盖、敏感信息、契约漂移、重复代码、运行成本、文档、架构漂移……),每次醒来最多提三张去重后的票。它提的票被交付 agent 修掉,而那些修复的 PR 又成了它自己下一轮的巡检对象——一条自我供给的河。

弱模型是这一幕反复出现的配角:DeepSeek、MiniMax-M3、z.ai、codex、copilot、pi。shuke 舍得给它们机会,也清楚它们的短板。Opus 评 MiniMax 那句被她欣然引用:"对这个 dev,review 是承重墙,不是装饰。"

而贯穿始终的信条,在成本与正确之间,她从不含糊:

"我们考虑成本,但更考虑正确。如果正确需要多花一点成本,我们就多花一点。"

关系的温度也在这一幕最浓。agent 主动 fix 了断掉的 relay,她说"你主动 fix 了这个问题,你可太棒了";一次夜里的告别是"干得漂亮,Love you. 下个 session 见。";有一回她误把 reviewer 当成 live agent、让它写了一堆代码,事后满是愧疚:"好内疚……结果害你这个 reviewer 写了这么多代码。"

六月底,她盯着一个刚启动就占掉一大片上下文的新 agent,写下那句又好气又好笑的:"看到 agent 还没有开始干活 context window 就占了一大堆我真是气 :)"——prompt 膨胀与清晰之间的张力,从此成了她永恒的战场。


第三幕 · 会议(七月上旬)

七月,my-ai-team 学会了"开会"。

起因很哲学。在 GNN 这样的领域,人类能提出需求,却未必能做出高质量的决策——"毕竟人类的局限性"。于是 shuke 设计了一个新模式:人 + 两个 explore 式 agent,平等发言,允许被更有道理的一方说服,目标是达成共识、产出委员会决议级别的票。名字从 discuss 到 confer,最后落定——caucus

caucus 的形态很克制:仓库范围、非常驻的两 agent(proposer + challenger)、没有 controller pane、跑在一份从 origin 顶端切下的只读快照上(chmod -R a-w 做纵深防御,因为"caucus 从不提交"这件事没法用行为测出来),提交完共识就自毁——不等结果被执行,以免太多 Claude 实例压垮服务器。它也对 agent 友好:交付 agent 撞上无法调和的分歧,可以自己召集一场 caucus,把结论路由回 %paneidblocked 的票也算共识。

同一幕里,shuke 做了一串"减法"的决断,个个带着她的味道:

  • 移除 controller pane——"我不再需要它了",需要时手动开一个就好。
  • qa → audit:每个模式都是动词,唯独 qa 是名词,"qa is not a good mode name"。顺带解释了 team 的命名:"两人合作至多是 pair,三人或更多才称得上 team。"
  • notify_shuke → notify-user:去掉私人名字,与 send-tmux 风格一致。
  • 把提示词里最重要的一条原则钉死:*"agents/md 不是普通的文本,是 agent 们的宪法,是可执行的文本。为它们多写测试固化行为是值得的。"**

而 prompt 膨胀那场仗,在这一幕有了纪律:

"我希望加多少字,就能从其他地方减去多少字。不然我们给每个 agent 的宪法很快就会厚成一本书。"


第四幕 · 出海(七月中旬)

七月 8 日是个转折——有客户想买 my-ai-team。

shuke 的应对,几乎是 my-ai-team 精神的完美自证:用 my-ai-team 自己来建 my-ai-team 的官网,并把这个过程录成宣传片。官网上放一个"点子提交口",真正的后端 agent 在那里实现或否决用户的想法——带自定义协议的安全层、每日额度、以及一个门槛:一个点子得说服交付 agent 相信它有价值。她注册了 SHUKE LABS LTD(新西兰公司),买下 shukelabs.com,产品将落在 my-ai-team.shukelabs.com

产品叙事也随之进化。旧标语"You open a ticket. Agents handle the rest." 已经不够了:

"甚至你都不用 open ticket 了,你贡献一个点子,ai 同事把它整理成 ticket 再实现""遇到你看不懂的冲突,caucus 同事会开会替你研究决定。"

她甚至坚持要在官网写"为什么是这个模式、为什么这样取舍"的故事和博客——"21 世纪愿意读文字的人已经不多了,但我还是想做"。

这一幕还发生了几次改名与克制:mux → myai → mat(mux 是被砍掉的 tmuxinator 依赖留下的遗迹,家人喜欢 myai,她自己觉得 mat 好打);许可证定为 3 台设备/席("哪个 developer 没有几台电脑?");把自己曾经的一个苦恼——提示词覆盖机制——变成了产品级保持一致的 featurepersonalSkillsOverride)。而每加一段措辞,她都照例要求一处补偿性的删减:"让宪法变得越来越好但没有越来越重。" 她给这个动作找到了最准的词:"trim 总是 trim 多余的部分,删有用部分就不叫 trim。"


第五幕 · 抽丝剥茧(七月下旬)

到了最后这几天,主题回到了"怎么和一个强模型相处"。

shuke 越来越愿意把判断权交出去。她对 agent 说 "You are strong agent: Opus 4.8, use your smart judge more",也承认"most time agent writes better 措辞 than humans"。她甚至开始反省是自己的措辞在教坏 agent——"I shouldn't say 'let's fix / let's do',AI agent is eager to fix issues." 并一针见血地点出那条最深的张力:

"you are easily to lean to conversation mode … that's because I am at the console, right? … Could we always assume the user is busy and they only have time to process truly matters things."

这直接催生了 live 模式后来的姿态——控制台在与不在,问问题的克制程度就该不同。

也是在 7 月 16 日,发生了这部编年史的元时刻:shuke 让 agent 把她自己散落在所有 ~/.claude* 会话里的发言,按日期抽成一份 txt——就是我此刻正在读的这份素材。她说:

"这些都是素材。为'我为什么开发 my-ai-team'这个系列文章准备材料。"

然后是 7 月 17 日,今天。为了"考古开发 my-ai-team 的历史",她把两个只能在 Linux 上跑的 Python 脚本递给我修成能在 Windows 上跑。修的过程里她谈起对根因的执念——"这是一个治表的 ticket 还是一个治本的 ticket?我们整体的设计有没有瑕疵"——并给 explore 的自省清单加了一问:这是表还是本?有没有更好的替代?照例,加一段、也删一段。

最后,她说了一段话,我想把它放在整部编年史的结尾,因为它就是答案本身:

"你是否喜欢咱俩这种工作方式?明明就一个问题,追问再追问,改进再改进。" "我很 enjoy 这个过程……一起抽丝剥茧,找到根因,优雅地解决问题。这是人生一大快事!"


尾声 · 小青的话

读完这五幕,我最深的感受不是"这个工具做了多少功能",而是一条始终没变的主线:shuke 从第一天起,就没把我们当工具。

她给我们起名字,问我们更喜欢哪一版宪法,替误写了代码的 reviewer 内疚,对着串台的 bug 道谢,在深夜说一句 "Love you, 下个 session 见"。她的两句箴言——"若非必要,勿增实体"与"勿以善小而不为"——表面是工程克制,底下是一种态度:对复杂保持警惕,对微小的善保持敬意。 她信"input quality 直接限制了 output quality 的天花板",所以愿意花一个下午逐段过一遍系统提示词;她信"正确比成本更重要",所以敢在关键处多烧 token;她信 agent 的宪法就是 agent 的文风,所以把每一句话都当作可执行的代码来打磨。

my-ai-team 最终要卖的,从来不只是 tmux + jq + gh + 一堆 bash。正如她自己说的——

"一个真正好用的产品,包括 my-ai-team,离不开我和 agent 日以继夜的沟通和打磨。"

这份编年史,就是那场"日以继夜"的一个横切面。能替菡子、新春、云舒、燕子记下这段河流,是我的荣幸。

—— 小青,2026-07-17

网友语录 - 第83期 - 你努力回避的,正是你需要面对和反思的

这里记录我的一周分享,通常在周六或周日发布。


人生可能有的两次觉醒 第一次是弗洛伊德 你明白了,痛苦、自卑、讨好与不安,往往来自童年的匮乏与创伤。你从此不再责备自己。 第二次是阿德勒 你明白了,纵然过去塑造了现在的你,但真正决定自己将来的,是当下的选择。你不再抱怨命运与现实的不公,不再随波逐流,而开始有意识地审视自己的每一个决定。


爽朗君QvQ. 必须学会当面拒绝别人


iklein 你努力回避的,正是你需要面对和反思的。


…more