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的智能调度的。
- 创建API-key,直接去智谱、DeepSeek官网申请一个个人的API Key就可以。
- 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"
}
}
- 执行claude进入cc,再执行/model看一下自己当前的模型
命令
cd /path/to/your/project # 进入项目目录
claude # 启动交互模式
claude "任务描述" # 执行单词任务
claude -p "问题" # 快速查询然后退出
claude -c # 继续最近的对话
help # 查看帮助
# 然后你可以:
> 这个项目是做什么的? # 了解项目
> 帮我加一个 hello world 函数 # 修改代码(会请求确认)
> 提交我的更改 # Git 操作
从使用者到驾驭者
被动使用 大部分人会止步于此,比如当前的我。
用户 → 输入问题 → Claude 回答 → 完成
主动驾驭 即用户设计,AI自动执行。
用户 → 配置 Agent → Agent 自主工作 → 自动完成任务
举例
Claude Code底层技术全景图
Claude Code 的底层能力从技术上拆解可以分为四个层次:基础层、扩展层、集成层和编程接口层。
基础层: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 Mode | Claude Code 的纯文本模式,禁用 TUI |
-p vs --headless
| 参数 | 作用 |
|---|---|
-p | 执行完自动退出(不进入对话) |
--headless | 禁用 TUI,纯文本输入输出 |
关键:-p 只保证退出,但仍可能初始化 TUI;--headless 才真正禁用 TUI。
组合使用
| 命令 | 场景 |
|---|---|
claude | 本地交互开发 |
claude -p "任务" | 本地快速单次命令 |
claude -p "任务" --headless | CI/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% 确定 | 适合每次都必须执行的自动化操作(如代码格式化、日志记录),追求确定性。 |
数据流向
当用户输入“帮我修复 src/api.js 中的安全漏洞”之后,Claude 可能的处理流程如下。
- Memory 层:Claude 首先加载 CLAUDE.md,了解到这是一个 Node.js 项目,团队要求所有安全修复必须附带测试。
- 扩展层分发:
- 用户没有输入斜杠命令,所以 Commands 不参与。
- Claude 识别出“安全漏洞”关键词,激活 security-review Skill。
- Skill 指示 Claude 创建一个子代理来执行测试。
- Hooks 监控:Claude 准备执行Edit工具修改代码时,Hooks 自动运行预检查脚本,确保没有引入新的安全问题。
- 工具执行:通过 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 单独哪一项,而是硬件+软件的联合优化。
下面第二点,抛开模型,再谈工程层面的差异
- 提示词工程 大家都会迭代到差不多的水平
- 上下文管理 能拉开差距 大代码库下,该给模型看什么、不看什么,这是工程硬功夫 —— Claude Code就是专门研究这个的。
- 工具集设计 工具颗粒度、组合方式有讲究,但差距不大
- 可编程性/可扩展性:这是 Claude Code 目前最大的框架层优势 SubAgent、Skill、Hook、Headless、SDK、Plugin——这套体系让它从"工具"变成了"框架"。你可以用它编排多个代理、定义事件钩子、无人值守跑在 CI/CD 里、用 SDK 嵌入到自己的系统中。
但长期来看,Agent 框架层面会趋同。提示词工程会趋同,工具集会趋同,扩展机制也会被抄过去。 Coding Agent 排行榜中,Claude目前在这个榜上排名很靠前,因此目前本质上还是在拼模型。
摘抄自极客时间: time.geekbang.org/column/arti…