31. Hook/插件/扩展系统深度对比

April 13, 2026 · View on GitHub

Hook、插件和扩展系统决定了 AI 编程代理的可扩展性。从"无扩展能力"到"24 事件 + Prompt Hook + 13 插件 marketplace",差异跨度极大。

总览

AgentHook 事件数Hook 类型插件/扩展MarketplaceSkill 系统
Claude Code22command/http/prompt13 官方插件10+ 内置 Skill
OpenCode17 类型npm + file 插件Hook-basedSKILL.md
Gemini CLI11command/runtime扩展系统Markdown Skill
Qwen Code12继承 GeminiClaude/Gemini 格式转换/extensions继承
Kimi CLI审批系统plugin.json(v1.25)Standard + Flow
Copilot CLICLI 参数YAML agent 定义内联
GooseMCP 原生MCP 事件58+ 提供商 MCPRecipeYAML 模板
Codex CLI功能标志沙箱控制
Clinehooks/ 目录自定义Custom Instructions社区Workflows
Hermes AgentNudge 计数器触发(memory 10 轮 / skill 10 工具调用)post-response 后台 review28+ 内置工具 + MCP Client/Server 双向agentskills.io(skills_hub.py自主 SKILL.md + patch 自修补

一、Claude Code:24 事件 + Prompt Hook + 13 插件(最完整)

来源:06-settings.md、05-skills.md、hooks-config.md

24 种 Hook 事件

类别事件
工具生命周期PreToolUse、PostToolUse、PostToolUseFailure
会话生命周期SessionStart、SessionEnd、UserPromptSubmit
代理生命周期Stop、StopFailure、SubagentStart、SubagentStop
权限PermissionRequest、Elicitation、ElicitationResult
上下文PreCompact、PostCompact、InstructionsLoaded
配置ConfigChange
任务/团队TaskCompleted、TeammateIdle
WorktreeWorktreeCreate、WorktreeRemove
环境变更(v2.1.83 新增)CwdChangedFileChanged
通知Notification

3 种 Hook 类型

类型执行方式独特价值
commandShell 子进程JSON stdin/stdout 通信
httpHTTP 请求远程服务集成
promptLLM 推理决策语义理解,无需穷举规则

Command Hook 示例

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Bash",
      "hook": {
        "type": "command",
        "command": "node /path/to/check-production.js"
      }
    }]
  }
}

Command Hook 通过 stdin 接收 JSON(含 tool_name、tool_input),通过 stdout 返回决策:

// stdin(系统提供)
{ "tool_name": "Bash", "tool_input": { "command": "ssh prod-server" } }

// stdout(Hook 返回)
{ "decision": "block", "reason": "禁止操作生产环境服务器" }

决策类型:approve(跳过确认)、deny(拒绝)、block(阻止+消息)、空(正常流程)。

HTTP Hook 示例

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Edit",
      "hook": {
        "type": "http",
        "url": "https://security.internal/audit",
        "headers": { "Authorization": "Bearer ${AUDIT_TOKEN}" }
      }
    }]
  }
}

Prompt Hook 示例(独有)

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Bash",
      "hook": "prompt-hook: 检查命令是否涉及生产环境"
    }]
  }
}

LLM 理解 ssh prod-serverkubectl apply -f deployment.yaml 都是生产操作——传统脚本 Hook 需要逐一枚举,Prompt Hook 让 LLM 推理意图。

hookify 插件:自动生成 Hook 规则

hookify 是 Claude Code 13 个官方插件之一,功能是分析对话模式自动生成 Hook 规则配置。

13 官方插件

code-review、pr-review-toolkit、feature-dev、commit-commands、security-guidance、hookify、plugin-dev、agent-sdk-dev、frontend-design、ralph-wiggum、learning-output-style、explanatory-output-style、claude-opus-4-5-migration

hookify 插件:分析对话模式,自动生成 Hook 规则。

Skill 系统

10+ 内置 Skill(/loop、/schedule、/security-review、/pr-comments、/simplify 等),通过 SKILL.md frontmatter 定义。

Copilot CLI 仓库 Hooks(v1.0.10 新增)

v1.0.10 修复了 .github/hooks/-p(prompt)模式下不触发的问题。现在仓库级 Hook 在交互模式和管道模式下均正确执行。

.github/hooks/
  ├── pre-tool-use.sh    # 工具执行前触发
  └── post-tool-use.sh   # 工具执行后触发

Codex CLI:Plugins 一等公民(v0.117.0)

来源:Codex CLI v0.117.0 Changelog

v0.117.0 将 Plugins 提升为一等公民:

  • 启动时自动同步 product-scoped plugins
  • /plugins 命令浏览、安装、卸载
  • 更清晰的认证/设置流程
  • User prompt hook 允许在用户提交 prompt 时触发自定义逻辑

Copilot CLI:Hook 模板变量(v1.0.12)

来源:Copilot CLI v1.0.12 Changelog

v1.0.12 为 Plugin hooks 引入环境变量和模板变量:

  • 环境变量:CLAUDE_PROJECT_DIRCLAUDE_PLUGIN_DATA:沿用 Claude Code 生态的变量命名,确保跨工具 Plugin hooks 兼容——Copilot CLI 读取 .claude/settings.json 和 Claude Code 插件)
  • 模板变量:{{project_dir}}{{plugin_data_dir}}(在 hook 配置中使用)
  • /session rename 无参数时自动从对话历史生成会话名
  • /yolo 路径权限在 /clear 后持久化

Qwen Code Hooks 自动化系统(v0.12 新增)

Qwen Code v0.12 引入独立的 Hooks 自动化系统(非仅继承 Gemini),支持在关键生命周期事件触发自定义命令:

  • 自动注入项目上下文
  • 自动生成工作摘要日志
  • 与 Gemini CLI 的 Hook 系统并行发展

二、OpenCode:17 种 Hook 类型(最细粒度)

来源:01-overview.md、03-architecture.md

17 种 Hook 类型

类别Hook 类型
事件event
配置config、auth
工具tool(定义)、tool.definition(修改描述/参数)、tool.execute.before、tool.execute.after
聊天chat.message、chat.params、chat.headers
权限permission.ask
命令command.execute.before
Shellshell.env
实验性experimental.chat.messages.transform、experimental.chat.system.transform、experimental.session.compacting、experimental.text.complete

插件系统

  • npm 包插件:Node.js 模块
  • 文件插件:本地文件
  • Hook 驱动扩展:通过 Hook 修改工具描述、转换聊天参数、控制权限

三、Gemini CLI:11 事件 + TOML 策略 + 扩展

源码:05-policies.md、03-architecture.md

11 种 Hook 事件

BeforeTool、AfterTool、BeforeAgent、AfterAgent、BeforeModel、AfterModel、BeforeToolSelection、Notification、SessionStart、SessionEnd、PreCompress

Hook 配置示例

// settings.json
{
  "hooks": {
    "BeforeTool": [{
      "matcher": "shell",
      "hook": {
        "type": "command",
        "command": "node validate-shell.js"
      }
    }],
    "AfterModel": [{
      "matcher": "*",
      "hook": {
        "type": "runtime",
        "handler": "logModelResponse"
      }
    }]
  }
}

Hook 决策类型

ask(请求用户确认)| block(阻止+消息)| deny(静默拒绝)| approve(自动批准)| allow(放行)

扩展系统

  • 扩展定义在 settings.json 的 extensions 数组
  • Memory Manager 子代理:专用 Flash 模型管理 GEMINI.md
  • 扩展设置为 Tier 2 优先级(5 层体系中)

Skill(Markdown 格式)

SKILL.md 文件 + frontmatter 元数据,支持条件激活。


四、Qwen Code:12 事件 + 格式转换(继承 + 增强)

来源:qwen-code.md、EVIDENCE.md

12 种 Hook 事件

PreToolUse、PostToolUse、PostToolUseFailure、Notification、UserPromptSubmit、SessionStart、SessionEnd、Stop、SubagentStart、SubagentStop、PreCompact、PermissionRequest

独有增强:扩展格式转换

自动将 Claude Code 和 Gemini CLI 的扩展格式转换为 Qwen Code 兼容格式。/extensions 命令管理安装/卸载/列表。


五、Kimi CLI:plugin.json + Flow Skill

源码:soul/slash.py、Wire v1.6

Plugin 系统(v1.25.0 新增)

// ~/.kimi/plugins/my-plugin/plugin.json
{
  "name": "my-plugin",
  "version": "1.0",
  "tools": [...]
}
  • 隔离子进程执行
  • stdin/stdout JSON 通信
  • 凭证自动注入:从 LLM 配置注入 api_key + base_url(含 OAuth token 刷新)

Flow Skill(独有)

Skill 文件中嵌入 Mermaid/D2 图表定义工作流:

---
name: release-flow
---
```mermaid
graph TD
    A[版本检查] --> B{测试通过?}
    B -->|是| C[构建发布]
    B -->|否| D[修复问题]

Kimi CLI 解析图表并按流程执行各步骤。

---

## 六、Copilot CLI:YAML 代理定义

> 来源:03-architecture.md

### 代理 YAML 格式

```yaml
# definitions/code-review.agent.yaml
name: code-review
model: claude-sonnet-4.5
tools: ["*"]
promptParts:
  system: |
    You are an expert code reviewer...
  instructions: |
    Review methodology: ...
  • 3 个内置代理(code-review、explore、task)
  • 自定义代理通过 YAML 文件定义
  • 工具权限按代理配置(不是全局 Hook)

CLI 参数控制

--allow-all-tools
--allow-tool <name>
--deny-tool <name>
--available-tools <list>

七、Goose:MCP 原生扩展

来源:goose.md、EVIDENCE.md

全 MCP 驱动

所有工具通过 MCP 服务器提供。扩展 = MCP 服务器。

Recipe 系统

YAML/JSON 定义的可复用任务模板 + Cron 调度(goose schedule)。

SmartApprove

默认审批模式:仅敏感操作需要确认,低风险操作自动放行。


Hook 事件覆盖对比

事件类型Claude CodeGemini CLIQwen CodeOpenCode
工具执行前✓ PreToolUse✓ BeforeTool✓ PreToolUse✓ tool.execute.before
工具执行后✓ PostToolUse✓ AfterTool✓ PostToolUse✓ tool.execute.after
工具失败✓ PostToolUseFailure✓ PostToolUseFailure
模型调用前✓ BeforeModel
模型调用后✓ AfterModel
会话开始✓ SessionStart✓ SessionStart✓ SessionStart✓ event
会话结束✓ SessionEnd✓ SessionEnd✓ SessionEnd✓ event
压缩前✓ PreCompact✓ PreCompress✓ PreCompact✓ experimental
压缩后✓ PostCompact
权限请求✓ PermissionRequest✓ PermissionRequest✓ permission.ask
配置变更✓ ConfigChange✓ config
工具定义修改✓ tool.definition

Claude Code 独有:PostCompact、TaskCompleted、TeammateIdle、ConfigChange、WorktreeCreate/Remove、Elicitation/Result Gemini CLI 独有:BeforeModel、AfterModel、BeforeToolSelection、BeforeAgent、AfterAgent OpenCode 独有:tool.definition(运行时修改工具 schema)、shell.env、chat.params/headers


扩展生态成熟度

维度Claude CodeGemini CLIGooseOpenCode其他
官方插件数13~5 扩展MCP 驱动npm 包0-3
Marketplace
社区插件增长中扩展生态MCP 生态Hook 生态少量
格式转换✓ Qwen
Skill 系统10+ 内置MarkdownRecipeSKILL.md1-3

证据来源

Agent来源获取方式
Claude Code06-settings.md + 05-skills.md + hooks-config.md二进制分析 + 文档
OpenCode01-overview.md + 03-architecture.md开源
Gemini CLI05-policies.md + 03-architecture.md开源
Qwen Codeqwen-code.md + EVIDENCE.md开源
Kimi CLI03-architecture.md + EVIDENCE.md开源
Copilot CLI03-architecture.mdSEA 反编译
Goosegoose.md + EVIDENCE.md开源