理解 Claude Code 的全栈能力
我使用 Claude Code 已经有几个月了。主要用于快速编辑和生成样板代码。就是大家都在谈论的那个氛围编程工具。
然后我真正探索了它的功能。MCP 服务器、Slash 命令、插件、Skills、Hooks、Subagents、CLAUDE.md 文件。
我被震撼了。Claude Code 不仅仅是一个编程助手。它是一个用于编排 AI Agent 的框架。它以我从未见过的方式加速开发。
大多数人只使用一两个功能。他们忽略了这些功能如何叠加在一起。本指南按照它们相互构建的顺序解释每个概念——从外部连接到自动化行为。
事后看来,Claude Code 这个名字起得不好。它不纯粹是一个编码工具:它是一个通用计算机自动化工具。任何你可以通过在计算机上输入命令来实现的事情,现在都可以通过 Claude Code 自动化。它最好被描述为一个通用 Agent。Skills 使这一点更加明显和明确。
— Simon Willison,Claude Skills 很棒,可能比 MCP 更重要
✨ TLDR
- → CLAUDE.md 文件为 Claude 提供项目记忆和上下文
- → Slash 命令是用户触发的、可重复的工作流
- → Subagents 在隔离的上下文中处理并行工作
- → Hooks 自动响应生命周期事件
- → 插件打包命令、hooks 和 skills 用于共享
- → MCP 通过通用协议连接外部工具
- → Skills 根据任务上下文自动激活
功能栈
- Model Context Protocol (MCP) — 连接外部工具和数据源的基础
- Claude Code 核心功能 — 项目记忆、slash 命令、subagents 和 hooks
- 插件 — 打包命令、hooks 和 skills 的可共享包
- Agent Skills — 基于任务上下文自动激活的模型调用能力

Claude Senpai 知道所有功能!
1) Model Context Protocol (MCP) — 连接外部系统
它是什么。 Model Context Protocol 将 Claude Code 连接到外部工具和数据源。可以想象成 GitHub、数据库、API 和其他系统的通用适配器。
它如何工作。 连接一个 MCP 服务器,就可以通过 slash 命令访问其工具、资源和 prompts:
# 安装服务器
claude mcp add playwright npx @playwright/mcp@latest
# 使用它
/mcp__playwright__create-test [args]
🚨 Context Window 管理
每个 MCP 服务器都会消耗上下文。使用 /context 监控并移除未使用的服务器。
注意事项。 MCP 服务器暴露它们自己的工具——除非明确提供,否则它们不会继承 Claude 的 Read、Write 或 Bash。
2) Claude Code 核心功能
2.1) 使用 CLAUDE.md 实现项目记忆
它是什么。 Claude 在启动时加载的 Markdown 文件。它们为 Claude 提供关于你项目的约定、架构和模式的记忆。
它如何工作。 文件从企业级 → 用户级 (~/.claude/CLAUDE.md) → 项目级 (./CLAUDE.md) 分层合并。当你引用 @components/Button.vue 时,Claude 也会读取该目录及其父目录的 CLAUDE.md。
Vue 应用的示例结构:
- my-vue-app
- CLAUDE.md
- src
- components
- CLAUDE.md
- Button.vue
- Card.vue
- pages
- CLAUDE.md
- Home.vue
- About.vue
- components
当你处理 src/components/Button.vue 时,Claude 会加载以下上下文:
- 企业级 CLAUDE.md(如果配置了)
- 用户级
~/.claude/CLAUDE.md(个人偏好) - 项目根目录
CLAUDE.md(项目范围信息) src/components/CLAUDE.md(组件特定模式)
应该写什么。 常用命令、编码标准、架构模式。保持简洁——参考指南,而非文档。需要帮助创建你自己的吗?查看这个 CLAUDE.md 创建指南。
这是我博客的 CLAUDE.md:
# CLAUDE.md
## 项目概述
Alexander Opalic 的个人博客,基于 AstroPaper 构建——基于 Astro 的博客主题,使用 TypeScript、React、TailwindCSS。
**技术栈**: Astro 5、TypeScript、React、TailwindCSS、Shiki、FuseJS、Playwright
## 开发命令
```bash
npm run dev # 构建 + Pagefind + 开发服务器 (localhost:4321)
npm run build # 生产构建
npm run lint # 对 .astro、.ts、.tsx 运行 ESLint
### 2.2) Slash 命令 — 显式、可重用的 prompts
**它们是什么。** `.claude/commands/` 中的 Markdown 文件,你通过输入 `/name [args]` 手动触发。用户控制的工作流。
**关键特性:**
* `$ARGUMENTS` 或 `$1`、`$2` 用于参数传递
* `@file` 语法用于内联代码
* `allowed-tools: Bash(...)` 用于预执行脚本
* [XML 标签 prompts](/posts/xml-tagged-prompts-framework-reliable-ai-responses/) 用于可靠输出
**何时使用。** 你按需触发的可重复工作流——代码审查、commit 消息、脚手架。想创建你自己的吗?使用这个 [slash 命令创建指南](/prompts/claude/claude-create-command)。
**示例结构:**
```markdown
---
description: 创建新的 slash 命令
argument-hint: [name] [purpose]
allowed-tools: Bash(mkdir:*), Bash(tee:*)
---
# /create-command
生成具有适当结构的 slash 命令文件。
**输入:** `$1` = 名称,`$2` = 目的
**输出:** `STATUS=WROTE PATH=.claude/commands/{name}.md`
[... 指令 ...]
命令可以创建命令。很 Meta,但很强大。
2.3) Subagents — 用于委派的专业化 AI 角色
它们是什么。 具有特定专业领域的预配置 AI 角色。每个 subagent 都有自己的 system prompt、允许的工具和独立的 context window。当 Claude 遇到与 subagent 专业知识匹配的任务时,它会自动委派。
为什么使用它们。 保持主对话清晰,同时卸载专业工作。每个 subagent 在自己的 context window 中独立工作,防止 token 膨胀。并行运行多个 subagents 以进行并发分析。
💪 避免上下文污染
Subagents 防止”上下文污染”——当详细的实现工作使你的主对话变得混乱时。对于会用噪音填充主要上下文的深入研究(安全审计、测试生成、重构)使用 subagents。
示例结构:
---
name: security-auditor
description: 分析代码中的安全漏洞
tools: Read, Grep, Bash # 控制这个角色可以访问什么
model: sonnet # 可选: sonnet、opus、haiku、inherit
---
你是一个专注于安全的代码审计员。
识别漏洞(XSS、SQL 注入、CSRF 等)
检查依赖和包
验证身份验证/授权
审查数据验证
提供严重性级别:关键、高、中、低。
专注于 OWASP Top 10。
system prompt 塑造 subagent 的行为。description 帮助 Claude 知道何时委派。tools 限制角色可以访问的内容。
最佳实践: 每个 subagent 一个专业领域。授予最小工具访问权限。对简单任务使用 haiku,对复杂分析使用 sonnet。并行运行独立工作。需要模板吗?查看这个 subagent 创建指南。
2.4) Hooks — 自动事件驱动操作
它们是什么。 .claude/settings.json 中的 JSON 配置处理器,在生命周期事件上自动触发。无需手动调用。
可用事件: PreToolUse、PostToolUse、UserPromptSubmit、Notification、Stop、SubagentStop、SessionStart
两种模式:
- Command: 运行 shell 命令(快速、可预测)
- Prompt: 让 Claude 通过 LLM 决定(灵活、上下文感知)
示例: 文件编辑后自动 lint。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/run-oxlint.sh"
}
]
}
]
}
}
#!/usr/bin/env bash
file_path="$(jq -r '.tool_input.file_path // ""')"
if [[ "$file_path" =~ \.(js|jsx|ts|tsx|vue)$ ]]; then
pnpm lint:fast
fi
常见用途: 编辑后自动格式化、bash 命令需要批准、验证写入、初始化会话。想创建你自己的 hooks 吗?使用这个 hook 创建指南。
3) 插件 — 可共享配置
它们是什么。 命令、hooks、skills 和 metadata 的可分发包。与团队成员共享你的设置或安装预构建的配置。
基本结构:
- my-plugin
- .claude-plugin
- plugin.json
- commands
- greet.md
- skills
- my-skill
- SKILL.md
- my-skill
- hooks
- hooks.json
- .claude-plugin
何时使用。 共享团队配置,打包领域工作流,分发固定模式,安装社区工具。
它如何工作。 安装插件,立即获得访问权限。组件无缝合并——hooks 组合、命令出现在自动完成中、skills 自动激活。准备好构建你自己的吗?查看这个插件创建指南。
4) Agent Skills — 自动的、任务驱动的能力
它们是什么。 包含 SKILL.md 描述符以及可选脚本的文件夹。与 slash 命令不同,skills 在其描述与任务上下文匹配时自动激活。
Claude 如何发现它们。 当你给 Claude 一个任务时,它会查看可用的 skill 描述以找到相关的。如果 skill 的 description 字段与任务上下文匹配,Claude 会加载完整的 skill 指令并应用它们。这是透明发生的——你永远不会显式调用 skills。
Claude Skills 很棒,可能比 MCP 更重要
— Simon Willison,Claude Skills 很棒,可能比 MCP 更重要
💪 高级 Skills:Superpowers 库
想要严格的、规范驱动的开发?查看 obra 的 superpowers——一个强制执行系统化工作流的综合 skills 库。
它提供什么: TDD 工作流(RED-GREEN-REFACTOR)、系统化调试、代码审查流程、git worktree 管理和头脑风暴框架。每个 skill 都推动你走向基于验证的开发,而不是”相信我,它能工作”。
理念: 实现前先测试。用证据验证。通过四个阶段系统化调试。编码前先计划。没有捷径。
这些 skills 一起工作以防止常见错误。头脑风暴 skill 在实现前激活。TDD skill 强制先编写测试。验证 skill 在没有证明的情况下阻止完成声明。
使用场景: 你希望 Claude 对开发实践更有纪律性,特别是对于生产代码。
放置位置:
~/.claude/skills/— 个人的,所有项目.claude/skills/— 项目特定的- 插件内部 — 可分发的
你需要什么:
- 带有 frontmatter 的
SKILL.md(name、description) - 可选的
allowed-tools声明 - 可选的辅助脚本
想创建你自己的 skill 吗?使用这个 skill 创建指南。
为什么它们强大。 Skills 打包了 Claude 自动应用的专业知识。样式强制、文档更新、测试卫生、框架模式——全部无需手动触发。
Skills vs CLAUDE.md。 将 skills 视为 CLAUDE.md 文件的模块化块。Claude 不是每次都查看庞大的文档,而是只在需要时访问特定的专业知识。这提高了上下文效率,同时保持自动化行为。
关键区别。 Skills 是”始终开启”的。Claude 根据上下文激活它们。命令需要手动调用。
🚨 Skills vs 命令:灰色地带
某些工作流可以是 skill 或命令。例如:git worktree 管理。
如果符合以下情况,将其设为 skill: 你希望 Claude 在与对话相关时自动考虑 git worktrees。
如果符合以下情况,将其设为命令: 你希望对 worktree 逻辑运行的时间进行显式控制(例如,/create-worktree feature-branch)。
重叠是真实存在的——根据你是喜欢自动激活还是手动控制来选择。
自动 vs 手动触发
Subagents 和 Skills 自动激活,当 Claude 确定它们与任务相关时。你不需要手动调用它们——Claude 在认为它们有用时主动使用它们。
Slash 命令需要手动触发——你输入 /command-name 来运行它们。
这是根本区别:自动化 vs 显式控制。
整合在一起
以下是这些功能在实践中如何协同工作:
- 记忆(
CLAUDE.md) — 建立 Claude 始终知道的项目上下文和约定 - Slash 命令 — 为你想按需触发的工作流创建显式快捷方式
- Subagents — 将并行或隔离的工作卸载给专业化 agents
- Hooks — 在关键生命周期事件中强制执行规则并自动化重复操作
- 插件 — 打包并分发你的整个设置给其他人
- MCP — 连接外部系统并使其能力作为命令可用
- Skills — 定义基于任务上下文激活的自动行为
示例:基于任务的开发工作流
这是一个结合多个功能的真实工作流:
设置阶段:
CLAUDE.md包含实现标准(“在我批准之前不要 commit”,“先编写测试”)/load-contextslash 命令用项目状态初始化新聊天update-documentationskill 在实现后自动激活- Hook 在文件编辑后触发 linting
计划阶段(聊天 1):
- 主 agent 计划 bug 修复或新功能
- 输出包含方法的详细任务文件
实现阶段(聊天 2):
- 使用
/load-context开始新上下文 - 输入来自聊天 1 的计划
- 实现 subagent 执行计划
update-documentationskill 自动更新文档/resolve-task命令标记任务完成
为什么这有效: 主上下文保持专注于计划。繁重的实现工作在隔离的上下文中进行。Skills 处理文档。Hooks 强制执行质量标准。没有上下文污染。
决策指南:选择正确的工具
功能比较
| 类别 | Skill | MCP | Subagent | Slash 命令 |
|---|---|---|---|---|
| 触发方式 | Agent | 两者 | 两者 | 工程师 |
| 上下文效率 | 高 | 低 | 高 | 高 |
| 上下文持久性 | ✅ | ✅ | ✅ | ✅ |
| 可并行化 | ❌ | ❌ | ❌ | ❌ |
| 可专业化 | ✅ | ✅ | ✅ | ✅ |
| 可共享 | ✅ | ✅ | ✅ | ✅ |
| 模块化 | 高 | 高 | 中 | 中 |
| 工具权限 | ✅ | ❌ | ✅ | ✅ |
| 可使用 Prompts | ✅ | ✅ | ✅ | ✅ |
| 可使用 Skills | ✅ | 有点 | ✅ | ✅ |
| 可使用 MCP 服务器 | ✅ | ✅ | ✅ | ✅ |
| 可使用 Subagents | ✅ | ✅ | ✅ | ❌ |
真实世界示例
| 用例 | 最佳工具 | 原因 |
|---|---|---|
| ”在 Vue 应用中始终使用 Pinia 进行状态管理” | CLAUDE.md |
适用于所有对话的持久上下文 |
| 生成标准化 commit 消息 | Slash 命令 | 当你准备好 commit 时触发的显式操作 |
| 同时检查 Jira tickets 和分析安全性 | Subagents | 具有隔离上下文的并行执行 |
| 每次文件编辑后运行 linter | Hook | 对生命周期事件的自动响应 |
| 共享你团队的 Vue 测试模式 | 插件 | 包含命令 + skills 的可分发包 |
| 查询 PostgreSQL 数据库生成报告 | MCP | 外部系统集成 |
| 在任何编辑期间检测样式指南违规 | Skill | 基于任务上下文的自动行为 |
| 从模板创建 React 组件 | Slash 命令 | 具有可重复结构的手动工作流 |
”永远不要在 TypeScript 中使用 any 类型” |
Hook | 代码更改后的自动强制执行 |
| 保存时自动格式化代码 | Hook | 事件驱动的自动化 |
| 连接到 GitHub 进行 issue 管理 | MCP | 外部 API 集成 |
| 并行运行综合测试套件 | Subagent | 隔离的、资源密集型工作 |
| 部署到 staging 环境 | Slash 命令 | 带有保护措施的手动触发 |
| 自动强制执行 TDD 工作流 | Skill | 上下文感知的自动行为 |
| 使用团队标准初始化新项目 | 插件 | 可共享的完整配置 |