CodeBuddy CLI 插件开发指南
【摘要】 CodeBuddy 插件开发笔记
CodeBuddy CLI 插件开发指南
一、插件是什么
插件(Plugin)是扩展 CodeBuddy Code 功能的机制。一句话理解:
把你写在项目
.codebuddy/目录里的自定义配置(技能、命令、钩子等),打包成一个带版本、可安装、可分享的标准包。
插件 vs 独立配置(怎么选)
| 对比项 | 独立配置(.codebuddy/ 目录) |
插件(含 plugin.json) |
|---|---|---|
| 调用方式 | /hello |
/plugin-name:hello(带命名空间前缀) |
| 适用场景 | 个人工作流、项目定制、快速实验 | 团队共享、社区分发、版本化发布、跨项目复用 |
💡 官方建议:先在
.codebuddy/快速迭代,需要共享时再转换为插件。
二、插件能包含的 6 类组件
| 组件 | 目录位置 | 触发方式 | 说明 |
|---|---|---|---|
| 技能 Skills | skills/<名称>/SKILL.md |
模型根据上下文自动调用 | 每个技能一个文件夹 |
| 斜杠命令 Commands | commands/*.md |
用户手动输入触发 | 注册为 /插件名:命令名 |
| 代理 Agents | agents/ |
按需调用 | 自定义代理定义 |
| 钩子 Hooks | hooks/hooks.json |
事件触发自动化 | 支持 command / prompt / agent / http 四种类型 |
| MCP 服务器 | .mcp.json |
工具调用 | 接入外部工具服务 |
| LSP 服务器 | .lsp.json |
编辑时实时调用 | 提供代码智能(需用户预装语言服务器二进制) |
三、标准目录结构
my-plugin/
├── .codebuddy-plugin/ # 元数据(必需),只放 plugin.json
│ └── plugin.json
├── commands/ # 斜杠命令(可选)
│ └── example.md
├── agents/ # 自定义代理(可选)
├── skills/ # 技能文件夹(可选)
│ └── code-review/
│ └── SKILL.md
├── hooks/ # 钩子配置(可选)
│ └── hooks.json
├── bin/ # 插件启用时自动加入 PATH 的可执行文件(可选)
├── .mcp.json # MCP 服务器配置(可选)
├── .lsp.json # LSP 服务器配置(可选)
└── settings.json # 插件默认设置(可选)
⚠️ 最常见的错误:
commands/、agents/、skills/、hooks/这四个目录必须放在插件根目录,不能放进.codebuddy-plugin/里面。
四、plugin.json(manifest)写法
位于 .codebuddy-plugin/plugin.json:
{
"name": "my-plugin",
"description": "插件描述(显示在插件管理器中)",
"version": "1.0.0",
"author": {
"name": "作者名",
"email": "author@example.com"
},
"homepage": "https://github.com/username/my-plugin",
"repository": "https://github.com/username/my-plugin",
"keywords": ["example"],
"category": "开发工具",
"commands": [],
"agents": [],
"skills": [],
"hooks": "./hooks/hooks.json"
}
| 字段 | 说明 |
|---|---|
name |
唯一标识符,也是技能的命名空间前缀 |
version |
语义化版本(如 1.0.0) |
description |
插件管理器中显示的描述 |
hooks |
指向 hooks.json 的相对路径 |
五、各组件开发要点
1. 技能(Skills)
- 每个技能是
skills/<技能名>/SKILL.md,文件夹名就是技能名 - Frontmatter 必填
name和description - 加
disable-model-invocation: true可以阻止模型自动调用 - 接收参数:用
$ARGUMENTS占位符捕获用户输入,例如/my-plugin:hello Alex
2. 斜杠命令(Commands)
- Markdown 文件,frontmatter 支持
description、argument-hint - 注册后通过
/插件名:命令名手动触发
3. 钩子(Hooks)
- 配置在
hooks/hooks.json,由事件触发 - 四种类型:
command(执行命令)、prompt(小模型语义判定)、agent(subagent 验证)、http(POST/PUT/PATCH 到指定 URL) - 插件 hooks 启用时与用户/项目级 hooks 合并(不是覆盖),且不受
allowUntrustedFrontmatterHooks闸门约束 - 典型示例:
PostToolUse事件匹配Write|Edit,用jq提取file_path后执行npm run lint:fix
4. LSP 服务器(.lsp.json)
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": { ".go": "go" }
}
}
- 限制:用户必须预装语言服务器二进制(如
gopls、pylsp、rust-analyzer) - 建议:常见语言(TypeScript / Python / Rust 等)直接从市场安装预构建 LSP 插件,只为市场未覆盖的语言自建
5. 默认设置(settings.json)
- 目前仅支持
agent键(激活插件中某个自定义代理为主线程) - 优先级高于
plugin.json中的settings;未知键会被静默忽略
六、开发 → 测试 → 发布 全流程
| 步骤 | 命令 / 操作 | 说明 |
|---|---|---|
| 1. 本地加载测试 | codebuddy --plugin-dir ./my-plugin |
可多次指定同时加载多个插件 |
| 2. 热重载 | /reload-plugins |
改完代码无需重启 CLI |
| 3. 校验插件 | codebuddy plugin validate /path/to/plugin |
检查 manifest 格式是否正确 |
| 4. 调试 | codebuddy --debug |
查看详细日志定位问题 |
| 5. 市场分发 | /plugin install |
发布到插件市场供他人安装 |
前提条件:已安装并认证 CodeBuddy Code,且为最新版本(旧版本看不到
/plugin命令)。
七、五分钟快速上手(官方示例流程)
# 1. 创建插件目录
mkdir my-first-plugin
# 2. 创建 manifest
# my-first-plugin/.codebuddy-plugin/plugin.json
# 3. 创建第一个技能
# my-first-plugin/skills/hello/SKILL.md
# 4. 启动并测试
codebuddy --plugin-dir ./my-first-plugin
# 在 CLI 中运行:/my-first-plugin:hello
# 5. 进阶:用 $ARGUMENTS 支持个性化参数
# /my-first-plugin:hello Alex
八、从 .codebuddy/ 迁移为插件(4 步)
- 创建
my-plugin/.codebuddy-plugin/plugin.json - 把
.codebuddy/下的commands/、agents/、skills/复制到插件根目录 - 把 settings.json 中的
hooks对象复制到hooks/hooks.json(格式相同) - 用
--plugin-dir测试通过后,可删除原.codebuddy/目录避免重复(插件版本优先)
九、最佳实践与安全提醒
开发建议
- 目录与命令统一用 kebab-case(短横线小写)命名
- 填写完整的 manifest 元数据
- 使用语义化版本号管理发布
- 写清晰的 README 文档
- 发布前务必本地测试,先让团队成员试用
安全注意(重要)
- ⚠️ 插件可以执行命令、访问文件系统,仅从可信来源安装
- 安装第三方插件前,先审查它的 commands 和 hooks 内容
- 通过权限系统限制插件的访问范围
故障排除速查表
| 现象 | 排查方法 |
|---|---|
| 插件没加载 | 运行 /plugin 检查启用状态 → 检查 manifest 格式 → /reload-plugins → 加 --debug 看日志 |
| 命令不可用 | 确认 commands/ 在插件根目录 → 运行 /reload-plugins |
| 同名冲突 | 本地 --plugin-dir 副本优先于已安装的市场插件(托管设置强制启用的除外) |
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)