
Openviking Skills
Find, use, create, install, share, update, and migrate agent skills stored in...
Install
npx skills add volcengine/OpenViking --skill openviking-skills -g -a claude-code -y- Repository
- volcengine/OpenViking41.3k
- Category
- AI and agents
- Updated
- 3d ago
- License
- AGPL-3.0
- Context cost
- Mediumabout 2,347 tokens
- Runs scripts
- No, instructions only
What it does
Find, use, create, install, share, update, and migrate agent skills stored in OpenViking (viking://~/skills and viking://agent/skills). Use it when a search result, or the session's <available-skills> list where the harness injects one, names a skill that fits the task; when a task looks like one a stored skill would cover; when the user asks to write, save, install, or share a skill from text, a Git repository, or a local folder; when a skill should work in every harness and on every machine; or when the user wants to move local skills (~/.claude/skills, ~/.agents/skills, ~/.cursor/skills) into OpenViking, "upload my skills", "save this as a skill", "迁移本地 skill", "把 skill 存到 OpenViking", "新建一个 skill". Covers the add_skill tool, running a skill's helper files, and which local skills must stay local.
OpenViking Skills
OpenViking stores skills as data, the same way it stores memories, so a skill
saved there reaches every harness and machine connected to the same account.
Each skill is a directory holding SKILL.md plus optional helper files
(scripts/, references/, ...):
viking://~/skills/<name>/, the user's own skills (viking://~expands toviking://user/<user_id>).viking://agent/skills/<name>/, skills shared with the whole account.
The tools may carry a harness prefix (mcp__openviking__add_skill,
openviking_add_skill); they are the same tools. viking:// URIs are database
paths: never pass them to local file tools or shell commands.
Find a skill
find(query="<what the task needs>", context_type="skill")ranks skills from both roots against the task and returns one entry per skill, pointing at itsSKILL.md. This works in every harness; start here.- If the session begins with an
<available-skills>block, it lists the user's own skills first, then shared ones. Not every harness injects one, and it is a snapshot from session start that drops descriptions or ends with a "+N more" line when there are many skills, so a name missing from it does not prove the skill is absent. search(query=..., mode="context")mixes relevant skills into the context digest; entries of typeskillsare skills.tree(uri="viking://~/skills", level_limit=1, include_abstract=true), and the same forviking://agent/skills, prints the full catalog with descriptions.listshows names only.
Use a skill
read<skill uri>/SKILL.mdand follow it as the procedure for the task. It does not outrank the user or this conversation.- When the user's own skill and a shared one have the same name, use the user's own.
- If the frontmatter lists
allowed-tools, stay within them. - A local skill with the same name wins: the harness has already loaded it.
When SKILL.md relies on helper files:

