ARTICLE · 1294007
斯坦福 AI 编程课第 2 讲:顶尖编程 agent 的 Harness
这是「斯坦福 AI 编程课」系列的第 2 篇。课程是 Stanford 2026 年秋季的 CS146S《The Modern Software Developer》,讲师是 Mihail Eric。课程每周两次:周二讲师上课,周四多半请业界嘉宾。我按课件逐页讲,一页不跳。
这一篇讲的是第 2 次课,第 1 周的周四,9 月 24 日,讲师课。课表标题是 How state-of-the-art coding agents are designed: deep dive into the system prompts that define the agent,深挖定义 agent 的系统提示词。课件一共 17 页,页面上没有印页码,本文的页码按 PDF 算。
上一讲用 200 行代码写了一个 Claude Code:一个循环,把消息和工具交给模型,执行工具,再交回去。这一讲打开真正的 Claude Code 对照:循环还是那个循环,但包在模型外面的 harness 厚了一整圈。课件把这圈 harness 拆成八个组件,一个一个讲,最后给三条设计原则。
课程官网在这一讲下面挂了两样东西:课件,和一个 Prompts 文件夹,里面是六份真实的提示词示例,对应六个组件。本文末尾给了链接。
一、通知(第 1–2 页)
期末项目规格发布,四家 agent 提供商送额度。
第 1 页是封面,课程名 The Modern Software Developer,CS146S,Stanford University,Fall 2026,讲师 Mihail Eric。页脚是课程网址 themodernsoftware.dev,之后每一页都有这条红色页脚。

第 2 页是通知。期末项目的规格发布了:各编程 agent 提供商给课程提供使用额度,列了四家:Claude,Factory,X.AI,Devin。每队允许在常规队友之外多加一名成员,原话是「in addition to a swarm of coding agents」,除了你那一群编程 agent 之外。开源贡献的细节下周讲。课程申请 9 月 27 日截止。

二、从 200 行到顶尖产品(第 3–5 页)
同一个循环,顶尖产品的 harness 厚了一整圈。
第 3 页是节隔页,标题 The Anatomy of a Modern Coding Agent,现代编程 agent 的解剖。

第 4 页是回顾,一张图。上一讲写的那类 agent 循环:用户输入进去,循环里模型回应、调工具,工具结果回给模型,直到给出最终回答。图上一个放大镜聚焦循环内部,标注的是一次次的工具调用。这页只此一图,把上一讲收了个尾。

第 5 页只有一行标题 Enter a state-of-the-art coding agent,进入一个顶尖编程 agent。页面主体是一张 Claude Code 的终端截图:用户问「agent 循环在底层长什么样」,agent 正在读文件作答,底栏是退出计划模式和向用户提问等按钮。讲师用这一页对照第 4 页:问题还是同一个,产品的答案厚了很多。

三、harness 的八个组件(第 6–15 页)
harness 设计是编程 agent 最重要的问题之一。八个组件:系统提示词,配置文件,工具清单,计划模式,子 agent,技能,钩子,压缩。
第 6 页亮出本讲主线:现代的 harness 复杂得多,而 harness 设计是编程 agent 最重要的问题之一。组件清单列了八项:系统提示词,自定义配置文件(AGENTS.md 等),工具清单,计划模式,子 agent,技能,钩子,压缩。后面八页一项一项过。

第 7 页是一张总图,把八个组件放进完整架构:用户在左边,中间是 agent harness,系统提示词和七项组件在里面,底下是模型和工具,右边还是用户。八组件包着模型,用户对着 harness 说话。

第 8 页讲工具清单。精简但强的能力,覆盖搜索,shell 命令,agent 任务。以 Claude 为例约 40 个内建工具。MCP 工具也可用,同样载入上下文。工具的描述,名字,完整签名都是提示词的一部分。
补充MCP(Model Context Protocol)是 Anthropic 在 2024 年提出的开放协议,让 agent 用统一方式接入外部工具和数据源。上一讲的 200 行 agent 只有一个 read_file 工具;真实产品的工具清单是要进上下文的,所以每个工具的描述怎么写、给多少,都是设计决定。

第 9 页讲系统提示词,本讲的标题主角。系统级蓝图,定义三样:harness 和行为,护栏,环境(这是什么系统,我们在哪)。

第 10 页讲 agent 配置文件。CLAUDE.md,AGENTS.md 这类用户级定制,优先级高于其他指令。

第 11 页讲计划模式。一个明确的工具,提示 agent 为一次改动做规格说明。可以继续向用户提问,把需求澄清清楚再动手。

第 12 页讲技能。技能是一份写下来的流程,交给 agent 执行:一段提示词,带工具调用或本地脚本调用。可以由 agent 主动调起,也可以显式点名调用。

第 13 页讲子 agent。由一次明确的工具调用发起;在会话内拿一份全新上下文,带自定义系统提示词;可以并行干活(token 成本也上去);最终结果传回父 agent。

第 14 页讲钩子。在 harness 生命周期的不同节点插入的提示词或代码片段。需要做事前事后处理时特别有用。课件注明 best practices 后面讲。

第 15 页讲压缩。上下文快满时,把这次运行的关键点合并成一份摘要,用摘要替换现有历史。手动或自动触发。压缩有损,课件提醒你可能想自己改造一套。

四、三条设计原则(第 16–17 页)
更少更强的工具,盯住上下文窗口,让提示词容易改。
第 16 页给有效 harness 的三条原则。一,简单:更少但更强的工具更好,课件举例 sql,bash 这类。二,盯着上下文窗口:避免 dumb zone(笨区),小心工具膨胀;最优的上下文工程后面专门讲。三,提示词的内容和长度会演化:让它们容易改。

第 17 页只有 Questions? 一词,本讲结束。

最后
这一讲的要点。
上一讲的 200 行代码和这一讲的顶尖产品,循环是同一个。差出来的都在 harness 上:系统提示词定义行为和护栏,配置文件带用户偏好,工具清单进上下文,计划模式先写规格,子 agent 并行干活,技能沉淀流程,钩子做前后处理,压缩对抗上下文上限。
工具清单本身就是提示词的一部分。40 个工具的描述、名字、签名全部占上下文,所以「更少更强的工具」不是洁癖,是省上下文。
课件给的 Prompts 文件夹有六份真实示例,对应六个组件:system_prompt,tool_list,config_files,plan_mode,subagent_prompt,compaction_prompt。想看顶尖产品这些位置怎么写的,直接读原件。
延伸阅读,课程官网这一讲列了三篇:Building a Coding Agent(YouTube),Lessons from Building Claude Code(X 上的长帖),Dive into Claude Code(arXiv 论文)。
课程:Stanford CS146S《The Modern Software Developer》(Fall 2026),讲师 Mihail Eric,课程主页 themodernsoftware.dev。本文是非官方笔记,逐页讲解以课件为准。本讲课件和 Prompts 文件夹:https://themodernsoftware.dev ,https://docs.google.com/presentation/d/1RZu-p18Qybbgm8WVP2RH04ESc4Bn377B-T9j5-TBFdQ/edit ,https://drive.google.com/drive/folders/1c6_atVW0RrqEBWsNIscG2KNwCiuPxWQG















































































