Skip to content

插件与技能系统

Claude Code 的扩展性通过插件(Plugins)和技能(Skills)两个系统实现。

架构关系

┌─────────────┐    ┌─────────────┐
│   Plugins   │    │   Skills    │
│ (容器/包)    │    │ (能力单元)   │
│             │    │             │
│ ┌─────────┐ │    │ ┌─────────┐ │
│ │ Skill A │ │    │ │ Skill X │ │
│ │ Skill B │ │    │ │ Skill Y │ │
│ └─────────┘ │    │ └─────────┘ │
└─────────────┘    └─────────────┘
       │                  │
       └────────┬─────────┘

        Command[] 注册


        命令面板可用

插件系统 (plugins/)

builtinPlugins.ts

builtinPlugins.ts 管理内置插件的注册和获取。

主要导出:

  • BUILTIN_MARKETPLACE_NAME = 'builtin'
  • registerBuiltinPlugin(definition) — 注册内置插件到 BUILTIN_PLUGINS Map
  • isBuiltinPluginId(pluginId) — 检查是否以 @builtin 结尾
  • getBuiltinPlugins() — 返回 { enabled, disabled } 插件分组(基于用户设置的 defaultEnabled 字段)
  • getBuiltinPluginSkillCommands() — 将启用的插件技能转为 Command 对象

bundled/index.ts

typescript
function initBuiltinPlugins(): void {
  // 当前为脚手架 — 尚无内置插件注册
}

技能系统 (skills/)

bundledSkills.ts — 技能注册

typescript
interface BundledSkillDefinition {
  name: string
  description: string
  aliases?: string[]
  whenToUse?: string
  argumentHint?: string
  allowedTools?: string[]
  model?: string
  disableModelInvocation?: boolean
  userInvocable?: boolean
  isEnabled?: () => boolean
  hooks?: HooksSettings
  context?: string
  agent?: string
  files?: Record<string, string>  // 内嵌文件
  getPromptForCommand(): Promise<string>  // 懒加载提示
}

// 注册技能(含文件提取)
function registerBundledSkill(definition: BundledSkillDefinition): void {
  // 1. 添加到内部注册表
  // 2. 处理文件提取(如果有 files 字段)
}

// 确定性提取路径
function getBundledSkillExtractDir(skillName: string): string

// 安全文件提取
// - O_NOFOLLOW | O_EXCL (防符号链接攻击)
// - 0o700 目录权限,0o600 文件权限
// - TOCTOU 安全

内置技能清单

常驻技能

技能名功能
updateConfig更新项目配置
keybindings快捷键配置
verify代码验证(Anthropic 内部)
debug启用调试日志
loremIpsumLorem Ipsum 生成
skillify技能文件生成
remember记忆审查 — 分类/提升
simplify简化代码
batch批量并行编排(5-30 workers)
stuck卡住时的调试辅助

特性门控技能

技能名特性门控功能
dreamKAIROS后台思考
hunterREVIEW_ARTIFACT代码审查
loopAGENT_TRIGGERSAgent 循环触发
scheduleRemoteAgentsAGENT_TRIGGERS_REMOTE远程 Agent 调度
claudeApiBUILDING_CLAUDE_APPSClaude API 辅助
claudeInChrome-Chrome 集成
runSkillGeneratorRUN_SKILL_GENERATOR技能生成器

loadSkillsDir.ts — 技能加载

技能加载模块的主要导出:

  • LoadedFrom 类型:'commands_DEPRECATED' | 'skills' | 'plugin' | 'managed' | 'bundled' | 'mcp'
  • getSkillsPath(source, dir) — 解析技能路径
  • estimateSkillFrontmatterTokens(skill) — 估算 Token 数
  • getFileIdentity(filePath) — 通过 realpath 解析符号链接,返回 Promise<string | null>(async 函数),确保同一文件不重复加载
  • parseSkillFrontmatterFields(frontmatter, markdownContent, skillName) — 解析 YAML frontmatter(前 30 行),提取 name、description、whenToUse、model、hooks、paths 等字段。注意实际接受 3 个参数。

技能加载流程

┌──────────────────┐
│ initBundledSkills │
│ (启动时)          │
└────────┬─────────┘

┌──────────────────┐   ┌──────────────────┐
│ 扫描 skills/ 目录 │   │ 加载 MCP 技能     │
│ (文件系统)        │   │ (MCP 服务器)      │
└────────┬─────────┘   └────────┬──────────┘
         │                      │
         └──────────┬───────────┘

         ┌─────────────────┐
         │ 去重(realpath)  │
         │ .gitignore 过滤  │
         └────────┬────────┘

         ┌──────────────────┐
         │ Command[] 注册    │
         │ (skils → commands)│
         └──────────────────┘

mcpSkillBuilders.ts — 依赖解耦

typescript
interface MCPSkillBuilders {
  createSkillCommand: (def: MCPSkillDef) => Command
  parseSkillFrontmatterFields: (content: string) => SkillMetadata
}

// 一次性注册(打破循环依赖)
function registerMCPSkillBuilders(b: MCPSkillBuilders): void
function getMCPSkillBuilders(): MCPSkillBuilders

batch 技能详解

/batch "为所有 API 端点添加日志"

┌─────────────────────────────┐
│ 1. Research Phase            │
│    扫描代码库,理解模式      │
├─────────────────────────────┤
│ 2. Decompose Phase           │
│    拆分为 5-30 个独立任务    │
├─────────────────────────────┤
│ 3. Spawn Workers Phase       │
│    为每个任务创建 git worktree│
│    启动并行 Agent             │
├─────────────────────────────┤
│ 4. Track PRs Phase           │
│    监控各 PR 状态             │
│    处理失败重试               │
└─────────────────────────────┘

remember 技能详解

/remember

1. 扫描自动记忆目录
2. 逐条分类(保留/删除/提升)
3. 提升到 CLAUDE.md 或 CLAUDE.local.md
4. 清理冗余记忆