AI Coding Agent 工程实践

核心判断

AI Coding Agent 的价值不是替代软件工程,而是把软件工程中可自动化的部分大幅加速。越是强的 Agent,越需要更清晰的上下文、更明确的边界、更确定的验证和更强的人类判断。

如果把 Agent 当成无人值守的黑箱工厂,它会快速生成大量代码,也会快速放大误解、重复、过度抽象和架构腐化。如果把 Agent 放进工程流程里,它可以成为高效的协作搭档:读代码、复现问题、生成实现、跑检查、整理证据、提交变更,但人仍然负责架构、风险和最终验收。

主题地图

1. 两种 Agent 观:黑箱自动化 vs 人类主导

AI Coding Agent 的两派:全自动黑箱 vs 人类主导 讨论的是最底层的立场分歧:Agent 是完全自治的软件工厂,还是工程师手里的高效工具。

这里的关键结论是:现在更可靠的路线不是“让 100 个 Agent 在黑灯工厂里连续写三个月”,而是让 Agent 在人类定义的边界内工作。人负责目标、上下文、架构和验收,Agent 负责加速执行。

2. Pi 为什么选择极简

为什么 Pi 选择极简设计 解释了 Pi 的设计哲学。它不试图把所有能力都内置到 harness 里,而是相信模型已经会使用 bash、文件系统、GitHub CLI、tmux 等通用工具。

Pi 的极简不是功能少,而是尽量减少隐藏复杂度。与其把每个能力都包装成特殊工具,不如保留透明、通用、可组合的接口,让用户通过 prompt template、extension,甚至让 Pi 自己修改 Pi 来适配工作流。

3. 日常工作流:从 issue 到 commit

Mario 的日常 AI 编程工作流 展示了一个具体流程:读取 issue、独立复现、分析根因、实现修复、人工 review diff、跑检查、更新 changelog、评论 issue、commit 和 push。

这个流程的重点不是“Agent 自动写完代码”,而是把人的注意力集中在高价值判断上:问题分析是否可信?实现是否过度?边界是否正确?而低价值的机械操作可以交给 Agent。

4. 防止代码库被 Agent 写烂

如何让 Agent 不把代码库写烂 关注质量治理。Agent 常见问题是把简单问题复杂化,生成不必要的 helper、抽象层和重复代码。功能能跑不代表系统健康,代码量增加也不代表工程质量提升。

治理思路是:架构判断不能外包给 Agent;规则不能只写在提示词里,还要落到 lint、typecheck、test、pre-commit 和 CI;任务要小,反馈要快;关键链路要人工审查。

5. 用规则、模板和扩展塑造工作流

Agents.md、Prompt Templates 和自定义扩展 说明了 Pi 如何用轻量机制承载个人工作流。

  • Agents.md 提供项目规则和行为约束。
  • Prompt Templates 固化高频流程,比如处理 issue 或 wrap up。
  • 自定义扩展解决个人协作细节,比如 diff review、issue 状态栏、把上一条回答放进编辑器批注。

这三者对应规则、流程和工具。它们让 Agent 不只是“会写代码”,而是逐渐适配工程师的工作方式。

6. 大代码库的上下文管理

大代码库里如何管理上下文 讨论的是 context engineering。大项目里最重要的不是把所有文件塞进模型,而是让模型看到正确的文件。

如果工程师知道系统边界,就应该直接告诉 Agent 读哪些文件。如果工程师也不了解代码库,就先让 Agent 做探索分析,而不是直接实现。探索阶段可以用会话树或摘要,把分析结果带入后续实现分支,避免上下文失控。

7. Vibe Coding 后的重构

Vibe Coding 之后如何重构 以 Mario 的机器人项目为例:Vibe Coding 很适合快速做原型,但常常产生巨大文件、职责混杂和难以维护的结构。

重构的顺序不是马上让 Agent 重写,而是先恢复理解,再找边界,最后小步抽取。Agent 可以帮忙移动代码,但真正的重构判断在于:哪些职责应该分离,哪些模块边界能承载未来变化。

8. AI 编程时代的软件工程原则

AI 编程时代的软件工程原则 是对整个系列的收束:AI 让代码生成更便宜,但不会让架构、验证、上下文和责任自动消失。

软件工程在 AI 时代更重要,因为 Agent 会放大团队现有工作方式。好的工程文化会被放大成效率,差的工程文化会被放大成更大的技术债。

9. 自修改软件:工具可以被 Agent 继续塑造

自修改软件为什么因 AI Agent 变得可行 讨论 Pi 最有启发的地方:它不只是一个 coding agent,也是一个可以被自己修改的工具。

这件事的关键不是“软件获得自主生命”,而是极简核心、清晰扩展点、Git diff、测试和人工 review 共同构成了一种可控的自修改路径。工具不必一次性内置所有能力,而可以在用户工作流中逐步生长。

10. Agent 不会感到技术债之痛

Agent 不会感到技术债之痛 解释了为什么 Agent 生成代码容易让系统熵增加。人类工程师会被复杂代码库折磨,并因此推动重构;Agent 不会承担未来维护成本,所以更容易为了当前任务继续加逻辑、加分支、加 helper。

这意味着团队必须把“痛感”外部化为复杂度约束、测试、lint、review、架构边界和定期重构,而不是期待 Agent 主动还技术债。

11. 非工程师参与工程流程之后,真正稀缺的是护栏

非工程师参与工程流程之后,真正稀缺的是护栏 关注 AI 带来的组织变化:PM、设计、市场、销售都能让 Agent 生成 demo、页面和 PR。

这很有价值,但也会让原型、demo、实验代码和生产代码边界变得模糊。新的工程流程需要 sandbox、owner、分级 review 和意图说明,让非工程师能参与创造,同时把风险拦在生产系统之外。

12. 为什么 AI 时代要慢下来

为什么 AI 时代要慢下来 不是反对 AI 加速,而是反对只加速代码生成。软件交付还包括需求澄清、架构判断、验证、上线和维护。

成熟的节奏应该是:低风险、机械性、可验证的地方加速;高风险、结构性、不可逆的地方减速。否则生成越快,返工越多。

13. MCP 与 CLI 的工具集成取舍

MCP 与 CLI:AI 工具集成的两种路线 总结了访谈中关于 MCP 和 CLI 的讨论。MCP 适合企业权限、审计和平台化集成,但也会带来上下文膨胀、工具质量不稳定和可组合性下降。

CLI 更透明、更稳定、更符合 Unix 管道哲学,也更接近工程师已有工作流。实践中不需要站队,而是按场景选择最少、最透明、最可靠的工具接口。

14. Prompt Request:先审意图,再审代码

Prompt Request 比 Pull Request 更适合 AI 协作 讨论 AI 协作中的 review 前移。与其让维护者直接面对大段 AI 生成代码,不如先提交 prompt、上下文、约束和验收标准。

这让团队先审问题表达和实现意图,再由工程 owner 在正确上下文中生成或改写代码,最后才进入传统 PR、测试和 review。

一条实践主线

这组文章可以串成一条工作流:

  1. 先承认 Agent 不是黑箱工厂,而是人类主导下的工程工具。见 AI Coding Agent 的两派:全自动黑箱 vs 人类主导
  2. 选择足够透明、可控制、可扩展的 harness。见 为什么 Pi 选择极简设计
  3. 让工具通过扩展点和自修改能力适配个人工作流,而不是把所有能力塞进核心。见 自修改软件为什么因 AI Agent 变得可行
  4. 把高频流程模板化,让 Agent 处理重复操作。见 Mario 的日常 AI 编程工作流
  5. 当非工程师参与软件表达时,先用 sandbox、owner 和 Prompt Request 保护生产流程。见 非工程师参与工程流程之后,真正稀缺的是护栏Prompt Request 比 Pull Request 更适合 AI 协作
  6. 用规则、检查和 review 控制复杂度。见 如何让 Agent 不把代码库写烂
  7. 把技术债痛感外部化为指标、测试、边界和重构机制。见 Agent 不会感到技术债之痛
  8. 用 Agents.md、Prompt Templates 和扩展沉淀协作习惯。见 Agents.md、Prompt Templates 和自定义扩展
  9. 面对大代码库,先管理上下文,再谈实现。见 大代码库里如何管理上下文
  10. 面对 Vibe Coding 产生的混乱,先恢复理解,再逐步重构。见 Vibe Coding 之后如何重构
  11. 工具集成优先选择简单、透明、可组合的接口,再按企业治理需要引入 MCP。见 MCP 与 CLI:AI 工具集成的两种路线
  12. 在高风险决策点主动慢下来,避免把生成速度变成返工速度。见 为什么 AI 时代要慢下来
  13. 最后把这些收束为工程原则:人负责边界和责任,Agent 负责加速执行。见 AI 编程时代的软件工程原则

和已有主题的连接

暂时结论

AI Coding Agent 的成熟使用方式,不是更激进地追求全自动,而是更清醒地划分责任:

Agent 负责扩大执行能力,人负责控制系统方向。

真正稀缺的不是代码生成速度,而是上下文组织能力、架构判断能力、验证设计能力和复杂度治理能力。

⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: ‘Decompress current Excalidraw file’. For more info check in plugin settings under ‘Saving’

Excalidraw Data

Text Elements

Member = Human | Agent;同一 Stage Role 可在人与 Agent 之间 handoff / takeover
Autonomous:Agent 在 Policy / Evidence Gate 内自动处理;Concern / 越界再切换

Harness Engineering / 控制机制摘要

把业务上下文、阶段状态、工具边界、质量评估、人工审批和运行证据装配成 Agent 的工作环境

Context

Memory

Story / Scenario

State

Plan

Desk Check

Tool

Pair

Q1–Q4

Evaluator

Permission

Stage Authority

Logs / Metrics

Trace

结构化上下文 · 不可变来源 · 可审查计划 · 最小权限 · 自动验证 · 人工升级 · 全程留痕

知识流贯通上下游;Evidence 组织迭代;质量四象限定义证据;Harness 保证它们可执行、可验证、可追踪

AI 扩大跨层执行带宽,让“组件内全栈”更可行
但不消除交付边界、业务上下文、质量证据与责任
Full Stack 是执行能力;Full Stream 是交付模型

Agent 视角:1 Human + N Agents 横向扩展

目标:通过多 Agent 并行扩大个人交付带宽

多 Agent 执行拓扑

Human Authority

意图 · 批准 · 合并 · 问责

Planner

方案

Builder

实现

Tester

验证

Reviewer

审查

1 : N 执行委派

能够发挥作用的受限前提

任务可切分

边界清晰 · 低耦合

结果可验证

测试 · Diff · Review

承诺:并行 Agent → 扩大执行带宽 → “一人虚拟团队”

局限:执行扩展了,Stage Authority 仍收敛到 Human

Agent 执行层 / 可横向扩展

Plan / Code × N

Tests / Review × N

Reports / Diffs × N

N : 1 汇聚

Central Human Gate / 单点授权边界

所有 Agent 的验证 · 批准 · 发布
异常处置与最终决定都汇聚于此

Agent 没有独立 Stage Assignment,权限全部回收至 Human

为什么 1 Human + N Agents 仍然走不通

• N 个 Agent 只是执行分支,Stage Authority 没有分布

• 所有输出仍汇聚为 1 人的验证、审批与异常处理

• 并行越快,Human 的上下文切换与决策负担越大

• Reviewer 仍受同一中心指挥,独立制衡不足

• 自动化无法越过 Central Human Gate,吞吐最终受单人限制

问题不在 Agent 不能负责,而在权威全部收敛到一个 Human
应将 Human / Agent 都建模为 Workspace Member
按 Stage Assignment 与 Policy 分配处理权

AI 扩展执行
→ 1 + N Agents

AI 对决策、设计、开发、Review 与测试的加速不均,局部提速反而放大等待、切换与返工

不均匀加速(示意):需求 1.2× · 设计 1.5× · 代码 5× · Review / Test 1.3×

Product
需求决策 · 1.2×

信息 · 取舍
优先级

Agent Development
代码生产 · 5×

PR · Change · Test

×

Review /
Merge · 1.3×

Context
Gate

×

Test /
Release · 1.3×

Risk · Value
Gate

Value

Learn

上游饥饿|成熟决策 / 设计
供给速度 < Agent 消费速度

下游拥堵|PR / Tests 生成
速度 > Review / 验证承接

歧义越晚发现,返工半径越大
需求 → 设计 → 代码 → 测试 / 发布

可观察后果

上游饥饿 · 下游拥堵
WIP / Review Age 增长
等待 · 上下文切换 · 合并冲突
晚发现歧义 → 系统返工

系统判断

局部产能 ↑ ≠ 系统吞吐 ↑
吞吐由最窄 Stage Gate 决定
Process Time 下降
不代表 End-to-end Lead Time 下降

设计目标:不再让 Agent 更快,而是让变化顺畅穿过整个团队
成熟输入 · WIP 控制 · Gate 容量 · Evidence 反馈 · Handoff
→ 右侧:多人协作交付平台

共享 Stage Board 组织多人协作;Human / Agent 按角色、权限与证据在每个阶段介入、接力与接管

1 · 谁参与 / Participants & Assignment

Human / Agent 作为同一 Member,通过 Role Slot 进入阶段

Human Members

Product · Design · Engineering · QA · Operations

Agent Members

Research · Analysis · Coding · Test · Review · Ops

Role Assignment / Access Policy

Role Slot · Capability · Authority · SoD
Lease · Escalation · Human Takeover

2 · 如何协作

Collaborative Stage Board / Human + Agent at Every Stage

按 Role Slot 进入 · 可并行 / 接力 · Evidence Gate 退出 · Handoff / Escalation

0 · Probe

Signal / Candidate

1 · Kickoff

Story Ready

2 · Understand

Scenario / Model

3 · Tasking

Approved Plan

4 · Pair

Quality / Increment

Stage State 共享当前位置 · Assignment 决定谁处理 · Evidence 决定能否进入下一阶段

3 · 如何交接

Shared Evidence & Handoff

提交、决策、版本、产物与交接都携带 Actor / Role / Stage / Revision

Shared Evidence Feed / 团队共享证据

Submission · Decision · Revision · Artifact · Concern · Handoff
下一阶段消费证据,而不是重新恢复聊天上下文

执行能力来自上方 Harness

Context · Plan · Tool · Q1–Q4 · Permission · Logs / Metrics

平台职责边界

只编排:谁在何阶段介入 · 如何交接证据 · 何时升级 / 人工接管
不重复展开:Git / CI / Runtime / Registry 等实现细节

展开为 Workspace Protocol

Design
体验判断 · 1.5×

路径 · 边界
异常状态

H · Product · Ops

A · Research · Feedback

H · Product Owner

A · Story · Context

H · Product · Design

A · Analysis · Model

H · Architect · QA

A · Plan · Test

H · Engineer · Reviewer

A · Code · Test

5 · Showcase

Accept

H · Product · QA

A · Evaluate · Explore

6 · Respond

Knowledge / Probe

H · Ops · Support

A · Observe · Probe

tcpfZWhJ: 为什么要成为全流程序员,而非全栈程序员?

ztTkapjx: 设计流动摩擦:AI 原生团队的核心能力

vTRkeHWu: 设计流动摩擦:AI 原生团队的核心能力

HSIRFLfO: 设计流动摩擦:AI 原生团队的核心能力

aIZQFxvW: 设计流动摩擦:AI 原生团队的核心能力

IBwto6CT: 设计流动摩擦:AI 原生团队的核心能力

9EDUaxZK: 设计流动摩擦:AI 原生团队的核心能力

xp7VQXht: 设计流动摩擦:AI 原生团队的核心能力

NaEGkGV6: 设计流动摩擦:AI 原生团队的核心能力

rq21Ozgr: 设计流动摩擦:AI 原生团队的核心能力

828Fq0kW: 设计流动摩擦:AI 原生团队的核心能力

L30gbyil: 设计流动摩擦:AI 原生团队的核心能力

LFuJ3cyk: 设计流动摩擦:AI 原生团队的核心能力

1wZD3M6D: 设计流动摩擦:AI 原生团队的核心能力

wDNL1L50: 设计流动摩擦:AI 原生团队的核心能力

DJ9X2I4T: 设计流动摩擦:AI 原生团队的核心能力

luwCzLmt: 设计流动摩擦:AI 原生团队的核心能力

LMVhXyzc: 设计流动摩擦:AI 原生团队的核心能力

Fdd7t8Gi: 设计流动摩擦:AI 原生团队的核心能力

GADr5cne: 设计流动摩擦:AI 原生团队的核心能力

48GXAa2Q: 设计流动摩擦:AI 原生团队的核心能力

igGkTaHf: 设计流动摩擦:AI 原生团队的核心能力

r45ztUcC: 设计流动摩擦:AI 原生团队的核心能力

qCGoHBpp: 设计流动摩擦:AI 原生团队的核心能力

j8iqyABI: 设计流动摩擦:AI 原生团队的核心能力

gtMjQZ4z: 设计流动摩擦:AI 原生团队的核心能力

5S1JmLwZ: 设计流动摩擦:AI 原生团队的核心能力

FNmbIvPQ: 设计流动摩擦:AI 原生团队的核心能力

E14V2NiQ: 设计流动摩擦:AI 原生团队的核心能力

loRMzdEk: 设计流动摩擦:AI 原生团队的核心能力

sGW5aX6b: 设计流动摩擦:AI 原生团队的核心能力

f55W5WQP: 设计流动摩擦:AI 原生团队的核心能力

69hqoanA: 设计流动摩擦:AI 原生团队的核心能力

flowDsgR: 设计流动摩擦:AI 原生团队的核心能力

flowDsgA: 设计流动摩擦:AI 原生团队的核心能力

Irdx0IAp: 知识工程师

7szM0utd: 为什么要成为全流程序员,而非全栈程序员?

561gH4it: 设计流动摩擦:AI 原生团队的核心能力

l86KUBIE: 设计流动摩擦:AI 原生团队的核心能力

uRI2rsLT: 设计流动摩擦:AI 原生团队的核心能力

C1IDTtud: 设计流动摩擦:AI 原生团队的核心能力

2ndHpED7: 设计流动摩擦:AI 原生团队的核心能力

TVZmzjyN: 设计流动摩擦:AI 原生团队的核心能力

SsvWCuEz: 设计流动摩擦:AI 原生团队的核心能力

Yzo8DAph: 设计流动摩擦:AI 原生团队的核心能力

kCzEZTYs: 设计流动摩擦:AI 原生团队的核心能力

Ean8bBdN: 设计流动摩擦:AI 原生团队的核心能力

IdjLjwpm: 设计流动摩擦:AI 原生团队的核心能力

tt4n6J7I: 设计流动摩擦:AI 原生团队的核心能力

PoAPZV6c: 设计流动摩擦:AI 原生团队的核心能力

RdK1C4GJ: 设计流动摩擦:AI 原生团队的核心能力

vHry7joH: 设计流动摩擦:AI 原生团队的核心能力

ImfIv2hn: 设计流动摩擦:AI 原生团队的核心能力

qSK1K2yp: 设计流动摩擦:AI 原生团队的核心能力

B8kwcREp: 设计流动摩擦:AI 原生团队的核心能力

kehhMlcI: 设计流动摩擦:AI 原生团队的核心能力

jSNRDyfo: 设计流动摩擦:AI 原生团队的核心能力

U5Ea8AFo: 设计流动摩擦:AI 原生团队的核心能力

RJRtadhR: 设计流动摩擦:AI 原生团队的核心能力

flowDsgT: 设计流动摩擦:AI 原生团队的核心能力

flowDsgD: 设计流动摩擦:AI 原生团队的核心能力