教程 搜索 / 原生 Mac IDE / 安装与配置插件
📝 文字 ● 中级 更新于 2026-05-13

安装与配置插件

插件将你希望每个项目都具备的习惯和能力打包在一起——比如"tdd"技能、"lint-before-push"钩子,或者与 Linear 通信的 MCP 服务器。安装一次,代理下次就会自动识别并使用。

开箱即用,LingCode 已经提供了一个可正常运行的代理。但每位开发者最终都会有一些相似的个性化需求:一个了解团队 TDD 风格的技能、一个在提交前运行代码检查的钩子、一个让代理查询 Linear 或 PagerDuty 的 MCP 服务器。你可以把这些指令粘贴到每个项目的 CLAUDE.md 里,但它们本不属于那里——它们是你的个人习惯,而非项目本身的配置。正确的做法是使用插件:一个由技能、代理、钩子和 MCP 配置组成的小目录,安装一次,在你想用的地方随处生效。

LingCode 遵循 Claude Code 插件规范,这意味着插件只是一个文件夹,顶层有一个 .claude-plugin/plugin.json 清单文件,各组件按约定放在对应的子目录中。无需构建步骤、无需运行时、无需编译。代理在加载时读取插件内容,对其命名空间化处理,并像对待普通上下文一样使用它。

本教程涵盖两种安装范围(按用户和按项目)、新手常遇到的静默失败问题(缺少 plugin.json),以及当插件包含任何可能执行 shell 命令的内容时会出现的授权提示——而大多数实用插件都会触发这个提示。

你将学到什么

第 1 步:插件里面究竟有什么

1

一个带有清单文件的文件夹

插件是一个具有如下结构的目录:

my-plugin/
├── .claude-plugin/
│   └── plugin.json         ← 必需;这是让它成为插件的关键文件
├── skills/
│   └── <name>/SKILL.md     ← 可选;每个技能一个文件夹
├── agents/
│   └── <name>.md           ← 可选;子代理定义
├── hooks/
│   └── hooks.json          ← 可选;UserPromptSubmit / PreToolUse 等
├── commands/
│   └── <name>.md           ← 可选;斜杠命令
└── mcp/
    └── *.json              ← 可选;MCP 服务器配置

这些子目录都不是必需的。唯一必须存在的文件是 .claude-plugin/plugin.json——它的存在告诉 LingCode"这个文件夹是一个插件"。没有清单文件的裸文件夹会被静默忽略,这也是刚安装的插件"没有出现"的最常见原因。

第 2 步:选择安装范围

2

全局安装还是项目本地安装

LingCode 会在两个路径中查找插件:

  • 全局安装:~/.claude/plugins/<plugin-name>/ — 适用于本机上的所有项目。适合存放个人习惯(你的 TDD 风格、个人代码检查钩子等)。
  • 项目本地安装:在项目根目录或任意祖先目录的 .claude/plugins/<plugin-name>/ 中——仅在该项目(及其子目录)中生效。适合存放项目专属工具("deploy-staging"命令、限定于本产品的 Linear MCP 等)。

无论哪种方式,只需将插件文件夹放进去即可。无需注册步骤,无需重启。

第 3 步:通过 CLI 安装

3

一条命令,复制而非符号链接

如果你已经安装了 CLI,标准安装命令为:

lingcode plugin install <name-or-url-or-git-spec>

你可以传入:市场中的插件名称(在已注册的市场中查找)、git URL(克隆并复制),或本地文件系统路径。LingCode 会将插件复制到 ~/.claude/plugins/<name>/——而不是创建符号链接。这样做有充分的理由:当源目录是 git 克隆产生的临时目录时,符号链接会悬空,下次磁盘清理后插件就会丢失。

插件市场:市场是发布在 ~/.claude/marketplaces/<name>/.claude-plugin/marketplace.json 中的精选插件列表。运行 lingcode plugin search 可查看已添加市场中的所有可用插件。注意:目前没有更新流程——marketplace add 会在安装时创建快照。如需刷新,请移除后重新添加。

第 4 步:通过授权提示

4

为什么插件需要授权

如果插件包含 hooks/hooks.jsonbin/ 目录,它就能在代理正常工作流程中执行 shell 命令——这正是插件的价值所在。LingCode 在安装任何此类插件前都会弹出授权提示,因为"我把这个插件放进去了"不应该等同于"我把这个脚本复制到了 ~/.local/bin"的威胁等级。

交互式 shell 会收到一个 Y/N 提示,并附有插件将执行操作的摘要。非交互式环境(CI、脚本)将拒绝安装,除非你传入 --yes。这是刻意设计的阻力——之所以存在,是因为另一种做法会让插件悄悄安装键盘记录器。

第 5 步:命名空间——冲突如何被避免

5

插件加载的条目与项目本地条目

两个插件都可以各自包含一个名为 tdd 的技能,而不会发生冲突。通过插件加载的技能以 <plugin>:<skill> 的形式呈现——所以一个变成 jane:tdd,另一个变成 acme:tdd,代理会根据上下文选择合适的那个。

有一个例外:直接在项目中定义的技能(.claude/skills/<name>/SKILL.md,不在插件子目录下)保留其简短名称。项目本地的 tdd 会覆盖任何插件的 tdd。这是有意为之的设计:项目本地的配置始终优先,因为项目作者最了解自己的需求。

第 6 步:在不卸载的情况下禁用对模型可见的功能

6

disable-model-invocation 逃生舱口

有时你希望某个技能可以通过用户手动输入斜杠命令调用,但不希望模型自动触发它。只需在 SKILL.md 的 frontmatter 中添加 disable-model-invocation: true。这样模型就不会在系统提示中看到该技能;但你仍然可以在斜杠菜单中看到并手动调用它。

这适用于"我想保留这个技能备用,但不信任模型会在正确时机自动使用它"的场景——常见于涉及外部调用、不可逆操作或你希望每次运行前都审核的第三方 API 的技能。

彻底卸载:lingcode plugin uninstall <name> 会删除插件目录及所有注册信息。如果你是手动安装的(直接放入文件夹),使用 rm -rf 删除该文件夹即可——没有数据库需要清理。

下一步