以前,如果您在 Claude 中搜索 Elastic,是找不到我们的:

我们想要改变这一状况!这篇博客讲述的是一个插件的发布历程——它把 Elastic 的能力带到了开发者日常工作的环境中。我们之前已经有 elastic/agent-skills 仓库,并且既写过相关博客,也提供了相应文档,但官方 Claude 插件能让我们的客户更便捷地使用这些技能。

走到这一步实属不易。一路上我们学到了很多经验,也想借此机会分享出来。
从第一次提交到正式上线,我们花了三周时间。Claude 的文档解决了我们 80% 的问题,其余 20% 则是文档中未提及的审核标准,以及一个每次提交都会触发新发布的版本模型。插件会在何时、何地出现,我们几乎没有可见性。
以下是我们学到的经验:
在通读所有参考资料的过程中,我们意识到我们的 Agent Skills 只是 Claude 插件所能包含内容的一部分。虽然 Agent Skills 是一个被主要智能体厂商和生态系统广泛采用的通用开放标准,但 Claude 插件可以包含更多内容;不过,其中有些内容可能无法在不同平台上通用。以 Claude Code 文档中的一个示例为例:

这里面包含的内容远不止 skills,而且我们希望为这些功能留出扩展空间。
因此我们决定为 Claude 插件新建一个独立的仓库。这样,我们就有了一个专门存放所有 Claude 特定功能的地方,与我们的通用 Agent Skills 分开管理。elastic/claude-plugin 仓库由此诞生。
Claude 的文档非常详尽,我在此不再赘述,但供您参考,可以阅读以下内容:
我们按照上述文档逐一核对了检查清单上的所有项目。但当我尝试在 https://claude.ai/directory/manage 提交插件时,却收到了以下提示:

我是一名工程师,一名普通研发人员。我没有资格成为这个被大多数 Elastic 员工使用的软件工具的账户“所有者”。然而,负责管理该账户的 IT 团队却不负责维护和支持这个面向外部的插件。
这是我们的第一处摩擦,但也给我们带来了第一个教训:如果您有 Anthropic 的联系人,一定要好好利用。 Elastic 此前已经与 Anthropic 建立了合作伙伴关系,所以当我们遇到这个问题时,只需给联系人发个消息,对方很快就回复了我们:

拿到正确权限后,填写提交表单就相对简单了:

尽管表单很简单,但正是在这里,我们犯了前两个错误。
如上面的截图所示,这里就是 Anthropic 查找您的 .claude-plugin/plugin.json 的文件夹,也是 Anthropic 自动化系统将要扫描的根目录。
我们一开始使用了默认的 仓库根目录 作为插件路径,但这是一个错误,因为用于我们内部开发目的的文件也在仓库根目录下。其中包括我们的工程师可以用来维护插件的 CLAUDE.md,以及我们的持续集成(CI)流水线、测试文件和 package-lock.json。
扫描这些文件可能会导致验证过程中出现意外的卡顿:

需要说明的是,Anthropic 团队并没有让这成为阻塞项,经过人工审核后,这些警告被豁免了。
main 分支软件的版本管理和发布方式没有统一的“标准答案”。但在 Elastic,我们通常遵循以下约定:
main 分支。MAJOR.MINOR.PATCH)。MAJOR.MINOR)拉出,并打上标签(vMAJOR.MINOR.PATCH)。在我初次阅读 Claude 的插件版本管理文档时,我就知道这个仓库需要一套不同的体系。我们同一时间只维护一个线上版本,而不是同时维护多个主版本和次版本。所以我们计划直接使用 main 分支配合插件元数据中的特定 version 字段。像平常一样将 PR 合并到 main,准备发布时再更新 version 并创建 Git 标签。简单明了。
但实际运行起来并非如此:

这种初始做法实际上产生了许多 v0.0.1“版本”的插件——每次合并提交都对应一个版本。
在 Anthropic 联系人的帮助下(细心的读者应该已经注意到,这已经成为一个主题了),我们得到了如下澄清:

意识到这一点后,我们修改了插件配置,将其指向一个专用的 stable 分支。现在我们可以照常合并代码到 main,但只有在准备好发布一批变更并更新版本号时,才会将 main 合并到 stable。这样我们的流程就变成了:

等待。
我们第一次提交后,看到的内容只有这些:

在我们撰写这篇博客的过程中,Anthropic 对界面做了一些调整,提供了更多可见性。现在提交界面看起来更像是这样:

即便如此,我们首次插件提交的审核大约花了一周时间,而之所以这么快,可能是因为我们能直接联系到 Anthropic 的解决方案架构师和客户经理(再次强调这种关系有多么宝贵)。对方给出的平均审核时间大约是九天。
我们当时看不到原因,但后来才知道,部分延误是因为我们的提交向 Anthropic 审核团队触发了大量警告:

回过头来看,这些额外的可见性确实不错;但在当时,我可能已经因此做了一堆不必要的修改。Anthropic 团队最终豁免了所有这些警告。这里要吸取的教训是:等待审核人员的明确指示,而不是一看到策略警告就急着去解决所有问题,哪怕这些警告听起来很严重。
警告 | 触发原因 | 解决方式 |
|---|---|---|
使用了用户机器上的凭据 | 示例 curl 命令将凭据以环境变量形式模板化 | 人工审核后豁免。误报。 |
缺少图标 | 提交时 | 豁免。该字段现已有文档说明。 |
包含下载并运行的命令 | 技能指令要求智能体调用 API 并解析响应内容 | 人工审核后豁免。 |
凭据警告指向的是包含示例 curl 命令的技能,其中凭据以环境变量语法进行了模板化。Elastic CLI 经过特别设计,确保凭据永远不会暴露给智能体调用方,因此我们起初对这个报告非常警觉,后来发现是误报,这才松了一口气。
图标警告同样让我们感到意外。当时,没有任何文档说明 icon 字段可以作为 manifest 的一个选项,而且我们的 CI 已经运行了 claude plugin validate --strict .,所以我们清楚没有该字段的 manifest 也是有效的。
如今,插件 manifest:字段参考确实记录了 icon。我们认为这标志着 Anthropic 正在明显迭代插件体验。新字段不断出现,但 Anthropic 不会追溯性地阻止未使用这些字段的提交。
下载并运行警告最初听起来也很让人担忧,但仔细检查后发现,它针对的是我们技能中的一些指令——这些指令建议调用 API,并指导如何解析响应,例如:
**验证 Kibana 连接。**调用 `GET kbn:/api/status`。如果调用失败,请停止并返回错误信息——不要猜测端点或凭据。读取 `version.number` 以确认集群满足 9.4+ 版本要求。
Anthropic 完成审核后,插件立即变为可见状态。这不需要我们额外的确认步骤,也没有暂存区域。我们同样没有收到任何上线通知。这让我们感到非常意外。我们的插件是在周四晚上发布的,但周五我没有去查看。直到下周一我们才意识到插件已经上线且可见了。在我们的案例中这没有造成什么损害(这些 skills 已经公开了好几个月),但如果您发布的不是经过充分打磨的内容,请务必在提交之前完成所有测试工作。
发布并不意味着您的插件会出现在每个 Claude 目录中。开发者可能会在至少四个地方寻找插件:
目录 | 发布后可见? | 如何进入 |
|---|---|---|
Claude 应用的“设置 > 插件 > 发现”界面 | 是 | 在 https://claude.ai/directory/manage 提交您的插件。 |
Claude Marketplace(https://claude.com/plugins、https://claude.com/marketplace) | 否 | 发布后由 Anthropic 单独完成验证流程。 |
anthropics/claude-plugins-community 仓库 | 否 | 发布后由 Anthropic 单独完成筛选流程。 |
anthropics/claude-plugins-official 仓库 | 否 | 合作伙伴插件可通过 Anthropic 联系人进行列示。 |
当插件最初发布时,它只会以未验证状态出现在 Anthropic 目录中,并被标记为“社区版”。这只适用于您的许可证或账户未配置为排除未验证插件的情况。这在我们内部引发了一些困惑(我们的 IT 部门将 Claude Enterprise 设置为隐藏“社区”插件);只有当我们未使用工作账号登录时,才能看到我们自己的插件。
要进入其他目录和市场,插件需要通过单独的“验证”或“标记”流程。在这里,与 Anthropic 合作伙伴的私信交流再次发挥了极大作用:

我们仍在努力推进插件的 Web 市场验证,并计划将其安装到 Elastic 自己的 Claude 组织中,以便我们的工程师进行内部试用(dogfooding)。这个插件还很年轻,我们希望能添加许多新功能。
但如果您要从这篇文章中带走一个信息,那就是:这个过程中最困难的部分并非技术问题。而是预期与现实之间的差距,而每一个这样的差距都是通过与真实的人交流来弥合的。工具越来越智能,但围绕这些工具的社区仍然是靠人与人之间的互助运转的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。