插件 · 清单、发现与信任模型
grok 的插件把 skills/commands/agents/hooks/MCP/LSP 打成一个可分发的目录。这一章看它的清单 schema、按作用域的发现优先级,以及那个关键的信任模型——信任按作用域判定,未受信插件只露出 agent 的元数据,技能、hooks 与 MCP 一律不加载。
插件 · 清单、发现与信任模型
Part 4 讲扩展机制。插件是「把扩展打包分发」的顶层容器——一个自包含目录,捆着 skills、commands、agents、hooks、MCP、LSP。这套在 xai-grok-agent/src/plugins/ + xai-grok-plugin-marketplace。
这一部分和你已读过的 Claude Code 手册 · Plugins 高度对应——grok 有意兼容 Claude 的插件约定(.claude/plugins/、.claude-plugin/plugin.json、${CLAUDE_PLUGIN_ROOT})。两边对照读,能看清「同一套插件生态,一个是文档、一个是源码」。
清单:向前兼容的 plugin.json
清单按序找:plugin.json → .grok-plugin/plugin.json → .claude-plugin/plugin.json。它故意向前兼容(不 deny_unknown_fields,未知字段忽略),字段有 name(kebab、≤64 字符)、version、description、author,以及各组件的路径覆盖(skills/commands/agents/hooks/mcpServers/lspServers)。
没有清单也行:按约定——目录名当插件名,只要目录里至少有一个组件(skills/、.mcp.json……)。两个安全细节:路径覆盖会做 is_path_contained 校验,拒绝用 .. 逃出插件根;${GROK_PLUGIN_ROOT} / ${CLAUDE_PLUGIN_ROOT}(Claude 别名 = Grok 同值)等 token 由 substitute_plugin_tokens 统一替换。
发现:按作用域定优先级
discover_plugins 按作用域扫,PluginScope 的枚举序数就是优先级:CliOverride(0)> Project(1)> User(2)> ConfigPath(3)。同名冲突时序数最小的赢。还有更细的 PluginOrigin 记来源(含 ProjectClaude/UserClaude/各种 marketplace 来源),兼容 .claude/plugins/installed_plugins.json。
一个默认策略:CLI/ConfigPath 来源的插件默认启用,User/Project 来源的默认禁用(得显式 enable)——越「就近、越明确」的越自动生效。
信任模型:这一部分的重点
插件能跑任意代码(hooks、MCP 服务器命令),所以信任是核心。信任按作用域判定:
- CLI 指定的、用户级的(
~/.grok/plugins/、~/.claude/plugins/,以及从 marketplace 或 CLI 装进来的——装机即表态)自动受信; - 项目插件跟随目录信任(folder-trust)——信任这个项目目录,其中的项目插件就一并受信,不再逐个授权;
- 只有
[plugins].paths里、位于$HOME之外的目录,才查按「插件根的规范路径」记录的TrustStore(~/.grok/trusted-plugins,一行一个路径)。
未受信插件的行为很讲究:它的 agents 只解析 frontmatter(提示词正文在受信前绝不进模型),skills、commands 不加载(插件面板里仍列出名字),hooks、MCP 服务器、LSP 一律不启用(面板显示为 blocked)。也就是「只露元数据,不跑任何东西」。
active_plugins()(enabled + trusted)才放行 skills、commands 与各种可执行组件;enabled_plugins()(仅 enabled)只给 agents 的元数据用。安全测试专门验证:一个在 enabled 列表里但未受信的项目插件,绝不出现在 active_plugins() 里——hooks 永不触发。顺带一提,trust.rs 的模块注释还写着「按插件根粒度信任、未受信插件的 skills 照样列出」,已经跟不上实现——读源码时,注释也要对照代码看。
和《从 LLM 到 Coding Agent》对照
那本没有插件系统——它是产品级的分发关注点。grok 的插件把前面几章的能力(skills、hooks、MCP、subagent)打成可分发单元,还配了一套按作用域判定、「只露元数据不跑代码」的信任分层。这是「让第三方扩展你的 agent,又不被恶意扩展坑」的必答题。下一章看这些插件从哪来:marketplace。
上一篇:Hooks · 下一篇:插件市场 · marketplace