[RFC] OpenViking Skill 子命令提案 #2106
MaojiaSheng
started this conversation in
RFC
Replies: 3 comments
|
用户私有 | viking://user/{user_space}/skills/ |
0 replies
|
0 replies
|
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
OpenViking Skill 子命令改造方案:对齐 Vercel Labs Skills CLI 风格
1. 背景与动机
1.1 行业趋势
Agent Skills 已成为 AI Agent 生态的开放标准(agentskills.io),由 Anthropic 首创并已被 50+ Agent 产品采纳(Claude Code、Cursor、VS Code Copilot、Gemini CLI、Codex、Roo Code、Junie、Goose 等)。Vercel Labs 推出的 skills CLI 提供了跨 Agent 的技能管理工具链,形成了技能发现、安装、分发的事实标准。
1.2 OpenViking 现状
OpenViking 当前将 Skill 视为一种特殊的资源类型,管理能力分散在通用文件系统命令中:
ov add-skillov ls viking://agent/skills/ov find "query" --uri viking://agent/skills/ov read viking://agent/skills/xxx/SKILL.mdov rm viking://agent/skills/xxx/ --recursive核心痛点:技能管理能力碎片化、缺乏技能生命周期管理、与 Agent Skills 生态不互通。
1.3 改造目标
将 OpenViking 所有 Skill 相关能力改造为
ov skills子命令风格,对标 Vercel Labs Skills CLI,同时保留 OpenViking 的差异化优势(服务端知识库、语义搜索、MCP 转换、渐进式摘要)。2. Agent Skills 规范摘要
2.1 SKILL.md 格式
Frontmatter 字段规范:
namedescriptionlicensecompatibilitymetadataallowed-tools2.2 技能目录结构
2.3 渐进式披露(Progressive Disclosure)
2.4 技能发现路径
行业标准发现路径(按优先级):
~/.agents/skills/~/.claude/skills/2.5 Plugin Manifest 发现
如果存在
.claude-plugin/marketplace.json或.claude-plugin/plugin.json,其中声明的技能也会被发现:{ "metadata": { "pluginRoot": "./plugins" }, "plugins": [ { "name": "my-plugin", "source": "my-plugin", "skills": ["./skills/review", "./skills/test"] } ] }3. 命令设计
3.1 总览
将现有的分散式技能操作统一到
ov skills子命令下:3.2 技能可见性模型
依据 OpenViking 多租户架构(参见 多租户文档),技能在服务端只有两类存储位置:
viking://agent/skills/<name>/viking://user/{user_space}/skills/<name>/所有
ov skills子命令通过--user参数区分两类:--user(默认):操作全局共享空间--user:操作当前用户私有空间这对应 OpenViking 多租户中
resources(account 内共享)和user(用户隔离)的既有边界。检索层也会自动按当前身份过滤——全局技能对 account 内所有用户可见,用户私有技能仅对拥有者可见。3.3
ov skills add— 安装技能从来源安装技能到 OpenViking 知识库。
参数:
<source>--skill <names...>-s*表示全部)--user-u--list-l--wait-w--yes-y来源格式:
owner/repohttps://github.com/owner/repo.../tree/main/skills/my-skillgit@github.com:owner/repo.git./my-skills或./my-skill/SKILL.mdviking://agent/skills/my-skillmcp://server/tool-name(实验性)行为说明:
--user):技能存入全局共享空间viking://agent/skills/<name>/,account 内所有用户可见--user:技能存入当前用户私有空间viking://user/{user_space}/skills/<name>/,仅当前用户可见inputSchema并转换为 SKILL.md 格式(保留现有 MCP 转换能力)示例:
与现有
ov add-skill的关系:ov add-skill <path>→ov skills add <path>(旧命令保留为别名,标记为 deprecated)--user参数区分全局/用户私有空间--skill筛选指定技能3.4
ov skills list(别名ls)— 列出技能列出 OpenViking 知识库中的技能。
参数:
--user-u--format <fmt>-otable(默认)、json、simple示例:
与现有方式的对比:
ov ls viking://agent/skills/ov skills listov ls viking://agent/skills/ --simpleov skills list -o simpleov ls viking://user/{user_space}/skills/ov skills list --user3.5
ov skills find— 搜索技能搜索技能(语义搜索 + 关键词匹配)。
参数:
[query]--user-u--limit <n>-n--threshold <f>-t--format <fmt>-o示例:
与现有方式的对比:
ov find "search the internet" --uri viking://agent/skills/ov skills find "search the internet"3.6
ov skills update— 更新技能更新已安装的技能到最新版本。
参数:
[skills...]--user-u--yes-y--wait-w示例:
实现说明:
对于从 Git 来源安装的技能,
update会拉取最新版本并重新处理。对于从本地上传的技能,update会重新扫描源路径(如果仍存在)或提示用户指定新来源。OpenViking 的watch_interval机制作为自动更新的补充。3.7
ov skills init— 初始化技能创建新的 SKILL.md 模板。
参数:
[name]--user-u示例:
生成的模板:
3.8
ov skills remove(别名rm)— 移除技能移除已安装的技能。
参数:
[skills...]--user-u--yes-y--all示例:
与现有方式的对比:
ov rm viking://agent/skills/old-skill/ --recursiveov skills remove old-skillov rm viking://user/alice/skills/old-skill/ --recursiveov skills remove old-skill --user3.9
ov skills show— 查看技能详情(OpenViking 增强)展示技能的完整信息,包括元数据、分层摘要和辅助文件。
参数:
<skill-name>--user-u--level <L>-L0(摘要)、1(概述)、2(完整,默认)--format <fmt>-o--files-f--source示例:
这是 OpenViking 的差异化命令,利用 L0/L1/L2 分层摘要能力,在 Agent 上下文中实现更精细的渐进式披露。
3.10
ov skills validate— 验证技能格式(OpenViking 增强)验证 SKILL.md 是否符合 Agent Skills 规范。
参数:
<path>--strict示例:
验证规则:
4. SKILL.md 格式扩展
4.1 兼容 Agent Skills 规范
OpenViking 的 SKILL.md 格式需完全兼容 agentskills.io 规范,同时保留现有扩展字段:
4.2 字段对照表
namenamenamedescriptiondescriptiondescriptionlicenselicensecompatibilitycompatibilitymetadatametadatainternal、author、version等allowed-toolsallowed_toolsallowed-toolstagstagssourcesource_refwatch_interval4.3 VikingBot 元数据扩展
OpenViking 已有的 VikingBot Agent 系统在
metadata字段内使用vikingbot子键承载 Agent 运行时信息,改造后保留并规范化:字段说明:
vikingbot.emojivikingbot.requires.binsgh,curl,jq)vikingbot.requires.envvikingbot.installvikingbot.alwaysrequires机制与 Agent Skills 规范的compatibility字段互补:compatibility是供人类阅读的文本描述,而requires是供程序检查的结构化声明。ov skills add在安装时可自动校验requires.bins和requires.env是否满足。4.4 技能隐私系统
OpenViking 具有独特的技能隐私保护机制,改造后完整保留并集成到
ov skills子命令中。处理流程:
占位符格式:
{{ov_privacy:skill:<NAME>:<FIELD>}}例如,技能中包含 API Key 时:
与
ov skills命令的集成:ov skills addov skills showov skills listov skills validate隐私系统是 OpenViking 相对于 Vercel Labs Skills CLI 的重要安全差异化能力。
4.5 MCP 格式自动转换(保留)
MCP Tool 格式自动检测和转换能力保留,纳入
ov skills add mcp://...路径。转换规则不变:inputSchema检测 → kebab-case 命名 → 参数提取 → Markdown 生成4.6 技能模糊匹配
OpenViking 现有
calibrate_skill_name()机制支持技能名称模糊匹配,改造后应用于所有接受技能名称的子命令:应用场景:
ov skills show search_websearch-web,输出提示ov skills remove search-webov skills update searchweb5. 技能存储架构
5.1 双空间存储模型
OpenViking 技能在服务端知识库中按可见性分为全局共享和用户私有两个空间:
与多租户边界的对齐:
viking://agent/skills/)viking://user/.../skills/)这与 OpenViking 现有多租户架构完全一致:
resources在 account 内共享,user空间按用户隔离,检索层按身份自动过滤。5.2 安装来源追踪
每个安装的技能记录来源信息,以支持
update和溯源:5.3 冲突与优先级
当同名技能出现在全局和用户私有空间时,遵循以下优先级:
viking://user/{user_space}/skills/<name>/)— 高优先级viking://agent/skills/<name>/)— 低优先级用户私有技能可以覆盖同名全局技能,实现个人定制。冲突时记录警告日志。
5.4 OVPack 技能导入导出
OVPack 是 OpenViking 现有的 ZIP 包格式,用于内容树的迁移和备份。改造后,
ov skills add/remove与 OVPack 深度集成:现有 OVPack 命令保留,同时新增便捷路径:
ov export viking://agent/skills/my-skill ./export.ovpackov skills show my-skill --export ./export.ovpackov import ./export.ovpack viking://agent/skills/ov skills add ./export.ovpackov export viking://user/alice/skills/my-skill ./export.ovpackov skills show my-skill --user --export ./export.ovpackov import ./export.ovpack viking://user/alice/skills/ov skills add ./export.ovpack --userov skills add自动识别 OVPack 格式:OVPack 内部结构(技能):
OVPack 的
scope机制确保技能包只能导入到对应的命名空间下,防止误操作。5.5 VikingBot SkillsLoader 对齐
OpenViking 现有两套技能系统:服务端 VikingFS 存储和 VikingBot 本地文件系统加载。改造后统一入口,但保留两种加载模式:
现状:
bot/vikingbot/agent/skills.pybot/workspace/skills/openviking/utils/skill_processor.py改造后:
VikingBot SkillsLoader 扩展为同时扫描本地目录和 OpenViking 知识库,实现统一的技能发现:
always技能保留: VikingBot 的metadata.vikingbot.always: true机制保留,标记为 always 的技能始终注入 Agent 上下文(跳过触发判断),适用于系统级技能。需求检查保留:
requires.bins和requires.env的运行时检查保留,在list_skills()时过滤掉不满足要求的技能。6. 与 Agent Skills 生态的互通
6.1 Plugin Manifest 兼容
支持
.claude-plugin/marketplace.json和.claude-plugin/plugin.json中的技能声明,与 Claude Code 插件市场生态互通。6.2 远程仓库发现(未来扩展)
ov skills find --remote将支持从 skills.sh 等技能发现 Hub 搜索远程仓库中的技能,并直接通过ov skills add安装。此能力留待 Phase 3 实现。7. 渐进式披露:OpenViking 增强方案
7.1 标准 Agent Skills 三层 + OpenViking L0/L1/L2
OpenViking 的分层摘要系统天然与 Agent Skills 的渐进式披露对齐,且提供了更精细的粒度:
name+description.abstract.md简要描述.overview.md参数和用例SKILL.md完整文档scripts/,references/,assets/7.2 Agent 集成时的披露策略
通过 OpenViking API 集成的 Agent 可通过
ov skills show <name> -L <level>按需获取不同粒度的内容,避免一次加载过多 Token。7.3 内部技能(Internal Skills)
支持
metadata.internal: true标记的内部技能,默认在发现和列表中隐藏,仅当环境变量INSTALL_INTERNAL_SKILLS=1时可见。适用于:8. 命令速查表
8.1 旧命令 → 新命令映射
ov add-skill ./skill/ov skills add ./skill/ov add-skill ./skill/ --waitov skills add ./skill/ --waitov ls viking://agent/skills/ov skills listov ls viking://user/*/skills/ov skills list --userov ls viking://agent/skills/ --simpleov skills list -o simpleov find "query" --uri viking://agent/skills/ov skills find "query"ov read viking://agent/skills/x/SKILL.mdov skills show xov abstract viking://agent/skills/x/ov skills show x -L 0ov overview viking://agent/skills/x/ov skills show x -L 1ov rm viking://agent/skills/x/ -rov skills remove xov rm viking://user/alice/skills/x/ -rov skills remove x --userov skills add owner/repoov skills add ... --userov skills updateov skills init my-skillov skills validate ./skill/8.2 与 Vercel Labs Skills CLI 的对应关系
npx skills add <source>ov skills add <source>--user替代-gnpx skills listov skills list--user查用户私有npx skills find [query]ov skills find [query]npx skills updateov skills update--wait语义处理npx skills init [name]ov skills init [name]--user替代-gnpx skills remove [skills]ov skills remove [skills]--user替代-gov skills show <name>ov skills validate <path>9. API 层改造
9.1 HTTP API
现有
POST /api/v1/skills保持向后兼容,新增以下接口:GET/api/v1/skillsGET/api/v1/skills/:namePOST/api/v1/skillsscope参数)PUT/api/v1/skills/:nameDELETE/api/v1/skills/:namePOST/api/v1/skills/findPOST/api/v1/skills/validatescope参数说明:global(默认)viking://agent/skills/userviking://user/{user_space}/skills/scope=user时,服务端从请求身份(API key 或 trusted header)自动解析user_space,调用方无需手动拼接用户路径。9.2 Python SDK
9.3 CLI 命令注册
在
crates/ov_cli/src/main.rs中注册SkillsCommands子命令:10. 迁移与兼容策略
10.1 向后兼容
ov add-skill保留为ov skills add的别名,输出 deprecation 警告POST /api/v1/skills参数不变,新增scope字段可选(默认global)allowed_tools自动映射为allowed-tools,两者均接受viking://agent/skills/路径不变,新增viking://user/.../skills/用户私有空间ov ls/ov rm对技能路径仍可用10.2 迁移步骤
ov skills子命令框架,实现add、list、find、remove、show,底层复用现有服务;实现--user参数支持用户私有空间update、init、validate子命令find --remote);接入 skills.sh 发现 Hubov add-skill为 deprecated;新增专用 HTTP API 端点10.3 Deprecation 时间线
ov skills子命令,ov add-skill仍为主命令ov skills成为主推荐方式,ov add-skill输出 deprecation 警告ov add-skill变为隐藏别名,文档移除11. OpenViking 差异化优势
与 Vercel Labs Skills CLI 相比,OpenViking 的差异化定位:
updatewatch_interval)12. 技能使用统计
OpenViking 现有会话级技能调用统计机制,改造后集成到
ov skills show中。现有实现(
openviking/session/tool_skill_utils.py):extract_skill_name_from_uri()viking://agent/skills/NAME/SKILL.md解析技能名calibrate_skill_name()collect_skill_stats()改造后集成方式:
# 查看技能使用统计 ov skills show search-web --source输出中包含统计信息:
13. 参考资料
All reactions