用途:OpenViking 把技能当作数据存储,与记忆同样保存,因此保存的技能可被同一账号连接的所有 harness 和机器访问。每个技能是一个目录,包含 SKILL.md 及可选辅助文件(scripts/、references/ 等)。viking://~/skills/<name>/ 是用户自己的技能,viking://agent/skills/<name>/ 是与整个账号共享的技能。viking:// URI 是数据库路径,不要传给本地文件工具或 shell 命令。
主要能力:查找技能可用 find(query="<任务需求>", context_type="skill"),它会对两个根目录排序并返回每个技能的 SKILL.md 入口;search(query=..., mode="context") 会把相关技能混入上下文摘要;tree(uri="viking://~/skills", level_limit=1, include_abstract=true) 打印完整目录及描述,list 只显示名称。使用技能时读取 <skill uri>/SKILL.md 并按其步骤执行;同名时用户自己的技能优先,本地同名技能优先;若 frontmatter 列出 allowed-tools 需遵守。辅助文件用 list(uri="<skill uri>", recursive=true) 查看,读取后写到 ~/.openviking/skills/<name>/ 对应相对路径并 chmod +x scripts,从该目录运行;跳过 .abstract.md、.overview.md、.source.json 等 sidecar;二进制文件需用 ov get <uri> <local path> 获取。
创建与修改:编写完整 SKILL.md,name 仅限 ASCII 字母、数字、- 和 _,最多 64 字符,并成为目录名;description 是语义搜索唯一索引的文本,需说明做什么和何时使用。frontmatter 仅保留 name、description、allowed-tools、tags、metadata,其他键需放入 metadata。用 read(uris="<root>/<name>/SKILL.md") 检查名称是否已存在,存在时 add_skill 会直接替换,应先向用户展示变更并确认。add_skill(data="<完整 SKILL.md 文本>") 默认写入用户自己的技能,可用 target_uri 指定共享根。修改技能需读取、编辑后把完整新文本传给 add_skill;共享技能需用户确认账号级变更。不要对技能文件使用 write 或 edit。
安装与分享:Git 可用 add_skill(path="https://github.com/org/repo") 或目录 URL,多技能仓库先用 list_only=true 再传 skills=["a","b"]。本地文件夹或 zip 用 add_skill(path="/abs/path/to/skill") 获取一次性上传 URL,压缩时排除 VCS 数据与密钥,再用 curl 上传并删除归档。安装 ov CLI 后可用 ov skills add <path or URL>(-l 列出、-s 选择、-p 共享、-y 跳过提示)。共享需传 target_uri="viking://agent/skills",且仅在用户要求团队或账号级技能时使用。删除优先用 ov skills remove <name> 或 OpenViking Studio;forget(uri="<skill uri>", recursive=true) 会留下隐私值,需用户确认精确 URI。重命名需以新名称安装再删除旧技能。
迁移本地技能:仅在用户要求时执行。候选目录包括 Claude Code、Codex、Cursor、pi、OpenCode 的对应 skills 路径。环境绑定技能(插件或市场安装、符号链接、依赖本地二进制或服务、带厂商前缀、openviking-skills 或 openviking-memory)保持本地不上传。其余需列出全部文件并检查凭据、令牌、.env、内部主机名、个人绝对路径,以及会被 OpenViking 丢弃的 frontmatter 键。向用户展示名称、路径、结论、原因和目标后,仅上传其批准项。上传后可用 tree 验证。
限制:绝不把凭据放入 SKILL.md,共享根对整个账号可见;不要自行删除用户本地技能文件;记忆搜索与写入由 openviking-memory 技能负责;若服务器没有 add_skill 工具,可用 ov skills add,否则提示用户升级,不要回退到 write、edit 或 add_resource。