[{"data":1,"prerenderedAt":431},["ShallowReactive",2],{"post-ai-agent-indie-dev-fragmented-time":3},{"id":4,"title":5,"body":6,"cover":421,"date":422,"description":423,"extension":424,"meta":425,"navigation":426,"path":427,"seo":428,"stem":429,"__hash__":430},"posts/posts/ai-agent-indie-dev-fragmented-time.md","AI Agent 把独立开发压进了碎片时间",{"type":7,"value":8,"toc":400},"minimark",[9,13,17,24,46,49,52,56,59,74,77,80,83,105,108,111,132,138,141,144,147,151,154,157,160,163,166,169,181,187,193,199,203,206,209,285,288,291,312,316,319,325,331,337,343,347,350,353,356,359,397],[10,11,12],"h2",{"id":12},"先看数据",[14,15,16],"p",{},"2026 年 2 月 21 日到 6 月 7 日，107 天里我在 GitHub 上新建了 17 个仓库：14 个实质项目，加 3 个单 commit 小工具。合计 1,221 个 commit（本人署名 1,185 个），其中 953 个（78%）带有 Claude 的 Co-Authored-By 署名。约 15.7 万行源代码（不含生成代码和 vendor），横跨 Rust、Swift、Zig、Dart、Kotlin、TypeScript、Python 七种语言。107 天里有 78 天有 commit，其中 50 天在同时推进两个以上仓库，单日最多 6 个。",[14,18,19],{},[20,21],"img",{"alt":22,"src":23},"2026 年 2–6 月开源项目全景：代码量与活跃日","/assets/2026/chart-indie-portfolio.svg",[14,25,26,27,34,35,34,40,45],{},"其中体量最大的 meow 全家桶（",[28,29,33],"a",{"href":30,"rel":31},"https://github.com/madeye/meow-rs",[32],"nofollow","Rust 内核"," + ",[28,36,39],{"href":37,"rel":38},"https://github.com/madeye/meow-ios",[32],"iOS",[28,41,44],{"href":42,"rel":43},"https://github.com/madeye/meow",[32],"Android"," 三端，合计 9.2 万行）从立项到三端可用只用了三个半月，而且只占同期总产出的一半多一点。按我过去十几年业余维护开源项目的经验，这是数年级别的工作量。",[14,47,48],{},"这篇文章用这批数据讨论三件事：效率从哪里来、碎片化时间的工作流长什么样、以及\"软件大规模开源免费化\"这个推论的成立范围。",[10,50,51],{"id":51},"效率的三个来源",[53,54,55],"h3",{"id":55},"语言不再是边界",[14,57,58],{},"我过去十几年的主力语言是 C、Scala 和 Kotlin。今年的 17 个仓库横跨 7 种语言，其中 Zig、Dart、Swift 此前我从未写过生产代码。",[14,60,61,62,67,68,73],{},"最极端的例子是 ",[28,63,66],{"href":64,"rel":65},"https://github.com/madeye/gterm",[32],"gterm","：它需要 fork ",[28,69,72],{"href":70,"rel":71},"https://github.com/madeye/ghostty",[32],"ghostty"," 并在其 Zig 写的 termio 层里新增一个 passthru 后端（iOS 不允许 fork/exec 本地 shell，终端必须由 SSH 流驱动），这意味着读懂一个 30 万行 Zig 项目的 IO 架构，再做侵入式修改，用的还是一门我此前从未写过的语言。",[14,75,76],{},"Agent 改变的不是\"学一门语言要多久\"，而是让这个问题消失了：人的瓶颈从\"能不能写\"变成\"能不能读懂并审查\"，而读比写容易一个量级。判断一段 Zig 代码的内存所有权是否正确，不需要会默写 Zig 的语法。",[53,78,79],{"id":79},"单项目从月压缩到天",[14,81,82],{},"gterm 从第一个 commit 到 TestFlight 可安装用了 5 个活跃日（5 月 29 日–6 月 5 日，64 个 commit），中间完成了：",[84,85,86,90,93,96,99,102],"ol",{},[87,88,89],"li",{},"ghostty 的 passthru termio 后端（Zig，上游侵入式修改）",[87,91,92],{},"libghostty 交叉编译为 iOS XCFramework",[87,94,95],{},"swift-nio-ssh 接入：密码/公钥认证、PTY、窗口尺寸同步",[87,97,98],{},"自定义屏幕键盘（esc/ctrl/alt/方向键、粘滞修饰键）",[87,100,101],{},"Keychain 存储、TOFU 主机密钥、Ed25519/ECDSA 密钥导入",[87,103,104],{},"fastlane + TestFlight 发布管线",[14,106,107],{},"这类\"GPU 渲染终端 + SSH 协议栈 + iOS 工程\"的项目，在没有 agent 的年代是按季度计的业余项目，上面每一项单独拿出来都要先读几天文档。",[53,109,110],{"id":110},"并行才是碎片时间的正确形态",[14,112,113,114,119,120,125,126,131],{},"78 个活跃日中有 50 天在同时推进两个以上仓库，峰值一天 6 个。以 5 月 29 日开始的一周为例：gterm 从 fork ghostty、立项到 TestFlight 可安装提交了 64 个 commit，",[28,115,118],{"href":116,"rel":117},"https://github.com/madeye/subtitle_anywhere",[32],"subtitle_anywhere"," 集中重构 54 个，",[28,121,124],{"href":122,"rel":123},"https://github.com/madeye/trans_proxy",[32],"trans_proxy","、两个股票面板、meow-rs、meow-ios、",[28,127,130],{"href":128,"rel":129},"https://github.com/madeye/runse-mac",[32],"runse-mac"," 各有推进。8 天里 9 个仓库 174 个 commit。",[14,133,134],{},[20,135],{"alt":136,"src":137},"一周特写：2026.5.29–6.5，9 个仓库 174 个 commit","/assets/2026/chart-indie-week.svg",[14,139,140],{},"并行度不来自人能同时写六个项目的代码，而来自大部分代码本来就不由人写。Agent 跑长任务（移植一个模块、批量重构、修完整套测试）的时间在几十分钟到几小时之间，这段时间人是空闲的。切到另一个项目下发任务或审查产出，就是并行度的全部来源。",[10,142,143],{"id":143},"碎片化时间的工作流",[14,145,146],{},"上面的数据反推出一个工作流的形状：人的每次介入是 10–30 分钟的\"审查 + 定向\"，而不是连续几小时的\"编写\"。一个完整的下午写不出 TCP 协议栈，但 15 分钟足够读一个 diff、跑一遍测试、给出下一步方向。",[53,148,150],{"id":149},"想法的入口从备忘录到计划文档","想法的入口：从备忘录到计划文档",[14,152,153],{},"这个工作流从想法出现的那一刻就开始了。过去我的习惯是把想法记进 Notion：一句话、几个关键词，等有空再展开。结果是大部分想法死在列表里：\"有空\"意味着一个完整的下午，而完整的下午永远轮不到排在第 20 位的想法。",[14,155,156],{},"现在想法出现时（通勤、午休、刷到一个相关项目），我直接打开 Claude app 新建一个项目，把想法口述出去，让它当场产出一份计划文档：目标和非目标、技术选型、里程碑拆分、第一个可验证的最小版本长什么样。这一步在手机上完成，花的还是原来记备忘录的那几分钟，但产物从\"一句话提醒\"变成了\"可以直接开工的 spec\"。",[14,158,159],{},"到了下班后或周末，我坐在电脑前做的不是\"从零启动一个项目\"，而是打开已有的计划文档，让 agent 按文档开工，看着 diff 流过，在关键节点纠偏。gterm 仓库里那份 7K 的 PLAN.md 就是这么来的：它先于任何代码存在，5 个活跃日后 TestFlight 可装。",[14,161,162],{},"两种记录方式的差别在想法的存活率：备忘录里的一句话需要未来的我重新展开，而计划文档把\"展开\"这一步在想法还热的时候就完成了，剩下的只是排队等一个空闲的时间片。",[53,164,165],{"id":165},"四个工程前提",[14,167,168],{},"要让这个模式成立，有几个工程前提：",[14,170,171,175,176,180],{},[172,173,174],"strong",{},"项目状态放在文件系统里，不放在脑子里。"," 每个项目维护 CLAUDE.md（构建命令、架构骨架、扩展点）和 PLAN.md/roadmap（当前状态、下一步）。碎片时间的最大敌人是上下文恢复成本。如果每次坐下来要先花十分钟回忆\"我做到哪了\"，碎片时间就不可用。文档让人和 agent 都能冷启动。具体写法在",[28,177,179],{"href":178},"/blog/porting-mihomo-to-rust-with-claude","mihomo-rust 移植那篇","里展开过。",[14,182,183,186],{},[172,184,185],{},"验证设施先于功能。"," CI 和测试是 agent 产出质量的唯一可靠信号。碎片时间不够人肉逐行验证 1,200 个 commit，但够看一眼 CI 是红是绿、抽查测试覆盖了哪些边界。meow-rs 的 619 个测试函数和 5 条 CI 管线不是开发完成后的补课，而是让\"78% 的 commit 由 agent 协作完成\"不失控的前提。",[14,188,189,192],{},[172,190,191],{},"任务下发以\"可验证的目标\"为粒度。"," \"实现 VLESS 协议\"不是好任务，\"实现 VLESS 握手，通过 spec 里列出的 12 个测试用例\"才是。粒度太大，agent 跑偏的成本由人的碎片时间承担；粒度太小，人变成瓶颈。",[14,194,195,198],{},[172,196,197],{},"成本结构。"," 这套流程的全部现金成本：模型订阅（Claude Max，$100–200/月）、Apple 开发者账号（$99/年）、若干域名和一台 VPS。摊到 17 个仓库上，单项目边际成本接近于零。这个数字是下一节论证的基础。",[10,200,202],{"id":201},"一切软件开源免费化","一切软件开源免费化？",[14,204,205],{},"先把推论说清楚：工具类软件的价格由实现成本和稀缺性支撑。当一个具备审查能力的工程师用碎片时间和每月一两百美元的订阅就能复刻一个工具，纯实现型软件的定价权会持续流失。",[14,207,208],{},"这不是抽象推演。今年这批项目里，相当一部分直接对应我过去付费或考虑付费的软件：",[210,211,212,228],"table",{},[213,214,215],"thead",{},[216,217,218,222,225],"tr",{},[219,220,221],"th",{},"我写的",[219,223,224],{},"替代的商业品类",[219,226,227],{},"典型定价",[229,230,231,242,253,264,274],"tbody",{},[216,232,233,236,239],{},[234,235,66],"td",{},[234,237,238],{},"订阅制 iOS SSH 终端",[234,240,241],{},"$5–10/月",[216,243,244,247,250],{},[234,245,246],{},"meow 全家桶",[234,248,249],{},"付费代理客户端（Surge $49.99、Shadowrocket $2.99 等）",[234,251,252],{},"$3–50",[216,254,255,258,261],{},[234,256,257],{},"runse / runse-mac",[234,259,260],{},"付费划词润色、AI 写作工具",[234,262,263],{},"$5–20/月",[216,265,266,268,271],{},[234,267,118],{},[234,269,270],{},"按量计费的转写/字幕服务",[234,272,273],{},"~$10/小时音频",[216,275,276,279,282],{},[234,277,278],{},"trans_proxy、sshttp、macmtr",[234,280,281],{},"各类网络小工具",[234,283,284],{},"$5–30",[14,286,287],{},"写完之后为什么开源而不是上架卖 $2.99？因为收费有固定成本：上架审核、客服、退款、税务合规，这些成本不随价格下降而下降，在低价区间会吃掉全部利润。而当开发成本只是碎片时间加一份本来就订了的模型订阅，软件就从\"商品\"变回了\"副产品\"。对副产品来说，开源的回报（issue 反馈、PR、声誉）是更划算的变现方式。",[53,289,290],{"id":290},"长尾需求第一次被覆盖",[14,292,293,294,299,300,305,306,311],{},"比替代付费软件更重要的，是那些从来不会有商业版本的项目。",[28,295,298],{"href":296,"rel":297},"https://github.com/madeye/taiwan-strait-monitor",[32],"taiwan-strait-monitor","（开源情报聚合）、",[28,301,304],{"href":302,"rel":303},"https://github.com/madeye/fof-quant",[32],"fof-quant","（FoF 基金分析）、",[28,307,310],{"href":308,"rel":309},"https://github.com/madeye/bangumi-downloader",[32],"bangumi-downloader","（番剧种子聚合），这类需求的全球用户可能只有几百人，过去不会被实现，因为开发成本远大于任何可能的收益。现在\"为自己做就够本\"，开源只是顺手的事。软件长尾的覆盖密度会因此显著上升，而长尾本来就不在商业软件的射程内。",[53,313,315],{"id":314},"边界什么不会免费","边界：什么不会免费",[14,317,318],{},"推论到这里为止都成立，但它有明确的边界。",[14,320,321,324],{},[172,322,323],{},"持续运行成本不会消失。"," runse 免费，但它调用的 LLM API 按 token 计费；subtitle_anywhere 免费，但需要一台 Apple Silicon 的机器跑 MLX Whisper。软件实现的边际成本归零，不等于算力和数据源的边际成本归零。依赖持续服务的产品仍然能收费，只是收的是服务费而不是软件费。",[14,326,327,330],{},[172,328,329],{},"分发与信任仍然稀缺。"," 这批项目的 star 数说明了问题：17 个仓库里只有 meow-rs（262）和 meow-ios（102）过百。代码不再稀缺之后，稀缺的是让陌生人敢用：签名公证、上架渠道、持续维护的信誉。Apple 的 $99/年买的不是工具链，是分发资格。",[14,332,333,336],{},[172,334,335],{},"维护承诺没有被自动化。"," 我的 17 个仓库大多不承诺维护。商业软件卖的东西里，SLA 的占比会越来越高，代码本身的占比越来越低。这其实是把软件业的定价拉回了它的真实成本结构。",[14,338,339,342],{},[172,340,341],{},"\"免费\"是成本转移，不是成本消失。"," 用户免费用 gterm，但我付了模型订阅费。把视角拉远：这一轮工具软件免费化的资金来源，是模型厂商的订阅收入。软件费向模型费的集中，和当年单机软件费向云服务费的集中，是同一种结构变化。",[53,344,346],{"id":345},"审计问题开源是-ai-代码的必要条件","审计问题：开源是 AI 代码的必要条件",[14,348,349],{},"还有一个常被反过来提的问题：近 16 万行代码、78% 的 commit 由 agent 协作完成，谁来保证质量？",[14,351,352],{},"这个问题反而是开源的论据。AI 深度参与的闭源软件，作者自己都未必逐行读过，外部更无从审计；开源至少让\"可审计\"成立，而审计本身同样被 agent 增强：让一个干净上下文的 agent 做对抗式 review，成本和写代码一样低。网络和安全类工具尤其如此：协议实现的弱点，只有在代码可被任何人检查时才会被持续地发现和修复。AI 把写代码的门槛降下来之后，这种公开检查机制的相对价值更高了。",[10,354,355],{"id":355},"给独立开发者的清单",[14,357,358],{},"把这套实践压缩成可操作的几条：",[84,360,361,367,373,379,385,391],{},[87,362,363,366],{},[172,364,365],{},"选项目按\"自己是否需要\"，不按市场规模。"," 边际成本接近零之后，为自己写就值得写",[87,368,369,372],{},[172,370,371],{},"第一个活跃日花在验证设施上","：CI、测试骨架、CLAUDE.md。这决定了后续碎片时间的利用率",[87,374,375,378],{},[172,376,377],{},"用文件系统承载项目状态","，让每个 15 分钟的时间片都能冷启动",[87,380,381,384],{},[172,382,383],{},"并行多个项目","，用 agent 跑长任务的时间切换去审查另一个项目，串行开发浪费的正是这段时间",[87,386,387,390],{},[172,388,389],{},"不熟悉的语言和领域不再是放弃理由","，前提是你能审查产出：读得懂 diff、看得懂测试",[87,392,393,396],{},[172,394,395],{},"默认开源。"," 副产品收不回收费的固定成本，但收得回声誉和协作",[14,398,399],{},"当实现能力不再稀缺，独立开发者的产出上限由审查能力和碎片时间决定。而软件本身，正在回到它在商业化之前的形态：写出来，放出去，让需要的人拿去用。",{"title":401,"searchDepth":402,"depth":402,"links":403},"",2,[404,405,411,415,420],{"id":12,"depth":402,"text":12},{"id":51,"depth":402,"text":51,"children":406},[407,409,410],{"id":55,"depth":408,"text":55},3,{"id":79,"depth":408,"text":79},{"id":110,"depth":408,"text":110},{"id":143,"depth":402,"text":143,"children":412},[413,414],{"id":149,"depth":408,"text":150},{"id":165,"depth":408,"text":165},{"id":201,"depth":402,"text":202,"children":416},[417,418,419],{"id":290,"depth":408,"text":290},{"id":314,"depth":408,"text":315},{"id":345,"depth":408,"text":346},{"id":355,"depth":402,"text":355},null,"2026-06-07T00:00:00.000Z","用我自己 2026 年的开源项目数据，讨论 AI code agent 如何改变独立开发者的成本结构：单项目压缩到几个活跃日，多项目并行成为常态。同时讨论当实现成本趋近于零时，工具类软件走向开源免费的经济逻辑与边界。","md",{},true,"/posts/ai-agent-indie-dev-fragmented-time",{"title":5,"description":423},"posts/ai-agent-indie-dev-fragmented-time","QX4JKCW9WjQK28saCKMzHDFqi603hZ6lIkAYCPY4gZA",1780807217540]