1. Skill 系统:按需加载的能力模块
1.1 什么是 Skill?
Skill 是 Claude Code 的能力插件系统,相当于给 AI 配备的"专业说明书"。与 CLAUDE.md 不同,Skill 不是每次对话都加载,而是按需调用——只有当任务匹配时,才会被激活并注入上下文。
1.2 Skill 的分类
| 类型 | 说明 | 示例 |
|---|---|---|
| 知识型 | 提供特定领域的最佳实践和规范 | 代码审查指南、安全规范 |
| 流程型 | 定义多步骤的工作流程 | PR 创建流程、发布流程 |
| 工具型 | 封装特定工具的使用方法 | 数据库迁移、测试运行 |
| 混合型 | 结合以上多种类型 | 完整的 CI/CD 技能包 |
1.3 为什么 Skill 不写在 CLAUDE.md 里?
核心原则:不是必用,但是常用。
CLAUDE.md 的内容会在每次会话启动时自动加载到系统提示词中,占用 Token 预算。而 Skill 采用懒加载策略——每次运行 Agent 时,系统只向大模型发送 Skill 的元信息(名称、描述、触发条件),让模型知道"有哪些说明书可用"以及"什么时候该调用哪个"。只有当模型判断需要时,才会加载完整的 Skill 内容。
1.4 Skill 的作用域
与 CLAUDE.md 类似,Skill 也区分全局和项目级:
- 全局 Skill:存放在
~/.claude/skills/,对所有项目生效 - 项目 Skill:存放在项目
.claude/skills/,仅对当前项目生效
1.5 发现与安装 Skill
Claude Code 提供了一个元 Skill —— find-skill,可以用自然语言搜索和安装社区 Skill:
/find-skill 我需要一个能帮我生成 API 文档的 Skill
CC 会自动搜索匹配的 Skill 并协助安装,无需手动查找和配置。
2. MCP(Model Context Protocol):AI 的 Type-C 转接头
2.1 什么是 MCP?
MCP 是 Claude Code 与外部系统通信的标准协议,可以理解为"AI 领域的 Type-C 转接头"。通过 MCP Server,CC 能够读取和操作第三方工具的数据,例如:
- NotebookLM:读取研究笔记和知识图谱
- Figma:获取设计稿数据并生成前端代码
- 数据库:直接查询和修改数据
- 浏览器:自动化网页操作
2.2 MCP 的代价
MCP 的主要缺点是占用 Token 数量大。每个 MCP Server 的工具定义、参数 schema 都会注入到系统提示词中,多个 MCP 同时启用时会显著消耗上下文空间。
2.3 当前趋势
社区正在形成两个方向的演进:
- 轻量级功能 → 转为 Skill:不需要持续连接的工具,按需加载
- 重量级功能 → 转为 CLI:需要频繁交互的工具,通过命令行接口调用(详见第 3 节)
3. CLI 集成:AI 的母语
3.1 为什么是 CLI?
一个反直觉的结论:AI 学习可视化操作的成本,比操作命令行大得多。命令提示词才是 AI 的"母语"——结构化的输入输出、明确的参数、可预测的格式,这些天然适合大模型理解和调用。
3.2 厂商的 AI 化转型
越来越多的厂商开始将原本面向人类点击操作的功能和接口,封装成 CLI 来提供给 AI 使用。你可以通过 CC 安装各种开源 CLI 工具,例如:
- 飞书 CLI:发送邮件、创建文档、建日历、导出文档等
- openCli:查询本地生活数据(如"杭州必吃榜"),获取社交媒体上的数据和图片
3.3 ! Bash 模式详解
! 是 CC 中直接执行 Shell 命令的前缀,是 CLI 工具与 CC 协同的核心入口。
基本用法
在对话中输入 ! 加空格,后面跟上任意 Shell 命令即可执行:
! npm install lodash
! git status
! curl https://api.example.com/data
命令的完整输出(stdout + stderr)会反馈给 Claude,形成"执行 → 读取结果 → 下一步决策"的闭环。
典型场景
| 场景 | 示例 |
|---|---|
| 安装依赖 | ! npm i axios |
| 运行脚本 | ! npm run test |
| Git 操作 | ! git diff HEAD~1 |
| 调用 CLI 工具 | ! feishu doc create --title "周报" |
| 系统命令 | ! ls -la src/ |
注意事项
!命令的执行仍需经过权限模式的审批(除非在 Bypass Permissions 模式下)- 长时间运行的命令可以使用
run_in_background参数在后台执行 - 命令输出过长时会被截断,建议配合
head、tail等工具控制输出量
4. SubAgent:分身协作
4.1 调用方式
SubAgent 是主 Agent 启动的子任务执行者,有三种调用模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 主 Agent 自主调用 | 模型判断需要并行处理时自动启动 | 多文件搜索、独立验证 |
| 手动提示调用 | 用户明确要求启动子代理 | 指定特定类型的审查 |
| 提示主 Agent 生成并调用 | 让模型动态生成子代理配置 | 自定义任务类型 |
4.2 使用建议
- 独立任务并行化:多个不依赖彼此的搜索/读取操作,用多个 SubAgent 同时执行
- 保护主上下文:将大量阅读工作委托给 SubAgent,只返回摘要,避免主上下文被污染
- 类型匹配:根据任务选择合适的子代理类型(Explore 用于搜索、Plan 用于设计等)
5. Hooks:事件驱动的自动化
5.1 什么是 Hooks?
Hooks 是 Claude Code 的事件触发器——"指定什么条件,执行什么动作"。例如:
"帮我写一个当任务完成时,'叮'一下的 Hook"
Hook 会在特定事件发生时自动执行预设的 Shell 命令,无需人工干预。
5.2 常见 Hook 场景
| 事件 | 示例动作 |
|---|---|
| 任务完成 | 播放提示音、发送通知 |
| 文件修改前 | 自动备份、运行 lint |
| 会话启动 | 加载特定配置、显示状态 |
| 工具调用后 | 记录日志、触发验证 |
5.3 配置方式
Hooks 配置在项目或全局的 settings.json 中:
{
"hooks": {
"PostToolUse": {
"Edit": "echo '叮~ 文件已修改'"
}
}
}
6. 插件:一体化打包
插件是将上述工具(Skill、MCP、CLI、Hook)打包到一起的组合体。一个插件可能包含:
- 一个或多个 Skill(能力模块)
- 一个 MCP Server(外部连接)
- 预配置的 Hook(自动化触发)
- 甚至可能只是一个单独的 Skill 或 MCP
插件的价值在于开箱即用——安装一个插件,就能获得完整的工作流支持,无需逐个配置。
7. MCP 配置实战
7.1 安装 MCP Server
MCP Server 通过 settings.json 配置,支持 stdio 和 sse 两种传输方式:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"
}
}
}
}
7.2 MCP 调试技巧
- 使用
/context查看已加载的 MCP Server 列表 - 如果 MCP 工具不生效,检查
settings.json语法和命令路径 - 对于
stdio模式,确保命令能在终端中独立运行
7.3 MCP 安全注意事项
- 最小权限原则:只授予 MCP Server 必要的访问权限
- 敏感信息隔离:Token 等密钥不要硬编码在
settings.json中,使用环境变量 - 目录限制:文件系统类 MCP 应限制可访问的目录范围
8. Hook 事件类型详解
8.1 可用事件
| 事件 | 触发时机 | 示例用途 |
|---|---|---|
PreToolUse | 工具调用前 | 拦截危险操作、二次确认 |
PostToolUse | 工具调用后 | 记录日志、播放提示音 |
Notification | CC 发送通知时 | 自定义通知格式 |
SessionStart | 会话启动时 | 加载特定配置、显示欢迎信息 |
SessionEnd | 会话结束时 | 保存状态、生成摘要 |
8.2 实战示例
{
"hooks": {
"PostToolUse": {
"Edit": "echo '📝 文件已修改'",
"Bash": "echo '⚡ 命令已执行'"
},
"SessionStart": "echo '👋 欢迎回来,上次会话已恢复'"
}
}
9. 自定义 Skill 编写
9.1 Skill 文件结构
一个 Skill 本质上是一个 Markdown 文件,包含 YAML frontmatter 和正文指令:
---
name: my-skill
description: 描述这个 Skill 做什么
---
当用户要求做 X 时,按照以下步骤执行:
1. 第一步...
2. 第二步...
3. 验证...
9.2 编写原则
- 描述要具体:description 字段决定模型何时调用此 Skill
- 指令要可执行:避免模糊描述,给出明确的步骤和判断标准
- 保持精简:Skill 内容越长,加载时消耗的 Token 越多