
Openviking Context Database
- 1.3k installs
- 66 repo stars
- Updated July 9, 2026
- aradotso/trending-skills
openviking-context-database is an agent skill for configuring OpenViking, a filesystem-based context database for agent memory and RAG.
About
The openviking-context-database skill documents OpenViking, an open-source context database for AI agents that unifies memory, resources, and skills using a filesystem paradigm instead of fragmented vector stores. It uses tiered L0, L1, and L2 context structures for hierarchical delivery, observable retrieval trajectories, and self-evolving session memory. Installation covers pip install openviking, optional ov_cli Rust CLI, and prerequisites Python 3.10+, Go 1.22+, and GCC or Clang for extensions. Configuration wires LLM providers, embedding models, and AGFS components for resource ingestion and RAG queries. Agents add memory, integrate retrieval into projects, and query context with filesystem paths. Use when developers set up OpenViking for agent memory, RAG, or skill resource management.
- Filesystem paradigm replaces fragmented vector stores for agent context.
- Tiered L0/L1/L2 hierarchical context delivery and retrieval trajectories.
- pip install openviking plus optional Rust ov_cli tooling.
- Configuration for LLM providers, embeddings, and AGFS resource ingestion.
- Supports agent memory, skills, and RAG integration patterns.
Openviking Context Database by the numbers
- 1,298 all-time installs (skills.sh)
- +7 installs in the week ending Jul 28, 2026 (Skillselion tracking)
- Ranked #866 of 16,659 AI & Agent Building skills by installs in the Skillselion catalog
- Security screen: CRITICAL risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
openviking-context-database capabilities & compatibility
- Capabilities
- openviking pip and cli installation · l0/l1/l2 tiered context structure · llm and embedding provider configuration · agfs resource ingestion setup · session memory and retrieval query patterns
- Use cases
- memory · orchestration · research
What openviking-context-database says it does
It manages agent memory, resources, and skills in a tiered L0/L1/L2 structure
npx skills add https://github.com/aradotso/trending-skills --skill openviking-context-databaseAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.3k |
|---|---|
| repo stars | ★ 66 |
| Security audit | 1 / 3 scanners passed |
| Last updated | July 9, 2026 |
| Repository | aradotso/trending-skills ↗ |
How do I set up OpenViking for agent memory, resources, and hierarchical context retrieval?
Configure OpenViking context database for agent memory, resources, and skills via a filesystem L0/L1/L2 paradigm.
Who is it for?
Developers building agents that need unified memory, skills, and resource context management.
Skip if: Skip for simple single-vector-store RAG without filesystem context tiers.
When should I use this skill?
User sets up OpenViking, configures agent memory, or integrates OpenViking RAG.
What you get
Installed and configured OpenViking with provider settings and queryable context paths for agents.
- OpenViking configuration
- agent memory hierarchy
- RAG query setup
Files
OpenViking Context Database
Skill by ara.so — Daily 2026 Skills collection.
OpenViking is an open-source context database for AI Agents that replaces fragmented vector stores with a unified filesystem paradigm. It manages agent memory, resources, and skills in a tiered L0/L1/L2 structure, enabling hierarchical context delivery, observable retrieval trajectories, and self-evolving session memory.
---
Installation
Python Package
pip install openviking --upgrade --force-reinstallOptional Rust CLI
# Install via script
curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bash
# Or build from source (requires Rust toolchain)
cargo install --git https://github.com/volcengine/OpenViking ov_cliPrerequisites
- Python 3.10+
- Go 1.22+ (for AGFS components)
- GCC 9+ or Clang 11+ (for core extensions)
---
Configuration
Create ~/.openviking/ov.conf:
{
"storage": {
"workspace": "/home/user/openviking_workspace"
},
"log": {
"level": "INFO",
"output": "stdout"
},
"embedding": {
"dense": {
"api_base": "https://api.openai.com/v1",
"api_key": "$OPENAI_API_KEY",
"provider": "openai",
"dimension": 1536,
"model": "text-embedding-3-large"
},
"max_concurrent": 10
},
"vlm": {
"api_base": "https://api.openai.com/v1",
"api_key": "$OPENAI_API_KEY",
"provider": "openai",
"model": "gpt-4o",
"max_concurrent": 100
}
}Note: OpenViking reads api_key values as strings; use environment variable injection at startup rather than literal secrets.Provider Options
| Role | Provider Value | Example Model |
|---|---|---|
| VLM | openai | gpt-4o |
| VLM | volcengine | doubao-seed-2-0-pro-260215 |
| VLM | litellm | claude-3-5-sonnet-20240620, ollama/llama3.1 |
| Embedding | openai | text-embedding-3-large |
| Embedding | volcengine | doubao-embedding-vision-250615 |
| Embedding | jina | jina-embeddings-v3 |
LiteLLM VLM Examples
{
"vlm": {
"provider": "litellm",
"model": "claude-3-5-sonnet-20240620",
"api_key": "$ANTHROPIC_API_KEY"
}
}{
"vlm": {
"provider": "litellm",
"model": "ollama/llama3.1",
"api_base": "http://localhost:11434"
}
}{
"vlm": {
"provider": "litellm",
"model": "deepseek-chat",
"api_key": "$DEEPSEEK_API_KEY"
}
}---
Core Concepts
Filesystem Paradigm
OpenViking organizes agent context like a filesystem:
workspace/
├── memories/ # Long-term agent memories (L0 always loaded)
│ ├── user_prefs/
│ └── task_history/
├── resources/ # External knowledge, documents (L1 on demand)
│ ├── codebase/
│ └── docs/
└── skills/ # Reusable agent capabilities (L2 retrieved)
├── coding/
└── analysis/Tiered Context Loading (L0/L1/L2)
- L0: Always loaded — core identity, persistent preferences
- L1: Loaded on demand — relevant resources fetched per task
- L2: Semantically retrieved — skills pulled by similarity search
This tiered approach minimizes token consumption while maximizing context relevance.
---
Python API Usage
Basic Setup
import os
from openviking import OpenViking
# Initialize with config file
ov = OpenViking(config_path="~/.openviking/ov.conf")
# Or initialize programmatically
ov = OpenViking(
workspace="/home/user/openviking_workspace",
vlm_provider="openai",
vlm_model="gpt-4o",
vlm_api_key=os.environ["OPENAI_API_KEY"],
embedding_provider="openai",
embedding_model="text-embedding-3-large",
embedding_api_key=os.environ["OPENAI_API_KEY"],
embedding_dimension=1536,
)Managing a Context Namespace (Agent Brain)
# Create or open a namespace (like a filesystem root for one agent)
brain = ov.namespace("my_agent")
# Add a memory file
brain.write("memories/user_prefs.md", """
# User Preferences
- Language: Python
- Code style: PEP8
- Preferred framework: FastAPI
""")
# Add a resource document
brain.write("resources/api_docs/stripe.md", open("stripe_docs.md").read())
# Add a skill
brain.write("skills/coding/write_tests.md", """
# Skill: Write Unit Tests
When asked to write tests, use pytest with fixtures.
Always mock external API calls. Aim for 80%+ coverage.
""")Querying Context
# Semantic search across the namespace
results = brain.search("how does the user prefer code to be formatted?")
for result in results:
print(result.path, result.score, result.content[:200])
# Directory-scoped retrieval (recursive)
skill_results = brain.search(
query="write unit tests for a FastAPI endpoint",
directory="skills/",
top_k=3,
)
# Direct path read (L0 always available)
prefs = brain.read("memories/user_prefs.md")
print(prefs.content)Session Memory & Auto-Compression
# Start a session — OpenViking tracks turns and auto-compresses
session = brain.session("task_build_api")
# Add conversation turns
session.add_turn(role="user", content="Build me a REST API for todo items")
session.add_turn(role="assistant", content="I'll create a FastAPI app with CRUD operations...")
# After many turns, trigger compression to extract long-term memory
summary = session.compress()
# Compressed insights are automatically written to memories/
# End session — persists extracted memories
session.close()Retrieval Trajectory (Observable RAG)
# Enable trajectory tracking to observe retrieval decisions
with brain.observe() as tracker:
results = brain.search("authentication best practices")
trajectory = tracker.trajectory()
for step in trajectory.steps:
print(f"[{step.level}] {step.path} → score={step.score:.3f}")
# Output:
# [L0] memories/user_prefs.md → score=0.82
# [L1] resources/security/auth.md → score=0.91
# [L2] skills/coding/jwt_auth.md → score=0.88---
Common Patterns
Pattern 1: Agent with Persistent Memory
import os
from openviking import OpenViking
ov = OpenViking(config_path="~/.openviking/ov.conf")
brain = ov.namespace("coding_agent")
def agent_respond(user_message: str, conversation_history: list) -> str:
# Retrieve relevant context
context_results = brain.search(user_message, top_k=5)
context_text = "\n\n".join(r.content for r in context_results)
# Build prompt with retrieved context
system_prompt = f"""You are a coding assistant.
## Relevant Context
{context_text}
"""
# ... call your LLM here with system_prompt + conversation_history
response = call_llm(system_prompt, conversation_history, user_message)
# Store interaction for future memory
brain.session("current").add_turn("user", user_message)
brain.session("current").add_turn("assistant", response)
return responsePattern 2: Hierarchical Skill Loading
# Register skills from a directory structure
import pathlib
skills_dir = pathlib.Path("./agent_skills")
for skill_file in skills_dir.rglob("*.md"):
relative = skill_file.relative_to(skills_dir)
brain.write(f"skills/{relative}", skill_file.read_text())
# At runtime, retrieve only relevant skills
def get_relevant_skills(task: str) -> list[str]:
results = brain.search(task, directory="skills/", top_k=3)
return [r.content for r in results]
task = "Refactor this class to use dependency injection"
skills = get_relevant_skills(task)
# Returns only DI-related skills, not all registered skillsPattern 3: RAG over Codebase
import subprocess
import pathlib
brain = ov.namespace("codebase_agent")
# Index a codebase
def index_codebase(repo_path: str):
for f in pathlib.Path(repo_path).rglob("*.py"):
content = f.read_text(errors="ignore")
# Store with relative path as key
rel = f.relative_to(repo_path)
brain.write(f"resources/codebase/{rel}", content)
index_codebase("/home/user/myproject")
# Query with directory scoping
def find_relevant_code(query: str) -> list:
return brain.search(
query=query,
directory="resources/codebase/",
top_k=5,
)
hits = find_relevant_code("database connection pooling")
for h in hits:
print(h.path, "\n", h.content[:300])Pattern 4: Multi-Agent Shared Context
# Agent 1 writes discoveries
agent1_brain = ov.namespace("researcher_agent")
agent1_brain.write("memories/findings/api_rate_limits.md", """
# API Rate Limits Discovered
- Stripe: 100 req/s in live mode
- SendGrid: 600 req/min
""")
# Agent 2 reads shared workspace findings
agent2_brain = ov.namespace("coder_agent")
# Cross-namespace read (if permitted)
shared = ov.namespace("shared_knowledge")
rate_limits = shared.read("memories/findings/api_rate_limits.md")---
CLI Commands (ov_cli)
# Check version
ov --version
# List namespaces
ov namespace list
# Create a namespace
ov namespace create my_agent
# Write context file
ov write my_agent/memories/prefs.md --file ./prefs.md
# Read a file
ov read my_agent/memories/prefs.md
# Search context
ov search my_agent "how to handle authentication" --top-k 5
# Show retrieval trajectory for a query
ov search my_agent "database migrations" --trace
# Compress a session
ov session compress my_agent/task_build_api
# List files in namespace
ov ls my_agent/skills/
# Delete a context file
ov rm my_agent/resources/outdated_docs.md
# Export namespace to local directory
ov export my_agent ./exported_brain/
# Import from local directory
ov import ./exported_brain/ my_agent_restored---
Troubleshooting
Config Not Found
# Verify config location
ls -la ~/.openviking/ov.conf
# OpenViking also checks OV_CONFIG env var
export OV_CONFIG=/path/to/custom/ov.confEmbedding Dimension Mismatch
If you switch embedding models, the stored vector dimensions will conflict:
# Check current dimension setting vs stored index
# Solution: re-index after model change
brain.reindex(force=True)Workspace Permission Errors
# Ensure workspace directory is writable
chmod -R 755 /home/user/openviking_workspace
# Check disk space (embedding indexes can be large)
df -h /home/user/openviking_workspaceLiteLLM Provider Not Detected
# Use explicit prefix for ambiguous models
{
"vlm": {
"provider": "litellm",
"model": "openrouter/anthropic/claude-3-5-sonnet", # full prefix required
"api_key": "$OPENROUTER_API_KEY",
"api_base": "https://openrouter.ai/api/v1"
}
}High Token Usage
Enable tiered loading to reduce L1/L2 fetches:
# Scope searches tightly to avoid over-fetching
results = brain.search(
query=user_message,
directory="skills/relevant_domain/", # narrow scope
top_k=2, # fewer results
min_score=0.75, # quality threshold
)Slow Indexing on Large Codebases
# Increase concurrency in config
{
"embedding": {
"max_concurrent": 20 # increase from default 10
},
"vlm": {
"max_concurrent": 50
}
}
# Or batch-write with async
import asyncio
async def index_async(files):
tasks = [brain.awrite(f"resources/{p}", c) for p, c in files]
await asyncio.gather(*tasks)---
Environment Variables Reference
| Variable | Purpose |
|---|---|
OV_CONFIG | Path to ov.conf override |
OPENAI_API_KEY | OpenAI API key for VLM/embedding |
ANTHROPIC_API_KEY | Anthropic Claude via LiteLLM |
DEEPSEEK_API_KEY | DeepSeek via LiteLLM |
GEMINI_API_KEY | Google Gemini via LiteLLM |
OV_LOG_LEVEL | Override log level (DEBUG, INFO, WARN) |
OV_WORKSPACE | Override workspace path |
---
Resources
- Website: https://openviking.ai
- Docs: https://www.openviking.ai/docs
- GitHub: https://github.com/volcengine/OpenViking
- Issues: https://github.com/volcengine/OpenViking/issues
- Discord: https://discord.com/invite/eHvx8E9XF3
- LiteLLM Providers: https://docs.litellm.ai/docs/providers
Related skills
How it compares
Use openviking-context-database for OpenViking-specific filesystem memory; use nanochat-llm-training when the goal is training model weights, not agent context storage.
FAQ
What is OpenViking?
An open-source context database for AI agents using a filesystem paradigm with L0/L1/L2 tiers for memory, resources, and skills.
When should I use openviking-context-database?
When configuring OpenViking installation, LLM providers, or querying agent context and memory.
Is openviking-context-database safe to install?
Review the Security Audits panel on this page before installing in production.