一个规范的Claude Code Plugin项目应当遵循统一的标准目录结构,以确保可维护性、可读性和兼容性。标准目录结构如下所示:
manifest.json:插件的清单文件,是Plugin的核心配置文件。它声明了插件的基本信息、入口文件路径、所需权限、依赖关系等元数据。Claude Code会在加载插件时首先读取此文件以验证和初始化插件。
index.js:插件的入口文件,是Plugin执行的起点。该文件需要导出插件的主要功能,包括命令处理器、生命周期钩子函数等。Claude Code通过此文件与插件进行交互。
README.md:插件的说明文档,向用户介绍插件的功能、安装方法、使用示例和配置选项。良好的文档可以显著降低用户的使用门槛。
LICENSE:开源许可证文件,明确插件的使用和分发条款。常见的许可证包括MIT、Apache-2.0、GPL-3.0等。
lib/ 目录:存放核心逻辑代码的模块目录。将不同功能的代码拆分到独立的模块文件中,有助于代码的组织、测试和复用。例如 commands.js 负责命令处理逻辑,utils.js 提供通用工具函数。
assets/ 目录:存放插件的静态资源文件,如图标、样式表、图片等。这些资源在插件加载或运行时被引用。
manifest.json 是Plugin的"身份证",包含了插件的所有关键元数据。以下是各核心字段的详细说明:
插件的唯一名称,在整个Claude Code生态系统中应保持唯一性。命名建议采用小写字母和连字符的组合,如 my-plugin。名称一经发布不应轻易更改,否则可能导致现有用户配置失效。
插件的版本号,必须遵循语义化版本规范(Semantic Versioning,即 semver),格式为 major.minor.patch。主版本号变更表示不兼容的API修改,次版本号变更表示向下兼容的功能新增,补丁号变更表示向下兼容的问题修复。
对插件功能的简短描述,用于在插件市场或列表页面中向用户展示。描述应当简洁明了,让用户一眼就能理解插件的核心用途。
指定插件的入口文件路径,相对于插件根目录。Claude Code通过此字段找到并加载插件的执行入口。默认值为 index.js,如果入口文件位于其他路径,需要显式指定。
声明插件运行所需的权限列表。Claude Code的安全模型要求插件必须明确声明所需的每一项权限,用户在安装时会收到权限提示。未声明的权限在运行时将被拒绝。
声明插件所依赖的其他Plugin或外部包。Claude Code会在加载插件时自动解析并安装这些依赖。依赖格式为 包名: 版本号,同样遵循语义化版本规范。
插件项目的主页URL,通常是GitHub仓库地址或官方文档页面。用户可以通过此链接了解插件的更多信息、提交问题或参与贡献。
插件作者信息,可以包含作者姓名、邮箱地址或个人主页链接。方便用户在遇到问题时联系作者。
Plugin通过功能声明向Claude Code注册其提供的能力。功能声明位于 manifest.json 的特定字段中,定义了插件与宿主应用的交互方式。
插件提供的命令列表。每个命令包含名称、描述和处理器函数。Claude Code会将注册的命令整合到命令系统中,用户可以直接调用。命令名称通常以插件名为前缀,避免与其他插件的命令冲突。例如 my-plugin.do-something。
生命周期钩子允许插件在Claude Code的特定事件发生时执行自定义逻辑。常见的钩子包括:onActivate(插件被激活时触发)、onDeactivate(插件被停用时触发)、onCommand(命令被执行前/后触发)、onConfigChange(配置发生变化时触发)等。合理使用钩子可以让插件深度集成到工作流中。
声明插件向其他Plugin提供的功能接口。通过 provides 字段,一个插件可以暴露特定的API给其他插件使用,实现插件间的协作。其他插件可以通过 requires 字段来声明对这些功能的依赖。
声明本插件需要依赖的其他Plugin所提供的功能。Claude Code在加载插件时会先加载被依赖的其他插件,并确保依赖的功能可用。这形成了一个插件化的生态系统,允许功能复用和组合。
权限系统是Claude Code安全模型的核心组成部分。插件必须通过 manifest.json 的 permissions 字段明确声明所需的每一项权限,遵循最小权限原则。
控制插件对本地文件系统的访问能力,包括 fs:read(读取文件)、fs:write(写入文件)、fs:delete(删除文件)等。建议根据实际需要声明最小范围的权限,避免过度授权。
控制插件发起网络请求的能力。声明 network 权限后,插件可以访问外部API、下载资源或上传数据。对于仅需要访问特定域名的插件,可以在权限中限定允许访问的域名白名单。
控制插件在本地环境中执行Shell命令的能力。声明 exec 权限后,插件可以运行外部程序、脚本或系统命令。这是一个高风险权限,建议在插件安装时向用户明确说明执行命令的目的。
控制插件读取Claude Code配置和用户设置的能力。声明 config:read 权限后,插件可以获取当前工作空间配置、用户偏好设置等信息。更敏感的 config:write 权限允许插件修改配置。
为覆盖更广泛的用户群体,Plugin应当支持国际化(i18n)。规范的多语言文件组织方式可以帮助插件轻松适配不同语言环境。
在插件根目录下创建 i18n/ 文件夹,内部按语言代码组织子目录或文件。常见的结构是将所有语言的翻译文件集中存放在 i18n/ 目录中,文件名使用语言代码标识。
每个语言文件采用标准的JSON格式,以键值对的方式存储翻译文本。键名使用点号分隔的层级结构表示上下文,如 commands.hello.description。这样既保持了结构的清晰性,也便于在代码中按路径查找对应的翻译文本。
为了让插件在不同语言环境下呈现更自然的展示效果,manifest.json 中的 name 和 description 字段可以根据用户的语言偏好自动切换。Claude Code会读取 i18n/ 目录下对应语言的翻译文件,覆盖 manifest.json 中的默认值,从而实现该插件名称和描述的本地化显示。