Your agent's brain, organized like a filesystem
OpenViking treats memories, skills, and resources as files and directories so agents can retrieve context hierarchically instead of drowning in flat vector soup.

What it does
OpenViking is a context database for AI agents that abandons the usual fragmented vector-storage approach. It unifies memories, resources, and skills under a filesystem paradigm—complete with directories, recursive retrieval, and tiered loading—so agents can access context the way you’d find a file on disk rather than hoping a similarity search guesses right.
The interesting bit
The L0/L1/L2 three-tier structure loads context on demand, which the project claims significantly cuts token consumption. More unusually, it visualizes the directory retrieval trajectory—turning the typical black-box RAG pipeline into something you can actually debug by watching how the agent “navigates” its own memory tree.
Key highlights
- Filesystem-style management for agent memories, resources, and skills (not just another vector DB wrapper)
- Tiered context loading (L0/L1/L2) with on-demand retrieval to limit token burn
- Recursive directory retrieval combining path-based positioning with semantic search
- Visualized retrieval trajectories for debugging why an agent fetched what it fetched
- Automatic session compression that extracts long-term memory from conversations, tool calls, and resource references
- Python package plus optional Rust CLI; supports Volcengine, OpenAI, Kimi, GLM, and local Ollama models
openviking-server initanddoctorcommands for setup and validation
Caveats
- Requires both a VLM and an embedding model, with setup varying significantly by provider (the README is thorough but the matrix is complex)
- Needs Rust toolchain and C++ compiler for building core components from source
- Benchmark results are referenced but not actually shown in the README excerpt provided
Verdict
Worth a look if you’re building agents that need structured, inspectable, and evolving context rather than one-shot RAG retrieval. Skip it if your use case is simple enough that a basic vector store already does the job.