📢gitzw.com上线了,功能陆续更新中,如有问题或反馈请在下方反馈/建议中给我们留言。
Claude Plugins进阶:高效管理与开发

Claude Plugins进阶:高效管理与开发

📌 At a glance

掌握Claude Code Plugins的安装、管理和开发技巧,提升你的自动化与智能化工作流程。

🎯 进阶📖 16 chapters⏱ ≈72 min read🔄 Updated 2026-07-26📅 Source as of 2026-07
Source:github.com/anthropics/claude-plugins-official★ 32,675

1. Claude Plugins概览:了解其核心功能与应用场景

本章我们要聊聊Claude Plugins的核心功能和它们可以用来做什么,这样你就能明白这些插件是怎么工作的,以及如何在实际中利用它们。

首先,你需要知道的是Claude Plugins分为两类:内部插件和外部插件。内部插件是由Anthropic团队自己开发和维护的,而外部插件则是由合作伙伴或者社区成员提供的。

我们先来看看怎么安装一个插件。假设你想安装一个名为example-plugin的插件,你可以直接通过Claude Code的命令行来完成这个任务:

/plugin install example-plugin@claude-plugins-official

或者你可以在Claude Code的界面中找到“Discover”选项,然后浏览并选择你要安装的插件。

接下来是关于贡献的部分。如果你想成为开发者并且想要提交自己的插件到市场上供其他人使用,你需要确保你的插件符合质量和安全标准。然后可以通过这里提交你的作品。

每个插件都有固定的文件结构。比如下面就是一个典型的插件目录的样子:

example-plugin/
├── .claude-plugin/
│   └── plugin.json      # 这是必须有的元数据文件
├── .mcp.json            # 可选的MCP服务器配置文件
├── commands/            # 存放自定义Slash命令的地方
├── agents/              # 存放Agent定义的地方
├── skills/              # 存放Skill定义的地方
└── README.md            # 插件文档

特别要注意的是,一旦一个插件被发布了,它的名字就不能再改了。否则会导致已经安装该插件的用户出现问题。如果真的需要更改名字的话,可以在.claude-plugin/marketplace.json里面添加一个映射关系来帮助自动迁移用户的设置。

最后简单提一下Skill-bundle类型的插件。这类插件可以直接声明包含哪些技能,并不需要.claude-plugin/plugin.json这样的manifest文件。具体来说,在marketplace.json中可以这么写:

{
  "name": "example-bundle",
  "description": "一些技能的集合。",
  "author": { "name": "作者名" },
  "category": "开发",
  "source": {
    "type": "git-subdir",
    "url": "https://github.com/example-org/sdk.git",
    "path": "packages/agent-skills",
    "ref": "main",
    "sha": "<commit sha>"
  },
  "strict": false,
  "skills": [
    "./skill-a",
    "./skill-b",
    "./skill-c"
  ],
  "homepage": "https://github.com/example-org/sdk"
}

举个例子吧,假如你在做一个AI助手项目,你可以开发一个专门处理文本分析的任务包,并且把它作为Skill-bundle发布出去。其他开发者就可以方便地把这个任务包集成到他们的系统里去使用了。

本章小结

  • 我们介绍了Claude Plugins的基本分类:内部和外部。
  • 学习了如何通过命令行或UI安装一个具体的Plugin。
  • 讲解了提交新Plugin的要求及流程。
  • 解释了Plugin的标准目录结构及其重要性。
  • 提到了关于Plugin名称不可变性的规则及其例外情况下的解决方案。
  • 对于Skill-bundle类型的Plugin进行了简单的介绍与应用举例。

2. 安装与更新:安全地引入和升级插件

这章我们要聊聊怎么安全地安装和更新Claude Plugins。读完之后,你就知道怎么从官方市场或者第三方来源获取插件,还能保证它们不会搞乱你的系统。

首先,你需要确保已经安装了Claude Code并且可以访问它的命令行界面。如果你之前按照上一章做了配置,那应该没问题。

安装插件

直接从命令行安装

假设你想安装一个名为awesome-plugin的插件,打开终端输入以下命令:

/plugin install awesome-plugin@claude-plugins-official

预期结果:你应该能看到类似“awesome-plugin已成功安装”的消息。如果失败了,检查一下网络连接和插件名字是否正确。

通过UI安装

你也可以通过Claude Code的图形用户界面来查找和安装插件。点击顶部菜单中的/plugin > Discover,然后找到你想用的那个插件点击安装按钮就行啦。

注意:无论哪种方式,在下载任何插件前都要确认它是可信的来源。Anthropic虽然提供了一个官方市场,但并不对所有第三方插件负责哦。

更新插件

当你想更新某个已有的插件时,比如刚才提到的awesome-plugin,同样可以在终端里运行:

/plugin update awesome-plugin@claude-plugins-official

预期结果:你会看到一条消息表示该插件已经被更新到最新版本。如果有错误,请检查是否有新的依赖项需要手动添加或权限问题。

实际案例

想象一下你在做一款游戏辅助工具,需要用到一些自动化脚本来处理日常任务。这时你可以寻找或者自己开发一个包含这些脚本的Skill-bundle类型插件,并将其添加到你的项目中。这样不仅节省时间还能减少重复劳动。

常见问题与排查方法

  • 找不到指定的插件名:检查拼写是否准确无误,并尝试重新搜索。
  • 权限不足导致无法安装或更新:联系管理员获取相应的权限。
  • 网络问题阻止下载:确保设备能够正常访问互联网,并尝试更换网络环境后再次操作。

好了,这就是今天的内容!希望你能顺利地管理和维护好自己的Claude Plugins库。

本章小结

  • 学会了如何通过命令行或UI界面安全地安装和更新Claude Plugins。
  • 注意到在下载任何第三方资源前需谨慎选择可靠来源的重要性。
  • 掌握了一些基本的操作步骤以及可能遇到的问题及解决办法。

3. 浏览与发现:探索官方与第三方插件

浏览与发现:探索官方与第三方插件

今天我们来聊聊怎么找到和使用Claude Plugins中的各种插件。无论是官方提供的还是社区贡献的,都能在这里找到适合你的工具。读完这章,你应该能熟练地在Claude Plugins目录中浏览和安装插件。

首先,确保你已经按照上一章的方法安装并更新了至少一个插件。这样我们可以更好地理解整个流程。

第一步:进入插件市场

打开Claude Code的界面,点击顶部菜单栏中的/plugin选项,然后选择Discover。这里就是Claude Plugins的市场了。

第二步:浏览插件列表

你会看到两个主要部分:内部插件和外部插件。

类别 描述
内部插件 Anthropic团队开发和维护
外部插件 来自合作伙伴和社区的第三方插件

浏览内部插件

内部插件的质量有保证,因为它们是由Anthropic直接管理的。你可以根据需要查看每个插件的具体介绍页面,了解它的功能和使用方法。

浏览外部插件

外部插件则来自不同的开发者和组织。虽然质量参差不齐,但也能提供很多有趣的功能扩展。在选择时要注意查看用户评价和文档说明,确保安全可靠。

第三步:查找特定插件

如果你想快速找到某个特定的插件,可以使用搜索框进行关键字查询。例如,你想找一个代码格式化的工具,可以直接输入“code formatter”。

第四步:安装选定的插件

找到了合适的插件后,在其详情页点击“Install”按钮即可一键安装。或者你也可以回到终端使用命令行来完成这个操作:

/plugin install {plugin-name}@claude-plugins-official

比如你要安装名为awesome-code-formatter的内部插件:

/plugin install awesome-code-formatter@claude-plugins-official

预期结果:你会看到一条消息表示该插件已经被成功安装到你的系统中。

实际案例

假设你现在正在做一个数据分析项目,需要用到一些预处理数据的脚本。你可以在这个市场上搜索相关的技能包(Skill-bundle)类型插件,并根据描述挑选最适合的一个添加到你的工作环境中。这样一来不仅能提高工作效率还能保证代码质量。

常见问题与排查方法

  • 找不到想要的插件:尝试调整关键词或扩大搜索范围。
  • 安装失败:确认网络连接正常,并且你有足够的权限来安装新软件。
  • 不确定安全性:尽量选择那些有良好口碑和支持文档的第三方开发者的作品。

希望以上内容对你有所帮助!

本章小结

  • 学会了如何在Claude Plugins市场中浏览和查找所需的官方及第三方插件。
  • 掌握了通过UI界面或命令行方式来安装选定的Claude Plugins。
  • 明白了在选择第三方资源时需要注意的安全性和可靠性因素。

4. 内部插件开发:从零开始构建自定义插件

本章我们要动手做点实际的,从零开始构建一个属于自己的Claude插件。做完之后,你就能明白每个部分的作用,也能写出基本可用的插件代码了。

首先得确保你已经按照前几章的要求安装好了Claude Code,并且对基本的操作有所了解。我们今天就来一步步打造一个简单的插件吧!

第一步:创建插件目录

假设我们要做一个叫做my-first-plugin的插件,首先要在你的工作空间下创建一个同名的文件夹:

mkdir my-first-plugin
cd my-first-plugin

第二步:初始化插件结构

进入新建的文件夹后,我们需要创建几个必要的子文件夹和文件来符合Claude插件的标准结构。最起码要有.claude-plugin/这个文件夹以及其中的plugin.json文件:

mkdir .claude-plugin
touch .claude-plugin/plugin.json

第三步:编写plugin.json

打开.claude-plugin/plugin.json文件,填入以下内容作为最基本的配置信息

{
  "name": "my-first-plugin",
  "displayName": "My First Plugin",
  "description": "This is a simple demo plugin created during the tutorial.",
  "author": { "name": "Your Name", "email": "your.email@example.com" },
  "version": "1.0.0",
  "category": "utility"
}

这里的关键字段包括:

  • name: 插件的名字,在整个市场中唯一不可变。
  • displayName: 用户界面上显示的名字,可以修改。
  • description: 对插件功能的简单描述。
  • author: 插件作者的信息。
  • version: 版本号,遵循语义化版本标准。
  • category: 类别标签,方便用户查找。

第四步:添加README.md

虽然这不是必须的,但是给你的插件加上详细的文档是个好习惯。创建并编辑README.md

touch README.md

然后在README.md里面写下一些关于你的插件介绍、使用方法等等。

第五步:实现功能模块

为了让你的插件真正有用起来,你需要至少实现一种功能模块。这里我们先添加一个简单的slash command。

创建commands目录和command定义文件

mkdir commands
touch commands/hello-world.js

编辑hello-world.js

打开刚才创建的js文件,输入以下代码来定义一个新的slash command /hello-world

module.exports = {
  name: 'hello-world',
  description: 'Says hello to the world!',
  execute({ client, message }) {
    return message.reply('Hello, World!');
  }
};

这段代码的意思是当用户在Claude中输入/hello-world时,机器人会回复一句“Hello, World!”。

第六步:测试你的插件

最后一步就是把我们的新插件加载到Claude系统中进行测试了。你可以通过命令行的方式来完成这一步骤:

/plugin load ./my-first-plugin/.claude-plugin/plugin.json

预期结果:你应该能看到一条消息表明该插件已被成功加载到了系统当中。

如果你遇到了类似“无法找到指定路径”的错误,请检查一下之前的所有步骤是否正确无误。特别是路径名称是否拼写准确、所有必需的文件是否存在等问题。

实际案例

想象一下你在一家初创公司负责开发一款内部协作工具。为了提高团队沟通效率,你想加入一项新功能——每当有人发送特定指令时自动回复一段欢迎语或者提供快捷帮助菜单。基于上述教程的内容,你可以快速搭建这样一个小型自动化助手来辅助日常工作流程。

常见问题与排查方法

  • 路径错误导致无法加载:仔细核对提供的路径是否指向正确的.claude-plugin/plugin.json位置。
  • 缺少必要字段:对照上面给出的例子检查你的JSON配置是否包含了所有必填项。
  • 语法错误:如果JSON格式不正确也会阻止程序正常读取配置,请确保没有多余的逗号或者其他格式问题存在。

希望经过今天的实践你能更加熟悉Claude Plugins的基本开发流程!如果有任何疑问也可以随时查阅官方文档获取更多帮助信息哦~

本章小结

  • 学会了如何从零开始创建一个Claude内部插件的基本框架。
  • 理解了各个重要组成部分如.claude-plugin/plugin.json, README.md, 和 commands/*.js 文件的作用及其编写方式。
  • 经历了一个完整的开发周期,并成功实现了第一个自定义的功能模块(slash command)。

5. 外部插件提交:向市场贡献高质量插件

这章我们要聊聊怎么把自己的插件分享给全世界,让其他人也能用上你的杰作。通过今天的学习,你会知道如何准备和提交一个高质量的Claude插件到官方市场。

首先,确保你已经完成了一些基本步骤:你得有一个可以正常工作的Claude插件,并且最好已经按照之前的章节进行了详细的测试和优化。另外,你需要访问Claude的官方网站并且注册了一个账户,以便能够使用他们的提交表单。

第一步:整理好你的插件

首先,确保你的插件符合官方的要求。每个插件都需要包含以下几个部分:

  • .claude-plugin/plugin.json: 这个文件包含了关于插件的重要信息,比如名字、描述、作者等等。
  • README.md: 提供关于这个插件的详细说明和安装指南。
  • 其他可选的部分:例如commands/, agents/, 或者 skills/ 文件夹,里面分别存放了不同的功能模块

举个例子,假设你要提交一个名为“auto-welcome”的插件,它的目录结构可能如下所示:

auto-welcome/
├── .claude-plugin/
│   └── plugin.json
├── README.md
└── commands/
    └── welcome.js

第二步:填写元数据

打开.claude-plugin/plugin.json文件,确保所有的字段都填写完整而且准确。下面是一个简单的模板供你参考:

{
  "name": "auto-welcome",
  "version": "1.0.0",
  "description": "Automatically sends a welcome message when someone uses the /welcome slash command.",
  "author": {
    "name": "张三",
    "email": "zhangsan@example.com"
  },
  "category": "automation",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/zhangsan/auto-welcome.git"
  },
  "homepage": "https://github.com/zhangsan/auto-welcome"
}

注意这里的name字段很重要,一旦发布后就不能更改了!

第三步:编写详细的文档

编辑README.md文件,详细介绍你的插件的功能、安装步骤以及如何使用。这里有个简单的模板:

# Auto-Welcome Plugin for Claude

## Description
This plugin automatically sends a welcome message when someone uses the `/welcome` slash command.

## Installation
Run the following command:

/plugin install auto-welcome@claude-plugins-official


## Usage
Once installed, type `/welcome` in any chat to receive your automated greeting!

## Author
Zhang San  
Email: zhangsan@example.com  
GitHub: https://github.com/zhangsan

第四步:上传代码到Git仓库

为了让别人能够找到并下载你的代码,你需要将整个项目上传到一个公共的Git仓库(比如GitHub)。记得在上传前检查一遍所有的文件是否齐全并且没有敏感信息泄露。

最后一步:提交你的插件

现在一切就绪了!访问plugin directory submission form,按照指示填写相关信息并提交你的插件链接。

预期结果:

如果一切顺利的话,在审核通过之后你的插件就会出现在Claude的官方市场上供所有人下载和使用啦!

常见问题与排查方法:

  • 审核未通过:检查一下是否有遗漏的地方或者不符合要求的地方。常见的原因包括缺少必要的字段、文档不详尽等。
  • 无法找到代码库:确认你提供的Git仓库地址是公开可访问的,并且路径正确无误。
  • 权限问题:如果你不是仓库的所有者,请确保有相应的权限来允许他人克隆该仓库。

实际案例

假设你在一家科技公司工作,并且刚刚完成了对公司内部使用的某个自动化任务的帮助工具的开发。为了让更多的人受益于这项技术进步,你可以考虑将其封装成一个Claude插件并通过官方渠道进行分发。这样不仅能增加项目的曝光度还能获得社区用户的反馈意见从而不断改进产品。

本章小结

  • 掌握了如何准备和组织一个完整的Claude外部插件。
  • 学习了如何正确填写元数据文件(.claude-plugin/plugin.json) 和编写用户友好的文档(README.md)。
  • 知道了如何将代码托管到公共Git仓库并利用官方提供的表单成功提交了一个新的外部插件至Claude Marketplace。

6. 插件结构解析:深入理解插件文件夹布局

这章我们要揭开Claude插件的神秘面纱,看看它们是怎么组织和排列的。读完这章后,你就知道怎么在一个新插件里找到你需要的东西了。

首先,确保你已经安装了一些插件并且对基本的文件结构有个大致的印象。如果你之前没有做过这些,可以先回过头去复习一下前面的内容。

我们先来看看整个目录结构:

/claudie-code-plugins/
├── /plugins/                # Anthropic自己开发和维护的内部插件
└── /external_plugins/       # 第三方合作伙伴和社区提交的插件

接着,我们进入任何一个具体的插件文件夹,比如example-plugin。你会看到这样的布局:

example-plugin/
├── .claude-plugin/
│   └── plugin.json          # 插件的核心元数据文件(必填)
├── .mcp.json                # MCP服务器配置(可选)
├── commands/                # 自定义Slash命令(可选)
├── agents/                  # Agent定义(可选)
├── skills/                  # Skill定义(可选)
└── README.md                # 文档说明
  • .claude-plugin/plugin.json: 这是最重要的文件之一,包含了插件的基本信息如名称、描述、作者等。每个插件都必须要有这个文件。

  • .mcp.json: 如果你的插件需要用到MCP服务器,这里就是配置的地方。不过大多数情况下你可能不需要这个文件。

  • commands/: 放的是自定义的Slash命令。如果你想让Claude能够响应一些特殊的指令,就把相关的脚本放在这里。

  • agents/: 这里存放Agent的定义。Agent是可以在后台自动执行某些任务的对象。

  • skills/: 如果你的插件包含了一系列的功能模块(Skill),就放在这个文件夹下。

  • README.md: 每个好项目的标配!这里是给用户看的文档,解释了怎么用这个插件以及它的功能特点。

如果你遇到找不到某个文件或文件夹的情况,可能是路径错了或者名字拼写不对。仔细检查一下目录树是不是符合上面的标准。

举个例子来说吧:假设你在开发一个叫做“task-manager”的插件,你想让用户可以通过输入 /tm list-tasks 来查看他们的待办事项列表。那么你应该在 commands/tm/list-tasks.js 文件中编写处理逻辑,并且在 .claude-plugin/plugin.json 中注册这个命令。

本章小结

  • 学会了Claude插件的整体目录结构及其各个部分的作用。
  • 理解了 .claude-plugin/plugin.json, .mcp.json, commands/, agents/, skills/, 和 README.md 的用途和重要性。
  • 注意到了文件名和路径的重要性,并学会了如何排查常见的错误。

7. 插件命名规范:确保插件标识的一致性

这章我们要聊聊插件命名规范,确保插件标识的一致性。读完之后,你会知道为什么插件的名字不能随便改,以及怎么正确地更改插件名称。

首先,你需要确保你已经有一个基本的插件框架,并且对 plugin.json 文件有一定的了解。如果你之前跟着做了,应该已经有了这些基础。

我们先来看看插件名字的重要性。一旦插件发布到市场上,它的名字就不能再变了。这个名字就像是插件的身份ID,如果换了名字,安装了旧名字的用户就会遇到 plugin-not-found 错误。

接着,如果你想改变插件在UI上的显示名称而不是实际名称怎么办?很简单,在 plugin.json 文件里找到 displayName 字段进行修改就可以了。这样既不会影响用户的现有安装,又能让你的插件看起来更友好。

如果你实在没办法,非得换掉名字不可呢?那也行,但需要做一些额外的工作。我们需要在 .claude-plugin/marketplace.json 文件中的 renames 映射表添加一条记录:

"renames": {
  "old-name": "new-name"
}

这样一来,Claude会在用户下次同步的时候自动把老名字替换成新名字。

举个例子来说吧:假设你有个叫 task-manager 的插件,后来觉得这个名字不够吸引人想改成 todo-list。你可以这样做:

  1. 打开 .claude-plugin/marketplace.json 文件。
  2. 添加以下内容:
"renames": {
  "task-manager": "todo-list"
}
  1. 修改 .claude-plugin/plugin.json 中的 name 字段为 "todo-list"
  2. 更新所有地方使用的老名称为新名称。

这样处理后,已安装了 task-manager 的用户下次同步时会自动迁移到 todo-list 而不会丢失任何功能。

本章小结

  • 记住了为什么插件的名字一旦确定就不能轻易改动。
  • 学会了如何通过修改 displayName 来调整UI上的显示名称。
  • 掌握了在必要情况下如何通过 renames 映射来更换插件的实际名称,并保证用户体验不受影响。

8. 技能包插件:打包和发布多个技能

这章我们要聊聊怎么把一堆技能打包成一个插件,然后发布出去。这样做的好处是你可以把相关的功能集中在一起,方便管理和使用。读完这一章之后,你会知道怎么创建一个技能包插件,并且能够顺利地把它放到市场上供其他人下载和使用。

首先,你需要确保你已经有一个可以正常工作的Claude插件开发环境,并且对基本的插件结构有所了解。如果你之前按照我们的步骤安装了内部插件或者外部插件的话,那这些前提条件应该都满足了。

我们先来看一下技能包插件的基本结构。通常来说,一个技能包插件不需要单独的.claude-plugin/plugin.json文件来描述每个技能。相反,我们在市场入口的地方声明所有的技能路径就可以了。

接着,假设你要创建一个名为dev-tools的技能包插件,里面包含三个子技能:lint-code, format-code, 和 generate-docs。我们可以按照下面的步骤来做:

  1. 创建一个新的目录来存放你的技能包插件:
mkdir dev-tools
cd dev-tools
  1. 在这个目录下创建一个.claude-plugin文件夹,并在里面放一个marketplace.json文件:
mkdir .claude-plugin
touch .claude-plugin/marketplace.json
  1. 编辑.claude-plugin/marketplace.json文件,加入如下内容:
{
  "name": "dev-tools",
  "description": "A collection of development tools for coding tasks.",
  "author": { "name": "Your Name" },
  "category": "development",
  "source": {
    "type": "git-subdir",
    "url": "https://github.com/your-repo/dev-tools.git",
    "path": ".",
    "ref": "main",
    "sha": "<commit-sha>"
  },
  "strict": false,
  "skills": [
    "./lint-code",
    "./format-code",
    "./generate-docs"
  ],
  "homepage": "https://github.com/your-repo/dev-tools"
}

这里的重点在于设置strict: false以及指定具体的技能路径数组。每个路径指向的是包含相应SKILL.md文件的子目录。

  1. 然后,在根目录下分别创建这三个子目录,并在每个目录内添加相应的SKILL.md文件来描述各个技能的功能和用法:
mkdir lint-code format-code generate-docs
echo "# Lint Code\nThis skill helps you lint your code." > lint-code/SKILL.md
echo "# Format Code\nThis skill formats your code according to style guidelines." > format-code/SKILL.md
echo "# Generate Docs\nAutomatically generates documentation for your project." > generate-docs/SKILL.md
  1. 最后,别忘了提交你的更改到Git仓库,并更新SHA值以便Claude能够正确识别最新版本。

如果你遇到问题比如Git URL错误或者SHA不匹配的情况,请检查你的源码仓库地址是否正确并且SHA值是最新的提交哈希值。

举个例子来说吧:假设你想做一个前端开发工具集叫做front-end-utils,其中包括了几个常用的工具如CSS压缩器、JavaScript打包器和图片优化器。你可以按照上面的方法来组织这些工具,并且在各自的Skill文档中详细说明它们的作用和使用方法。

本章小结

  • 学会了如何创建一个没有单独manifest的技能包插件。
  • 掌握了如何在市场入口配置多个子技能及其对应的路径。
  • 注意到了需要设置正确的Git源地址和SHA校验值的重要性。

9. 插件元数据编写:创建有效的plugin.json文件

这章我们要聊聊怎么写好 plugin.json 文件,这个文件就像是插件的身份证明,告诉 Claude 这个插件叫啥、是谁写的、有什么功能。写好了这个文件,Claude 才能认识你的插件哦。

首先得确保你已经有一个插件目录,并且里面已经有了基本的结构。比如说,你应该有类似这样的文件夹:

my-cool-plugin/
├── .claude-plugin/
│   └── plugin.json      # 我们的目标就是编辑这个文件
├── README.md            # 插件的介绍文档
└── skills/              # 技能定义文件夹
    └── my-skill/SKILL.md

好的,我们先来编辑 plugin.json 文件。

第一步:创建或打开 plugin.json

进入你的插件目录下的 .claude-plugin 文件夹,找到 plugin.json 文件。如果没有的话就新建一个。然后用你喜欢的文本编辑器打开它。

第二步:填写基本信息

我们需要填一些基本信息,比如名字、描述、作者等等。下面是一个简单的例子:

{
  "name": "my-cool-plugin",
  "description": "这是一个超赞的插件,可以帮你做很多事!",
  "author": { 
    "name": "张三", 
    "email": "zhangsan@example.com" 
  },
  "version": "1.0.0",
  "category": "utility"
}
  • name: 插件的名字,必须是唯一的,不能和其他已有的插件同名。
  • description: 对插件功能的一个简单描述。
  • author: 包含作者的名字和邮箱。
  • version: 插件的版本号。
  • category: 插件所属的类别,例如 utility, development, productivity 等等。

第三步:添加技能路径

如果你的插件包含多个技能(就像我们在前面章节创建的那个工具集一样),你需要在这里指定每个技能的位置。继续编辑 plugin.json 文件,在刚才的基础上加上这些信息:

{
  ...
  "skills": [
    "./skills/my-skill"
  ]
}

这里的 "./skills/my-skill" 是相对于 .claude-plugin 目录的路径。如果你有更多的技能,就把它们都加进来,格式如下:

"skills": [
  "./skills/skill-one",
  "./skills/skill-two",
  "./skills/skill-three"
]

第四步:添加源码信息

为了让 Claude 能够获取到最新的代码更新,你需要提供源码仓库的信息。这里假设你的代码托管在 GitHub 上:

{
  ...
  "source": {
    "type": "git",
    "url": "https://github.com/zhangsan/my-cool-plugin.git",
    "ref": "main",
    "sha": "<commit sha>"
  }
}
  • type: 源码类型,通常是 git
  • url: Git 仓库的 URL 地址。
  • ref: 默认分支名称,默认一般是 main 或者 master
  • sha: 当前分支最新的 commit SHA 值。

注意:每次更新代码之后都要记得更新这里的 SHA 值!

第五步:保存并验证

保存你的修改后的 plugin.json 文件。你可以通过安装你的插件来验证一切是否正常工作:

/plugin install my-cool-plugin@your-github-url

如果一切顺利的话,你应该能看到你的新插件出现在 Claude 的列表里了。

举个例子吧:假设你正在开发一个名为 dev-tools 的开发工具集插件,并且包含了三个技能——代码格式化、生成文档和代码审查助手。你可以这样编写你的 plugin.json 文件:

{
  "name": "dev-tools",
  "description": "一组强大的开发者工具。",
  "author": { 
    "name": "李四", 
    "email": "lisi@example.com" 
  },
  "version": "1.0.0",
  "category": "development",
  "skills": [
    "./skills/lint-code",
    "./skills/format-code",
    "./skills/code-review-assistant"
  ],
  "source": {
    "type": "git",
    "url": "https://github.com/lisi/dev-tools.git",
    "ref": "main",
    "sha": "<commit sha>"
  }
}

本章小结

  • 学会了如何编写基本的 plugin.json 文件。
  • 掌握了如何在其中声明多个技能及其对应的路径。
  • 注意到了需要提供准确的源码仓库地址和 SHA 校验值的重要性。

10. MCP配置详解:优化MCP服务器设置

这章我们要聊聊怎么优化MCP服务器设置。通过调整这些配置,可以让我们的插件跑得更快更稳。读完这一章,你会知道怎么编辑.mcp.json文件来优化MCP服务器。

前提是你已经按照上一章的方法创建了一个插件,并且对插件的基本结构有所了解。

我们先来看一下默认的.mcp.json长啥样。通常情况下,默认配置可能看起来像这样:

{
  "server": {
    "port": 8080,
    "host": "localhost"
  },
  "logging": {
    "level": "info"
  }
}

接着,我们来一步一步修改这个文件,让它更适合我们的需求。

首先,我们调整端口号。假设你想让MCP服务器监听9090端口而不是默认的8080端口,可以这样做:

{
  "server": {
    "port": 9090,
    "host": "localhost"
  },
  ...
}

预期结果:重启MCP服务器后,它会在新的9090端口上启动。

如果你遇到“端口被占用”的错误,检查是否有其他程序占用了该端口,并尝试更换一个未被占用的端口号。

然后,我们增加日志级别到debug模式以便更好地调试问题:

{
  ...
  "logging": {
    "level": "debug"
  }
}

预期结果:你会看到更多的日志信息输出,这对于排查问题非常有帮助。

如果你想限制日志大小或者滚动保存日志文件,可以在logging部分添加更多配置项。比如下面的例子设置了最大日志文件大小为1MB,并且保留最近3个日志文件:

{
  ...
  "logging": {
    "level": "debug",
    "maxSize": "1mb",
    "maxFiles": 3
  }
}

预期结果:当单个日志文件达到1MB时会自动滚动并压缩旧的日志文件。

最后举个实际例子。假设你在开发一个复杂的插件集合并希望提高性能和可维护性。你可以考虑以下几点:

  • 将MCP服务器放在云环境中,并使用负载均衡器分配请求。
  • 调整内存限制以适应更大的工作负载。
  • 使用外部存储解决方案来处理大量数据输入输出操作。
  • 配置详细的监控和报警系统以便及时发现异常情况。

本章小结

  • 学习了如何编辑.mcp.json文件中的基本配置选项。
  • 实践了更改服务器监听端口和日志级别的方法。
  • 探索了一些高级的日志管理技巧以及它们的应用场景。

11. 命令与代理:实现自定义Slash命令和Agent

本章我们要搞定自定义Slash命令和Agent,这样你的插件就能响应用户的指令并执行特定任务了。读完这章后,你不仅能写出这些命令,还能让它们正常工作。

前提是你已经按照之前的步骤安装好了Claude Plugins,并且对插件的基本结构有所了解。我们会在现有的插件基础上进行扩展。

首先,我们先来创建一个新的Slash命令。假设你要做一个简单的“打招呼”命令,用户输入/hello时,机器人回复“你好!”。

  1. 打开你的插件目录,在里面新建一个名为commands的文件夹(如果还没有的话)。
  2. commands文件夹下再创建一个文件,命名为hello.js。这个文件就是我们的Slash命令脚本。
  3. 编辑hello.js文件,加入以下代码:
module.exports = {
  name: 'hello',
  description: 'Say hello to the user',
  handler: async (context) => {
    return { content: '你好!' };
  }
};

预期结果:当你重启MCP服务器后,在Claude界面输入/hello,你应该能看到机器人回复“你好!”。

如果你遇到错误提示找不到模块或者语法错误,请检查文件路径是否正确,并确保JavaScript语法没有问题。

接着,我们来实现一个简单的Agent。Agent可以看作是一个后台服务,能够持续监听某些事件并作出反应。这里我们创建一个Agent来监听新消息并自动回复“收到”。

  1. 同样在插件目录下新建一个名为agents的文件夹(如果还没有的话)。
  2. agents文件夹内创建一个文件叫做auto_reply.js
  3. 编辑auto_reply.js文件,填入以下代码:
module.exports = {
  name: 'auto_reply',
  description: 'Automatically reply to incoming messages',
  setup: async ({ subscribe }) => {
    await subscribe('message.created', ({ message }) => {
      console.log(`Received message: ${message.content}`);
      // 这里我们可以调用API发送回复
      // 示例:sendMessage(message.conversationId, '收到');
    });
  }
};

预期结果:每当有人在对话中发消息时,你的MCP服务器会在控制台打印出接收到的消息内容。注意这里的自动回复功能暂时被注释掉了,你需要根据实际情况填写正确的API调用来完成这个功能。

如果你遇到订阅失败或者权限不足的问题,请检查你的MCP配置是否有足够的权限访问相应的事件流。

举个实际的例子吧。假设你现在正在开发一个客户服务助手插件。你可能会想添加一些常用的客服指令供坐席快速使用,比如查询订单状态、取消订单等。同时为了提升用户体验和服务质量,你还可能需要一个Agent来监控客户反馈并及时做出回应。

通过以上步骤的学习和实践:

  • 我们学会了如何创建自定义的Slash命令和Agent。
  • 理解了这两个组件的工作原理及其在插件中的作用。
  • 注意到了一些常见的错误及解决方法。

这样我们就把自定义交互功能集成进了我们的Claude插件中啦!

12. 插件调试与测试:确保插件的稳定性和功能性

本章要解决的是怎么确保你的Claude插件既稳定又可靠,功能也能正常运转。读完这章后,你应该能够熟练地调试和测试你的插件,找出并修复问题。

首先,我们要确保你已经完成了上一章的操作,并且有一个可以运行的基本插件框架。如果你还没有的话,可以从前面的章节回溯一下安装和基本配置的部分。

我们先从最简单的日志记录开始。在开发过程中,日志可以帮助我们追踪程序的执行流程和捕获异常信息

// 在你的主文件中添加以下代码
const fs = require('fs');

function logMessage(message) {
  const timestamp = new Date().toISOString();
  fs.appendFile('debug.log', `${timestamp}: ${message}\n`, err => {
    if (err) throw err;
  });
}

module.exports = async ({ client }) => {
  await subscribe('message.created', ({ message }) => {
    console.log(`Received message: ${message.content}`);
    logMessage(`Received message: ${message.content}`); // 记录到文件
    // 发送回复的代码可以在这里恢复
    // sendMessage(message.conversationId, '收到');
  });
};

预期结果:每次有新消息进来时,不仅会在控制台打印消息内容,在当前目录下还会生成一个名为debug.log的日志文件,并将消息内容追加进去。

如果你遇到写入日志文件失败的情况,请检查是否有权限写入当前目录,或者尝试指定一个绝对路径来保存日志文件。

接着,我们来聊聊单元测试。对于复杂的逻辑部分,编写单元测试是非常有用的。这里我们可以用Jest作为测试框架。

首先安装Jest:

npm install --save-dev jest

然后在项目的根目录下创建一个简单的测试文件test/message.test.js

// test/message.test.js
const { logMessage } = require('../your-main-file'); // 替换为你的主文件名

describe('logMessage function', () => {
  let mockWriteFileSync;

  beforeEach(() => {
    mockWriteFileSync = jest.spyOn(fs, 'writeFileSync').mockImplementation();
  });

  afterEach(() => {
    mockWriteFileSync.mockRestore();
  });

  it('should write the correct message to debug.log', () => {
    const testMessage = 'Test Message';
    const expectedLogEntry = `${new Date().toISOString()}: Test Message\n`;

    logMessage(testMessage);

    expect(mockWriteFileSync).toHaveBeenCalledWith(
      expect.any(String),
      expectedLogEntry,
      expect.any(Function)
    );
  });
});

预期结果:运行jest命令后,可以看到所有测试都通过了,并且没有警告或错误信息。

如果你遇到模块导入的问题,请确保路径正确无误,并且所有的依赖都已经安装好。

最后举个实际的例子吧。假设你在开发一个购物助手插件,其中包含了一个函数用于计算折扣后的价格。你可以对这个函数进行单元测试以确保它的准确性。

// your-main-file.js 中新增如下函数
function calculateDiscountedPrice(originalPrice, discountRate) {
  return originalPrice * (1 - discountRate);
}

// 对应的 test/calculateDiscount.test.js 文件内容如下:
const { calculateDiscountedPrice } = require('../your-main-file'); // 同样替换为主文件名

describe('calculateDiscountedPrice function', () => {
  it('should correctly apply a discount rate to the original price', () => {
    const originalPrice = 100;
    const discountRate = 0.2; // 即20%的折扣

    const discountedPrice = calculateDiscountedPrice(originalPrice, discountRate);

    expect(discountedPrice).toBe(80); // 验证最终价格是否为80元(原价100元打8折)
  });

  it('should handle edge cases like no discount or full discount', () => {
    expect(calculateDiscountedPrice(100, 0)).toBe(100); // 没有任何折扣时价格不变
    expect(calculateDiscountedPrice(100, 1)).toBe(0);   // 全额折扣时价格为零
  });
});

通过以上步骤的学习和实践:

  • 我们掌握了如何在插件中添加日志记录以便于调试。
  • 学会了使用Jest编写单元测试来验证代码的功能正确性。
  • 理解了如何处理可能出现的各种问题,并采取相应的措施去解决它们。

这样我们就能够在开发过程中更好地保证插件的质量啦!

13. 插件版本控制:管理插件的不同版本

这章我们要聊聊怎么管理插件的不同版本,这样你就能确保每次更新都不会搞乱之前的工作。读完之后,你会知道怎么给插件打标签、怎么回滚到之前的版本,还有怎么让团队成员协同工作。

首先,你需要确保你的本地环境已经安装了 GitNode.js,因为我们会用这些工具来管理版本和依赖。如果你还没有安装的话,赶紧去官网下载吧。

我们先初始化一个新的 Git 仓库:

git init

这个命令会在当前目录下创建一个 .git 文件夹,用来保存所有的版本历史。

接着,假设你已经在 plugins/my-awesome-plugin 目录下有一个插件项目。我们先进入这个目录并添加所有文件到暂存区:

cd plugins/my-awesome-plugin
git add .

然后提交这些更改,并附上一条有意义的信息

git commit -m "Initial commit of my awesome plugin"

这条命令会把当前的状态保存为第一个版本,并且加上了一条注释方便以后查找。

如果你对代码做了修改并且想保存这次改动,可以再次添加和提交:

git add .
git commit -m "Added new feature to my awesome plugin"

每次提交都会生成一个唯一的哈希值(比如 a1b2c3d),你可以用它来回滚到某个特定的版本。如果你想查看所有的提交历史,可以运行:

git log

这个命令会列出所有的提交记录,包括日期、作者和消息。找到你想回滚的那个版本后,可以用它的哈希值来进行回滚:

git checkout a1b2c3d

但是请注意,这样做会让你进入“分离头指针”状态(detached HEAD state),这意味着你在不在任何分支上。如果你确定要在这个状态下做修改并保留新的更改,请记得创建一个新的分支:

git checkout -b rollback-version

有时候你会遇到冲突的情况——当两个人同时修改了同一个文件的不同部分时。Git 会标记出这些冲突的部分,并阻止你合并更改直到解决这些问题。解决冲突后别忘了再次添加和提交你的更改。

如果你在一个团队里工作,最好使用远程仓库来同步每个人的进度。GitHub 是一个常用的平台来托管 Git 仓库。假设你已经在 GitHub 上创建了一个新的仓库 my-awesome-plugin,你可以把它连接到本地仓库:

git remote add origin https://github.com/yourusername/my-awesome-plugin.git

然后推送本地的所有更改到远程仓库:

git push -u origin master

这里的 -u 参数会让 Git 记住上游分支的位置,默认情况下下次只需要运行 git push 就行了。

举个例子来说,假设你正在开发一个购物车功能的插件,并且每天都在添加新特性或者修复 bug。每个周末你都会把一周的工作总结一下然后提交一次大的变更,并且写明这次更新包含了哪些改进。这样一来即使将来出现了问题也能很容易地追踪到是哪次更新导致的。

本章小结

  • 使用 Git 来跟踪项目的每个变化。
  • 提交信息应该简洁明了地描述所做的改变。
  • 回滚到特定版本可以通过 checkout 命令完成。
  • 解决冲突是协作开发中的重要一环。
  • 远程仓库如 GitHub 可以帮助团队成员同步代码。

14. 插件性能优化:提升插件的执行效率

提升插件的执行效率就像是给你的跑车做升级,让它的速度更快、更流畅。这章我们要聊聊怎么优化 Claude 插件,让它在处理任务时更加高效。

前提是你已经有一个基本的插件框架,并且对插件的基本结构有所了解。我们之前提过插件的基本目录结构,这里就不赘述了。直接进入正题吧!

第一步:分析性能瓶颈

首先要知道哪里最慢。我们可以用一些工具来监控和分析插件的性能。Claude 提供了一些内置的日志和监控功能,可以用来查看哪些部分耗时最长。

假设你已经有了一个简单的插件,我们先来看下如何启用日志记录:

import logging

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

def my_plugin_function():
    logger.debug("Starting my_plugin_function")
    # 你的代码逻辑
    logger.debug("Finished my_plugin_function")

这样可以在运行插件的时候看到详细的日志输出,找出可能的性能瓶颈。

第二步:优化代码逻辑

找到瓶颈之后,就要看看能不能通过改写代码提高效率。常见的优化手段包括减少不必要的计算、缓存频繁访问的数据、以及使用更高效的算法。

举个例子,如果你有一个函数经常被调用并且每次都重新计算同一个值,可以考虑把这个值缓存起来:

cached_value = None

def compute_expensive_value():
    global cached_value
    if cached_value is None:
        # 计算昂贵的操作
        cached_value = some_expensive_computation()
    return cached_value

第三步:异步处理

对于 I/O 操作(比如网络请求或文件读取),尽量使用异步编程来避免阻塞主线程。Python 中可以用 asyncio 库来实现这一点:

import asyncio

async def fetch_data(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    data = await fetch_data('http://example.com')
    print(data)

# 运行异步主函数
asyncio.run(main())

第四步:利用 MCP 配置

有时候调整 MCP(Multi-Cloud Platform)服务器的配置也可以显著提升性能。比如增加内存分配、调整线程池大小等。具体的配置项可以在 .mcp.json 文件中进行修改:

{
  "server": {
    "memory": "2GB",
    "threads": 4
  }
}

实际案例

假设你在开发一个数据分析插件,这个插件需要从数据库中提取大量数据并进行复杂的计算。一开始你会发现响应时间很长。经过上述步骤的优化:

  1. 启用了详细的日志记录,发现大部分时间都花在了数据查询上。
  2. 对于常用的查询结果进行了缓存。
  3. 将一些耗时的任务改为异步处理。
  4. 调整了 MCP 服务器的内存配置。

最终用户反馈说响应速度快了很多。

本章小结

  • 使用日志分析工具找出性能瓶颈。
  • 通过改写代码逻辑和使用缓存来提高效率。
  • 利用异步编程减少 I/O 操作带来的延迟。
  • 调整 MCP 配置以适应更高的负载需求。

15. 插件安全性:防范潜在的安全威胁

插件安全性:防范潜在的安全威胁

开发插件的时候,安全性永远是第一位的。毕竟谁也不想辛辛苦苦做出来的宝贝被黑产盯上吧?今天我们来聊聊怎么给你的插件穿上防护服,让它在各种环境中都能安全运行。

首先,确保你已经按照前面的步骤安装并配置好了你的插件,并且对基本的插件结构有所了解。我们不会从头再来一遍这些基础知识,而是直接进入实战环节。

第一步:信任来源

最简单也是最重要的原则就是“信任但验证”。当你准备安装一个新插件时,一定要确认它的来源可靠。你可以查看插件的主页或者仓库地址,看看是否有足够的社区支持和积极的维护者。记住,Anthropic 并不对第三方插件的内容负责,所以你自己也要擦亮眼睛。

第二步:权限控制

每个插件都应该有明确的权限范围。你需要知道它会访问哪些资源、执行哪些操作。尽量避免授予不必要的权限,这可以大大降低风险。例如,在 .claude-plugin/plugin.json 中定义好你的插件需要使用的 API数据访问权限:

{
  "permissions": {
    "read_user_data": true,
    "write_user_data": false,
    "execute_commands": ["command1", "command2"]
  }
}

这样做的好处是你能清楚地看到每个插件的能力边界,防止它们越界操作。

第三步:输入验证

无论何时何地都要记得验证用户的输入。恶意用户可能会尝试注入有害代码或绕过系统限制。举个简单的例子,如果你的插件接受用户提供的 URL 来获取数据,务必检查这个 URL 是否合法并且来自可信源:

import validators

def validate_url(url):
    if validators.url(url):
        return True
    else:
        raise ValueError("Invalid URL")

这样做可以防止常见的攻击方式如 SSRF(Server-Side Request Forgery)。

第四步:加密敏感信息

存储敏感信息时一定要使用加密手段保护它们。比如 API 密钥、密码等绝对不能明文保存。你可以使用环境变量或者密钥管理系统来管理这些敏感数据:

export API_KEY=your_secret_api_key_here

然后在代码中通过环境变量读取:

import os

api_key = os.getenv('API_KEY')
if not api_key:
    raise Exception("API key is missing!")

这样即使有人获得了你的代码库访问权,他们也无法轻易拿到关键信息。

实际案例

想象一下你正在开发一个金融交易机器人插件,它需要连接到银行账户进行资金转移操作。为了保证安全性:

  1. 来源审查:你会选择知名金融机构提供的 API 库作为依赖。
  2. 权限最小化:只赋予该插件必要的权限来完成转账任务。
  3. 输入校验:所有用户输入的数据都会经过严格的格式和合法性检查。
  4. 数据加密:所有的银行凭证和交易记录都采用强加密算法存储。

这样一来即便发生了意外情况也能最大限度地减少损失。

本章小结

  • 确认插件来源可靠性。
  • 明确并限制插件所需权限。
  • 对所有外部输入进行严格验证。
  • 加密存储敏感信息以防止泄露。

16. 插件市场策略:制定有效的推广计划

这章我们要聊聊怎么让你的插件在市场上脱颖而出,吸引更多的用户。读完之后,你应该能制定一个有效的推广计划,让自己的插件不仅被看到,还能得到用户的认可和喜爱。

首先得确认你已经完成了插件的基本开发,并且已经在本地进行了充分的测试。此外,你需要准备好插件的所有必要文件,包括 plugin.json 和任何其他资源文件。

第一步:完善你的 plugin.json

plugin.json 是你的插件名片,它包含了插件的所有基本信息。我们先来确保这个文件填写完整并且准确无误。

{
  "name": "my-awesome-plugin",
  "displayName": "My Awesome Plugin",
  "description": "This plugin makes your life easier by doing amazing things!",
  "version": "1.0.0",
  "author": {
    "name": "Your Name",
    "email": "your.email@example.com"
  },
  "category": "productivity",
  "license": "MIT",
  "homepage": "https://github.com/yourusername/my-awesome-plugin"
}
  • name: 这是你插件的名字,在市场上是唯一的标识符。
  • displayName: 用户界面显示的名字,可以更具描述性一些。
  • description: 描述你的插件做了什么,让用户一眼就能明白它的价值。
  • version: 版本号遵循语义化版本控制规范。
  • author: 包含作者名字和联系方式。
  • category: 归类到哪个类别下,方便用户查找。
  • license: 使用哪种开源许可证。
  • homepage: 指向你的 GitHub 页面或其他主页地址。

第二步:撰写详细的文档

文档的重要性不言而喻。用户安装了你的插件后会去看文档来了解如何使用它。所以文档一定要详细、清晰而且易于理解。

在根目录下创建一个 README.md 文件,并添加以下内容:

# My Awesome Plugin

## 描述

这是一个超级强大的插件,能够帮助你提高工作效率...

## 安装

你可以通过以下命令安装这个插件:

```bash
/plugin install my-awesome-plugin@claude-plugins-official

配置

如果你的插件需要额外的配置,请在这里提供指导...

使用方法

详细介绍每个功能及其用法...


### 第三步:准备截图或视频演示

视觉材料能更好地展示你的插件效果。制作几张高质量的截图或者一段简短的操作视频放在 `docs/assets` 目录下,并在 `README.md` 中引用它们。

```markdown
![Plugin Screenshot](assets/screenshot.png)

[观看演示视频](assets/demo.mp4)

第四步:提交到市场

当你认为一切准备就绪后就可以提交你的插件了。访问 plugin directory submission form,按照指引上传必要的文件和信息。

第五步:持续优化和维护

发布只是第一步,后续还需要根据用户反馈不断改进和完善你的插件。定期更新版本修复 bug 或增加新功能,并及时回应社区中的问题。

实际案例

假设你开发了一个名为“时间管理助手”的插件,它可以帮你规划日程、提醒重要事项并生成报告。为了让它获得成功推广:

  1. 完善 plugin.json:确保所有字段都正确填写。
  2. 撰写详尽文档:介绍如何安装、配置以及各个功能的具体用途。
  3. 制作演示材料:拍摄一段使用教程视频并在 README 中附上截图和视频链接。
  4. 积极宣传:利用社交媒体、论坛等渠道分享你的作品,并鼓励现有用户给予评价和支持。
  5. 收集反馈:认真对待每一位用户的建议和意见,并据此进行迭代优化。

这样一来,“时间管理助手”不仅能迅速引起关注,还会因为良好的用户体验赢得更多忠实粉丝。

本章小结

  • 完善 plugin.json 文件以展现完整的插件信息。
  • 编写详细的文档以便用户理解和使用。
  • 准备高质量的截图或视频来辅助说明功能特点。
  • 提交至市场并通过审核流程。
  • 不断优化和完善基于用户的反馈和需求变化。

FAQ

问题:安装插件时报错“plugin-not-found”,如何解决?

解答:这个错误通常是因为尝试安装的插件名称拼写错误或者该插件不存在于市场中。请检查你输入的插件名称是否正确,并确保插件确实存在于 anthropics/claude-plugins-official 目录下。如果确认无误后仍然无法找到,请联系 Anthropic 支持团队。

问题:如何区分内部插件和外部插件?

解答:在 anthropics/claude-plugins-official 仓库中,内部插件存放在 /plugins 文件夹内,由 Anthropic 团队成员开发和维护;而外部插件则位于 /external_plugins 文件夹内,来自合作伙伴或社区贡献者。你可以通过查看文件路径来判断某个插件是内部还是外部。

问题:我在本地修改了某个插件的内容,但这些更改没有生效,为什么?

解答:如果你在本地对某个已安装的插件进行了修改,Claude Code 可能会从其服务器重新下载最新的版本并覆盖你的更改。要使本地修改生效,请先卸载原插件,然后将修改后的代码重新打包为一个新的插件进行安装。另外,也可以尝试清除缓存或重启 Claude Code 应用程序。

问题:如何提交一个自定义插件到官方市场?

解答:要向 Anthropic 官方市场提交自定义插件,你需要首先按照文档中的规范创建好你的插件结构,并确保它符合质量与安全标准。完成后,可以通过访问 plugin directory submission form 页面填写相关信息并上传你的插件压缩包来进行申请。Anthropic 将会对你的提交进行审核,在满足条件的情况下将其添加至官方目录供用户下载使用。

问题:什么是技能捆绑型(Skill-bundle)插件?它们与其他类型的有何不同之处?

解答:技能捆绑型(Skill-bundle)是一种特殊的插件类型,适用于那些主要包含多个独立技能而不具备完整 .claude-plugin/plugin.json 清单文件的情况。这类捆绑包允许开发者直接列出其所包含的所有技能路径并在 marketplace 配置中设置 "strict": false 来跳过常规验证流程。相比之下,传统意义上的单一功能型或复杂交互式的高级定制化解决方案往往需要提供详细的元数据描述以便系统识别与管理各个组件间的关联性及执行逻辑顺序等问题。

问题:为何某些旧版插件能够自动迁移到新名称上?

解答:当某一现有发布的第三方扩展由于业务需求或其他原因必须更名时,在对应的 .claude-plugin/marketplace.json 配置文件顶层会预先建立一个名为 "renames" 的映射表用于记录所有历史标识符及其对应的新别称关系键值对形式存储。“renames”字典内的每一个条目都代表了一次合法有效的重命名操作记录,在用户下次同步更新其个人账户下的软件列表时会被后台服务自动检测到并对涉及的相关资源链接做相应的替换处理以保持兼容性和连续性支持用户的无缝迁移体验过程之中实现平滑过渡效果达到既定目标目的从而避免因变更导致的服务中断现象发生保障系统的稳定运行状态不受影响继续正常服务于广大用户群体的需求诉求。

🔗 Related