add-resourceThe ov add-resource command imports external resources into OpenViking's context database — supporting local files, directories, URLs, and remote repositories. Resources are automatically processed with semantic analysis and organized under the viking://resources/ namespace.
Import a local file or URL:
# add a code repo from github or gitlab or a git address
ov add-resource https://github.com/volcengine/OpenViking
ov add-resource https://code.xxxx.org/viking/viking
ov add-resource git@code.xxxx.org:viking/viking.git
# add a file from url
ov add-resource https://arxiv.org/pdf/2602.09540
ov add-resource https://raw.githubusercontent.com/volcengine/OpenViking/main/README.md
# add a file from local filesystem
ov add-resource ./docs/api-spec.md
ov add-resource ./team_building.jpg
ov add-resource /User/volcengine/Documents/profile.pdf
ov add-resource /User/volcengine/Documents/project.docx
# add a zip file from local filesystem (will be unzipped on server)
ov add-resource ./docs-of-project.zip
# add a directory from local filesystem
ov add-resource /User/volcengine/Photo/Travels/2026/ --include "*.jpg,*.jpeg,*.png"
ov add-resource /User/volcengine/Documents/OV项目设计文档/
Add metadata to guide processing: --reason and --instruction will be supported in the future.
The time of adding resources could cost long (like minutes), and the semantic processing could be async. Use --wait to wait for the processing to complete.
# Wait until semantic processing finishes
ov add-resource ./docs --wait
# Wait with timeout (in seconds)
ov add-resource https://example.com/docs --wait --timeout 60
# Fire and forget (default, without --wait)
ov add-resource ./docs
If you fire and forget, the command will return after the resource is completely downloaded/uploaded on server, and then the CLI will return the root URI of the imported resource. To check the status of the resource, you can use ov ls or ov tree to list the resources under root URI or viking://resources/.
By default, resources are imported under viking://resources/. Use --to or --parent to specify a target uri.
# The data will be imported as viking://resources/2026/2026-01-01/, which should not exist before
ov add-resource /User/volcengine/Photo/Travels/2026/2026-01-01/ --to "viking://resources/2026/2026-01-01/"
# The data will be imported under viking://resources/2026, which should exist and be a directory
ov add-resource /User/volcengine/Photo/Travels/2026/2026-01-02/ --parent "viking://resources/2026/"
Returns the root URI of the imported resource, like:
root_uri viking://resources/2026/2026-01-01
~/.openviking/ovcli.conf
add-memoryThe ov add-memory command adds long persistant memory — turning text and structured conversations into searchable, retrievable memories in the OpenViking context database. Use ov add-memory --help for latest usage.
choose wisely between plain text and multi-turn mode. Multi-turn mode can contain more complex insights, let openviking handle the memory extraction.
A simple string is stored as a user message:
ov add-memory "User's name is Bob, he participate in Global Hackathon in 2025-01-08, and won Champion."
A JSON array of {role, content} objects to store a full exchange:
ov add-memory '[
{"role": "user", "content": "I love traveling. Give me some options of Transport from Beijing to Shanghai."},
{"role": "assistant", "content": "You can use train, bus, or plane. Train is the fastest, but you need to book in advance. Bus is cheaper, but you need to wait. Plane is the most expensive, but you can get there any time of day."},
{"role": "user", "content": "I prefer train. I like sightseeing on the train. Can you give me the train schedule?"},
< ... more possible conversation about schedule and tickest need to be memorized ... >
]'
Returns count of memory extracted:
memories_extracted 1
Group related memories in one call rather than many small ones:
ov add-memory '[
{"role": "user", "content": "Key facts about the ov_cli Rust crate"},
{"role": "assistant", "content": "1. runs faster than python cli\n2. uses HttpClient to connect openviking server\n3. Output formatting supports table and JSON modes\n4. Config lives at ~/.openviking/ovcli.conf"}
]'
~/.openviking/ovcli.conf
add-skillThe ov add-skill command adds agent capabilities to OpenViking — supporting SKILL.md files, MCP tool definitions, and raw skill content. Skills are automatically processed and organized under the viking://agent/skills/ namespace, making them discoverable and usable by agents.
Import from a single SKILL.md file with YAML frontmatter:
# Add from a single SKILL.md file
ov add-skill ./skills/my-skill/SKILL.md
# Add from a directory containing SKILL.md (includes auxiliary files)
ov add-skill ./skills/my-skill/
Semantic processing happens asynchronously. Use --wait to block until complete:
# Wait until semantic processing finishes
ov add-skill ./skills/my-skill/ --wait
# Wait with timeout (in seconds)
ov add-skill ./skills/my-skill/ --wait --timeout 60
# Fire and forget (default, without --wait)
ov add-skill ./skills/my-skill/
Returns the URI of the added skill, like:
uri viking://agent/skills/my-skill/
Skills use Markdown with YAML frontmatter:
---
name: skill-name
description: Brief description of the skill
allowed-tools:
- Tool1
- Tool2
tags:
- tag1
- tag2
---
## Including Auxiliary Files
When adding from a directory, all files in the directory are included as auxiliary files:
```bash
# Directory structure:
# ./skills/code-runner/
# ├── SKILL.md
# ├── helper.py
# └── templates/
# └── script.py
ov add-skill ./skills/code-runner/
# Both helper.py and templates/ are included
~/.openviking/ovcli.conf