跳过正文
  1. Posts/

pi 项目里那些反直觉的设计:从 AGENTS.md 到「先把你的 PR 关掉」

·3806 字·8 分钟· ·
沈显鹏
作者
沈显鹏
Engineer. Builder. Maintainer.
目录

周末写了一篇用 pi + DeepSeek 做 Codex 备用方案的文章。

写完之后,我又顺手翻了翻 pi 这个项目的其他内容,结果发现,真正有意思的地方不只是工具本身,而是它背后的一套协作方式。

尤其是它的 AGENTS.md 和 CONTRIBUTING.md,读完之后我有点意外。

这个项目的很多规则,和我们平时理解的开源社区几乎是反着来的。

  • 新贡献者的 issue 和 PR 默认关闭。
  • 周末提交的 issue 不处理。
  • 如果你不理解自己提交的代码,PR 会直接被关掉。

这些规则看起来很硬,但结合 Mario Zechner 最近那篇文章一起看,就会发现它不是单纯的「不欢迎贡献者」,而是在认真思考一件事:

AI 时代,开源项目到底该怎么可持续地维护下去。

从 Mario 的那篇博客说起
#

4 月 8 日,pi 的作者 Mario Zechner 发了一篇博客:I’ve sold out

标题有点自嘲,内容却很真诚。

他在文章里回顾了自己从 2009 年开始做开源的经历。先是 libGDX,一个跨平台游戏开发框架,曾经是 Android 上很流行的游戏引擎,Ingress 和《杀戮尖塔》(Slay the Spire)都用过它。

后来他参与了一家叫 RoboVM 的创业公司,做 JVM 到 iOS 的 AOT 编译器。再后来,RoboVM 被 Xamarin 收购,Xamarin 又被微软收购,微软最终关掉了 RoboVM。

作为当时的「OSS guy」,Mario 不得不去写那篇「抱歉,不再开源了」的公告。结果可以想象,他在社交网络和邮件里被骂得很惨。

问题是,这个决定并不是他能控制的。

这段经历让他对 VC、创业公司和开源之间的关系有了非常清醒的认识。说得更直白一点,就是他被现实教育过。

所以当 pi 因为 OpenClaw 爆火,被越来越多 VC、大厂和潜在投资人关注时,他面对的不是一个简单的「要不要变现」问题,而是一个他以前已经踩过坑的问题:

如果一个开源项目突然有了商业价值,接下来该怎么办?

他最后的选择不是自己出来开公司,而是加入 Earendil

原因也很简单:他有一个四岁的孩子。他想陪孩子长大。

如果自己做 CEO,接下来的就是找 co-founder、找 PMF、搭团队、搞企业文化、处理各种人和钱的问题,然后慢慢停止写代码,变成一个他不喜欢的「管理者」。

加入 Earendil 之后,他可以继续写代码,继续维护 pi,同时也有一个团队来帮他处理商业化的事情。

Mario 在文章里也说:pi 的核心代码会继续保持 MIT 协议,可以 fork,可以使用,可以基于它做产品。真有一天方向不对,fork 按钮还在那里。

因为他当年亲眼看过 libGDX 社区在 RoboVM 闭源之后 fork 出 MobiVM,所以他知道这件事真的会发生。

Armin Ronacher 的加入
#

Mario 加入 Earendil 的另一个关键原因,是 Armin Ronacher。

如果你写过 Python Web,大概率见过这个 ID @mitsuhiko。他是 Flask 的创建者,也写过 Jinja2、Click、Werkzeug 等这些 Python 生态里非常重要的项目。同时,他也是 Sentry 的联合创始人,对「开源项目如何商业化」这件事有实际经验。

Armin 也写了一篇文章,欢迎 Mario 加入 Earendil:Mario and Earendil

他对 pi 的评价:pi 并不是靠喊得最大声、跑得最快来吸引人的,而是能看出来作者很在意软件质量、设计感、可扩展性和长期维护。

现在很多 AI coding 工具给人的感觉是:先发出来,先占坑,先把声量打起来。至于设计是不是统一,代码是不是干净,长期能不能维护,反而经常被放到后面。

pi 给人的感觉不太一样。

它不是最会宣传的那个,但你越往仓库里看,越能感觉到作者对工程细节是有要求的。

Mario 和 Armin 认识已经十几年了。最早是在 Reddit 的 r/austria 版块互相辩论,后来在线下见面,慢慢成了朋友。2025 年 AI 编码工具爆发之后,Steinberger、Mario 和 Armin 经常交流、实验、互相 review 博客文章,后来还被人调侃成「维也纳编码代理学派」。

这个背景也挺重要。

很多商业合作看起来是突然发生的,其实背后往往是长期信任的结果。尤其是开源项目,一旦涉及所有权、商标、协议和未来路线,只靠一份合同是不够的。

你得相信一起做事的人不会乱来。

AGENTS.md:给 AI agent 的项目入职手册
#

pi 仓库里有一个 AGENTS.md 文件。

我一开始只是随便点进去看了一眼,结果发现它写得非常细。

里面规定了 AI agent 参与 pi 开发时要遵守的规则,包括:

  • 回复要简洁,不要表情符号,不要废话
  • 不要随便使用 any 类型
  • 不要使用内联 import
  • 不要为了绕过类型错误而删除或降级代码
  • 修改代码之后要跑 npm run check
  • 不要在没理解的情况下删除看起来「没用」的代码
  • 新增 LLM Provider 要改哪些文件、补哪些测试
  • 多个 agent 并行工作时,不能用 git add -A
  • 不能用 git stash
  • 不能用 git reset --hard
  • 发布流程该怎么走

这些规则看起来很细,甚至有点啰嗦,但如果你真的用过 coding agent,就会知道它们很有必要。

现在的 agent 不缺能写多少代码,缺的是写出高质量代码。

有些规则不是靠 prompt 临时补充,这样很容易漏掉。AGENTS.md 的价值就在这里:它把项目里的工程习惯写成了一份固定的上下文。

这样就给 AI agent 一个「操作手册」。

如果你的项目也已经开始大量使用 AI 编码工具,可以认真参考一下 pi 的做法,给自己的项目也写一份 AGENTS.md。

不用一上来写得很复杂。先把最容易出错的几件事写进去,就已经能减少很多无效修改和 Token 浪费了。

CONTRIBUTING.md:先把你的 PR 关掉
#

如果 AGENTS.md 写给机器,CONTRIBUTING.md 就是写给人的——措辞直接,不讲客气。

一、不懂就别提。 用 AI 写代码可以,但如果你解释不了自己的 PR 做了什么、怎么跟系统交互,直接关掉。你用 AI 省下的时间,不该变成 maintainer 替你兜底的成本。

二、新人默认关闭。 所有新贡献者的 issue 和 PR 自动关闭。想「转正」?靠 maintainer 在 issue 下回复的信任标记——不是 GitHub label,是评论内容:回复 lgtmi,未来 issue 不再自动关闭;回复 lgtm,issue 和 PR 都不再自动关闭。每天 maintainer 会浏览被关闭的 issue,有价值的挑出来重新打开并给出标记。pi 不是拒绝新贡献者,是要求你先证明自己的提交值得 review——agent 让制造 issue/PR 的成本越来越低,门槛就越来越重要。

三、周末不受理。 周五到周日提交的 issue 自动关闭,不进入周一 review 队列。着急就去 Discord。FAQ 里的解释很直白:“Maintainers need uninterrupted time away from the issue tracker.”

四、两次无视规则封禁。 如果两次无视 CONTRIBUTING.md,或用 agent 向 issue tracker 批量灌水,会被 Pi 项目永久封禁。

这些规则背后的逻辑
#

表面上看 pi 的规则让人觉得它不欢迎贡献者,不欢迎社区参与。

但继续读 CONTRIBUTING.md 的 FAQ,就能看到它真正想解决的问题。

pi 收到的 issue 数量已经超过了维护者能实时认真 review 的范围。很多 issue 没有达到质量要求,也没有遵守 CONTRIBUTING.md。更麻烦的是,有些内容是被 agent 没怎么思考就直接丢到仓库里的。

这就是现在很多项目会越来越头疼的问题。

AI 降低了写代码和写 issue 的成本,但没有自动提高提交质量。

甚至很多时候,它会让低质量内容变得更像高质量内容。格式完整,语气礼貌,文字通顺,但问题可能是错的、重复的、不可复现的,或者需要 maintainer 花大量时间去验证。

这对开源维护者来说很危险。

因为每一个看起来「还行」的 issue,背后都可能是一笔隐藏成本。

  • 你要读。
  • 你要判断。
  • 你要复现。
  • 你要回复。
  • 你要解释为什么不接受。

这些都是维护成本。所以 pi 的自动关闭机制,本质上是在给 maintainer 创造缓冲区。

不是所有东西都立刻进入正式 review 流程,而是先被挡在外面,再由维护者按自己的节奏挑出真正值得处理的内容。

这和 Mario 在博客里讲的生活选择是连在一起的。

他不想再过那种孩子哭着说「daddy isn’t here」的生活。Earendil 团队里很多人也都有孩子,公司文化上也重视这一点。

这就解释了为什么 pi 的规则会这么强调边界。

它不是单纯为了控制贡献者,也不是为了显得高冷,而是在保护两件事:

  • 维护者的生活质量。
  • 项目的代码质量。

这两件事如果保不住,开源项目表面再热闹,最后也很容易走向 burnout。

对你的项目有什么参考价值
#

pi 的做法不一定适合所有项目。

如果项目很小,贡献者也不多,这个门槛就是在自嗨。

但如果你的项目已经开始受到 AI 生成 issue、AI 生成 PR、低质量自动化提交的影响,那 pi 的做法确实值得参考。

但不管项目大小,以下可以直接借鉴的点:

  1. 写一份 AGENTS.md

如果你的项目里已经开始使用 AI coding agent,就不要只依赖临时 prompt。

把项目规则写下来。

比如测试怎么跑、哪些命令不能跑、代码风格是什么、哪些目录不能随便改、提交前必须检查什么。

这些内容写进 AGENTS.md,比每次重新解释更稳定。

  1. 把质量要求写具体

不要只写「欢迎高质量贡献」。

应该写清楚什么样的 issue 会被处理,什么样的 issue 会被关闭。

比如:

  • 必须使用 issue template
  • 必须说明问题是什么
  • 必须解释为什么重要
  • bug 必须提供复现方式
  • 大需求先讨论,不要直接上 PR

规则越具体,maintainer 的解释成本越低。

  1. 保护维护者的时间

开源维护不是客服。

不是所有时间都应该是响应时间。

可以明确写出来:自测通过了再找 maintainer review,低质量问题不保证回复。

这听起来有点冷,但比长期消耗到不想维护要好得多。

  1. 建立信任机制

pi 对于新贡献者的 issue 和 PR 默认关闭,但通过了 maintainer 的回复之后就可以解锁。然后这个人的 ID 就会被记录下来,后续提交就不会再被自动关闭了。

最后
#

我看完 pi 的这些规则,最大的感受是:

热门开源项目的稀缺资源可能不再是贡献者,而是 maintainer 的时间。

尤其是 AI Agent 爆发后,贡献的数量可能会越来越多,质量却未必同步提高。

这时候,一个项目真正需要保护的可能不是「欢迎更多人来贡献」,只是「欢迎更多有价值的贡献」。

pi 的规则看起来反直觉,但它至少诚实地面对了这个问题。

  • 它没有假装所有贡献都是好贡献。
  • 也没有假装 maintainer 的时间是无限的。

AI 时代的开源项目,可能需要更多这样的思考和设计,让项目真正保持可持续的维护和高质量的发展。

相关文章

AI Agent,还是 Automation?

·1736 字·4 分钟
在 AI 技术飞速发展的今天,很多公司都在追逐 AI 的浪潮,但我们是否真正理解了“自动化”与“AI Agent”的区别?本文将从实际应用的角度,探讨在什么场景下应该使用确定性的自动化,而在什么场景下应该引入 AI Agent。通过对比分析,我们希望帮助读者在这个全员 AI 的时代,做出更明智的技术选择。