• 请不要在回答技术问题时复制粘贴 AI 生成的内容
huoru
V2EX  ›  程序员

我做了个工具防止 AI agent 在不熟悉的代码里乱改 — 找几个内测

  •  1
     
  •   huoru · May 6 · 1182 views
    This topic created in 46 days ago, the information mentioned may be changed or developed.

    最近 dogfood 一个工具叫 mainline ,分享一下做这个的真实故事,顺便看 V2EX 上有没有人感兴趣内测。

    起因

    我在公司推团队用 AI 编程,作为 staff engineer 写过内部 guideline 。过程中发现一个反复出现的现象:

    AI agent 写出的代码不是"明显错"——是"看起来合理,但基于错误的历史前提"。

    具体例子:

    repo 里有个半成品的 Redis 队列:redis.go 、TODO 注释、docker-compose 里也配了 redis 。Claude Code 看到这些,合理地想把这个实现完。

    但实际情况——这个团队 3 周前已经放弃 Redis 了,因为 replication 延迟导致 billing 事件重复。这个决定散在某个 PR 评论里、Slack 几条消息、几个工程师脑子里。

    代码搜索能看到 redis 文件——但看不到那个决定

    先尝试过现成方案

    • AGENTS.md / CLAUDE.md 写 not-todo——能写"don't use redis",但只解决你能预判到的。新决定一直在产生,没人持续维护。
    • ADR / RFC——太重,团队不愿意写
    • Wiki / Notion——和代码不同步,过半年 wiki 还说"我们用 Redis"
    • PR description——埋在 GitHub 里,agent 不会主动去翻
    • Agent harness 自带 memory (比如 jcode )——work ,但 lock-in 到那个 harness

    每个都在某些场景下 work——但都没解决"agent 改不熟悉的代码前能拿到团队的真实决策"这个问题。

    做了什么

    mainline 的 thesis:决策记忆应该是 git 一等公民。

    具体设计:

    1. 每个 dev 有自己的 actor log ( refs/heads/_mainline/actor/<id>),append-only 。Bob 、Alice 各自 push 自己的,不冲突。
    2. Sealed intent 通过 git notes 关联 commit 。
    3. SealResult 是结构化字段:what / why / decisions / rejected_alternatives / risks / architectural_claims 。
    4. Agent 改代码前先 mainline context <keywords>——拿到结构化决策,不是一坨 free text 。
    5. 跨人 in-flight 可见——Bob sealed 立刻 push ,Alice fetch 时看到,不等 PR review 才发现冲突。

    设计上反直觉的几个选择

    • 进程式 CLI ,不是 daemon 。Git AI 走 daemon 路线,撞了一堆 macOS sleep / zombie / socket 问题。Git protocol 已经 battle-tested ,不要发明轮子。
    • Intent 级别,不是 line 级别。Line-level attribution 在 formatter / amend / git mv 下天然脆弱。Intent 是任务级别,文本变换不影响 semantic 。
    • Push 模式( agent 主动 seal ),不是 pull / 自动 capture 。自动 capture 听起来好,但产生大量 noise + 假记忆。显式 seal 有 friction ,但保证质量。
    • Append-only ,sealed 后不能改——只能 supersede 。决策档案改了就失真,"当时怎么想"不可篡改才有价值。

    现状

    局限我也直接说

    • 需要 agent 配合主动调用 mainline 。如果你团队没这个习惯,价值发挥不出来。
    • AGENTS.md 重——多了 seal 这一步。
    • 比 jcode 这种 agent harness 内置 memory 的"自动"差,但换来的是数据在 git 、跨 agent 、可移植。
    • 单人 + 好 git 习惯 + 写好 plan ,你不需要 mainline 。

    适合谁试

    • 5+ 人团队,多个 agent ( Claude Code / Cursor / Codex 都行)在同一 repo 工作
    • 跨时间工作多——3 个月前的决定还在影响今天的 PR
    • 已经被"agent 在不该改的地方乱改"坑过

    找内测

    如果上面场景命中你——欢迎私信或评论,我直接给你安装包 + 文档 + 每周一次 30 分钟同步。bug 我会优先 fix 。

    也想听 V2EX 上的反馈——有没有更好的现有解决方案我没想到的?有没有觉得这个方向不对的?

    不卖东西,纯粹想找几个深度用户 + 听不同视角。

    a186232641
        1
    a186232641  
       May 6
    网页是啥 skill 做的,视觉感很好
    huoru
        2
    huoru  
    OP
       May 6
    @a186232641 一个 design 的 skill
    huoru
        3
    huoru  
    OP
       May 6
    😂 怎么都没人回复的
    9684xtpa
        4
    9684xtpa  
       May 6
    读了一遍,我问一个问题,我维护一个 actor log 和让 AI 记录到 md 的成本区别是啥
    huoru
        5
    huoru  
    OP
       May 6
    @9684xtpa actor log 是结构化的,Agent 装了 skill 后自动记录,读取,而且持久化、渐进式记录到 git 上。
    你写到 md 上,就需要结构化、渐进式记录。也不是不能做到,就像 text 也可以用 grep 做数据库一样,为什么还需要 mysql, nosql
    foolishcrab
        6
    foolishcrab  
       May 6
    提出的问题是确实存在的而且存在很久了,并不是 Agent/AI specific 的问题吧。Linus 之前就开喷过了“没看懂为什么这个代码这么写就别他妈改”。

    你提出的这个场景并没有很有说服力,似乎让 agent 做出重大重构的时候自动更新 agents.md 就够用了。
    huoru
        7
    huoru  
    OP
       May 6
    @foolishcrab 同意,这个问题本身不是 AI/Agent 才有的。人类工程师也一直会犯:没理解历史背景就改代码。Linus 那个骂法本质上也是在说这个。

    我觉得 Agent 让它变得更突出,不是因为问题新,而是因为频率和规模变了:以前一个人没看懂乱改,是一个 PR ;现在多个 agent 可以很快在不同分支里重复同样的误解,而且它们不会像团队成员一样通过日常讨论、事故记忆、Slack 背景慢慢“渗透式”获得上下文。

    `AGENTS.md` / rules 文件我觉得适合放稳定规则,比如代码风格、测试命令、架构偏好、不要用某个库之类。

    但很多历史意图不是稳定规则,而是有生命周期的决策记录:

    * 这个方案试过,但因为 X 被 abandoned ;
    * 这个 decision 已经被 superseded ;
    * 这个 legacy path 暂时不能删,但未来某个条件满足后可以删;
    * 这个 migration 有未关闭风险;
    * 这个约束只和某些文件/commit/PR 有关。

    如果都塞进 `AGENTS.md`,它很快会变成一份越来越长、越来越难维护的“历史垃圾桶”。Agent 也很难知道哪条和当前 diff 真的相关。

    所以我不是想替代 `AGENTS.md`,而是想把它分层:

    `AGENTS.md`:长期行为规则。
    Mainline:和具体工程改动相关的 intent record ,可以按当前文件、分支、commit 、in-flight work 检索。

    也就是:不是“让 agent 自动更新一个大说明文档”,而是让它在做重要改动时留下结构化的 why ,未来相关改动前能被取出来。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2666 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 04:42 · PVG 12:42 · LAX 21:42 · JFK 00:42
    ♥ Do have faith in what you're doing.