Claude Mods:用 Function Hooks 扩展界面
Claude Mods 是面向 Claude Code 的一类扩展:工程原语叫 function hooks(TypeScript 中间件)。一个 mod = 一个用 function hooks 写的插件——可以拦工具调用、动界面、注册工具、自带状态,而不只是在 shell 里跑一段脚本。
社区在 9 月中旬前后开始热议;Boris Cherny 一带的工程叙事也指向这层能力。本文只写开发者需要知道的边界:它是什么、和旧 hooks 差在哪、现在稳不稳、信任怎么判。
Function hooks ≠ hooks.json 里的 shell 钩子
你已经熟悉的 hooks.json / 命令钩子,多半是「某事件触发后跑 shell」。Function hooks 是另一层:在引擎行为外包一层,风格接近 Express 中间件:
on(event, matcher, ($, e, next) => {
// 可拦截、改写,再 next()
})能力大致包括:
- 拦截或改写工具调用(请求进模型 / 工具前后动手脚)
- 触达 UI(旁路面板、状态条一类)
- 注册额外工具
- 在 mod 内持有状态
中间件拿到的 $ 是受控能力面:方便做管理审计、allowlist,而不是把整台机器裸交给任意脚本。细节以你本机版本的文档为准;下面只强调心智模型。
传统 hooks 适合「提交前跑 lint」「Stop 时记一笔日志」。Function hooks 适合「我想改 Claude Code 自己怎么表现」。两者可以并存,别混成同一个配置文件概念。
状态:落地中 / 早期预览
这是正在落地的能力,很多环境仍是早期访问或预览:
- 近期构建里,运行时可能藏在旗标后(社区写到约 2.1.260 一带出现过
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1) - 不要默认每个用户一打开就有 Mods;先查自己的版本与官方说明
- API、事件名、
$表面都可能变——演示能跑 ≠ 生产可依赖
升级后再试:
claude update若文档或 release note 要求环境变量,再按说明打开;没有入口就别硬翻二进制。
社区演示:说明可能性,不是安装清单
已经出现的 demo 方向(举例,不背书具体仓库):
- 在 Claude Code 旁边塞一个可玩的 Tetris:Stop 时暂停,UserPromptSubmit 时继续——证明 UI 与生命周期钩得上
- CI 状态面板:把流水线红绿挂在会话旁
- 聚焦类工具:收窄当前任务相关视图
这些用来理解「mod 能做什么」。不要随便装来路不明的 mod:它们能看见工具流量,权限面接近「进了引擎房间」。安装与评测心态对齐 插件指南 与 plugin eval:只装信任源;能跑通不等于值得开给生产仓库。
和 Skills、MCP、普通插件怎么分
| 机制 | 主要干什么 |
|---|---|
| Skills | 可复用工作流 / 清单,用到才加载 |
| MCP | 接外部工具与数据源 |
| 普通插件 | 打包 commands / skills / hooks 等跨仓复用 |
| Mods | 进程内 UI / 行为插件(function hooks) |
Skills 管「怎么做事」;MCP 管「外面有什么工具」;Mods 管「Claude Code 自己长什么样、中间层怎么拦」。更细的 Skills / MCP / Hooks 对照见 这篇。写 skill 模式仍看 Skills 指南。
信任原则(写进日常习惯)
- Mods 能看见工具调用与相关上下文——当不可信代码处理
- 只从你信任的来源安装;团队仓库用 allowlist / 审计流程卡住
$能力 - 演示仓库先在干净环境试,再接到真实密钥与生产路径
- 评测行为变化可用 plugin eval 那套思路:有 / 无 mod 对照,而不是只看「界面炫不炫」
实操小结
- 把 Mods 理解成 function hooks 插件,不是换皮的
hooks.json - 先确认版本与文档;旗标预览期别假设人人默认开启
- 用社区 demo 理解能力边界,不把随机 mod 装进主力环境
- Skills / MCP / Mods 分工:流程、外部工具、进程内行为
- 信任优先:能看工具流量 = 高权限扩展
Mods 值钱的地方是让「界面与引擎行为」也可插件化;在预览期,克制比追新更重要。