Skip to content

13 — 扩展机制与辅助子系统

概述

本章覆盖 Claude Code 的 四大扩展机制(Skills、Plugins、Hooks、MCP)以及各种辅助子系统(Vim、快捷键、Memory、Voice 等)。

理解扩展机制的关键是理解它们的 定位差异

扩展机制复杂度提供能力适用场景
MCP中等新工具(远程 RPC)连接外部服务(GitHub、数据库等)
Skills可复用 prompt 模板固化常用操作流程
Plugins工具 + 命令 + 钩子 + MCP完整功能扩展包
HooksShell 钩子安全检查、自动格式化等

MCP — 外部工具协议

MCP (Model Context Protocol) 是最主要的扩展机制。详细内容见 07-服务层,这里补充其作为扩展点的视角。

MCP 工具如何被模型使用

MCP 工具在模型看来与内置工具没有区别——它们共享相同的权限检查和执行管线。

MCP 配置方式

json
// .mcp.json (项目级) 或 ~/.claude/settings.json (全局)
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "..." }
    }
  }
}

Skills 系统 (src/skills/)

Skill 是 可复用的 prompt 模板——本质上是预定义的指令,可以包含上下文收集、模型调用、甚至并行 Agent 启动。

Skill 接口

typescript
type BundledSkillDefinition = {
  name: string
  description: string
  aliases?: string[]
  allowedTools?: string[]           // 可用工具列表
  model?: string                    // 覆盖模型
  context?: 'inline' | 'fork'       // 执行模式
  isEnabled?: () => boolean         // 运行时开关
  
  getPromptForCommand(
    args: string,
    context: ToolUseContext,
  ): Promise<ContentBlockParam[]>   // 生成 prompt
}

执行模式

模式说明适用场景
inlineSkill prompt 注入当前对话轻量操作,不需要隔离
fork (默认)启动子代理执行 Skill需要独立 token 预算的操作

内置 Skills

Skill文件说明
simplifysimplify.ts代码简化审查——启动 3 个并行 Agent 检查复用性、质量、效率
claude-apiclaudeApi.tsClaude API 开发指导——检测语言、注入 SDK 文档
keybindingskeybindings.ts快捷键配置帮助
update-configupdateConfig.ts设置/Hook 配置引导
looploop.ts循环执行命令(定时轮询)
schedulescheduleRemoteAgents.ts远程 Agent Cron 调度
verifyverify.ts代码验证
rememberremember.ts记忆保存
batchbatch.ts批量处理
debugdebug.ts调试辅助
stuckstuck.ts卡住时的帮助
skillifyskillify.ts将操作提炼为新 Skill

Skills vs Commands 的区别

特性SkillsCommands
调用方式模型通过 SkillTool 或用户通过 /skill用户通过 /command
实现prompt 模板 + 可选 AgentTypeScript 函数或 React 组件
能力利用模型生成内容直接操作系统/状态
扩展性可从 Plugin、MCP、用户自定义需要代码编写

Plugin 系统 (src/plugins/)

Plugin 是最重量级的扩展机制——一个 Plugin 可以同时提供 Skills、Hooks、MCP 服务器和自定义命令。

Plugin 结构

typescript
type LoadedPlugin = {
  name: string
  manifest: PluginManifest              // 名称、描述、版本
  path: string                          // 文件系统路径
  source: string                        // 来源 (github:owner/repo)
  enabled?: boolean
  
  // Plugin 可以提供的能力:
  skillsPaths?: string[]                // Skill 定义文件
  commandsPath?: string                 // 自定义命令
  hooksConfig?: HooksSettings           // Hook 配置
  mcpServers?: Record<string, McpServerConfig>  // MCP 服务器
  lspServers?: Record<string, LspServerConfig>  // LSP 服务器
  settings?: Record<string, unknown>    // 插件配置
}

安装与管理

文件说明
plugins/bundled/index.ts内置 Plugin 注册
plugins/builtinPlugins.ts内置 Plugin 定义
services/plugins/PluginInstallationManager.ts安装管理器
services/plugins/pluginOperations.tsCRUD 操作
services/plugins/pluginCliCommands.tsCLI 命令实现
utils/plugins/Plugin 工具函数
utils/dxt/DXT 格式支持(打包格式)

Hooks 系统 (utils/hooks/)

Hooks 的详细执行模型见 08-权限。这里补充其作为扩展点的用法:

常见 Hook 用例

用例Hook 事件实现
自动格式化PostToolUse + matcher: FileWriteprettier --write $FILE
安全审查PreToolUse + matcher: Bash自定义安全检查脚本
CI 集成PostToolUse + matcher: Bash触发 CI pipeline
日志记录PostToolUse (all)记录所有工具调用
测试运行PostToolUse + matcher: FileEdit文件修改后自动跑测试

Hook 可以修改工具行为

Hook 不仅仅是"旁观者"——PreToolUse Hook 返回 {"decision": "block"} 可以 阻止工具执行PostToolUse Hook 可以 注入额外上下文 到模型的下一轮输入中。

Vim 模式 (src/vim/)

完整的 Vim 编辑模式,用于 REPL 输入框。

文件说明
types.ts模式状态 (Normal / Insert / Visual / Command)
motions.ts光标移动 (w/b/e/0/$/ hjkl / gg/G 等)
operators.ts操作符 (d/c/y/p 等)
textObjects.ts文本对象 (iw/aw/i"/a" 等)
transitions.ts模式转换 (i→Insert, Esc→Normal 等)

通过 /vim 命令切换开关。启用后,VimTextInput.tsx 替代普通的 TextInput.tsx

快捷键系统 (src/keybindings/)

用户可自定义的快捷键系统。支持单键、组合键和 Chord(多步连击)。

文件说明
defaultBindings.ts默认快捷键表
loadUserBindings.ts加载 ~/.claude/keybindings.json
schema.ts快捷键 Schema 验证
parser.ts按键序列解析 (ctrl+shift+p → 结构化对象)
match.ts按键匹配 (输入事件 → 绑定查找)
resolver.ts绑定解析器 (合并默认+用户,处理冲突)
validate.ts配置验证
reservedShortcuts.ts系统保留的快捷键 (不可覆盖)
KeybindingContext.tsxReact Context
KeybindingProviderSetup.tsxProvider 初始化
useKeybinding.tsHook: 注册快捷键
useShortcutDisplay.tsHook: 格式化显示

Memory 系统 (src/memdir/)

基于文件系统的持久化记忆,跨会话保持用户偏好和项目上下文。

记忆类型

类型说明示例
user用户角色、偏好"资深 Go 工程师,React 新手"
feedback行为修正/确认"不要在响应末尾加摘要"
project项目动态"3/5 起代码冻结"
reference外部资源指针"Bug 在 Linear 的 INGEST 项目"

文件结构

~/.claude/projects/<project>/memory/
├── MEMORY.md                # 索引文件 (每行一个指针)
├── user_role.md             # 记忆文件 (含 frontmatter)
├── feedback_testing.md
└── project_freeze.md

每个记忆文件有 YAML frontmatter(name, description, type),MEMORY.md 是索引。

记忆使用流程

文件说明
memdir.tsMemory 目录管理
paths.ts路径计算
memoryTypes.ts记忆类型定义
findRelevantMemories.ts相关记忆查找
memoryAge.ts记忆时效管理
memoryScan.ts记忆扫描
teamMemPrompts.ts团队记忆 Prompt
teamMemPaths.ts团队记忆路径

Voice 系统

语音输入功能(Feature Flag: VOICE_MODE)。

文件说明
voice/voiceModeEnabled.ts语音模式启用判断
services/voice.ts语音服务
services/voiceStreamSTT.ts流式语音转文字 (STT)
services/voiceKeyterms.ts关键词识别
hooks/useVoice.tsVoice Hook
hooks/useVoiceIntegration.tsx语音集成
context/voice.tsxVoice Context

配置系统 (src/utils/settings/)

Claude Code 的配置来自多个来源,按优先级从高到低合并:

文件说明
settings.ts主配置逻辑
types.tsSettingsJson 类型定义
validation.ts配置验证
settingsCache.ts缓存 (避免重复读文件)
changeDetector.ts变更检测 (实时监听配置文件)
applySettingsChange.ts应用变更
mdm/MDM (企业设备管理) 设置读取

迁移 (src/migrations/)

每当配置格式或默认值变化时,迁移脚本确保旧版配置自动升级:

文件说明
migrateOpusToOpus1m.tsOpus → Opus 1M 模型迁移
migrateSonnet45ToSonnet46.tsSonnet 4.5 → 4.6
migrateFennecToOpus.tsFennec (内部代号) → Opus
migrateBypassPermissionsAcceptedToSettings.ts权限配置格式变更
migrateAutoUpdatesToSettings.ts自动更新设置迁移

其他辅助子系统

子系统目录说明
Buddysrc/buddy/虚拟伙伴精灵 (ASCII 动画彩蛋)
Context Providerssrc/context/React Context:通知、模态框、邮箱、统计、FPS、语音
Native TSsrc/native-ts/纯 TS 实现的底层模块:Yoga Layout、Color Diff、File Index
Coordinatorsrc/coordinator/协调者模式 (Feature Flag: COORDINATOR_MODE)
Assistantsrc/assistant/Kairos 助手模式 (Feature Flag: KAIROS)
OutputStylessrc/outputStyles/可自定义的输出风格加载器
Querysrc/query/Query 引擎配置 (非交互模式的参数)
Morerightsrc/moreright/扩展右侧面板

src/utils/ — 工具函数总览

utils/ 是项目中最大的目录(30+ 子目录),包含各种工具函数。以下是按功能分组的索引:

子目录说明主要被谁使用
settings/配置管理全局
permissions/权限逻辑Tool 执行
swarm/Swarm/TeammateTeamCreate
hooks/用户钩子执行Tool 执行
sandbox/沙箱隔离BashTool
git/Git 操作context.ts, 各种命令
github/GitHub 集成命令/工具
model/模型选择/切换main.tsx, /model
messages/消息处理/序列化query.ts, API
processUserInput/用户输入路由REPL
bash/ / powershell/ / shell/Shell 执行辅助BashTool, PowerShellTool
memory/Memory 工具memdir
skills/Skills 工具SkillTool
plugins/Plugins 工具Plugin 系统
task/Task 工具Task 系统
todo/Todo 工具TodoWriteTool
background/后台任务Remote Session
telemetry/遥测Analytics
teleport/Teleport (跨设备)/teleport
suggestions/输入建议/补全PromptInput
computerUse/Computer Use实验性
claudeInChrome/Chrome 扩展集成实验性
deepLink/Deep Link 处理桌面端
dxt/DXT (插件打包格式)Plugin 系统
filePersistence/文件持久化会话存储
nativeInstaller/原生安装器升级/安装
secureStorage/安全存储 (Keychain)认证
ultraplan/Ultra Plan实验性