多平台插件/技能系统架构
学习目标
- 理解 CLI-Anything 的跨平台插件架构设计
- 掌握 Plugin / Skill / Command 三种分发格式的对比
- 了解核心方法论统一的实现方式
- 识别社区贡献与官方维护的边界
前置知识
本章涉及插件系统的通用设计,建议先阅读:
下文直接聚焦 CLI-Anything 的多平台实现。
项目实践
六种平台入口
CLI-Anything 支持 6+ 种 AI 编程助手平台,每种有独立的分发格式:
| 平台 | 分发格式 | 安装路径 | 入口文件 |
|---|---|---|---|
| Claude Code | Plugin | ~/.claude/plugins/cli-anything/ | .claude-plugin/manifest.json + commands/*.md |
| Codex | Skill | $CODEX_HOME/skills/cli-anything/ | codex-skill/scripts/install.sh |
| OpenCode | Commands | ~/.config/opencode/commands/ | opencode-commands/*.md + HARNESS.md |
| Pi | Extension | ~/.pi/agent/extensions/cli-anything/ | .pi-extension/cli-anything/install.sh |
| OpenClaw | Skill | ~/.openclaw/skills/cli-anything/ | openclaw-skill/SKILL.md |
| Qodercli | Plugin | ~/.qoder.json 注册 | qoder-plugin/setup-qodercli.sh |
| GitHub Copilot CLI | Plugin | Copilot 插件目录 | copilot plugin install ./cli-anything-plugin |
核心方法论的统一
所有平台入口最终指向同一份 HARNESS.md:
设计关键:平台特定的安装脚本只是将文件拷贝到正确位置。核心方法论(HARNESS.md、commands、guides、templates)在所有平台间共享。
三种分发格式对比
Plugin 格式(Claude Code、Qodercli、Copilot CLI):
- 使用
.claude-plugin/或等效目录 - 命令定义是
.md文件,包含 Markdown 指令 - 通过平台特定的命令发现机制加载
Skill 格式(Codex、OpenClaw):
SKILL.md文件,YAML frontmatter + Markdown 体- 通过触发短语或显式调用激活
- Codex 使用
install.sh安装到技能目录
Command 格式(OpenCode):
- 纯
.md文件,拷贝到 commands 目录 - 每个文件定义一个 slash 命令
HARNESS.md必须与命令在同一目录
安装脚本模式
每种平台都有对应的安装脚本:
| 脚本 | 用途 |
|---|---|
cli-anything-plugin/scripts/setup-cli-anything.sh | Claude Code 手动安装 |
codex-skill/scripts/install.sh | Codex 技能安装 |
.pi-extension/cli-anything/install.sh | Pi 扩展安装(支持 --uninstall) |
qoder-plugin/setup-qodercli.sh | Qodercli 插件注册 |
这些脚本的共同模式:
- 将核心文件拷贝到平台特定的发现路径
- 确保
HARNESS.md在命令可引用的位置 - 提供
--uninstall反向操作
社区贡献的边界
README 中标注了平台支持的成熟度:
| 标识 | 含义 | 平台 |
|---|---|---|
| 无标注 | 官方维护 | Claude Code、Codex、OpenCode |
Community | 社区贡献 | Pi、OpenClaw、Qodercli、Copilot CLI |
Experimental | 实验性 | Codex、Goose、OpenCode |
贡献流程:新平台支持通过 PR 添加到仓库,遵循 opencode-commands/ 的参考实现模式。
命令兼容性
不同 Claude Code 版本的命令入口形式:
- 首选:
/cli-anything(主入口点) - 旧版本:
/cli-anything:cli-anything(确认插件已加载后) - 子命令保持
:subcommand形式(如/cli-anything:refine)
问题与规避
| 问题 | 规避策略 |
|---|---|
| 平台特定格式碎片化 | 核心方法论(HARNESS.md)共享,仅入口格式不同 |
| 社区贡献质量不一 | 标注 Community 标识,实验性标注 Experimental |
| 命令在不同版本中不可用 | 文档中明确标注版本兼容性和回退方案 |
| Windows 路径问题 | Claude Code Win 用户需 Git for Windows(含 bash + cygpath) |
设计取舍
多格式 vs 统一格式
选择:适配各平台原生的分发格式,而非发明统一的 CLI-Anything 格式。
原因:
- 各平台已有成熟的插件/技能发现机制
- 统一格式需要每个平台额外适配层
- 适配原生格式降低用户安装门槛
代价:维护 6+ 种安装脚本和目录结构。但核心内容(HARNESS.md、commands、guides)共享,维护成本可控。
拷贝文件 vs Symbolic Link
选择:安装脚本拷贝文件而非创建符号链接。
原因:
- 跨平台兼容性(Windows 符号链接需要管理员权限)
- 用户可离线使用(不依赖原始仓库路径)
- 卸载时只需删除目录
参考来源
- 源码验证:
cli-anything-plugin/+codex-skill/+opencode-commands/+qoder-plugin/ - 源码验证:各平台安装脚本