The Intent Debt

本文指出,技术债务、认知债务和意图债务中,意图债务(未外化的目标、约束和理由)是AI代理无法帮助偿还的唯一债务,在AI代理大规模使用的时代其成本急剧上升,因此必须主动外化意图以降低债务。

Technical debt lives in your code. Cognitive debt lives in your head. Intent debt lives in the artifacts you may have never wrote: the goals, constraints, and rationale for why the system is the way it is. If you’re lucky, some of this exists scattered in team documents or discussions, but it’s likely incomplete. It’s the one kind of debt your agents can’t pay down for you, and agentic engineering makes it the most expensive.

技术债存在于你的代码中。认知债存在于你的脑海里。意图债存在于那些你可能从未写下的产物里:系统的目标、约束条件以及它为什么是现在这个样子。如果你运气好,这些信息零星散落在团队文档或讨论中,但很可能残缺不全。这是唯一一种你的智能体无法替你还清的债务,而智能体工程让它变成了最昂贵的一种。


Three places debt can live

债务可以存在的三个地方

Margaret-Anne Storey’s Triple Debt Model is a clean way to think about software health. The three models of debt are technical, cognitive, and intent.

Margaret-Anne Storey 的Triple Debt Model是思考软件健康状况的一种简洁方式。这三种债务模型分别是技术债务、认知债务和意图债务。

Technical debt lives in the code. It’s the accumulation of implementation choices that make the system harder to change later: the tangled module, the shortcut you took under deadline, the abstraction that leaked. We’ve understood this one for decades. You feel it coming through slow builds, fragile tests, and the dread of touching one particular file.

技术债务就存在于代码之中。 它是实现选择的累积,这些选择让系统日后更难更改:混乱的模块、你在截止日期前采取的捷径、泄漏的抽象。我们对此已经理解了几十年。你从缓慢的构建、脆弱的测试、以及对触碰某个特定文件的恐惧中,都能感受到它。

Cognitive debt lives in people. It’s the erosion of shared understanding, the gap between how much code exists and how much any human understands. I’ve been calling this comprehension debt. It builds up when the system grows faster than the team’s mental model of it. Your code can be pristine and you can still carry crippling cognitive debt, because nobody understands the pristine code either.

认知债务存在于人的头脑中。 它是共享理解的消蚀,是代码总量与人类所能理解的部分之间的差距。我一直将其称为理解债务。当系统的增长速度快于团队对它的心智模型时,这种债务就会累积。你的代码可以完美无瑕,但你仍可能背负沉重的认知债务,因为那些完美无瑕的代码同样无人理解。

Intent debt lives in artifacts. It’s the absence or erosion of the externalized rationale, goals, and constraints that explain why the system is the way it is. The key word is externalized. The rationale has to be written down where a teammate, a future you, or an agent can read it, not held in your head. When intent debt runs high, the system drifts from what you meant it to do, and nobody can say when it diverged or why.

意图债务存在于工件之中。 它是对解释系统现状的外部化理据、目标和约束的缺失或侵蚀。关键词是外部化。理据必须写入文档,让队友、未来的你或智能代理能够查阅,而不能只停留在你的脑海中。当意图债务高企时,系统就会偏离你的本意,并且没有人能说清它是何时偏离、又是因为什么。

These three are independent, which took me a while to internalize.

这三者是独立的,我花了一段时间才内化这一点。

You can have low technical debt and high intent debt. You can understand a system completely yourself (no cognitive debt for you) while its intent exists nowhere outside your skull (enormous intent debt for everyone else).

你可以拥有低技术债务和高意图债务。你完全可以自己理解一个系统(对你来说没有认知债务),而其意图只存在于你的脑海里(对其他所有人来说则是巨大的意图债务)。

From the inside they feel alike, but each one bills you separately.

它们内在的感觉相似,但每一个都会单独向你收费。

Why intent debt is the one agents can’t help with

为什么意图债务是代理无法协助解决的问题

AI generates code faster than ever, which makes technical debt cheaper to take on and cheaper to pay down. Point an agent at a tangled module and it’ll refactor it.

AI 生成代码的速度前所未有地快,这让技术债务的积累和偿还都变得更便宜。将 AI 代理指向一个混乱的模块,它就会对其进行重构。

Cognitive debt recovers too, more easily than most engineers expect. When you don’t understand a chunk of the system, you ask the agent to explain it. You rebuild part of the lost mental model on demand, because the code still exists and the model can read it back to you.

认知债务同样可以恢复,而且比大多数工程师预想的要容易得多。当你不理解系统中的某一部分时,你让智能代理为你解释。你按需重建部分丢失的心智模型,因为代码依然存在,而模型可以将其读回给你。

Intent is different. An agent can’t generate intent, because intent is the one input that has to come from you. A model can infer a plausible rationale from the code, the same way you can guess why a previous engineer did something. A guess about intent isn’t the intent. The model doesn’t know whether that 300ms debounce was a deliberate UX decision, a benchmark result, or a number someone typed once and never revisited. It will invent a confident-sounding reason, which is worse than admitting it doesn’t know.

意图是不同的。智能体无法生成意图,因为意图是唯一必须由你提供的输入。 模型可以从代码推断出一个看似合理的理由,就像你可以猜测之前的工程师为什么那样做一样。对意图的猜测并非意图本身。模型并不知道那个300毫秒的防抖是刻意为之的UX决策,还是一个基准测试结果,或者是某人随手键入后从未再检查的数字。它会编造一个听起来很自信的理由,这比承认自己不知道更糟糕。

Of the three debts, intent debt is the only one where the agent can’t bail you out. It can write the code and restore your comprehension. The why is the one thing it can only fabricate.

在这三种债务中,意图债务是智能体唯一无法帮你脱身的。它能编写代码并恢复你的理解力,唯独为什么这件事,它只能凭空捏造。

Agents make the un-written cost compound much faster

智能体让隐性成本加速复利

Teams got away with high intent debt for years because we carried it in our head and old docs.

多年来,团队能够承受住高昂的意图债务,是因为我们一直把它们记在脑海中或保存在旧文档里。

When a new human joined a team, you didn’t write everything down, because they picked up intent over time: hallway conversations, code review comments, “oh, we don’t do it that way because of an incident in 2023.” Knowledge moved person to person and built up. The engineer who’d been there four years was the intent documentation, expensive and lossy, but it worked.

當新人加入團隊時,你不會把所有事情都記錄下來,因為他們會隨著時間慢慢領會其中的意圖:走廊上的隨口交談、代碼審查時的點評、「哦,我們不那麼做,是因為2023年出過一次事故。」知識就這樣通過人與人之間的交流積累起來。那位待了四年的工程師,本身就是一本記錄著意圖的活文檔,成本高昂且信息容易失真,但確實管用。

Agents break that model. Bringing agents onto a team doubles its size overnight with junior people who have no long-term memory. An agent starts most sessions cold. It carries none of the tacit intent your humans built up over years. Whatever you haven’t externalized into an artifact it can read, it doesn’t have.

智能体打破了这种模式。将智能体引入团队,就像一夜之间将团队规模翻倍,却加入了一群没有长期记忆的初级员工。智能体在大多数会话开始时都是冷启动状态。 它不携带人类多年积累的任何隐含意图。任何你未能外化为它可读取的产物的东西,它都无从拥有。

That changes the economics of not writing things down. Un-externalized intent used to cost you once in a while, at onboarding or after someone left. Now you pay it every session, multiplied by every agent you run.

这改变了不把事情写下来的经济成本。未被外化的意图过去偶尔会让你付出代价,比如新人入职或有人离职时。现在你每次会话都要付出代价,并且随着你运行的每个智能体而倍增。

Picture the 20 agents you’re so excited to parallelize. Each one is a teammate who has never met you, can’t read your mind, and will fill any gap in your intent with a plausible guess. The orchestration tax I wrote about is partly an intent-debt tax. Much of what makes managing many agents exhausting is re-supplying the intent you never wrote down.

想象一下你满心期待要并行化的那 20 个代理。每个代理都是从未见过你、不会读心术的队友,会用自以为合理的猜测来填补你意图中的任何空白。我曾写过的编排税,一部分就是意图债务税。管理众多代理之所以让人疲惫,很大程度上是因为要反复提供那些你从未写下来的意图。

The other half of the comprehension debt argument

理解债务争论的另一半

When I wrote about comprehension debt, I made a point I want to revisit, because intent debt sharpens it.

当我在关于comprehension debt的文章中提出某个观点时,我现在想重新回顾它,因为意图债务让这一观点变得更加尖锐。

I argued that detailed specs aren’t a complete answer. Translating a spec into working code involves a huge number of implicit decisions no spec ever captures, and a spec detailed enough to be the program is the program in a slower language. I still believe that.

我曾论证过,详尽的规范并非完整答案。将规范转化为可运行的代码,涉及大量规范从未能捕捉到的隐式决策,而一份详细到足以成为程序本身的规范,不过是用一种更慢的语言写成的程序。我至今仍坚信这一点。

Intent debt is the complementary truth.

意图债务是互补的真理。

Being unable to capture all intent is no license to capture none of it. The implicit decisions an agent now makes on your behalf, the ones a spec will never enumerate, are the decisions whose rationale evaporates if you don’t record at least the load-bearing ones. You can’t write down everything.

无法捕捉全部意图,并不等于可以连一点意图都不捕捉。智能体现在代你做出的隐性决策,那些规范永远无法逐一列举的决策,正是若你至少不记录下那些起关键作用的决策,其理由便会消散的决策。你无法将一切悉数写下。

You do have to write down the why behind the choices that would be expensive to get wrong, because nobody will reconstruct those later.

你必须将那些一旦出错代价高昂的选择背后的原因写下来,因为日后没人会重新理清它们。

Comprehension debt warns you not to trust that code is correct because it exists.

理解债警示你不要仅仅因为代码存在就相信它是正确的。

Intent debt warns you not to trust that the reason survives because the code does. Code is the answer; the intent was the question it was meant to solve. AI is brilliant at producing answers to questions you forgot to write down.

意图债务警告你,不要因为代码还在,就相信其背后的理由也会一同存续。代码是答案;意图是它原本要解决的那个问题。AI 特别擅长为你忘记记录下来的问题生成答案。

What high intent debt looks like

高意图债务的具体表现

Intent debt rarely shows up as friction. It shows up as a particular kind of helplessness.

意图债务很少表现为摩擦。它表现为一种特定的无助感。

  • An agent “fixes” a bug by deleting a guard clause, and nobody can say whether that guard was load-bearing or leftover, because no doc or commit message ever recorded why it was there.
  • A refactor changes a behavior users depend on. The review passed because the diff looked clean and the tests were green, but the tests only encoded the previous behavior, never the intent.
  • You ask why two services talk over a queue instead of a direct call, and the honest answer is “an agent suggested it and it seemed fine.” That answer is intent debt, already accruing interest.
  • 一个智能体通过删除一个守卫子句“修复”了一个缺陷,却没人能说清那个守卫子句到底是关键性的还是遗留的,因为没有任何文档或提交信息记录过它为什么存在。
  • 一次重构改变了用户依赖的行为。审查能通过,只因差异看起来整洁、测试全绿,而这些测试只编码了之前的行为,从未体现意图。
  • 你问为什么两个服务通过队列而不是直接调用通信,诚实的答案是“一个智能体建议这样做,看起来也还行”。这个回答就是意图债务,已经开始产生利息了。

If you’ve felt the cognitive surrender version of this, defending a design choice you can’t reconstruct, intent debt is the team-scale, written-down version of the same hole.

如果你曾体会过这种认知投降式的感受——为自己无法重构的设计决策辩护——那么意图债务就是同一个漏洞在团队层面、被记录在案的版本。

Surrender is about your own posture in the moment. Intent debt is what a hundred of those moments leave in the repo for the next person and the next agent to inherit.

臣服,是你在此刻自己的姿态。意图债务,则是成百个那样的时刻在仓库中遗留的负债,由下一个人和下一个智能体去继承。

Paying it down: externalize intent as a first-class artifact

清偿债务:将意图外化为一等制品

Almost everything I’ve been writing about for the last few months turns out to be intent-debt management. I didn’t have the word for it. The move is the same each time: take the intent out of your head and put it somewhere an agent can read.

几乎我过去几个月写下的所有东西,最终都归结为意图债务管理。我之前没有这个词来形容它。每次的做法都是一样的:把意图从你的头脑中拿出来,放到一个代理可以读取的地方。

Write the spec for the intent, not the implementation. A good spec captures the goals, the constraints, the non-negotiables, and an explicit definition of done (fast, accessible, secure, delightful, beyond “functionally correct”). The spec carries the intent the code can’t carry on its own.

**为意图撰写规范,而非为具体实现。**一份好的规范应捕捉目标、约束、不可妥协之处,并明确界定完成的定义——即快速、无障碍、安全、令人愉悦,超越“功能正确”。规范承载着代码自身无法承载的意图。

Treat AGENTS.md as your intent ledger, not your config. It’s why I keep saying stop using /init. An auto-generated file describes what the code is. An intent file describes what the team means: the conventions, the “we don’t do it this way because,” the constraints invisible in any single file. Agents can’t infer that, and they need it most.

把 AGENTS.md 当作你的意图账本,而非配置。 这就是为什么我一直说 stop using /init。自动生成的文件描述的是代码是什么。意图文件描述的是团队的含义:惯例、“我们不这样做是因为”,以及在任何单一文件中都不可见的约束。智能体无法推断这些,而它们最需要这些。

Capture decisions where they happen. Lightweight decision logs (ADRs) are pure intent-debt paydown. Recording why at the moment you decide costs almost nothing. Reconstructing it eight months later, after the person who knew has moved teams, costs a fortune. Agents have made logging cheaper than ever, so the old excuse is gone.

在决策发生的当下就记录下来。 轻量级的决策日志(ADR)本质上是在偿还意图债务。在决策当下记录为什么几乎零成本。八个月后,等那位知情者已经调离团队,再去重建这些原因,代价高得惊人。智能体已让日志记录变得前所未有地便宜,所以过去的借口已不复存在。

Make the learning loop write intent back down. I’ve argued for self-improving agents that update a learnings file at the end of a session. The same loop is an intent-debt pump running in reverse: every mistake whose root cause you record, every “we tried X and it didn’t work because Y” is intent that would otherwise have lived only in your memory of a bad afternoon.

讓學習循環將意圖重新記錄下來。 我曾經主張過使用自我改進的代理,在會話結束時更新一份學習記錄檔案。同樣的循環也是一個反向運轉的意圖債務泵:你記錄的每個錯誤的根本原因,每次“我們嘗試了 X,但因為 Y 失敗了”的記錄,都是意圖——這些意圖原本只會存在於你對一個糟糕下午的記憶中。

None of these are new tools. They’re the discipline of refusing to let the why exist only in your head, in an era where your head is no longer where most of the work happens.

这些都不是新工具。它们是一种自律:拒绝让为什么只存在于你的脑海里——在这个大脑已不再是大部分工作发生之地的时代。

Where the value moved

价值去向

For a long time, the scarce, valuable thing in software was the ability to produce a correct implementation. Code was expensive, so we optimized for writing it.

长久以来,软件中稀缺而珍贵的是交付正确实现的能力。代码编写成本高昂,因此我们着力优化编写过程。

AI made code cheap, and comprehension is recoverable. Intent, the goals and constraints and reasons, is the one input that still has to originate with a human. It’s also the one we’re worst at externalizing, because for decades we got away with carrying it in our heads.

AI 让代码变得廉价,理解也可重新获得。意图——即目标、约束和理由——是唯一仍需源自人类的输入。这也是我们最不擅长外化的东西,因为几十年来我们一直将其装在脑子里,竟也相安无事。

That worked when the team was a handful of people who could absorb intent over years of shared context. It does not work when half the team is agents that start every session as strangers.

那套做法在团队只有寥寥几人、可以通过多年共享的上下文潜移默化来领会意图时还管用。当团队里一半是智能体,每次会话都像陌生人一样从头开始时,就行不通了。

Technical debt makes your system hard to change. Cognitive debt makes it hard to understand. Intent debt makes it hard to know whether the system still does what you wanted, and it’s the only one of the three your agents can’t pay back for you. That part stays with you. Write down the why, because it’s becoming the most valuable thing you can leave in the repo.

技术债务让你的系统难以变更。认知债务让它难以理解。意图债务则让你难以判断系统是否仍在按你当初的意图运行,而它是三者中唯一你的智能体无法替你偿还的债务。这部分责任只能由你承担。请把“为什么”写下来,因为这正逐渐成为你能留在仓库中最有价值的东西。