插件将你希望每个项目都具备的习惯和能力打包在一起——比如"tdd"技能、"lint-before-push"钩子,或者与 Linear 通信的 MCP 服务器。安装一次,代理下次就会自动识别并使用。
开箱即用,LingCode 已经提供了一个可正常运行的代理。但每位开发者最终都会有一些相似的个性化需求:一个了解团队 TDD 风格的技能、一个在提交前运行代码检查的钩子、一个让代理查询 Linear 或 PagerDuty 的 MCP 服务器。你可以把这些指令粘贴到每个项目的 CLAUDE.md 里,但它们本不属于那里——它们是你的个人习惯,而非项目本身的配置。正确的做法是使用插件:一个由技能、代理、钩子和 MCP 配置组成的小目录,安装一次,在你想用的地方随处生效。
LingCode 遵循 Claude Code 插件规范,这意味着插件只是一个文件夹,顶层有一个 .claude-plugin/plugin.json 清单文件,各组件按约定放在对应的子目录中。无需构建步骤、无需运行时、无需编译。代理在加载时读取插件内容,对其命名空间化处理,并像对待普通上下文一样使用它。
本教程涵盖两种安装范围(按用户和按项目)、新手常遇到的静默失败问题(缺少 plugin.json),以及当插件包含任何可能执行 shell 命令的内容时会出现的授权提示——而大多数实用插件都会触发这个提示。
插件是一个具有如下结构的目录:
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"这个文件夹是一个插件"。没有清单文件的裸文件夹会被静默忽略,这也是刚安装的插件"没有出现"的最常见原因。
LingCode 会在两个路径中查找插件:
~/.claude/plugins/<plugin-name>/ — 适用于本机上的所有项目。适合存放个人习惯(你的 TDD 风格、个人代码检查钩子等)。.claude/plugins/<plugin-name>/ 中——仅在该项目(及其子目录)中生效。适合存放项目专属工具("deploy-staging"命令、限定于本产品的 Linear MCP 等)。无论哪种方式,只需将插件文件夹放进去即可。无需注册步骤,无需重启。
如果你已经安装了 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 会在安装时创建快照。如需刷新,请移除后重新添加。
如果插件包含 hooks/hooks.json 或 bin/ 目录,它就能在代理正常工作流程中执行 shell 命令——这正是插件的价值所在。LingCode 在安装任何此类插件前都会弹出授权提示,因为"我把这个插件放进去了"不应该等同于"我把这个脚本复制到了 ~/.local/bin"的威胁等级。
交互式 shell 会收到一个 Y/N 提示,并附有插件将执行操作的摘要。非交互式环境(CI、脚本)将拒绝安装,除非你传入 --yes。这是刻意设计的阻力——之所以存在,是因为另一种做法会让插件悄悄安装键盘记录器。
两个插件都可以各自包含一个名为 tdd 的技能,而不会发生冲突。通过插件加载的技能以 <plugin>:<skill> 的形式呈现——所以一个变成 jane:tdd,另一个变成 acme:tdd,代理会根据上下文选择合适的那个。
有一个例外:直接在项目中定义的技能(.claude/skills/<name>/SKILL.md,不在插件子目录下)保留其简短名称。项目本地的 tdd 会覆盖任何插件的 tdd。这是有意为之的设计:项目本地的配置始终优先,因为项目作者最了解自己的需求。
disable-model-invocation 逃生舱口有时你希望某个技能可以通过用户手动输入斜杠命令调用,但不希望模型自动触发它。只需在 SKILL.md 的 frontmatter 中添加 disable-model-invocation: true。这样模型就不会在系统提示中看到该技能;但你仍然可以在斜杠菜单中看到并手动调用它。
这适用于"我想保留这个技能备用,但不信任模型会在正确时机自动使用它"的场景——常见于涉及外部调用、不可逆操作或你希望每次运行前都审核的第三方 API 的技能。
lingcode plugin uninstall <name> 会删除插件目录及所有注册信息。如果你是手动安装的(直接放入文件夹),使用 rm -rf 删除该文件夹即可——没有数据库需要清理。