Claude Code Harness入门到精通,收藏这一篇就够了!

张开发
2026/4/3 17:44:31 15 分钟阅读
Claude Code Harness入门到精通,收藏这一篇就够了!
01真正的难点在模型之外的 HarnessClaude Code 的架构核心是一个「Harness」本地运行时的外壳更多地是依靠 Harness 的工程化与可靠性。根据公开镜像仓库 nirholas/claude-codeClaude Code 的 TypeScript 源代码跨越了约 1,900 个文件超过 512,000 行严格类型的 TypeScript基于 Bun 运行时构建用 React 和 Ink 驱动终端 UI。在架构文档里描述的 Claude Code 系统相当庞大一个大型 QueryEngine、集中式工具注册表、数十个斜杠命令、持久化记忆、IDE 桥接、MCP 集成、远程会话、插件、技能以及支持后台和并行工作的任务层。更准确的比喻是Claude Code 更像是一个用于软件工作的操作系统围绕模型堆叠了权限管理、记忆层、后台任务、IDE 桥接、MCP 管道和多代理编排。Vikash Rungta 在他的逆向工程分析里把这个东西叫做 Harnes一个本地运行时外壳把 LLMBrain包裹在工具、记忆和编排逻辑Body之中让模型能在现实世界里行动。要想理解 Claude Code首先要理解 Agent 架构的三个代际演进第一代是 Chatbot无状态问答第二代是 Workflow用 n8n、LangChain 这类工具把 LLM 嵌进代码驱动的 DAG 流里代码决定模型下一步做什么第三代是 Autonomous Agent模型控制循环运行时只是执行器。Claude Code就是属于第三代的商业化产品。Claude Code 的源码也说明了真正难的是 Harness给任何支持工具调用的 LLM 提供文件系统访问、shell、分层记忆和声明式扩展能力。所有的这些都要在一个由可组合权限约束的有界自主循环里运行。02TAOR Loop 设计Orchestrator 越笨架构越稳定Claude Code 的执行引擎是一个叫 TAOR 的循环Think-Act-Observe-Repeat。这个设计本身不复杂但背后的设计哲学很值得关注。它的 Orchestrator 本身被设计得极其「愚蠢」只负责驱动循环、执行工具调用、感知结果。所有的推理、决策、何时停止全部都交给模型。运行时不知道代码是什么不知道文件在哪它只是跑循环让模型决定下一步。总结来讲运行时越笨架构越稳定。把智能下沉到模型把确定性留给框架。这和早期 LangChain 试图在框架层做各种「聪明编排」的路线形成了鲜明对比。LangChain 更倾向于把编排逻辑写进代码用复杂的 Orchestrator 控制 LLM 的每一步。Claude Code 的做法是所有的推理、决策和停止判断统统下放给大模型本身。TAOR 循环的核心逻辑大约只有 50 行但给了模型无限的操作空间。同样在工具层遵循这个「笨」的哲学。Claude Code 没有给模型配备 100 个专项工具而是只提供四种能力原语Read、Write、Execute、Connect。其中 Bash 是通用适配器允许模型使用任何人类开发者会用的工具——git、npm、docker全部通过 shell 组合完成。不要构建 100 个工具给模型一个 shell让它自己组合。**随着模型变得更强脚手架应该变薄而不是变厚。**硬编码的脚手架应该随着模型能力提升而被主动删除架构随时间推移越来越薄。如果你每次模型升级都要往框架里加更多脚手架说明你在对抗模型而不是利用模型。03Context Window 是稀缺资源不是越大越好Context 不是越大越好而是越干净越好。这是 Claude Code 整个架构里贯穿始终的设计原则。一般来说Context Collapse 是 Agent 系统最普遍的失败模式。随着对话进行上下文窗口被填满记忆退化幻觉出现Agent 开始在自己积累的噪音里迷失方向。但 Claude Code 把 Context Window 看成了一种需要主动管理的稀缺资源围绕 Context 构建了一套自动压缩、子 Agent 隔离和详尽的缓存经济学防御体系。**第一层是 Auto-Compaction。**当 Context 使用量达到约 50% 时自动触发用 LLM 摘要替换原始对话轮次释放空间的同时保留关键决策。这不是简单地截断历史而是用摘要压缩确保重要信息不丢失。这个机制对应的故障模式叫做 Context Collapse解决方案是Auto-compaction at 50% sub-agents with isolated context windows。**第二层是 Sub-Agent 隔离。**把重型的探索、研究任务卸载给独立的子 Agent。子 Agent 运行自己独立的 TAOR 循环有自己的 Context 预算任务完成后只把摘要返回给主 Agent。这样无论子任务消耗了多少 token主 Agent 的 Context 都不会被污染。从代码结构上看这个机制的设计非常精细。子 Agent 运行时有自己的 maxTurns 上限、有自己的 compaction 机制独立压缩不影响主对话、有自己的 MEMORY.md。主 Agent 派出子 Agent 之后只等一个 summary 回来整个子任务的 token 消耗对主 Context 完全透明隔离。第三层是 Prompt Cache 经济学。promptCacheBreakDetection.ts 里追踪了 14 个 cache-break 向量也就是 14 种会让 prompt 缓存失效的情况。代码里还有一个函数叫 DANGEROUS_uncachedSystemPromptSection()光是这个命名本身就是一种文档这里加东西要小心会破坏缓存。代码里还有多个 sticky latches防止模式切换破坏 prompt 缓存的锁定机制。当你为每个 token 付费的时候缓存失效不再是计算机科学笑话更多的是一个财务问题。此外还有一个细节是Session Continuity。在 Claude Code 里会话不是一次性的。它们像 git branch 一样运作可以 checkpoint、rollback或者把某个探索方向 fork 成一条新路径。这意味着 Context 的管理不只是在单次会话内而是跨会话的。04记忆系统的核心是索引不是存储Claude Code 的记忆系统设计也非常有意思。大多数人想象「Agent 记忆」就像一个更大的背包装得越多越好。但 Claude Code 的记忆系统更像是一个带有严格图书管理员的档案系统。核心设计原则是记忆是索引不是存储。能从代码库中重新推导出的信息绝不应该被存储。从架构上看Claude Code 的记忆系统分为六层在每次会话启动时按层加载Managed Policy组织级策略企业或团队层面的统一规范Project CLAUDE.md项目配置当前项目的特定指令和上下文User Preferences用户偏好个人层面的习惯和偏好设置Auto-Memory自动学习模式Agent 从历史交互中学到的用户模式Session会话上下文当前会话的临时信息Sub-Agent Memory子 Agent 记忆各子 Agent 独立维护的专项记忆其中Auto-Memory 循环甚至允许 Agent 学习用户的工作模式并把这些模式写入 MEMORY.md 供未来会话使用。用户不需要反复解释相同的事情Agent 会从之前的交互里学习并记住重要信息。同时Claude Code 的子 Agent 记忆机制也值得一提。在自定义子 Agent 的配置里可以设置 memory: userAgent 会把学到的模式写入 ~/.claude/agent-memory//MEMORY.md下次调用时自动加载前 200 行。这意味着每个子 Agent 都可以有自己独立的、持续积累的专项记忆。更关键的是这个系统具有主动自我编辑能力。它不仅会记录还会重写、去重、甚至剪除互相矛盾的信息过期且无效的记忆在这里被视为「负债」而非资产。Claude Code 的记忆系统设计也侧面反映了在产品层面记忆不只是一个 Feature它是决定用户是否继续使用的核心留存机制因为用户真正期待的是一个「会学习」的 Agent。05权限系统的设计更像是 UX 设计信任是可组合的权限与安全问题是 Agent 走向企业级应用的前提。Claude Code 的权限系统被设计为一个五档的信任光谱plan只读完全不能写入信任级别最低default编辑和 shell 操作前都需要询问标准模式acceptEdits自动批准文件编辑shell 操作仍需询问中等信任dontAsk自动批准白名单内的所有操作高信任bypassPermissions跳过所有检查仅限托管组织使用最高信任每个工具调用都经过静态分析层的多层白名单校验。bashSecurity.ts 里有 23 项编号的安全检查包括18 个被阻止的 Zsh 内置命令防御 Zsh equals expansioncurl 这种写法可以绕过对 curl 的权限检查unicode 零宽字符注入IFS null-byte 注入一个在 HackerOne 审查期间发现的恶意 token 绕过这种可组合的信任光谱让 Claude Code 能够适应完全不同的使用场景从什么都要确认的高度受限企业环境到全速运行的个人开发环境。权限设计更像是 UX 设计。对于 Agent 产品来说这也是从 Demo 进入企业生产环境的「门槛」。同时Claude Code 还有一个更底层、巧妙的机制是API 请求在 JS 层之下做了身份验证。在 system.ts 文件里每个 API 请求都包含一个 cch00000 占位符。在请求真正离开进程之前Bun 的原生 HTTP 栈用 Zig 编写运行在 JavaScript 运行时之下会把这五个零替换成一个计算出的哈希值。服务端会验证这个哈希确认请求来自真实的 Claude Code 二进制文件而不是第三方伪造的客户端。之所以用等长的占位符是为了让替换不改变 Content-Length 头部也不需要缓冲区重新分配这是一个很细节的工程考量。整个计算过程发生在 JS 层之下对运行在 JS 里的任何代码都完全不可见。本质上是在 HTTP 传输层实现的 API 调用 DRM。这也是 Anthropic 此前向 OpenCode 发律师函背后的技术基础。Anthropic 不只是要求第三方工具不要使用他们的 API二进制文件本身通过加密证明了自己的身份。OpenCode 社区在收到法律通知后不得不诉诸会话拼接技巧和认证插件原因就在这里。06多 Agent 编排从子 Agent 到 Agent TeamsClaude Code 的多 Agent 编排采用了横向扩展的方式分为两层。第一层Sub-Agent子 Agent 以独立进程方式运行有自己的 TAOR 循环、自己的 Context 预算、自己的 maxTurns 上限、自己的记忆。任务完成后只把摘要返回给主 Agent主 Agent 的 Context 完全不受影响。Claude Code 内置了三种预设子 Agent各有分工Explore用 Haiku 模型速度快、成本低只有只读工具Read、Grep、Glob专门做文件发现和代码库探索Plan继承主 Agent 的模型只有只读工具专门做代码库研究和规划前的信息收集General-purpose继承主 Agent 的模型配备全套工具处理复杂的多步骤操作自定义子 Agent 通过 .md 文件加 YAML frontmatter 定义可以指定模型sonnet/opus/haiku/inherit、权限模式、maxTurns、可用工具白名单、禁用工具黑名单甚至可以预加载特定的 Skills。存储位置有三种~/.claude/agents/用户级、.claude/agents/项目级或通过 --agents CLI 参数指定。子 Agent 还支持前台和后台两种执行模式。前台模式会阻塞主对话权限询问和问题会透传给用户后台模式则在用户继续工作的同时并发运行权限在启动前就预先收集如果遇到没有预批准的权限请求工具调用直接失败Agent 继续运行。按 CtrlB 可以把正在运行的前台 Agent 切换到后台。第二层Agent Teams这不再是主 Agent 派遣子 Agent 的主从关系而是完全独立的 Claude Code 实例通过共享文件系统协调任务。两者区别Agent Teams 的协调机制包括Shared Task List所有 Agent 可见任务状态完成当前任务后自主认领下一个未分配任务、单播 Message发给特定 Teammate、Broadcast发给所有 Teammate注意成本随团队规模线性增长、以及 Automatic Idle NotificationTeammate 完成任务停止时自动通知 Lead。同时还有两个专门针对团队的质量门控 HookTeammateIdleTeammate 即将进入空闲时触发返回 exit code 2 可以发送反馈让它继续工作和 TaskCompleted任务即将被标记完成时触发返回 exit code 2 可以阻止完成并要求修复。但 Agent Teams 目前还是实验性功能需要通过 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS1 环境变量或 settings.json 启用。07还没发布的 KAIROS一个 Always-On Agent在这次泄露中有一个 Claude Code 还未发布的功能 KAIROS可以在后台持续运行的 Agent。根据 main.tsx 里的代码路径KAIROS 是一个功能门控的未发布模式包含以下特征/dream 技能用于夜间记忆蒸馏nightly memory distillation每日 append-only 日志GitHub Webhook 订阅后台 Daemon 工作进程每 5 分钟的 Cron 调度刷新把这些特征拼在一起是一个完全不同的产品形态常驻后台、持续学习、主动感知代码库变化的 Autonomous Agent。不是你召唤它它来帮你而是它一直在主动为你工作。现有的 Claude Code 是一个召唤式 Agent你打开终端它来帮你你关掉终端它就停了。但 KAIROS 描绘的是下一代形态Agent 在后台持续运行通过 GitHub Webhook 感知代码库的变化每天晚上做记忆蒸馏把当天的工作模式和项目状态压缩进长期记忆第二天一早已经「预热」好了。虽然不知道 Anthropic 内部对 KAIROS 的开发已经进展到了什么程度。但 KAIROS 的泄露说明了Claude Code 的产品野心已经远超「LLM 命令行包装」朝着「终端操作系统级 Agent」方向前进。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多文章