V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ChristopherWu
V2EX  ›  程序员

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

  •  1
     
  •   ChristopherWu · 15h 37m ago · 519 views

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

    你提出的这个场景并没有很有说服力,似乎让 agent 做出重大重构的时候自动更新 agents.md 就够用了。
    ChristopherWu
        7
    ChristopherWu  
    OP
       3h 38m ago
    @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   ·   1076 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 18:06 · PVG 02:06 · LAX 11:06 · JFK 14:06
    ♥ Do have faith in what you're doing.