关于 plugin-structure
面向 Claude Code 插件开发者的结构指南,说明清单、组件目录与自动发现规则。还涵盖可移植路径和命名规范,帮助组织可维护的插件。
主要功能
- 01说明 plugin.json 清单配置
- 02介绍命令、Agent、技能与钩子
- 03讲解组件自动发现规则
- 04使用变量构建可移植路径
适用场景
- 01规划新插件的目录布局
- 02排查组件未加载问题
- 03为插件配置 MCP 服务
MCP 相关
介绍在插件中配置 MCP 服务,并说明服务器配置的加载方式。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ anthropics/ claude-plugins-official --skill plugin-structure安装后在 Claude Code 中输入/plugin-structure确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdexamples/advanced-plugin.mdminimal-plugin.mdstandard-plugin.mdreferences/component-patterns.mdmanifest-reference.md详细介绍
Claude Code 插件结构
概述
Claude Code 插件遵循标准化目录结构,并会自动发现组件。了解此结构有助于创建组织良好、易于维护且能与 Claude Code 无缝集成的插件。
关键概念:
- 用于自动发现的约定式目录布局
- 由
.claude-plugin/plugin.json驱动的配置 - 基于组件的组织方式(命令、Agent、技能、钩子)
- 使用
${CLAUDE_PLUGIN_ROOT}引用可移植路径 - 显式加载与自动发现组件
目录结构
每个 Claude Code 插件都遵循以下组织模式:
plugin-name/
├── .claude-plugin/
│ └── plugin.json # Required: Plugin manifest
├── commands/ # Slash commands (.md files)
├── agents/ # Subagent definitions (.md files)
├── skills/ # Agent skills (subdirectories)
│ └── skill-name/
│ └── SKILL.md # Required for each skill
├── hooks/
│ └── hooks.json # Event handler configuration
├── .mcp.json # MCP server definitions
└── scripts/ # Helper scripts and utilities
重要规则:
- 清单位置:
plugin.json清单必须位于.claude-plugin/目录中 - 组件位置:所有组件目录(commands、agents、skills、hooks)必须位于插件根目录,不能嵌套在
.claude-plugin/中 - 可选组件:仅为插件实际使用的组件创建目录
- 命名约定:所有目录和文件名均使用 kebab-case
插件清单(plugin.json)
清单定义插件元数据和配置,位于 .claude-plugin/plugin.json:
必填字段
{
"name": "plugin-name"
}
名称要求:
- 使用 kebab-case 格式(小写字母,以连字符分隔)
- 在已安装的插件中必须唯一
- 不得包含空格或特殊字符
- 示例:
code-review-assistant、test-runner、api-docs
推荐元数据
{
"name": "plugin-name",
"version": "1.0.0",
"description": "Brief explanation of plugin purpose",
"author": {
"name": "Author Name",
"email": "[email protected]",
"url": "https://example.com"
},
"homepage": "https://docs.example.com",
"repository": "https://github.com/user/plugin-name",
"license": "MIT",
"keywords": ["testing", "automation", "ci-cd"]
}
版本格式:遵循语义化版本规范(MAJOR.MINOR.PATCH) 关键词:用于插件发现和分类
组件路径配置
为组件指定自定义路径(补充默认目录):
{
"name": "plugin-name",
"commands": "./custom-commands",
"agents": ["./agents", "./specialized-agents"],
"hooks": "./config/hooks.json",
"mcpServers": "./.mcp.json"
}
重要提示:自定义路径是对默认路径的补充,不会替代默认路径。默认目录和自定义路径中的组件都会加载。
路径规则:
- 必须相对于插件根目录
- 必须以
./开头 - 不能使用绝对路径
- 支持用数组指定多个位置
组件组织
命令
位置:commands/ 目录
格式:带有 YAML frontmatter 的 Markdown 文件
自动发现:commands/ 中的所有 .md 文件都会自动加载
结构示例:
commands/
├── review.md # /review command
├── test.md # /test command
└── deploy.md # /deploy command
文件格式:
---
name: command-name
description: Command description
---
Command implementation instructions...
用法:命令会作为原生斜杠命令集成到 Claude Code 中
Agent
位置:agents/ 目录
格式:带有 YAML frontmatter 的 Markdown 文件
自动发现:agents/ 中的所有 .md 文件都会自动加载
结构示例:
agents/
├── code-reviewer.md
├── test-generator.md
└── refactorer.md
文件格式:
---
description: Agent role and expertise
capabilities:
- Specific task 1
- Specific task 2
---
Detailed agent instructions and knowledge...
用法:用户可以手动调用 Agent,也可以由 Claude Code 根据任务上下文自动选择
技能
位置:skills/ 目录,每个技能使用一个子目录
格式:每个技能都放在自己的目录中,并包含 SKILL.md 文件
自动发现:技能子目录中的所有 SKILL.md 文件都会自动加载
结构示例:
skills/
├── api-testing/
│ ├── SKILL.md
│ ├── scripts/
│ │ └── test-runner.py
│ └── references/
│ └── api-spec.md
└── database-migrations/
├── SKILL.md
└── examples/
└── migration-template.sql
SKILL.md 格式:
---
name: Skill Name
description: When to use this skill
version: 1.0.0
---
Skill instructions and guidance...
支持文件:技能可在子目录中包含脚本、参考资料、示例或资源文件
用法:Claude Code 会根据任务上下文与描述的匹配情况自主启用技能
钩子
位置:hooks/hooks.json,或内嵌在 plugin.json 中
格式:定义事件处理程序的 JSON 配置
注册:启用插件时会自动注册钩子
结构示例:
hooks/
├── hooks.json # Hook configuration
└── scripts/
├── validate.sh # Hook script
└── check-style.sh # Hook script
配置格式:
{
"PreToolUse": [{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/validate.sh",
"timeout": 30
}]
}]
}
可用事件:PreToolUse、PostToolUse、Stop、SubagentStop、SessionStart、SessionEnd、UserPromptSubmit、PreCompact、Notification
用法:钩子会在 Claude Code 事件发生时自动执行
MCP 服务
位置:插件根目录中的 .mcp.json,或内嵌在 plugin.json 中
格式:用于定义 MCP 服务的 JSON 配置
自动启动:启用插件时会自动启动服务
格式示例:
{
"mcpServers": {
"server-name": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/servers/server.js"],
"env": {
"API_KEY": "${API_KEY}"
}
}
}
}
用法:MCP 服务可无缝集成到 Claude Code 的工具系统中
可移植路径引用
${CLAUDE_PLUGIN_ROOT}
所有插件内部路径引用都使用 ${CLAUDE_PLUGIN_ROOT} 环境变量:
{
"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/run.sh"
}
重要原因:插件的安装位置各不相同,取决于:
- 用户的安装方式(marketplace、本地、npm)
- 操作系统惯例
- 用户偏好
使用位置:
- Hook 命令路径
- MCP 服务命令参数
- 脚本执行引用
- 资源文件路径
切勿使用:
- 硬编码的绝对路径(
/Users/name/plugins/...) - 相对于工作目录的路径(命令中的
./scripts/...) - 主目录快捷路径(
~/plugins/...)
路径解析规则
在清单 JSON 字段中(hooks、MCP 服务):
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/tool.sh"
在组件文件中(命令、Agent、技能):
Reference scripts at: ${CLAUDE_PLUGIN_ROOT}/scripts/helper.py
在执行的脚本中:
#!/bin/bash
# ${CLAUDE_PLUGIN_ROOT} available as environment variable
source "${CLAUDE_PLUGIN_ROOT}/lib/common.sh"
文件命名规范
组件文件
命令:使用 kebab-case .md 文件
code-review.md→/code-reviewrun-tests.md→/run-testsapi-docs.md→/api-docs
Agent:使用描述角色的 kebab-case .md 文件
test-generator.mdcode-reviewer.mdperformance-analyzer.md
技能:使用 kebab-case 目录名
api-testing/database-migrations/error-handling/
支持文件
脚本:使用含义明确的 kebab-case 名称和适当的扩展名
validate-input.shgenerate-report.pyprocess-data.js
文档:使用 kebab-case Markdown 文件
api-reference.mdmigration-guide.mdbest-practices.md
配置:使用标准名称
hooks.json.mcp.jsonplugin.json
自动发现机制
Claude Code 会自动发现并加载组件:
- 插件清单:插件启用时读取
.claude-plugin/plugin.json - 命令:扫描
commands/目录中的.md文件 - Agent:扫描
agents/目录中的.md文件 - 技能:扫描
skills/中包含SKILL.md的子目录 - Hooks:从
hooks/hooks.json或清单加载配置 - MCP 服务:从
.mcp.json或清单加载配置
发现时机:
- 插件安装:组件向 Claude Code 注册
- 插件启用:组件可供使用
- 无需重启:更改会在下次 Claude Code 会话时生效
覆盖行为:plugin.json 中的自定义路径会补充(而非替换)默认目录
最佳实践
组织结构
-
逻辑分组:将相关组件放在一起
- 将与测试相关的命令、Agent 和技能放在一起
- 在
scripts/中为不同用途创建子目录
-
精简清单:保持
plugin.json简洁- 仅在必要时指定自定义路径
- 标准布局依赖自动发现
- 仅在简单场景中使用内联配置
-
文档:包含 README 文件
- 插件根目录:整体用途和用法
- 组件目录:具体指南
- 脚本目录:用法和要求
命名
-
一致性:在各组件中采用一致的命名
- 如果命令名为
test-runner,则将相关 Agent 命名为test-runner-agent - 技能目录名应与其用途相符
- 如果命令名为
-
清晰度:使用能表明用途的描述性名称
- 推荐:
api-integration-testing/、code-quality-checker.md - 避免:
utils/、misc.md、temp.sh
- 推荐:
-
长度:兼顾简洁与清晰
- 命令:2–3 个词(
review-pr、run-ci) - Agent:清楚描述角色(
code-reviewer、test-generator) - 技能:聚焦主题(
error-handling、api-design)
- 命令:2–3 个词(
可移植性
- 始终使用 ${CLAUDE_PLUGIN_ROOT}:切勿硬编码路径
- 在多种系统上测试:验证 macOS、Linux 和 Windows 上的表现
- 记录依赖项:列出所需工具和版本
- 避免系统特定功能:使用可移植的 bash/Python 语法
维护
- 统一版本号:发布时更新 plugin.json 中的版本号
- 平稳弃用:在移除旧组件前明确标记
- 记录不兼容变更:注明影响现有用户的变更
- 彻底测试:变更后验证所有组件均可正常工作
常见模式
最简插件
不含依赖项的单个命令:
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Just name field
└── commands/
└── hello.md # Single command
功能完整的插件
包含所有组件类型的完整插件:
my-plugin/
├── .claude-plugin/
│ └── plugin.json
├── commands/ # User-facing commands
├── agents/ # Specialized subagents
├── skills/ # Auto-activating skills
├── hooks/ # Event handlers
│ ├── hooks.json
│ └── scripts/
├── .mcp.json # External integrations
└── scripts/ # Shared utilities
以技能为主的插件
仅提供技能的插件:
my-plugin/
├── .claude-plugin/
│ └── plugin.json
└── skills/
├── skill-one/
│ └── SKILL.md
└── skill-two/
└── SKILL.md
故障排除
组件未加载:
- 确认文件位于正确目录中,且扩展名正确
- 检查 YAML frontmatter 语法(命令、Agent、技能)
- 确保技能包含
SKILL.md(而不是README.md或其他名称) - 确认已在 Claude Code 设置中启用插件
路径解析错误:
- 将所有硬编码路径替换为
${CLAUDE_PLUGIN_ROOT} - 确认路径为相对路径,且在清单中以
./开头 - 检查引用的文件是否位于指定路径
- 在钩子脚本中使用
echo $CLAUDE_PLUGIN_ROOT进行测试
自动发现未生效:
- 确认目录位于插件根目录(而不是
.claude-plugin/中) - 检查文件命名是否符合规范(kebab-case,扩展名正确)
- 确认清单中的自定义路径正确
- 重启 Claude Code 以重新加载插件配置
插件之间存在冲突:
- 使用唯一且描述性强的组件名称
- 如有需要,使用插件名称为命令添加命名空间
- 在插件 README 中记录潜在冲突
- 为相关功能考虑使用命令前缀
如需详细示例和高级模式,请参阅 references/ 和 examples/ 目录中的文件。