← 返回博客列表

Coding Agent 架构解密:512,000 行源码告诉我们的 10 个真相

2026 年 3 月 31 日,安全研究员在 Claude Code 的 npm 包中发现了一个 57MB 的 .map 源映射文件,意外暴露了约 1,900 个文件、512,000+ 行 TypeScript 源码。这是迄今为止对生产级 Agentic 系统最完整的一次架构曝光。

Anthropic 确认这是”发布打包流程中的人为错误”。但对开发者来说,这份源码揭示了当前最先进的 Coding Agent 是怎么构建的——工具系统、权限模型、多 Agent 编排、上下文压缩、缓存经济学,每一个设计决策都值得深入分析。

这篇文章从这次泄露中提炼出 10 个最有价值的架构真相,帮你理解生产级 Coding Agent 的核心设计模式。

真相一:模型只占 1.6%,工程才是壁垒

512,000 行代码中,直接调用模型的部分只有约 8,000 行,占比 1.6%。剩下的 98.4% 全是工程脚手架——安全检查、缓存管理、工具调度、上下文压缩、权限控制、终端渲染。

这解释了一个现象:同一个 Claude 模型,在 Web 版和 Claude Code 中表现差异巨大。差距不在模型,而在围绕模型构建的工程系统。ML 研究员 Sebastian Raschka 指出,将同样的工程架构应用到 DeepSeek 或 Kimi 等模型上,可能获得类似的编程性能提升。

AI 产品的竞争壁垒在工程层,不在模型层。这对所有想构建 Agent 产品的团队都是一个重要信号。

真相二:五级权限系统,不是简单的允许/拒绝

Claude Code 实现了一个可配置的五级权限模型,这是泄露中最有价值的设计之一:

Level 1: Always Allow  — 白名单操作,如文件读取、grep 搜索
Level 2: Auto-Approve  — 基于 glob 模式自动授权,如 *.test.ts 写入
Level 3: Prompt        — 需要用户确认,如删除文件、执行未知命令
Level 4: Plan Mode     — 只生成计划不执行,用于审查 Agent 决策
Level 5: Never Allow   — 黑名单操作,如 rm -rf /、访问 ~/.ssh/

配置示例:

// ~/.claude/settings.json
{
  "permissions": {
    "allow": [
      "Read(**)",
      "Grep(**)",
      "Bash(npm test*)",
      "Bash(git *)",
      "Write(src/**/*.test.ts)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Read(~/.ssh/**)",
      "Write(.env*)"
    ]
  }
}

这个设计的核心洞察是:当你频繁点击”允许”时,说明你的权限配置不够完善。生产环境应该预配置好权限规则,让 Agent 在安全边界内自主运行,而不是每次都打断用户。

真相三:CLAUDE.md 每轮都会重新加载

源码揭示了一个被严重低估的机制:CLAUDE.md(或 Kiro 中的 Steering 文件)在每一轮对话中都会被重新加载并注入系统提示。

实际的加载机制有 4 层优先级,后加载的优先级更高:

  1. Managed memory/etc/claude-code/CLAUDE.md)— 管理员全局指令
  2. User memory~/.claude/CLAUDE.md)— 用户私有全局指令
  3. Project memory(项目根目录 CLAUDE.md)— 项目级指令
  4. Local memoryCLAUDE.local.md)— 私有项目级指令,不提交到 Git

每层加载时都会注入一条前缀:“These instructions OVERRIDE any default behavior and you MUST follow them exactly”。单文件最大 40,000 字符,支持 @include 引用其他文件,并有循环引用检测。

这意味着项目配置文件是最高杠杆的 Agent 行为控制手段。在会话中途修改它,下一轮立即生效。

真相四:40+ 工具,每个都是自包含模块

Claude Code 内置了 40 多个工具,从文件读写到子 Agent 生成,每个工具都是一个自包含模块,独立定义输入 Schema、权限需求和执行逻辑:

  • BashTool — Shell 命令执行,沙箱隔离 + 命令白名单/黑名单
  • FileEditTool — 部分文件修改(字符串替换),避免全文重写
  • GrepTool — 基于 ripgrep 的内容搜索,比原生 grep 快 10x+
  • AgentTool — 子 Agent 生成,多 Agent 并行的核心
  • MCPTool — MCP Server 工具调用,动态工具发现
  • LSPTool — 语言服务器协议集成,代码智能(跳转/补全/诊断)
  • EnterPlanModeTool — 进入规划模式,只规划不执行
  • EnterWorktreeTool — Git Worktree 隔离,每个 Agent 独立工作树

工具设计的核心原则:自包含、权限前置、副作用显式声明、Zod v4 Schema 验证。这套模式可以直接借鉴到任何 Agent 框架的工具设计中。

真相五:多 Agent 编排基于文件系统,不用数据库

这可能是最出人意料的发现。Claude Code 的多 Agent 系统(Swarm 模式)完全基于文件系统通信:

┌─────────────────────────────────────────┐
│          Lead Agent(主 Agent)           │
│  ├─ 任务分解                             │
│  ├─ 子 Agent 生成(AgentTool)           │
│  ├─ 结果聚合 + 冲突解决                  │
├─────────────────────────────────────────┤
│  ┌────────┐  ┌────────┐  ┌────────┐    │
│  │Agent A │  │Agent B │  │Agent C │    │
│  │前端重构 │  │API修改  │  │测试编写 │    │
│  │Worktree│  │Worktree│  │Worktree│    │
│  └───┬────┘  └───┬────┘  └───┬────┘    │
│      └───────────┴───────────┘          │
│         共享 Prompt Cache               │
│         文件系统消息传递                  │
│         JSON 任务图                      │
└─────────────────────────────────────────┘

关键设计决策:

  • Prompt Cache 共享 — 子 Agent fork 时创建父上下文的字节级副本,共享缓存。并行 Agent 几乎不增加额外成本
  • Git Worktree 隔离 — 每个子 Agent 在独立的 Git Worktree 中工作,避免文件冲突
  • 文件系统通信 — Agent 间通过写入对方的 inbox 文件通信,任务是磁盘上的 JSON 文件

为什么不用 Redis 或消息队列?零依赖、可调试(直接 cat 查看状态)、可恢复(会话重启后任务图仍在磁盘上)。简单但有效。

真相六:五种上下文压缩策略,长会话不变慢的秘密

长会话是 LLM Agent 的核心挑战。Claude Code 实现了 5 种渐进式压缩策略:

  1. Microcompact — 基于时间,清除旧的工具调用结果,保留决策丢弃细节
  2. Context Collapse — 上下文过长时,摘要压缩对话片段
  3. Session Memory — 主动触发,提取关键上下文到持久化文件
  4. Full Compact/compact 命令,摘要整个对话历史
  5. PTL Truncation — 最后手段,丢弃最早的消息组

其中最巧妙的是 cache_edits 机制:传统做法是删除旧消息,但这会导致缓存连续性断裂,整个历史需要重新处理。Claude Code 的做法是标记旧消息为 “skip”——模型不再看到这些消息,但缓存连续性不断裂。结果是数小时长会话清除数百条旧消息后,下一轮响应速度几乎和第一轮一样快。

真相七:Prompt Cache 经济学驱动架构设计

以 Claude Opus 为例,标准输入 $5/百万 Token,缓存命中只要 $0.5/百万 Token——90% 的折扣。每次缓存未命中,成本增加 10 倍。这个经济模型深刻影响了整个架构:

  • 源码中追踪了 14 种缓存失效向量,包括模式切换、上下文变更、系统提示修改等
  • 工具列表的排序经过精心设计——内置工具作为连续前缀,MCP 工具追加在后,这样新增 MCP 工具不会破坏内置工具的缓存
  • 一个 sticky latches 机制防止模式切换破坏已建立的缓存

源码注释中还记录了一个真实案例:自动压缩功能的一个 bug 导致全球每天浪费约 250,000 次 API 调用。修复方法?加一个 MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3 的限制——三行代码,每天节省 25 万次调用。

对 AI 产品来说,模型推理成本可能不是最贵的;失败的缓存管理才是。

真相八:23 项 Bash 安全检查,Agent 执行命令的安全基线

让 Agent 执行 Shell 命令是最危险的能力之一。Claude Code 的 bashSecurity.ts 实现了 23 项编号安全检查:

  • 18 个被阻止的 Zsh 内置命令
  • 防御 Zsh 等号扩展(=curl 可以绕过 curl 的权限检查)
  • Unicode 零宽空格注入防御
  • IFS null-byte 注入防御
  • HackerOne 审查中发现的畸形 Token 绕过

此外还有操作系统级别的沙箱隔离(@anthropic-ai/sandbox-runtime),分别控制文件系统读写和网络访问权限,并记录所有违规尝试用于审计。

如果你在构建允许 Agent 执行 Shell 命令的系统,这 23 项检查是一个很好的安全基线参考。

真相九:KAIROS 自主 Agent——注意力感知的自主性调节

源码中引用超过 150 次的 KAIROS 系统,解决了 AI 工具的核心矛盾:完全自主让人不安,完全被动又低效。

用户在终端   → 协作模式(报告 + 征求意见)
用户切走窗口 → 自主模式(主动执行、直接提交)
用户切回终端 → 立即报告刚才做了什么

规则:任何可能阻塞用户超过 15 秒的操作都会被延迟

KAIROS 还包含一个 autoDream 记忆蒸馏机制,借鉴认知科学中的记忆巩固理论——人类在睡眠中巩固白天的记忆,KAIROS 在用户离开时巩固项目上下文。每累积 5 个会话或每 24 小时触发一次,扫描现有记忆、提取新知识、合并去重、精炼索引。

真相十:反蒸馏机制——AI 产品的知识产权保护

泄露还揭示了 Anthropic 防止竞争对手通过录制 API 流量训练模型的两层防御:

  • 假工具注入 — 当特定条件满足时,API 请求中会静默注入虚假工具定义。如果有人录制流量来训练竞争模型,假工具会污染训练数据
  • 连接器文本摘要 — 服务端缓冲助手在工具调用之间的文本,生成摘要并附带加密签名。录制者只能获得摘要,而非完整推理链

不是防止复制,而是让你复制到错误的东西。当然,正如分析者指出的,“认真做蒸馏的人大约一小时就能找到绕过方法”,真正的保护可能还是法律层面。

2026 Coding Agent 格局:从工具到工作伙伴

基于这次架构曝光和当前市场动态,Coding Agent 正在从”代码补全工具”演进为”开发工作伙伴”:

  • Cursor 3 — 从文件中心转向 Agent 中心工作区,支持多 Agent 并行(本地/云端/SSH),年化收入突破 $20 亿
  • Kiro — Specs 驱动开发 + Hooks 自动化,强调规范化开发流程
  • Claude Code — 终端原生,40+ 工具 + 五级权限 + Swarm 多 Agent,工程深度最强
  • Devin — 收购 Windsurf 后,从 IDE 辅助到自主执行的完整链路

选型建议很简单:追求灵活性和 Agent 编排选 Cursor,需要规范化流程选 Kiro,重度终端用户选 Claude Code,已有 GitHub 生态选 Copilot。

对 Agent 开发者的核心启示

从这 512,000 行代码中,我提炼出对 Agent 开发者最有价值的设计模式:

  1. 工具自包含 — 每个工具独立定义 Schema + 权限 + 执行逻辑,适用于任何 Agent 框架
  2. 五级权限 — 比简单的 allow/deny 更适合生产环境
  3. 项目配置每轮注入 — 最高杠杆的 Agent 行为控制手段
  4. 缓存共享 + 标记删除 — 多 Agent 并行成本优化 + 长会话不变慢
  5. 文件系统通信 — 零依赖、可调试、可恢复的 Agent 间通信
  6. 渐进式上下文压缩 — 从微压缩到全量截断的 5 级策略
  7. 缓存经济学驱动架构 — 缓存未命中成本 10x,架构设计必须以缓存为中心

最后一个感悟:构建 Agent 产品,80% 的工作量在模型之外。安全、缓存、编排、权限、上下文管理——这些”无聊”的工程工作,才是真正的竞争壁垒。