Plugin
Hawa Code 支持通过插件(Plugin)和插件市场(Marketplace)扩展能力。插件以声明式目录分发,可包含 Skill、斜杠命令、Agent、Hooks、MCP Server、LSP Server 等组件;市场则是一个插件目录,方便集中管理和分发多个插件。
Claude Code 兼容:默认开启
settings.plugins.pluginClaudeCompat,Hawa Code 会同时识别.hcode-plugin/和.claude-plugin/目录,优先使用.hcode-plugin/。因此可以直接复用大量 Claude Code 生态插件。
快速开始
1. 添加市场
# 本地目录 |
2. 安装插件
hcode plugin install demo-plugin@my-marketplace |
3. 使用插件
安装并启用后,插件中的 Skill 和命令会自动注册:
- Skill:在对话中通过
/插件名:Skill名或/Skill名调用。 - 自定义命令:通过
/命令名调用。 - MCP Server:重启或刷新后通过
hcode mcp list查看。
市场管理
市场是插件的集合,由一个 marketplace.json 文件描述。Hawa Code 支持通过 CLI 和交互式斜杠命令管理市场。
添加市场
hcode plugin marketplace add <source> |
<source> 支持以下形式:
| 来源 | 示例 |
|---|---|
| 本地目录 | ./my-marketplace |
| GitHub 简写 | owner/repo |
| git URL | https://github.com/owner/repo.git 或 git@github.com:owner/repo.git |
| marketplace.json URL | https://example.com/marketplace.json |
移除市场
hcode plugin marketplace remove <name> |
列出市场
hcode plugin marketplace list |
更新市场
从来源重新拉取市场内容:
# 更新全部市场 |
插件管理
安装插件
hcode plugin install <plugin[@marketplace]> |
plugin:插件名称。marketplace:可选,市场名称。省略时会在所有已知市场中查找;如果只有一个市场包含该插件,则自动使用该市场。
卸载插件
hcode plugin uninstall <plugin[@marketplace]> |
可以指定完整 ID,也可以使用 plugin@marketplace 简写。
更新插件
# 更新全部插件 |
列出已安装插件
hcode plugin list |
启用/禁用插件
hcode plugin enable <plugin[@marketplace]> |
禁用后插件的 Skill、命令、MCP 等组件不再生效,但文件仍保留在本地缓存中。
交互式管理器
在 Hawa Code 交互界面中输入:
/plugin |
即可打开插件管理器,支持键盘操作:
← / →:切换标签页(Available / Installed / Marketplaces)。↑ / ↓:选择列表项。Enter:进入详情或执行安装/卸载/更新。Esc:退出。
marketplace.json
市场的描述文件,默认位于市场根目录的 .hcode-plugin/marketplace.json;兼容模式下也支持 .claude-plugin/marketplace.json。
{ |
插件来源(source)
plugins[].source 支持多种形式:
| 类型 | 示例 |
|---|---|
| 本地相对路径 | "./plugins/formatter" |
| GitHub | { "source": "github", "repo": "owner/repo", "ref": "main", "sha": "..." } |
| URL | { "source": "url", "url": "https://...", "ref": "..." } |
| Git 子目录 | { "source": "git-subdir", "url": "https://...", "path": "plugins/foo", "ref": "main" } |
| npm | { "source": "npm", "package": "@org/pkg", "version": "1.0.0" } |
相对路径的解析基准是市场根目录(包含
.hcode-plugin/的目录),而不是.hcode-plugin/本身。
plugin.json
单个插件的描述文件,位于插件根目录的 .hcode-plugin/plugin.json;兼容模式下也支持 .claude-plugin/plugin.json。
{ |
字段说明
| 字段 | 说明 |
|---|---|
name |
插件唯一名称 |
version |
版本号 |
description |
描述 |
author |
作者信息 |
homepage / repository / license |
项目元数据 |
keywords / category |
分类与标签 |
skills |
Skill 目录路径,默认 skills |
commands |
自定义命令目录路径,默认 commands |
agents |
Agent 目录路径,默认 agents |
hooks |
Hooks 配置目录或内联对象 |
mcpServers |
MCP Server 配置目录或内联对象 |
lspServers |
LSP Server 配置目录或内联对象 |
permissions |
插件所需权限列表 |
strict |
true 时 plugin.json 优先;false 时市场条目完全覆盖 |
defaultEnabled |
安装后是否默认启用,默认 true |
strict 模式
strict: true(默认):plugin.json是组件定义的权威,市场条目仅补充信息。strict: false:市场条目是完整定义,此时plugin.json不能再声明组件(skills、commands 等),否则安装会失败。
插件组件
插件可以包含以下扩展组件:
Skill
插件 skills 目录下的每个子目录(包含 SKILL.md)都会注册为一个 Skill。安装后可直接在对话中调用。详见 Skill 文档。
自定义命令
插件 commands 目录下的 .md 文件会注册为斜杠命令。命令名默认按 插件名:命令名 命名空间化。
Agent
插件 agents 目录下的定义会加入 Agent 扫描路径。
Hooks
hooks 字段可以是目录路径(该目录下需包含 hooks.json),也可以是内联的 HooksConfig 对象。支持 SessionStart 和 SessionEnd 钩子。
MCP Server
mcpServers 字段可以是目录路径(包含 JSON 配置文件),也可以是内联对象。插件注册的 MCP Server 名称会自动加上前缀:
plugin__<marketplace>__<plugin>__<server> |
LSP Server
lspServers 字段用法与 MCP 类似,用于注册 LSP Server。
变量替换
MCP 和 Hook 配置中的字符串支持以下变量替换:
| 变量 | 替换为 |
|---|---|
${HCODE_PLUGIN_ROOT} |
插件缓存目录 |
${HCODE_PLUGIN_DATA} |
插件数据目录 |
${CLAUDE_PLUGIN_ROOT} |
同 ${HCODE_PLUGIN_ROOT} |
${CLAUDE_PLUGIN_DATA} |
同 ${HCODE_PLUGIN_DATA} |
配置
在 ~/.hcode/settings.json 或项目 .hcode/settings.json 中配置插件行为:
{ |
配置项说明
| 配置项 | 说明 |
|---|---|
enabledPlugins |
强制启用的插件 ID 列表 |
disabledPlugins |
强制禁用的插件 ID 列表 |
pluginConfigs |
每个插件的独立配置对象 |
extraKnownMarketplaces |
额外预置的市场列表 |
strictKnownMarketplaces |
true 时只接受已知市场;false 允许添加新市场 |
pluginMarketplaceAllowlist |
市场来源 allowlist,支持 glob/regex |
pluginAutoUpdate |
是否开启后台自动更新市场与插件 |
pluginAutoUpdateInterval |
自动更新间隔分钟数,默认 60 |
pluginSandboxHooks |
是否在沙箱中执行 Hook 与 MCP 命令,默认 true |
pluginClaudeCompat |
是否兼容 .claude-plugin/ 目录,默认 true |
安全与权限
安装确认
安装插件前,Hawa Code 会展示来源、版本、所需权限和沙箱状态,需要用户确认。CLI 可通过 --yes 跳过确认(当前实现中部分路径已默认信任已知市场)。
Allowlist
通过 pluginMarketplaceAllowlist 可限制允许添加的市场来源,支持 glob 和正则表达式。
路径隔离
每个插件复制到独立的缓存目录,禁止 ../ 引用和越界 symlink。${HCODE_PLUGIN_ROOT} 和 ${HCODE_PLUGIN_DATA} 作为安全的变量替换入口。
沙箱执行
pluginSandboxHooks 默认开启,Hook 与 MCP 命令通过 Hawa Code 的沙箱机制执行,受 settings.sandbox 限制。
缓存目录
插件相关数据默认存放在 ~/.hcode/plugins/:
~/.hcode/plugins/ |
环境变量
| 环境变量 | 说明 |
|---|---|
HCODE_PLUGIN_CACHE_DIR |
覆盖整个插件缓存根目录 |
HCODE_PLUGIN_ROOT |
指向已安装插件目录 |
HCODE_PLUGIN_DATA |
指向插件数据目录 |
HCODE_PLUGIN_SEED_DIR |
预置插件目录,用于容器/CI |
HCODE_PLUGIN_GIT_TIMEOUT_MS |
git 操作超时,默认 120000ms |
HCODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE |
更新失败时保留旧缓存 |
命令速查
斜杠命令
/plugin marketplace add <source> |
CLI
hcode plugin marketplace add <source> |
手动验证示例
创建一个本地市场:
mkdir -p my-marketplace/.hcode-plugin |
写入 my-marketplace/.hcode-plugin/marketplace.json:
{ |
写入 my-marketplace/plugins/demo-plugin/.hcode-plugin/plugin.json:
{ |
写入 my-marketplace/plugins/demo-plugin/skills/demo/SKILL.md:
--- |
添加并安装:
hcode plugin marketplace add ./my-marketplace |
安装完成后,在 Hawa Code 中执行 /demo-plugin:Demo 即可看到效果。