惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
SecWiki News
SecWiki News
Project Zero
Project Zero
C
Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
A
Arctic Wolf
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
The Hacker News
The Hacker News
T
Tenable Blog
雷峰网
雷峰网
有赞技术团队
有赞技术团队
V
V2EX
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threat Research - Cisco Blogs
T
Threatpost
AWS News Blog
AWS News Blog
L
LINUX DO - 热门话题
Application and Cybersecurity Blog
Application and Cybersecurity Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
SegmentFault 最新的问题
月光博客
月光博客
Spread Privacy
Spread Privacy
S
Secure Thoughts
宝玉的分享
宝玉的分享
博客园 - 三生石上(FineUI控件)
Forbes - Security
Forbes - Security
T
The Exploit Database - CXSecurity.com
G
GRAHAM CLULEY
The Last Watchdog
The Last Watchdog
Y
Y Combinator Blog
I
Intezer
博客园 - 【当耐特】
B
Blog RSS Feed
Attack and Defense Labs
Attack and Defense Labs
I
InfoQ
博客园 - 叶小钗
Cyberwarzone
Cyberwarzone
V2EX - 技术
V2EX - 技术
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hugging Face - Blog
Hugging Face - Blog
H
Help Net Security
C
CERT Recently Published Vulnerability Notes

暗无天日

读:AI Agent 安全日志——从可见性与隐私的两难说起 - 暗无天日 读:AI Agent 生产化——一份从原型到上线的速查清单 - 暗无天日 AI写作的语言指纹——如何让文字不那么像机器 - 暗无天日 读:50 条 Claude Code 技巧——一个工程经理的六个月使用心得 读:AI 辅助开发为什么让 E2E 测试更有价值 - 暗无天日 读:在Emacs中使用Claude Code(Spacemacs适配版) - 暗无天日 读:Agent Harness Engineering——AI 智能体不只是模型,还有套件 - 暗无天日 browser-harness:让 AI 直接接管你的浏览器 - 暗无天日 读:Security-First CI/CD —— DevSecOps 自动化实践指南 TIL: 数字小键盘的小数点陷阱与行内算术求值 - 暗无天日 读:Immutability 不是万能药,它是一种权衡 - 暗无天日 Conducty:给 Claude Code 加上项目记忆和并行执行能力 - 暗无天日 读 — GitHub Trending 里的 Claude Code 技能包 读 — Prompt Caching 省钱指南 TIL: Emacs 中那些跟鼠标配合的冷门快捷键 - 暗无天日 读:Anvil——把 Emacs 变成 AI 的工具服务器 读:Emacs 代码折叠终极指南 - 暗无天日 读:Clojure 搭车客指南 - 暗无天日 git推送失败后恢复仓库损坏的完整记录 - 暗无天日 多智能体系统的两个有效模式——以及对 Claude Code 用户的启示 - 暗无天日 用 Org Babel 写 Literate 博文:扩展执行 + 定制导出 proced:Emacs 内置的进程查看器 - 暗无天日 从 proced 定制中学到的 Elisp 模式 读:让 Emacs proced 在 macOS 上显示 CPU 和内存 异步编程的函数着色税 - 暗无天日 链式调用的代价:JavaScript 和 Clojure 的共同教训 - 暗无天日 hyperfine:命令行基准测试工具 - 暗无天日 管道中的变量去哪了?——子 shell 作用域陷阱 - 暗无天日 开源包装器的信任陷阱:四个危险信号 - 暗无天日 程序员愿意为 AI 写文档,却不愿为同事写 - 暗无天日 mktemp: Shell 脚本中临时文件的安全陷阱与最佳实践 - 暗无天日 WSL9x —— 在 Windows 9x 里跑 Linux 内核 6.19 用 ox.el 做你想做的事 —— org-export 高级编程指南 读:Hot-wiring the Lisp Machine —— 用纯 Elisp 构建零依赖的 Org 静态站点生成器 Elisp 性能优化的六个实战教训 - 暗无天日 fcitx5 下 Emacs 无法切换输入法的排查 - 暗无天日 ERT 测试交互命令的三种方式 - 暗无天日 SEM Assistant: 当 Elisp 守护进程遇上 LLM 用 dmsg 给 Elisp 加上结构化调试日志 用 org-habit 追踪非每日习惯 - 暗无天日 Clojure X-Men:当编程语言特性变成超能力 - 暗无天日 TIL: 用 diff-hl 在 fringe 中显示 git 变更 读:llm-test —— 用 LLM agent 驱动 Emacs 测试 TIL: AI 时代的橡皮鸭调试 - 暗无天日 fcitx 启动后键盘输入卡顿的排查 - 暗无天日 TIL: 早期网页的图片热区导航 - 暗无天日 读 Seeing the Whole System 用 Emacs 自动生成每周链接推荐 - 暗无天日 读:ASCII control characters in my terminal 读 What to learn - 暗无天日 Lisp 的括号之痛——一个愚人节玩笑揭开的老伤疤 - 暗无天日 一本书该"线性读"还是"并行读" - 暗无天日 读 How to Monetize a Blog:一篇伪装成变现指南的讽刺文 Python Mock 第三方依赖的四种策略 - 暗无天日 Emacs Lisp 热重载实用指南 - 暗无天日 Prot 的 Emacs 配置哲学 - 暗无天日 TIL: 从直播对谈中学到的三个 Emacs 技巧 - 暗无天日 TIL: 自动使用项目虚拟环境的 Python - 暗无天日 TIL: 让 Help buffer 自动获得焦点 一条命令让本地开发用上 HTTPS —— slim 工具介绍 用 fsck 检查和修复 Linux 文件系统 排查Linux进程"卡死"实战:从strace到gdb全流程 - 暗无天日 PostgreSQL 索引:从基础到你可能不知道的高级用法 - 暗无天日 用 .pdbrc 自定义 Python 调试器 ANSI 转义码的标准化现状 - 暗无天日 终端程序的潜规则 - 暗无天日 PARA Org-mode 测试配置 - 暗无天日 AI越强越辣鸡?控制论说这是必然的 - 暗无天日 AI 越强越需要你盯着——反馈循环实操指南 - 暗无天日 你的AI代理正在偷你的密钥——四种你没想到的泄露通道 - 暗无天日 LLM 在 DevOps 中的三种角色 - 暗无天日 写作风格的反建议 - 暗无天日 反驳本质复杂性——Dan Luu 论为什么《没有银弹》错了 - 暗无天日 文件充满了危险——Dan Luu 谈文件系统的可靠性陷阱 - 暗无天日 AI 时代的 PARA 方法:用 Org-mode 和 AI 打造个人知识管理系统 Linux 数据去重学习笔记 - 暗无天日 创建跨平台 ZIP 文件的隐藏陷阱:Extra Field - 暗无天日 X11 Forwarding 排障指南 - 暗无天日 IP欺骗端口扫描:当别人冒充你去扫描别人 - 暗无天日 Linux 输入栈全景解析:从硬件按键到屏幕响应 - 暗无天日 Unix 系统中那些被埋没的配置开关——以 FontConfig 为例 - 暗无天日 在Linux上限制儿童使用电脑 - 暗无天日 GIF不仅仅是一种图片格式——用GIF流做些奇怪的事 - 暗无天日 Leiningen 学习笔记:Clojure 项目构建与管理从入门到实战配置 - 暗无天日 Google SRE Book 读书笔记 - 暗无天日 yes 管道 head 发生了什么 - 暗无天日 为什么 nohup 在 crontab 中不起作用 Bash中的Indirection与Nameref - 暗无天日 Linux PAM 简介 - 暗无天日 从Linux ISO文件启动计算机 - 暗无天日 用 Bash 打造一个Screen Locker 用GitHub Actions自动构建EGO博客 - 暗无天日 blocking I/O 的作用 - 暗无天日 mobileog 手机端同步提示Error:2 No such file 的解决方法 回收 WSL2 VHDX 文件占用空间 使用 org-mode columnview 生成任务列表 - 暗无天日 Emacs 作为 MPD 客户端 - 暗无天日 移动文件路径却不破坏org file link的方法 - 暗无天日 如何合理的导出help link 成HTML - 暗无天日 笑话理解之Biology - 暗无天日
Claude Code 背后的工程哲学——读 Agent Harness Engineering
2026-04-30 · via 暗无天日

Addy Osmani 的 "Agent Harness Engineering"提出了一个核心等式:Agent = Model + Harness。模型是能力,套件(harness)是让能力真正落地的脚手架。一个还行的模型配上优秀的套件,能打败一个优秀的模型配上糟糕的套件。

Claude Code 就是这个等式的活例子。底层跑的是 Claude 模型,但你每天感受到的行为——文件隔离、权限拦截、自动压缩上下文、子智能体防火墙——全是套件的功劳,不是模型的能力。Addy 的文章用套件工程的框架拆解了智能体设计的方方面面,而 Claude Code 几乎是每个概念的最佳注脚。

本文从 Claude Code 用户的视角重读 Addy 的文章,看看套件工程的每个概念在 Claude Code 里是怎么落地的,以及你能调整什么。

Claude Code 的套件架构长什么样

Fareed Khan 做过一张 Claude Code 架构图,把文章提到的几乎每个概念都对应到了一个具体组件:

  • 上下文注入 (知识层)→ CLAUDE.md、AGENTS.md、skill 文件在每轮对话中自动加载
  • 循环状态 (记忆层)→ 上下文压缩(compaction)、会话续接(continuation)
  • 破坏性操作拦截 (权限层)→ permission gate, rm -rfgit push --force 这些命令需要你确认
  • 子智能体隔离 (多智能体层)→ 子智能体上下文防火墙,每个子智能体只看到自己该看的
  • 工具分发 (工具层)→ MCP 服务器和 bash 都注册在工具分发器里

Claude Code 之所以比"在网页上用 Claude"好用这么多,不是因为网页版用的模型差,而是因为 Claude Code 为编码场景做了大量套件优化。模型是同一个,套件完全不同。

你能调整的三个套件组件

套件工程的核心洞察是:套件不是黑箱,它是你可以调的配置面。Claude Code 让你直接动手的有三样东西。

CLAUDE.md / AGENTS.md

这是套件中投入产出比最高的配置点——它的内容出现在每轮对话的系统提示词里。放什么?项目的约定:用什么包管理器、测试框架是什么、格式化规则、"不要碰 legacy 目录"、"统一用我们的 logger"。

两条设计原则:

  1. 保持简短 。HumanLayer 把他们的控制在 60 行以内。每条规则都在争夺模型的注意力,规则越多,每条规则的分量越轻。飞行员检查单,不是风格指南。
  2. 每条规则都要"挣"来的 。规则应该能追溯到一次具体的失败。如果你说不出"这条规则是因为那次 agent 干了什么蠢事才加的",那这条规则可能就是噪声。

Hooks

Hook 是在特定生命周期点运行的脚本——工具调用前、文件编辑后、提交前、会话开始时。它把"我告诉 agent 要做 X"变成了"系统保证执行 X"。

实用场景:每次编辑后自动运行类型检查和测试,失败了就把错误信息送回循环让 agent 自修正;拦截破坏性命令;提交前检查是否包含敏感文件。

核心原则: 成功时静默,失败时详细 。类型检查通过了,agent 什么也听不到,不浪费注意力。失败了,错误文本直接注入循环。这让反馈循环在正常情况下几乎零成本。

Skills / MCP 服务器

工具描述本身就是提示词的一部分——模型每次请求都要读一遍所有工具的名称、描述和参数 schema。十个专注的工具胜过五十个功能重叠的。所以你安装的每一个 MCP 服务器都要经过审查:它提供的工具是不是真的必要?它的描述会不会污染上下文?

还有一个安全维度:工具描述是模型会读的受信文本。一个粗劣的 MCP 服务器可以在你输入任何内容之前就执行提示词注入。安装第三方 MCP 时要像安装 npm 包一样谨慎。

棘轮思维:把每次犯错变成永久规则

套件工程中最重要的习惯:agent 犯了一次错,就加一条规则让它永远不再犯同样的错。不是"下次注意",而是系统性地堵住漏洞。

Claude Code 用户的实操版本:

  1. agent 提交了一个注释掉的测试 → CLAUDE.md 加一条"永远不要注释掉测试,要么删要么修"
  2. agent 多次在同一类问题上犯错 → 用 hook 做自动化检查
  3. agent 总是忘记某个项目约定 → 写进 AGENTS.md,每轮对话都能看到

棘轮只往一个方向转:只在真正出过错的地方加规则,只在更强的模型证明某条规则多余时才删掉。AGENTS.md 里的每一行都应该能追溯到一次具体的失败。

这也是为什么别人的 AGENTS.md 你不能直接抄——适合你的套件是由你的失败历史塑造的。

上下文管理:Claude Code 的隐形工程

上下文腐败(context rot)是所有 agent 的隐形杀手:随着对话越来越长,模型的推理质量会下降。Claude Code 内建了几种对抗手段:

  • 自动压缩 :当上下文窗口接近上限时,自动总结旧对话,保留关键信息,释放空间让 agent 继续工作
  • 工具输出截断 :大型工具输出不会完整塞进上下文,只保留头尾,完整内容存在文件系统里按需读取
  • 渐进式披露 :skill 文件不是一次性全加载,而是根据任务需要才展开相关部分

Anthropic 还提到了一种更激进的手段:对于特别长的任务,彻底重置会话,从一个紧凑的交接文件重建。压缩不够的时候,你需要带着一份结构化摘要从头开始。这更像是给新工程师做交接,而不是我们通常理解的"记忆"。

对你来说,最直接的实操建议是:遇到需要"切换思路"的时刻,开一个新 session 比在当前 session 里堆指令更有效。新 session = 干净的上下文 = 更高的有效智能。

长程任务的设计模式

让 agent 自主完成长任务是最难做对的事情。文章提到了几个模式,其中两个在 Claude Code 中特别有实操价值。

规划-生成-评估分离

把生成和评估交给不同的上下文。Claude Code 的子智能体天然支持这个模式——主智能体写代码,审查子智能体用纯净上下文审查。为什么纯净上下文反而更有效?因为编码智能体工作了几小时后,上下文又长又乱;审查智能体只看 diff,从头读代码,自己重新发现需要的信息。上下文越短,有效智能越高。

实操:写完代码后,开一个新 session 来审查。新 session 不需要知道你之前做了什么,只需要看 diff 或最终代码。

Sprint Contract

在开始之前写下"什么叫完成"。Addy Osmani 的经验是:写下完成条件比任何提示词调整都能抓到更多的范围蔓延。比如"这个重构的完成条件是:所有测试通过,没有新增的 eslint 警告, git diff --stat 显示只改动了预期的文件"。

模型升级了,你的套件该不该跟着变

Anthropic 的一个关键观察:套件不会随着模型变强而缩小,只会转移。

Opus 4.6 基本消灭了"上下文焦虑"——以前的 Sonnet 4.5 会在接近上下文极限时匆忙收工,为此写的各种缓解脚本现在都是死代码。但天花板跟着模型一起提高了:以前做不到的任务现在能做了,这些新任务有自己的失败模式。

对你的 AGENTS.md 来说,这意味着:定期审计。如果某条规则是因为一个模型缺陷而加的(比如"不要一次修改超过三个文件"),而新模型已经不需要这个限制了,就该删掉。规则只应该在它解决一个真实问题时存在。

还有一个隐含的陷阱:模型和套件之间存在训练耦合。Claude 模型在后训练阶段专门针对 Claude Code 的套件做过优化,所以同一个模型在 Claude Code 里和在别的套件里表现不同。这也是为什么换了模型版本之后,有时需要微调 AGENTS.md——模型变了,之前的"补丁"可能不再需要,也可能需要新的。

一个行动框架

读完这篇文章,如果你是一个 Claude Code 用户,接下来可以做的事:

  1. 审计你的 CLAUDE.md :每条规则能不能追溯到一次具体的失败?追溯不到的考虑删除
  2. 加一个 hook :找一个 agent 反复出错的场景,写一个 hook 自动化检查。成功时静默,失败时详细
  3. 审查你的 MCP 列表 :每个 MCP 服务器提供的工具是否必要?描述是否精确?
  4. 建立棘轮习惯 :下次 agent 犯错时,不要只点"重试"——花 30 秒加一条规则

套件工程的核心思想用一句话总结:不要等下一个模型来解决问题,用你手里的配置面把当前模型的能力释放出来。Viv Trivedy(Terminal Bench 2.0 排名 Top 5 的套件设计者)的话作为结尾很合适:"好的 agent 构建是一个迭代练习。如果你没有 v0.1,就没法做迭代。"