用 TypeScript 编写 Claude Code mod
1. 先做一个行为
先实现 /hello 命令,再增加存储、后台任务或联网。使用支持 mods 的 Claude Code 版本;线上范例与本机不同的时候,以安装版本生成的声明为准。
2. 建立三个文件
把 manifest 放在 .claude-plugin/plugin.json,模块列表放在 hooks/hooks.json,入口放在 hooks/register.tsx。modules 的路径相对于 hooks.json。起手式生成器 选择 slash-command 可下载这三个文件。
3. 注册处理函数
以 type-only import 引入 claude-code 的 Register 类型。在 session.start 注册命令,在 command.run 处理命令。next(e) 保留原事件流程;命令处理函数返回结果供会话显示。不要只为类型引入 Node runtime 依赖。
4. 本机验证
在可信的测试项目载入插件目录,检查 CLI 写出的 .claude-plugin/types 声明,用 claude plugin validate 加插件路径验证。测试 /hello、热重载与停用。结构验证不能取代运行时行为测试。
5. 逐步扩充
界面元素来自当前 surface 的元素表,不是浏览器 DOM 或 React。记录支持版本、权限、安装与移除方式;分享前测试失败路径与资源释放。
import type { Register } from "claude-code";
export const register: Register = (on) => {
on("session.start", async ($, e, next) => {
await $.command.register({ name: "hello", description: "Say hello" });
return next(e);
});
on("command.run", { command: "hello" }, async () => ({ text: "Hello" }));
};