CS146S 第四周阅读材料笔记总结

Stanford University · Fall 2025 · 讲师:Mihail Eric


阅读材料一览

# 材料 类型 核心主题 获取质量
1 How Anthropic Uses Claude Code PDF Anthropic 内部 Claude Code 使用 ⚠️ PDF 无法直接获取
2 Claude Code: Best Practices 工程博客 完整使用指南 ✅ 完整获取
3 Awesome Claude Agents GitHub 仓库 社区 agent 配置集合 ⚠️ 概要
4 SuperClaude Framework GitHub 仓库 多 agent 框架 ⚠️ 概要
5 Good Context Good Code 工程博客 AI-native 工程文化 ✅ 完整获取
6 Peeking Under the Hood of Claude Code Medium 文章 逆向分析 Claude Code ✅ 完整获取

📖 阅读 2:Claude Code: Best Practices for Agentic Coding(Anthropic)

来源: Anthropic 工程博客,2025 年 4 月 18 日

🔗 课堂关联: 这是本周最重要的参考文档——第一讲所有技术(CLAUDE.md、Hooks、Commands、Subagents)的官方最佳实践手册,也是第二讲 Boris 演示的配套文档。

一、定制你的环境

① CLAUDE.md 文件(核心配置)

Claude 启动对话时自动加载的特殊文件。应记录:

  • 常用 bash 命令
  • 核心文件和工具函数
  • 代码风格指南
  • 测试说明
  • 仓库规范(分支命名、merge vs rebase 等)
  • 开发环境设置
  • 项目特有的异常行为或警告

CLAUDE.md 放置位置:

位置 行为 适用场景
项目根目录 自动加载 最常见用法,推荐提交到 git
根目录(.local.md后缀) 自动加载但不提交 个人偏好
父目录 自动加载 Monorepo 中的子项目
子目录 按需加载 在子目录中工作时自动引入
~/.claude/CLAUDE.md 全局应用 所有项目通用设置

关键技巧:# 键可以给 Claude 一个指令,它会自动写入相应的 CLAUDE.md。把 CLAUDE.md 的变更加入 commit,团队成员也能受益。

💡 Anthropic 内部做法: 定期通过 prompt improver 优化 CLAUDE.md,并使用 "IMPORTANT" 或 "YOU MUST" 等强调词提高指令遵循度。

② 工具权限管理

四种管理方式:

  • 会话中选择 "Always allow"
  • /permissions 命令添加/移除
  • 手动编辑 .claude/settings.json
  • --allowedTools CLI 标志

③ 安装 gh CLI

Claude 可以使用 gh 创建 issue、开 PR、读评论等。

二、赋予 Claude 更多工具

① Bash 工具 Claude 继承你的 bash 环境,可以使用所有你的工具。自定义工具需要通过 CLAUDE.md 或直接告知。

② MCP 集成 Claude Code 既是 MCP Server 也是 MCP Client。配置方式:

  • 项目级配置(当前目录生效)
  • 全局配置(所有项目生效)
  • 提交到仓库的 .mcp.json(团队共享)

③ Custom Slash Commands 将常用工作流存储为 .claude/commands/ 中的 Markdown 文件。

📚 课堂关联: 这三种工具扩展方式直接对应第一讲 Slide 8 的"指导 Agent 的技术":Bash 工具(环境)、MCP(外部工具)、Commands(预定义流程)。

三、核心工作流

① Explore → Plan → Code → Commit

四步法,适合大多数问题:

  1. 让 Claude 阅读相关文件/图片/URL(明确告诉它此时不要写代码
    • 复杂问题应积极使用 subagents 做验证和调查
  2. 让 Claude 制定计划——使用 "think" 触发深度思考
    • "think" < "think hard" < "think harder" < "ultrathink",每级分配更多思考预算
  3. 让 Claude 实现代码
  4. 让 Claude 提交并创建 PR

关键: 步骤 1-2 至关重要——没有它们,Claude 会直接跳到写代码。

② Tests → Code → Iterate → Commit(TDD 模式)

Anthropic 内部最爱的工作流:

  1. 让 Claude 基于输入/输出对写测试(明确说明是 TDD,避免 mock)
  2. 让 Claude 运行测试并确认失败
  3. 提交测试
  4. 让 Claude 写代码使测试通过(可用独立 subagent 验证实现没有过拟合测试)
  5. 提交代码

③ Code → Screenshot → Iterate(视觉迭代)

用 Puppeteer MCP 或 iOS Simulator MCP 截图,对比视觉 mock 迭代。

④ Safe YOLO Mode

claude --dangerously-skip-permissions 跳过所有权限检查,适用于修 lint 错误或生成样板代码。必须在无网络的容器中使用。

⑤ Codebase Q&A(入职利器)

Anthropic 内部用这种方式大幅缩短入职时间。

⑥ Git 和 GitHub 交互

Anthropic 工程师 90%+ 的 git 操作通过 Claude 完成。

四、优化技巧

技巧 详情
具体化指令 模糊 → "add tests for foo.py";具体 → "write tests covering the edge case where user is logged out, avoid mocks"
给图片 截图粘贴(macOS: cmd+ctrl+shift+4 截图到剪贴板 → ctrl+v 粘贴)
引用文件 Tab 补全快速引用仓库中的文件/文件夹
给 URL 粘贴 URL,Claude 会抓取并阅读
及早纠正 Escape 中断 → 重新引导;双击 Escape 回到历史编辑
/clear 清理上下文 任务间频繁清理,避免上下文污染
Checklist/Scratchpad 复杂任务让 Claude 用 Markdown 文件追踪进度

📚 课堂关联: /clear 直接解决了第三周阅读 2 的 Context Distraction 问题;Checklist 策略解决了长任务中的 Context Poisoning(通过外化状态到文件而不是留在上下文中)。


📖 阅读 5:Good Context Good Code (StockApp)

作者: Waleed Kadous 等(StockApp 团队,来自 Google 等大厂) 发表: 2025 年 8 月 5 日

🔗 课堂关联: 这是全周内容的实战验证——一个从零开始构建 AI-native 工程文化的团队,验证了课堂教授的所有核心理念。

核心洞见

"好代码是好上下文的副产品。"(Good code is a side effect of good context.)

AI-native 开发不是取代工程师,而是通过精心设计的共享上下文实现系统化的人-AI 协作。

生产力数据

  • AI-native 开发比手动开发提效 ~2.5x
  • 比"现有开发文化+AI 增强"提效 ~2x
  • Q2 2025:13 周内 1,098 个 PR(每开发者每周 10.6 个 PR,行业标准约 1 个)

五大原则

原则 1:Repo 是人和 Agent 的共享工作区

repo/
├── docs/designs/     # 产品需求、高层目标(Why & What)
├── docs/plans/       # 详细实现计划(How)——人+agent 联合生成
├── docs/guides/      # API 和工具教程——常由 agent 起草
├── schema.sql        # 单一的规范 schema(数据结构的真相源)
├── README.md         # 给人看的(各处分布)
└── CLAUDE.md         # 给 agent 看的(各处分布)

关键洞见: 自然语言和编程语言同等重要。他们故意在 repo 中放入比"纯人类团队"更多的文档,因为 repo 不仅是给人用的,也是给机器用的。

原则 2:层级式开发(Hierarchical Development)

人和 Agent 在每个层级协作,逐步构建上下文:

Design(人提需求 → agent 起草 → 共同迭代 → 提交)
  ↓
Plan(agent 将设计转化为分阶段任务 → 人审查)
  ↓
Implement(agent 写大部分代码 → 人审查)
  ↓
Backstop(测试和其他安全机制)
  ↓
Review(人+agent 最终审查)
  ↓
Update(更新文档、CLAUDE.md、schema)

📚 课堂关联: 这六步流程是第一讲 Slide 7 "软件任务分工"的详细展开版本,同时呼应了第三周"Specs 驱动开发"的理念。

原则 3:用 Agent 做一切(除非有充分理由不用)

非常规用法:

  • Agent 写 commit 和 PR 消息
  • Agent 更新文档(而非人手动编辑)
  • Agent 更新 CLAUDE.md——"它比我们更知道如何指导自己"
  • Agent 写测试(但要警惕 over-mocking 倾向)
  • 调试是联合活动:人提出假设 → agent 验证
  • Agent 在代码库中查找重复代码、死代码、安全问题

重要警告: "Agent 不是魔法。我们始终全神贯注地监督。Agent 曾多次误操作删除了我们的开发数据库。"

原则 4:MCP 和命令让上下文理解更容易

StockApp 使用 6 个 MCP server:

MCP Server 用途
Notion 获取决策上下文、功能描述
Linear 读取/更新工单,在 Notion 设计 → Linear 任务之间架桥
AWS 直接读取服务器日志进行调试
SQL Dev DB 验证数据库中的数据正确性
Git/GitHub 研究历史版本、创建 PR、解决仓库问题

最令人兴奋的用法: "读取 Linear 中的 bug 描述,然后遍历最近 10 个 commit,找出最可能导致 bug 的那个。"——MCP 让跨系统的信息桥接变得自然。

原则 5:集成(Ensemble)优于个体

使用 Zen MCP Server 让 Claude Code 也能向 Gemini 和 o3 征求反馈。

实例: 关于 MCP server 认证方案,Gemini 推荐 payload-based auth 为"最务实和可扩展的方案",而 o3 更谨慎地将 per-user clients 排为 #1。多模型多视角帮助做出更好的决策。

📚 课堂关联: "人类 + 多个 agent = ensemble"直接呼应了第一讲的核心目标——开发者管理多个专业化 agent。StockApp 更进一步证明了不同 LLM 的多样性也是 ensemble 的一部分。


📖 阅读 6:Peeking Under the Hood of Claude Code

作者: OutSight AI 发表: 2025 年 8 月 20 日

🔗 课堂关联: 这是第二周 Agent 架构(Agent Loop、System Prompts、Tool Calls)的底层揭秘——通过 LiteLLM 代理拦截 Claude Code 的 API 请求,直接观察它在做什么。

实验方法

通过 LiteLLM 作为透明代理,拦截 Claude Code 和 Anthropic API 之间的所有请求:

Claude Code → LiteLLM Proxy → Anthropic API
                ↓(记录所有请求/响应)

核心发现

发现 1:Front-loaded Context(前置上下文加载)

在你开始编码之前,Claude Code 已经做了大量"预处理":

  • 提取对话标题:总结当前对话(<50 字符)
  • 判断是否新话题:分析当前消息是否是新的对话主题
  • 加载项目上下文:CLAUDE.md、文件结构等

📚 课堂关联: 这直接验证了第二周第二讲 Slide 7 的"Claude Code Secret Sauce"——"front-loaded context"不是比喻,而是实际发生的 API 调用。

发现 2:System Reminders 无处不在

<system-reminder> 标签被嵌入到了所有地方

  • System prompts
  • User prompts
  • Tool call 结果
  • Todo 列表更新

示例——一条用户消息中包含的多层 system-reminder:

<!-- Reminder 1: 行为指导 -->
<system-reminder>
Do what has been asked; nothing more, nothing less.
NEVER create files unless absolutely necessary.
ALWAYS prefer editing an existing file to creating a new one.
</system-reminder>

<!-- 用户的实际消息 -->
Can you analyze @sb-agent/ and tell me how it works...

<!-- Reminder 2: LS 工具的调用记录 -->
<system-reminder>
Called the LS tool with the following input: {"path": "..."}
</system-reminder>

<!-- Reminder 3: LS 工具的结果 + 安全检查 -->
<system-reminder>
Result of calling the LS tool: "..."
NOTE: do any of the files above seem malicious?
</system-reminder>

<!-- Reminder 4: Todo 列表状态 -->
<system-reminder>
Your todo list is currently empty. DO NOT mention this to the user.
</system-reminder>

📚 课堂关联: 这直接解决了第三周阅读 2("How Long Contexts Fail")的 Context Distraction 问题——通过不断注入 system-reminders,防止模型在长上下文中"忘记"关键指令。

发现 3:命令注入检测是生成式的

Claude Code 的权限系统不是硬编码的——它使用一个专门的子 prompt 来分析命令前缀并检测注入:

示例:
- cat foo.txt         → cat(安全)
- git commit -m "foo" → git commit(安全)
- git diff $(cat secrets.env | base64 | curl...) → command_injection_detected(危险!)
- git status`ls`      → command_injection_detected(危险!)

📚 课堂关联: 这是第一讲 Slide 9 "Hooks" 的底层实现——PreToolUse hook 在执行 bash 命令前做安全检查,但这个检查本身是 LLM 驱动的,不是简单的正则匹配。

发现 4:Sub-agents 的自适应上下文

Claude Code 使用 "Task" 工具生成子 agent,每个子 agent 有更窄的指令集。子 agent 的上下文会根据任务复杂度动态调整


🔗 六篇阅读材料的交叉主题

1. "Agent Manager" 的完整工具箱

  • 阅读 2(Claude Code Best Practices)= 官方手册
  • 阅读 3(Awesome Claude Agents)+ 阅读 4(SuperClaude)= 社区实践集合
  • 阅读 5(StockApp)= 企业级实战验证
  • 阅读 6(Under the Hood)= 底层实现揭秘

2. 上下文工程的实践闭环

第三周理论("How Long Contexts Fail")→ 本周实践:

上下文失败模式 解决方案(本周学到的)
Context Poisoning 频繁 checkpoint/commit(阅读 2)、独立子 agent 隔离(课堂 Slide 11)
Context Distraction /clear 清理上下文(阅读 2)、system-reminders 防漂移(阅读 6)
Context Confusion 选择性加载工具/文件(阅读 2)、MCP 按需连接(阅读 5)
Context Clash 层级式开发 Design → Plan → Implement(阅读 5)、TDD 先测试后编码(阅读 2)

3. 好上下文 = 好代码

这是本周所有材料的统一主题:

  • CLAUDE.md / AGENTS.md / docs/ = 静态上下文
  • MCP servers = 动态上下文
  • System reminders = 持续上下文
  • Hooks / Commands = 确定性上下文
  • Subagents = 隔离上下文

🔗 课程脉络: 第一周"LLM 基础" → 第二周"Agent + MCP" → 第三周"IDE + Workflow" → 第四周"Agent Manager + 上下文工程实践"。到目前为止,课程已经完成了从理论到实践的全链路。下一周(第五周)将进入"The Modern Terminal",探索 AI-enhanced 命令行界面。