前言

如果你还没用过 Claude Code,简单说就是 Anthropic 出的一个命令行 AI 编程助手,和 GitHub Copilot CLI 功能类似——你可以在终端里直接跟它对话,让它帮你改代码、查文档、跑测试。但它之前有个问题:不够开放。你想加个自定义工具(比如解析日志、部署到服务器),得自己写脚本然后手动挂载。

上周 Anthropic 官方上线了一个插件目录仓库 anthropics/claude-plugins-official今天刚开仓库就爆了 26352 stars,说明大家确实等这个功能很久了。

这仓库本身不包含代码,是一个官方维护的插件清单,每个插件指向一个独立的 GitHub repo。你可以一键引用(前提是安装好 Claude Code),或者 fork 后自己魔改。

老规矩,不吹不黑,咱们直接看它能解决什么问题、怎么用、跟其他方案比有哪些优势和坑。

为什么要搞插件机制?

Claude Code 作为命令行工具,默认能力就是读文件、写文件、执行命令。但实际开发中我们经常需要:

  • 对接内部 API(CI/CD、Jira、数据库)
  • 执行特定领域的工具(比如 protobuf 编译、Swagger 校验)
  • 复用已有的 Python/Shell 脚本

之前你得写个 custom_tools.py 然后通过 --tools 参数加载,或者干脆让 Claude 去写 shell 命令。前者配置麻烦,后者安全风险高(Claude 可能会执行你不想执行的命令)。

官方插件目录解决的就是“怎么安全、方便地扩展 Claude Code 的能力”

插件目录长什么样?

打开仓库,里面核心文件是 plugins.json,类似这样(我从仓库 README 提取简化):

json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[
  {
    "name": "pytest-runner",
    "description": "Run pytest for a specific module and return results",
    "repo": "https://github.com/anthropics/claude-code-plugin-pytest-runner",
    "install": "pip install claude-code-plugin-pytest-runner"
  },
  {
    "name": "fetch-url",
    "description": "Fetch content from a URL and return text",
    "repo": "https://github.com/anthropics/claude-code-plugin-fetch-url",
    "install": "pip install claude-code-plugin-fetch-url"
  },
  {
    "name": "shell-executor",
    "description": "Execute a shell command with timeouts and approvals",
    "repo": "https://github.com/anthropics/claude-code-plugin-shell-executor",
    "install": "pip install claude-code-plugin-shell-executor"
  }
]

目前官方放了 13 个插件,涵盖测试、代码格式化、HTTP 请求、文件搜索等常见需求。每个插件都是标准的 Python 包,通过 pip 安装后,Claude Code 会自动发现。

Claude Code terminal with plugins menu

核心亮点:安全与可控

这目录最有价值的地方,我个人觉得是安全模型

Claude Code 默认会扫描已安装的 Python 包,如果发现包名匹配某个插件约定(通常以 claude-code-plugin- 开头),就会在对话中暴露给 Claude。但这不等于 Claude 可以随便调用——每个插件需要你显式授权。第一次调用时,Claude 会问:“这个插件需要执行以下操作(列出具体作用域),允许吗?” 你同意后才生效。

对比以前的自定义工具方式,你写的 Python 脚本里,Claude 可以调用任意函数,基本相当于给它一个后门。官方插件则限制了每个插件的权限描述,插件开发者必须在 plugin.json 里声明需要的权限(比如“读文件”“写文件”“网络访问”),Claude 运行时根据声明做沙箱。

这就解决了我在内网开发时最大的顾虑:**我不希望一个 AI 工具能直接执行 rm -rf /**。官方插件的设计让安全边界更清晰。

跟同类方案对比

现在类似的 AI 编程助手插件生态,我主要知道三个方向:

方案 配置复杂度 执行环境 安全机制 可自定义
Claude Code 官方插件 低(pip install) 本地 Python 进程 权限声明+用户授权 高(可 fork 改代码)
OpenAI GPTs Actions 中(写 OpenAPI spec) 远程服务器 OAuth+API key 中(受限于 API)
LangChain 工具 高(需要整条链) 本地/远程均可 自定义中间件 高(但门槛高)

OpenAI Actions 走的是 REST API 模式,意味着你得自己架个后端服务,而且只能在 OpenAI 的对话界面用,没法集成到 CLI。LangChain 工具 太通用,为了一个简单需求要搭整套链式调用,大炮打蚊子。

Claude Code 插件的好处是纯本地、轻量。你就是装个 Python 包,然后就能在终端的 Claude 对话里用它——不需要后端,不需要额外配置,甚至不需要重启终端。

缺点也很明显:插件只能用 Python 写(至少目前官方目录里的都是),如果你习惯 Go/Node.js 就得自己包装成 Python 子进程。(但好消息是你可以写一个 Python 胶水层,调用外部命令。)

局限性和适用边界

说几个实际踩坑的点:

  1. 插件数量太少。目前官方目录只有 13 个,覆盖的场景有限。你要对接公司内部的 API 大概率没有现成的,得自己写。
  2. 插件之间有依赖冲突。举个例子,pytest-runner 依赖 pytest 6.x,但你项目里用的是 7.x,pip 可能会打架。官方目前没有隔离运行机制,所有插件共享同一个 Python 环境。
  3. 调试不方便。插件出错了,Claude Code 只给你一个笼统的“插件执行失败”,不会打印 Python 的 traceback。你得去改插件源码加 print。
  4. 只适用于 Claude Code CLI。如果你是 VSCode 里用 Claude 扩展,或者用网页版,用不了。

所以我的建议是:

  • 日常简单重复任务(运行测试、格式化代码、查文档)直接用官方插件,省事。
  • 复杂业务逻辑(比如跨多步骤的数据处理)还是写自定义脚本更可控。
  • 如果你需要和内部平台交互,最好基于官方插件的模板自己写一个。

快速上手:5 分钟装好并用上

假设你已经装好了 Claude Code(pip install claude-code,具体看官方文档)。接下来:

1. 安装一个官方插件

fetch-url 为例:

bash
1
pip install claude-code-plugin-fetch-url

装完后重启终端(或者新开一个 session),输入 claude 启动。

2. 在对话中使用

text
1 2 3 4 5 6 7 8 9 10 11 12 13
[你] 帮我抓一下 https://httpbin.org/get 的内容
[Claude] 好的,我需要使用 fetch-url 插件来获取 URL。这个插件可以发起 HTTP GET 请求。是否允许?
[你] 允许
[Claude] 抓取成功,内容如下:
{
  "args": {}, 
  "headers": {
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.31.0"
  }, 
  "origin": "xxx.xxx.xxx.xxx",
  "url": "https://httpbin.org/get"
}

就这么简单。Claude 会自动识别当前可用的插件,并判断什么时候调用。

Claude Code conversation with plugin response

3. 自己写一个超级简单的插件

官方没有提供快速模板(至少目录里没有),但每个插件 repo 的结构是一致的。我们拿一个最小示例来说明。

创建 my_plugin.py

python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# my_plugin.py
from typing import Any

def greet(name: str) -> str:
    """返回欢迎语"""
    return f"Hello, {name}!"

# 插件必须暴露一个 Tool 类
class Tool:
    def __init__(self):
        self.name = "greet"
        self.description = "Greet a person by name."
        self.parameters = {
            "name": {
                "type": "string",
                "description": "The name to greet"
            }
        }

    def run(self, name: str) -> Any:
        return greet(name)

同目录下放 plugin.json

json
1 2 3 4 5 6 7
{
  "name": "greet",
  "description": "Greet a person by name",
  "module": "my_plugin",
  "class": "Tool",
  "permissions": []
}

然后把整个目录拷贝到 ~/.claude_plugins/(具体路径查看 Claude Code 文档),或者通过 pip 安装(如果打成包的话)。重新打开 Claude Code 就可以用了:

text
1 2 3 4
[你] 帮我问候一下张三
[Claude] 我要调用 greet 插件来问候张三。允许吗?
[你] 允许
[Claude] Hello, 张三!

(注:实际 Claude Code 的插件接口可能有变化,以上是基于公开文档推断的简化版。建议去官方仓库看每个插件的源码学具体写法。)

总结(并没有)

我不会说“综上所述”,但我可以告诉你我的结论:

  • 如果你已经用 Claude Code,现在立刻去装一两个插件(比如 pytest-runner),效率提升立竿见影。
  • 如果你还没用 Claude Code,插件生态让它更值得尝试了,特别是你日常需要 AI 帮你跑代码/查文档的场景。
  • 别指望这 13 个插件能覆盖你所有需求,但模板简单,自己写一个也就半天。

最后提一句:这个目录目前全是 Python 插件,如果你有精力,可以看看每个插件的 plugin.jsonTool 接口。我估计不久就会出现社区的非官方目录,甚至语言无关的插件规范。但至少现在,Anthropic 这一步走得挺实在。

Python code editor showing plugin code