/name 快捷方式供用户或 AI 助手调用。skills/ 或 commands/ 目录SKILL.md 的目录;命令是简单的 Markdown 文件skills/├── pdf-processor/│ ├── SKILL.md│ ├── reference.md (可选)│ └── scripts/ (可选)└── code-reviewer/└── SKILL.md
agents/ 目录---name: agent-namedescription: 代理的专长和调用时机model: sonneteffort: mediummaxTurns: 20disallowedTools: Write, Edit---代理的详细系统提示词,描述其角色、专长和行为。
name、description、model、effort、maxTurns、tools、disallowedTools、skills、memory、background 和 isolation。isolation 的唯一有效值为 "worktree"。出于安全原因,插件代理不支持 hooks、mcpServers 和 permissionMode 字段。/agents 界面中hooks/hooks.json,或在 plugin.json 中内联配置{"hooks": {"PostToolUse": [{"matcher": "Write|Edit","hooks": [{"type": "command","command": "${CODEBUDDY_PLUGIN_ROOT}/scripts/format-code.sh"}]}]}}
事件 | 触发时机 |
SessionStart | 会话开始或恢复时 |
UserPromptSubmit | 用户提交提示时,在 AI 处理之前 |
PreToolUse | 工具调用执行前,可以阻断 |
PermissionRequest | 权限对话框出现时 |
PermissionDenied | 工具调用被自动模式分类器拒绝时。返回 {retry: true} 告知模型可重试 |
PostToolUse | 工具调用成功后 |
PostToolUseFailure | 工具调用失败后 |
Notification | CodeBuddy 发送通知时 |
SubagentStart | 子代理启动时 |
SubagentStop | 子代理完成时 |
TaskCreated | 通过 TaskCreate 创建任务时 |
TaskCompleted | 任务被标记为已完成时 |
Stop | AI 完成响应时 |
StopFailure | 轮次因 API 错误结束时。输出和退出码被忽略 |
TeammateIdle | 团队成员即将进入空闲时 |
InstructionsLoaded | CODEBUDDY.md 或 .codebuddy/rules/*.md 文件加载到上下文时 |
ConfigChange | 会话期间配置文件变更时 |
CwdChanged | 工作目录变更时(例如 AI 执行 cd 命令) |
FileChanged | 监视的文件在磁盘上变更时。 matcher 字段指定要监视的文件名 |
WorktreeCreate | 通过 --worktree 或 isolation: "worktree" 创建工作树时 |
WorktreeRemove | 工作树被移除时(会话退出或子代理完成时) |
PreCompact | 上下文压缩之前 |
PostCompact | 上下文压缩完成后 |
Elicitation | MCP 服务器在工具调用期间请求用户输入时 |
ElicitationResult | 用户响应 MCP elicitation 后,响应发回服务器之前 |
SessionEnd | 会话终止时 |
command:执行 shell 命令或脚本http:将事件 JSON 作为 POST 请求发送到 URLprompt:使用 LLM 评估提示词(使用 $ARGUMENTS 占位符获取上下文)agent:运行带工具的代理验证器,用于复杂验证任务路径 | 作用域 | 安全闸门 |
hooks/hooks.json(本节描述) | 整个会话(插件启用时) | 不受 allowUntrustedFrontmatterHooks 约束,启用插件即生效 |
agents/*.md 或 skills/SKILL.md 中的 hooks frontmatter | 仅在该 subagent / fork skill 生命周期内 | 受 allowUntrustedFrontmatterHooks 闸门约束,默认拒绝;用户需在 settings.json 显式开启 |
allowUntrustedFrontmatterHooks 设置。详见 Hook 参考指南 - Frontmatter Hooks。.mcp.json,或在 plugin.json 中内联配置{"mcpServers": {"plugin-database": {"command": "${CODEBUDDY_PLUGIN_ROOT}/servers/db-server","args": ["--config", "${CODEBUDDY_PLUGIN_ROOT}/config.json"],"env": {"DB_PATH": "${CODEBUDDY_PLUGIN_ROOT}/data"}},"plugin-api-client": {"command": "npx","args": ["@company/mcp-server", "--plugin-mode"],"cwd": "${CODEBUDDY_PLUGIN_ROOT}"}}}
/plugin Discover 标签中搜索 "lsp"。本节介绍如何为官方市场未涵盖的语言创建 LSP 插件。.lsp.json 文件,或在 plugin.json 中内联配置.lsp.json 文件格式:{"go": {"command": "gopls","args": ["serve"],"extensionToLanguage": {".go": "go"}}}
plugin.json 中内联配置:{"name": "my-plugin","lspServers": {"go": {"command": "gopls","args": ["serve"],"extensionToLanguage": {".go": "go"}}}}
字段 | 描述 |
command | 要执行的 LSP 二进制文件(必须在 PATH 中) |
extensionToLanguage | 将文件扩展名映射到语言标识符 |
字段 | 描述 |
args | LSP 服务器的命令行参数 |
transport | 通信传输方式: stdio(默认)或 socket |
env | 启动服务器时设置的环境变量 |
initializationOptions | 在初始化期间传递给服务器的选项 |
settings | 通过 workspace/didChangeConfiguration 传递的设置 |
workspaceFolder | 服务器的工作区文件夹路径 |
startupTimeout | 等待服务器启动的最大时间(毫秒) |
shutdownTimeout | 等待优雅关闭的最大时间(毫秒) |
restartOnCrash | 服务器崩溃时是否自动重启 |
maxRestarts | 放弃前的最大重启尝试次数 |
/plugin Errors 标签中看到 Executable not found in $PATH 错误,请为您的语言安装所需的二进制文件。插件 | 语言服务器 | 安装命令 |
pyright-lsp | Pyright (Python) | pip install pyright 或 npm install -g pyright |
typescript-lsp | TypeScript Language Server | npm install -g typescript-language-server typescript |
rust-lsp | rust-analyzer |
作用域 | 设置文件 | 使用场景 |
user | ~/.codebuddy/settings.json | 个人插件,所有项目可用(默认) |
project | .codebuddy/settings.json | 团队插件,通过版本控制共享 |
local | .codebuddy/settings.local.json | 项目特定插件,被 gitignore |
managed | 托管设置 | 托管插件(只读,仅支持更新) |
.codebuddy-plugin/plugin.json(或 .workbuddy-plugin/plugin.json、.claude-plugin/plugin.json)文件定义插件的元数据和配置。本节记录所有支持的字段和选项。{"name": "plugin-name","version": "1.2.0","description": "插件简短描述","author": {"name": "作者名称","email": "[email protected]","url": "https://github.com/author"},"homepage": "https://docs.example.com/plugin","repository": "https://github.com/author/plugin","license": "MIT","keywords": ["keyword1", "keyword2"],"commands": ["./custom/commands/special.md"],"agents": "./custom/agents/","skills": "./custom/skills/","hooks": "./config/hooks.json","mcpServers": "./mcp-config.json","outputStyles": "./styles/","lspServers": "./.lsp.json","defaultEnabled": false,"dependencies": ["audit-logger",{ "name": "secrets-vault", "version": "~2.1.0" }],"experimental": {"themes": "./themes/","monitors": "./monitors/monitors.json"}}
name 是唯一必需字段。字段 | 类型 | 描述 | 示例 |
name | string | 唯一标识符(kebab-case,无空格) | "deployment-tools" |
plugin-dev 的代理 agent-creator 将显示为 plugin-dev:agent-creator。字段 | 类型 | 描述 | 示例 |
version | string | 语义化版本。如果在 marketplace 条目中也设置了, plugin.json 优先。只需在一处设置。 | "2.1.0" |
description | string | 插件用途简述 | "部署自动化工具" |
author | object | 作者信息 | {"name": "开发团队", "email": "[email protected]"} |
homepage | string | 文档 URL | "https://docs.example.com" |
repository | string | 源代码 URL | "https://github.com/user/plugin" |
license | string | 许可证标识符 | "MIT", "Apache-2.0" |
keywords | array | 发现标签 | ["deployment", "ci-cd"] |
defaultEnabled | boolean | 没有显式设置时是否启用,默认 true | false |
dependencies | array | 当前插件依赖的其他插件,可声明 semver 范围和 marketplace | [{"name":"helper","version":"^2.0.0"}] |
字段 | 类型 | 描述 | 示例 |
commands | string | array | 自定义命令文件/目录(替换默认 commands/) | "./custom/cmd.md" 或 ["./cmd1.md"] |
agents | string | array | 自定义代理文件(替换默认 agents/) | "./custom/agents/reviewer.md" |
skills | string | array | 自定义技能目录(替换默认 skills/) | "./custom/skills/" |
hooks | string | array | object | 钩子配置路径或内联配置 | "./my-extra-hooks.json" |
mcpServers | string | array | object | MCP 配置路径或内联配置 | "./my-extra-mcp-config.json" |
outputStyles | string | array | 自定义输出样式文件/目录(替换默认 output-styles/) | "./styles/" |
experimental.themes | string | array | Claude experimental 字段;CodeBuddy 当前仅识别,不加载到运行时 | "./themes/" |
experimental.monitors | string | array | Claude experimental 字段;CodeBuddy 当前仅识别,不启动后台 monitor | "./monitors/monitors.json" |
lspServers | string | array | object | LSP 配置路径或内联配置 | "./.lsp.json" |
userConfig | object | 启用时提示用户配置的值。详见用户配置 | 见下方 |
channels | array | 消息注入的频道声明。详见频道 | 见下方 |
defaultEnabled: false 使首次安装的插件保持禁用。已有 enabledPlugins 设置优先于该默认值,因此升级或重装不会改变用户已经明确选择的状态。如果一个插件是已启用插件的依赖,则依赖关系优先,CodeBuddy 会显式启用它。dependencies 可以同时写在 plugin.json 和 marketplace 插件条目中,两处声明会合并。字符串依赖解析到声明方所在 marketplace;对象支持以下字段:字段 | 是否必需 | 描述 |
name | 是 | 插件名 |
version | 否 | Node semver 范围,例如 ~2.1.0、^2.0、>=1.4 |
marketplace | 否 | 依赖所在 marketplace;省略时使用声明方 marketplace |
marketplace.json 中显式授权:{"name": "acme-tools","allowCrossMarketplaceDependenciesOn": ["acme-shared"],"plugins": []}
{plugin-name}--v{version} 命名 tag,例如 secrets-vault--v2.1.3。CodeBuddy 会合并所有已启用插件对同一依赖的范围,并选择满足交集的最高版本。tag semver 记录在 resolvedVersion;缓存目录使用声明版本加 12 位 commit SHA 后缀,避免被强制移动的 tag 复用旧内容。installed_plugins.json 中标记为 auto: true。普通卸载会保留这些依赖;使用 plugin prune 或 plugin uninstall --prune 才会清理不再被任何手动安装插件需要的 auto dependency。显式安装一个 auto dependency 会将其提升为手动安装,之后不会被 prune。userConfig 字段声明在插件启用时 CodeBuddy 提示用户输入的值。用此替代要求用户手动编辑 settings.json。{"userConfig": {"api_endpoint": {"description": "您团队的 API 端点","sensitive": false},"api_token": {"description": "API 认证令牌","sensitive": true}}}
${user_config.KEY} 在 MCP 和 LSP 服务器配置、钩子命令中替换,以及(仅非敏感值)在技能、命令和代理内容中替换。值也作为 CLAUDE_PLUGIN_OPTION_<KEY> 与 CODEBUDDY_PLUGIN_OPTION_<KEY> 环境变量导出到插件子进程。环境变量名中的非字母、数字或下划线字符会替换为 _,然后转为大写。settings.json 的 pluginConfigs[<plugin-id>].options 中。敏感值存储到系统密钥链(或在密钥链不可用时存储到 ~/.codebuddy/.credentials.json)。密钥链存储与 OAuth 令牌共享,总限制约 2 KB,因此敏感值应保持较小。channels 字段允许插件声明一个或多个消息频道,用于向对话中注入内容。每个频道绑定到插件提供的一个 MCP 服务器。{"channels": [{"server": "telegram","userConfig": {"bot_token": { "description": "Telegram bot token", "sensitive": true },"owner_id": { "description": "您的 Telegram 用户 ID", "sensitive": false }}}]}
server 字段是必需的,必须匹配插件 mcpServers 中的一个键。可选的按频道 userConfig 使用与顶层相同的 schema,允许在启用插件时提示输入 bot token 或 owner ID。commands、agents、skills 和 outputStyles,自定义路径会替换默认目录。如果清单指定了 commands,则不会扫描默认的 commands/ 目录。Hooks、MCP servers 和 LSP servers 对处理多个来源有不同的语义。./ 开头"commands": ["./commands/", "./extras/deploy.md"]{"commands": ["./specialized/deploy.md","./utilities/batch-process.md"],"agents": ["./custom-agents/reviewer.md","./custom-agents/tester.md"]}
CLAUDE_* 名称都有对应的 CODEBUDDY_* 别名。${CODEBUDDY_PLUGIN_ROOT}:插件安装目录的绝对路径。用于引用插件捆绑的脚本、二进制文件和配置文件。此路径在插件更新时会变化,因此写入此处的文件不会在更新后保留。${CLAUDE_PLUGIN_ROOT} 变量名以兼容 Claude Code 插件。${CODEBUDDY_PLUGIN_DATA}:用于插件状态的持久化目录,在更新后保留。用于已安装的依赖项(如 node_modules 或 Python 虚拟环境)、生成的代码、缓存以及任何需要跨插件版本持久化的文件。首次被占位符引用或导出到插件子进程时自动创建该目录。${CLAUDE_PLUGIN_DATA} 变量名。${CODEBUDDY_PROJECT_DIR}:当前工作区根目录。用于插件脚本定位用户项目,不应写入插件自身的持久化状态。${CLAUDE_PROJECT_DIR} 变量名。CLAUDE_PLUGIN_OPTION_<KEY>:Claude Code 标准名称CODEBUDDY_PLUGIN_OPTION_<KEY>:CodeBuddy 别名PLUGIN_OPT_<KEY>:为已有 CodeBuddy 插件保留的兼容名称{"hooks": {"PostToolUse": [{"hooks": [{"type": "command","command": "${CODEBUDDY_PLUGIN_ROOT}/scripts/process.sh"}]}]}}
${CODEBUDDY_PLUGIN_DATA} 目录解析为 ~/.codebuddy/plugins/data/{id}/,其中 {id} 是插件标识符,a-z、A-Z、0-9、_ 和 - 之外的字符替换为 -。例如安装为 formatter@my-marketplace 的插件,目录为 ~/.codebuddy/plugins/data/formatter-my-marketplace/。SessionStart 钩子在首次运行时安装 node_modules,并在插件更新包含更改的 package.json 时再次安装:{"hooks": {"SessionStart": [{"hooks": [{"type": "command","command": "diff -q \\"${CODEBUDDY_PLUGIN_ROOT}/package.json\\" \\"${CODEBUDDY_PLUGIN_DATA}/package.json\\" >/dev/null 2>&1 || (cd \\"${CODEBUDDY_PLUGIN_DATA}\\" && cp \\"${CODEBUDDY_PLUGIN_ROOT}/package.json\\" . && npm install) || rm -f \\"${CODEBUDDY_PLUGIN_DATA}/package.json\\""}]}]}}
diff 在存储副本缺失或与捆绑副本不同时以非零退出,涵盖首次运行和依赖变更更新。如果 npm install 失败,尾部的 rm 删除已复制的清单,以便下次会话重试。${CODEBUDDY_PLUGIN_ROOT} 中的脚本可以针对持久化的 node_modules 运行:{"mcpServers": {"routines": {"command": "node","args": ["${CODEBUDDY_PLUGIN_ROOT}/server.js"],"env": {"NODE_PATH": "${CODEBUDDY_PLUGIN_DATA}/node_modules"}}}}
--keep-data 可保留。plugin prune 会删除孤立自动依赖的数据目录。codebuddy --plugin-dir,仅在会话期间有效~/.codebuddy/plugins/cache/<marketplace>/<plugin>/<version>),而不是原地使用。市场源码仍保存在 ~/.codebuddy/plugins/marketplaces/<marketplace>,理解此行为对于开发引用外部文件的插件很重要。../shared-utils)在安装后不会工作,因为那些外部文件不会被复制到缓存中。# 在插件目录内ln -s ../../shared-plugin/skills/foo ./skills/foo
enterprise-plugin/├── .codebuddy-plugin/ # 元数据目录(可选)│ └── plugin.json # 插件清单├── commands/ # 默认命令位置│ ├── status.md│ └── logs.md├── agents/ # 默认代理位置│ ├── security-reviewer.md│ ├── performance-tester.md│ └── compliance-checker.md├── skills/ # 代理技能│ ├── code-reviewer/│ │ └── SKILL.md│ └── pdf-processor/│ ├── SKILL.md│ └── scripts/├── output-styles/ # 输出样式定义│ └── terse.md├── themes/ # Claude 标准主题定义;当前仅识别,不加载│ └── dracula.json├── monitors/ # Claude 标准后台 monitor;当前仅识别,不启动│ └── monitors.json├── hooks/ # 钩子配置│ ├── hooks.json # 主钩子配置│ └── security-hooks.json # 额外钩子├── bin/ # 插件可执行文件,添加到 PATH│ └── my-tool # 可在 Bash 工具中作为裸命令调用├── settings.json # 插件默认设置├── .mcp.json # MCP 服务器定义├── .lsp.json # LSP 服务器配置├── scripts/ # 钩子和实用脚本│ ├── security-scan.sh│ ├── format-code.py│ └── deploy.js├── LICENSE # 许可证文件└── CHANGELOG.md # 版本历史
.codebuddy-plugin/ 目录包含 plugin.json 文件。所有其他目录(commands/、agents/、skills/、output-styles/、themes/、monitors/、hooks/)必须位于插件根目录,而不是 .codebuddy-plugin/ 内部。同时兼容 .workbuddy-plugin/ 与 .claude-plugin/ 目录。组件 | 默认位置 | 用途 |
Manifest | .codebuddy-plugin/plugin.json | 插件元数据和配置(可选) |
Commands | commands/ | 技能 Markdown 文件(旧版;新技能使用 skills/) |
Agents | agents/ | 子代理 Markdown 文件 |
Skills | skills/ | 带有 <name>/SKILL.md 结构的技能 |
Output styles | output-styles/ | 输出样式定义 |
Themes | themes/ | Claude 标准字段;CodeBuddy 当前仅识别,不加载到运行时 |
Monitors | monitors/monitors.json | Claude 标准字段;CodeBuddy 当前仅识别,不启动后台 monitor |
Hooks | hooks/hooks.json | 钩子配置 |
MCP servers | .mcp.json | MCP 服务器定义 |
LSP servers | .lsp.json | 语言服务器配置 |
Executables | bin/ | 添加到 Bash 工具 PATH 的可执行文件。启用插件时此目录中的文件可在任何 Bash 工具调用中作为裸命令调用 |
Settings | settings.json | 插件默认配置。当前运行时应用 agent;subagentStatusLine 仅识别并保留 |
codebuddy plugin install <plugin> [options]
<plugin>: 插件名称或 plugin-name@marketplace-name(指定特定市场)选项 | 描述 | 默认 |
-s, --scope <scope> | 安装作用域: user、project 或 local | user |
-h, --help | 显示命令帮助 | - |
--scope project 写入 .codebuddy/settings.json 中的 enabledPlugins,使插件对所有克隆该项目仓库的人可用。# 安装到用户作用域(默认)codebuddy plugin install formatter@my-marketplace# 安装到项目作用域(与团队共享)codebuddy plugin install formatter@my-marketplace --scope project# 安装到本地作用域(被 gitignore)codebuddy plugin install formatter@my-marketplace --scope local
codebuddy plugin uninstall <plugin> [options]
<plugin>: 插件名称或 plugin-name@marketplace-name选项 | 描述 | 默认 |
-s, --scope <scope> | 从指定作用域卸载: user、project 或 local | user |
--keep-data | - | |
--prune | 同时清理该作用域中不再被需要的 auto dependency | - |
-y, --yes | 跳过 --prune 确认;stdin 或 stdout 非 TTY 时必须指定 | - |
-h, --help | 显示命令帮助 | - |
remove, rm${CODEBUDDY_PLUGIN_DATA} 目录。使用 --keep-data 可保留它,例如在测试新版本后重新安装时。codebuddy plugin prune [options]
选项 | 描述 | 默认 |
-s, --scope <scope> | 清理作用域: user、project 或 local | user |
--dry-run | 只列出将被清理的插件,不修改设置和 registry | - |
-y, --yes | 跳过确认;stdin 或 stdout 非 TTY 且未指定时只列出候选项 | - |
-h, --help | 显示命令帮助 | - |
codebuddy plugin enable <plugin> [options]
<plugin>: 插件名称或 plugin-name@marketplace-name选项 | 描述 | 默认 |
-s, --scope <scope> | 启用作用域: user、project 或 local | 自动检测当前安装作用域 |
-h, --help | 显示命令帮助 | - |
codebuddy plugin disable <plugin> [options]
<plugin>: 插件名称或 plugin-name@marketplace-name选项 | 描述 | 默认 |
-s, --scope <scope> | 禁用作用域: user、project 或 local | 自动检测当前安装作用域 |
-h, --help | 显示命令帮助 | - |
codebuddy plugin update <plugin> [options]
<plugin>: 插件名称或 plugin-name@marketplace-name选项 | 描述 | 默认 |
-s, --scope <scope> | 更新作用域: user、project、local 或 managed | user |
-h, --help | 显示命令帮助 | - |
--json 可用于脚本读取 dependencyErrors。codebuddy plugin list --json
# 添加市场codebuddy plugin marketplace add <source> [--name <name>]# 列出市场codebuddy plugin marketplace list# 更新市场codebuddy plugin marketplace update <name># 删除市场codebuddy plugin marketplace remove <name>
# 本地目录codebuddy plugin marketplace add /path/to/marketplace# GitHub 简写codebuddy plugin marketplace add owner/repo# Git URLcodebuddy plugin marketplace add https://github.com/owner/repo.git# HTTP URL (marketplace.json)codebuddy plugin marketplace add https://example.com/marketplace.json
codebuddy --debug 查看插件加载详情:问题 | 原因 | 解决方案 |
插件未加载 | 无效的 plugin.json | 运行 codebuddy plugin validate 或 /plugin validate 检查 plugin.json、skill/agent/command frontmatter 和 hooks/hooks.json 的语法和 schema 错误 |
命令未出现 | 错误的目录结构 | 确保 commands/ 在插件根目录,而不是 .codebuddy-plugin/ 内部 |
钩子未触发 | 脚本不可执行 | 运行 chmod +x script.sh |
MCP 服务器失败 | 缺少 ${CODEBUDDY_PLUGIN_ROOT} | 所有插件路径使用此变量 |
路径错误 | 使用了绝对路径 | 所有路径必须是相对路径并以 ./ 开头 |
LSP Executable not found in $PATH | 语言服务器未安装 | 安装二进制文件(例如: npm install -g typescript-language-server typescript) |
Invalid JSON syntax: Unexpected token } in JSON at position 142: 检查缺少的逗号、多余的逗号或未引用的字符串Plugin has an invalid manifest file at .codebuddy-plugin/plugin.json. Validation errors: name: Required: 缺少必需字段Plugin has a corrupt manifest file at .codebuddy-plugin/plugin.json. JSON parse error: ...: JSON 语法错误Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.: 命令路径存在但不包含有效的命令文件Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.: marketplace.json 中的 source 路径指向不存在的目录Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.: 删除重复的组件定义或在 marketplace 条目中移除 strict: falsechmod +x ./scripts/your-script.sh#!/bin/bash 或 #!/usr/bin/env bash${CODEBUDDY_PLUGIN_ROOT}:"command": "${CODEBUDDY_PLUGIN_ROOT}/scripts/your-script.sh"./scripts/your-script.shPostToolUse,而不是 postToolUse"matcher": "Write|Edit" 用于文件操作command、http、prompt 或 agent${CODEBUDDY_PLUGIN_ROOT} 变量codebuddy --debug 显示初始化错误.mcp.json 或 plugin.json 中正确配置.codebuddy-plugin/ 内部。只有 plugin.json 属于 .codebuddy-plugin/。my-plugin/├── .codebuddy-plugin/│ └── plugin.json <- 只有清单在这里├── commands/ <- 在根级别├── agents/ <- 在根级别└── hooks/ <- 在根级别
.codebuddy-plugin/ 内部,将它们移到插件根目录。codebuddy --debug 并查找 "loading plugin" 消息{"name": "my-plugin","version": "2.1.0"}
MAJOR.MINOR.PATCH1.0.0 开始plugin.json 中的版本CHANGELOG.md 文件中记录变更2.0.0-beta.1)进行测试plugin.json 中的版本,由于缓存机制,现有用户不会看到变更。plugin.json 的 versionversiongit-subdir 还包含子目录路径哈希unknownresolvedVersion,不依赖可能过期的 manifest 版本。unknown 的 Git marketplace 插件会在启动时自动迁移:CodeBuddy 从当前 marketplace checkout 解析 commit SHA,将源码物化到对应的 SHA 缓存目录,再原子更新 installed_plugins.json。旧的 unknown 目录只会被标记为 orphan;至少保留 14 天,并且仍有活动会话的 .in_use 标记时不会删除。非 Git 来源且没有显式版本的插件继续使用 unknown。概念 | Claude Code | CodeBuddy |
元数据目录 | .claude-plugin/ | .codebuddy-plugin/(优先)、.workbuddy-plugin/ 或 .claude-plugin/(兼容) |
环境变量 | ${CLAUDE_PLUGIN_ROOT} | ${CODEBUDDY_PLUGIN_ROOT}(优先)或 ${CLAUDE_PLUGIN_ROOT}(兼容) |
数据目录变量 | ${CLAUDE_PLUGIN_DATA} | ${CODEBUDDY_PLUGIN_DATA}(优先)或 ${CLAUDE_PLUGIN_DATA}(兼容) |
.claude-plugin/ 重命名为 .codebuddy-plugin/${CLAUDE_PLUGIN_ROOT} 替换为 ${CODEBUDDY_PLUGIN_ROOT}${CLAUDE_PLUGIN_DATA} 替换为 ${CODEBUDDY_PLUGIN_DATA}文档反馈