Claude Code底层技术全景导览

49 阅读12分钟

Claude Code是什么?

目前有使用Claude Code进行代码编程,但使用下来的整体体感仍然是在和大模型进行对话。我提出我的诉求,它能够跨文件检索代码文件,然后提出自己的思路,并更改我的文件。但这种使用程度,我觉得自己对cc的理解太浅了。所以cc到底是什么?

Claude Code的的真正身份是:一个可编程、可扩展、可组合的 AI Agent 框架。

Claude Code的安装和使用

安装:直接进入官网,按照示例进行安装即可。

# macOS / Linux / WSL(推荐,自动更新)
curl -fsSL https://claude.ai/install.sh | bash

# Windows PowerShell
irm https://claude.ai/install.ps1 | iex

# 或使用 Homebrew(需手动更新)
brew install --cask claude-code

模型:Claude Code默认调用的是Anthropic的Claude系列模型,不支持国内使用。但是可以通过修改配置文件自行更换底层使用的大模型来使用cc agent的智能调度的。

  1. 创建API-key,直接去智谱、DeepSeek官网申请一个个人的API Key就可以。

image.png

  1. cc通过读取~/.claude/settings.json中的env字段注入模型调用所需的所有参数,因此可以修改这个文件来写入自己要调用的模型,这里使用的是deepseek模型。
open ~/.claude/setting.json

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "申请创建的API KEY",
    "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
    "ANTHROPIC_MODEL": "deepseek-reasoner",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-reasoner",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-reasoner",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-reasoner",
    "CLAUDE_CODE_SUBAGENT_MODEL": "deepseek-reasoner",
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "32000"
  }
}

  1. 执行claude进入cc,再执行/model看一下自己当前的模型

image.png

命令

cd /path/to/your/project   # 进入项目目录
claude                      # 启动交互模式
claude "任务描述"            # 执行单词任务
claude -p "问题"            # 快速查询然后退出
claude -c                  # 继续最近的对话
help                       # 查看帮助

# 然后你可以:
> 这个项目是做什么的?              # 了解项目
> 帮我加一个 hello world 函数      # 修改代码(会请求确认)
> 提交我的更改                      # Git 操作

从使用者到驾驭者

被动使用 大部分人会止步于此,比如当前的我。

用户 → 输入问题 → Claude 回答 → 完成

主动驾驭 即用户设计,AI自动执行。

用户 → 配置 Agent → Agent 自主工作 → 自动完成任务

举例

image.png

Claude Code底层技术全景图

Claude Code 的底层能力从技术上拆解可以分为四个层次:基础层、扩展层、集成层和编程接口层。

image.png

基础层:Memory(记忆系统)

基础层也可以称为是 Claude Code 的长期记忆系统,它的核心文件是 CLAUDE.md。

但需要注意的是,Claude Code 并不是只有一个CLAUDE.md记忆文件,全局、项目和项目的特定模块都可以拥有属于自己的记忆文件(或者也可以叫配置文件)。

~/.claude/CLAUDE.md           # 全局(所有项目共用)
    ↓
项目根目录/CLAUDE.md          # 项目级(当前项目)
    ↓
项目根目录/.claude/rules/*.md # 模块级(特定目录)

扩展层:四大核心组件

Commands(斜杠命令)

Commands 是显式、可复用、可审计、通过斜杠命令固定触发的操作指令集,是相对固化的标准流程,其触发方式是用户手动输入。

用户输入: /review
Claude 执行: 根据 .claude/commands/review.md 的指令审查代码

适合标准化操作——团队统一的 commit 格式、固定的部署流程等,可以使用Claude Code 内置的Commands或者自己定义。

Skills(技能)

Skills 是隐式、可适配、可组合、通过语义推理自动激活的专家行为模式封装,是针对特定领域能力的完整定义(包括触发条件、推理逻辑、执行策略与质量准则)。

用户说: "帮我看看这段代码有没有安全问题"

Claude 思考: 这是代码安全审查任务 → 激活 security-review Skill

Claude 执行: 按照 Skill 中定义的流程审查代码

这个过程中,Claude 的隐式判断执行流程:

1️⃣ 这是代码吗?——是
2️⃣ 这是哪一类代码?——Node.js 后端
3️⃣ 上下文是否涉及用户输入?——是
4️⃣ 是否存在鉴权逻辑?——是
5️⃣ 是否值得深入做安全审查?——是

做完这些判断之后,就会自动激活 security-review Skill。

在 Skill 内部,是“像专家一样”的行为说明,它不会跑固定 checklist,而是根据语言选择重点、根据上下文跳过无关项、在发现高风险点时主动深挖、在安全风险低时明确告诉你“为什么没问题” —— 这不是流程执行,这是专家判断。

SubAgents(子代理)

SubAgents 是隔离式、可委派、通过语义判断或显式调用触发的独立执行单元,是针对专项任务的完整封装(包括独立上下文、明确职责边界、受限权限与结果汇报机制)。

主 Claude: 这个任务需要跑大量测试,让我创建一个子代理来处理。

子代理(test-runner): 执行测试,只把结果汇报给主 Claude

SubAgents 解决的是单一 Agent 的上下文、权限与职责无法无限膨胀的规模化问题——将复杂任务拆解为多个拥有独立上下文、明确职责和受限权限的子代理,已成为多智能体系统中的工程共识。

其核心特征在于:

  • 隔离执行:子代理拥有独立的上下文窗口,主 Agent 不受其内部细节(如大量日志检索、重复试错)的干扰。
  • 职责单一:每个子代理只负责一个专项任务,边界清晰。
  • 权限受限:可根据任务需要授予特定权限(如只读、仅访问特定目录),降低安全风险。
  • 结果汇报:子代理完成任务后只向主 Agent 汇报结果,而非将全部中间状态带回。

Hooks(钩子)

钩子是在特定事件触发时自动执行的脚本,其触发方式是事件自动触发。

事件: Claude 即将执行 Edit 工具

Hook: 自动检查是否有安全敏感内容

结果: 如果发现问题,阻止执行并警告

Hooks 适合自动化检查——格式化、安全检查、日志记录等。

集成层

集成层,负责agent与外界的链接。

MCP(Model Context Protocol)

MCP 让 Claude 连接外部工具和服务,适合工具连接——可以把任何外部系统变成 Claude 可调用的工具。

Claude → MCP → 数据库
Claude → MCP → Jira
Claude → MCP → 自定义 API

编程接口层(Agent SDK)

当配置式的扩展不够用时,你可以用代码来驱动 Claude。这种方式适合构建自定义 Agent——完全控制执行流程、自定义工具、复杂工作流。

from claude_sdk import ClaudeSDKClient

client = ClaudeSDKClient()

# 执行任务
result = client.query(
    prompt="Review this code for security issues",
    tools=["Read", "Grep"],
    max_turns=10
)

Headless(无头模式)

无头模式让 Claude Code 在没有人工交互的情况下运行,适合  CI/CD 集成——自动代码审查、自动修复、自动生成变更日志等。

# GitHub Actions 中
- name: Auto-fix code issues
  run: claude --headless "Fix all linting errors in src/"

Headless 模式与 TUI 简要总结

概念一句话解释
Terminal(终端)命令行运行环境,如 iTerm2、终端.app
TUI终端里的全屏交互界面,如 vim、htop、claude
Headless ModeClaude Code 的纯文本模式,禁用 TUI

-p vs --headless

参数作用
-p执行完自动退出(不进入对话)
--headless禁用 TUI,纯文本输入输出

关键-p 只保证退出,但仍可能初始化 TUI;--headless 才真正禁用 TUI。

组合使用

命令场景
claude本地交互开发
claude -p "任务"本地快速单次命令
claude -p "任务" --headlessCI/CD、Docker、自动化脚本

为什么 CI/CD 必须用 --headless

  • GitHub Actions、Docker 等环境可能不支持 TUI
  • -p 单独使用会因终端初始化失败
  • --headless 跳过所有终端相关操作

示例

# CI/CD 正确用法
claude -p "审查代码" --headless --output-format json

# 管道输入
git diff | claude -p "分析变更" --headless

组件关系和技术选型指南

触发方式

组件触发方式触发者确定性技术选型建议
Commands/command用户100% 确定适合每次都必须执行的操作(如代码格式化),追求确定性。
Skills语义推理(skill-name 或意图)AI(Claude)概率性适合希望 AI 智能判断何时使用的场景(如安全分析),可接受概率性。
SubAgents用户指定 或 AI 决定用户 / AI用户指定时 100%;AI 决定时概率性适合任务可能很重,且希望手动/自动可控的场景。用户需要确定性时可显式指定,希望灵活性时可交由 AI 判断。
Hooks事件触发系统100% 确定适合每次都必须执行的自动化操作(如代码格式化、日志记录),追求确定性。

数据流向

image.png

当用户输入“帮我修复 src/api.js 中的安全漏洞”之后,Claude 可能的处理流程如下。

  1. Memory 层:Claude 首先加载  CLAUDE.md,了解到这是一个 Node.js 项目,团队要求所有安全修复必须附带测试。
  2. 扩展层分发:
    • 用户没有输入斜杠命令,所以 Commands 不参与。
    • Claude 识别出“安全漏洞”关键词,激活  security-review Skill。
    • Skill 指示 Claude 创建一个子代理来执行测试。
  3. Hooks 监控:Claude 准备执行Edit工具修改代码时,Hooks 自动运行预检查脚本,确保没有引入新的安全问题。
  4. 工具执行:通过 Read、Edit 等工具完成代码修改。MCP 链接:如果配置了 Jira MCP,还可以自动更新相关的 ticket 状态。

关键洞察:Memory 是基础设施,始终存在;扩展层是能力中心,按需激活;Hooks 是守门人,监控一切。

Plugins:打包容器

当你开发了一套好用的 Commands、Skills、Hooks 组合,想要分享给团队或社区时,就需要 Plugins。Plugin 的价值在于可复用、可版本化、可分发。

my-team-plugin/
├── commands/           # 斜杠命令
│   └── review.md
├── skills/             # 技能
│   └── security-check/
│       └── SKILL.md
├── agents/             # 子代理
│   └── test-runner.md
├── hooks/              # 钩子
│   └── pre-edit.sh
└── plugin.json         # 插件配置

下面是一个典型的 Plugins 使用场景:

你是团队的技术 Lead,花了两周时间打磨出一套完美的代码审查流程:
a. 一个  /review  命令触发审查
b. 一个  code-quality Skill 自动分析代码质量
c. 一个  test-runner  子代理执行测试
d. 一个 Hook 确保所有修改都有对应的测试。
与其让团队成员手动复制这些文件,不如打包成一个 Plugin,新成员只需一条命令就能获得完整的工作流。

组合使用

真实世界的问题很少能用单一技术解决。Claude Code 的强大之处在于组件可组合——每个组件做好自己的事,组合起来完成复杂任务。

假设你想实现这样一个流程:每当有人提交 PR,自动进行代码审查,发现问题就评论,没问题就通过。这需要组合多种技术:

1. Headless 模式在 CI 中触发 
   └── GitHub Actions 监听 PR 事件,调用 claude --headless

2. 调用 code-review SubAgent 
   └── 隔离审查任务,避免污染主流程上下文
   
3. SubAgent 使用 security-check Skill 
   └── 自动识别安全相关代码,应用专业审查规则

4. Hooks 记录审查日志 
   └── 每次工具调用都记录,便于审计和调试

5. 结果通过 MCP 发送到 Slack 
   └── 审查完成后通知相关人员

这五个步骤涉及五种不同的技术,但组合在一起就是一个完整的自动化流程。这就是可组合的威力。

Claude Code与其它Agent的区别是什么?

:关于 claude code 本身,如果我们抛开背后的模型层,抛开围绕 claude code 建立的生态,只说这个 coding agent,相比 codex,opencode 这些cli,他的优势到底是什么? 我理解 coding agent 的核心就是一个 loop,这个 loop是 构建消息 > 发给大模型 > 大模型回答 > 调用工具 > 继续构建消息(历史所有问答+工具输出) 直到大模型认为可以结束 or 人为终止 所有的 cli coding agent 几乎都是这样做的,包括这一讲里的这些扩展能力,我觉得其他 cli coding agent 想做的话也能做好 那排除模型和生态, cli coding agent 还是在拼提示词工程,上下文记忆,工具集这些?这些才是 cli agent 应该要比拼的地方?但是这些方向真的可以拉开差距吗?感觉解决方法都大同小异。

:核心 Loop 大家都一样 构建消息 → LLM → 工具调用 → 拼回上下文 → 循环 这个 Loop 也没有啥大秘密。Claude Code、Codex CLI、Aider、OpenCode,底层都是这个。开源实现几百行代码就能搞一个能跑的版本。

那差异到底在哪? 坦率讲,模型是最大的差异项,你说"抛开模型",但这其实很难抛开——Claude Code 和 Claude 模型是联合优化的。Anthropic 同时控制 Agent 框架和模型训练,可以做到:

  • 模型层面针对工具调用场景做专项优化(什么时候该调工具、调哪个、怎么组合)
  • Agent 层面针对模型的输出特征做适配 这种垂直整合是第三方 CLI 做不到的。就像 iPhone 的优势不是芯片或 iOS 单独哪一项,而是硬件+软件的联合优化。

下面第二点,抛开模型,再谈工程层面的差异

  1. 提示词工程 大家都会迭代到差不多的水平
  2. 上下文管理 能拉开差距 大代码库下,该给模型看什么、不看什么,这是工程硬功夫 —— Claude Code就是专门研究这个的。
  3. 工具集设计 工具颗粒度、组合方式有讲究,但差距不大
  4. 可编程性/可扩展性:这是 Claude Code 目前最大的框架层优势 SubAgent、Skill、Hook、Headless、SDK、Plugin——这套体系让它从"工具"变成了"框架"。你可以用它编排多个代理、定义事件钩子、无人值守跑在 CI/CD 里、用 SDK 嵌入到自己的系统中。

但长期来看,Agent 框架层面会趋同。提示词工程会趋同,工具集会趋同,扩展机制也会被抄过去。 Coding Agent 排行榜中,Claude目前在这个榜上排名很靠前,因此目前本质上还是在拼模型。

摘抄自极客时间: time.geekbang.org/column/arti…