# Architecture Overview
OpenViking is a context database designed for AI Agents, unifying all context types (Memory, Resource, Skill) into a directory structure with semantic retrieval and progressive content loading.
## System Overview
Text version
```text
CLI / SDK / HTTP client
|
HTTP Server
|
Service Layer
|
+------+------+----------------+
| | |
Retrieval Sessions Resource / Skill import
| | |
| Memory extraction Parse / Semantic queues
| | |
+-------------+----------------+
|
VikingFS
/ \
RAGFS Vector index
```
## Core Modules
| Module | Responsibility | Key Capabilities |
|--------|----------------|------------------|
| **Client** | Unified entry | Sends supported SDK/CLI operations to the HTTP API |
| **Service** | Business logic | FSService, SearchService, SessionService, ResourceService, PackService, DebugService |
| **Retrieve** | Context retrieval | Intent analysis (IntentAnalyzer), global retrieval (HierarchicalRetriever), Rerank |
| **Session** | Session management | Message recording, usage tracking, session archiving, triggering memory commit |
| **Parse** | Context extraction | Document parsing (PDF/MD/HTML), tree building (TreeBuilder), async semantic generation |
| **Memory** | Memory extraction | Schema-driven extraction by MemoryType (ExtractLoop), LLM merge and deduplication written back as patches (MemoryUpdater); orchestrated by `SessionCompressorV3` |
| **Storage** | Storage layer | VikingFS virtual filesystem, vector index, RAGFS integration |
## Service Layer
The Service layer decouples business logic from the transport layer. The CLI and SDKs reach it through the HTTP Server:
| Service | Responsibility | Key Methods |
|---------|----------------|-------------|
| **FSService** | File system operations | ls, mkdir, rm, mv, tree, stat, read, abstract, overview, grep, glob |
| **SearchService** | Semantic search | search, find |
| **SessionService** | Session management | session, sessions, commit, delete |
| **ResourceService** | Resource import | add_resource, add_skill, wait_processed |
| **PackService** | Import/export and backup/restore | export_ovpack, import_ovpack, backup_ovpack, restore_ovpack |
| **DebugService** | Debug service | observer (ObserverService) |
## Dual-Layer Storage
OpenViking uses a dual-layer storage architecture separating content from index (see [Storage Architecture](./05-storage.md)):
| Layer | Responsibility | Content |
|-------|----------------|---------|
| **RAGFS** | Content storage | L0/L1/L2 full content, multimedia files |
| **Vector Index** | Index storage | URIs, vectors, metadata, and text used for retrieval, including abstracts |
## Data Flow Overview
### Adding Context
```
Input → Parser → TreeBuilder → ResourceProcessor → RAGFS → SemanticQueue → Vector Index
```
1. **Parser**: Parse source documents into files and directories; model use depends on the selected parser
2. **TreeBuilder**: Resolve the target URI and retain temporary artifact references
3. **ResourceProcessor**: Persist content in RAGFS and enqueue semantic processing
4. **SemanticQueue**: Async bottom-up L0/L1 generation
5. **Vector Index**: Build index for semantic search
### Retrieving Context
```
Query → Intent Analysis → Global Retrieval → Rerank → Results
```
1. **Intent Analysis**: Analyze query intent, generate 0-5 typed queries
2. **Global Retrieval**: One vector search per query within the permitted scope
3. **Rerank**: Optional single pass over the recalled candidates
4. **Results**: Return contexts sorted by relevance
### Session Commit
```
Messages → Archive Boundary → Archive → Memory Extraction → Storage
```
1. **Messages**: Accumulate conversation messages and usage records
2. **Archive Boundary**: Split archived and retained messages according to the commit parameters; by default, archive all current messages
3. **Archive**: Generate L0/L1 for history segments
4. **Memory Extraction**: Extract memories from messages according to the memory policy and MemoryType schemas
5. **Storage**: Write to RAGFS + vector index
## Deployment Mode
### HTTP Mode
For team sharing, production deployment, and cross-language integration:
```python
# Python SDK connects to OpenViking Server
from openviking_sdk import SyncHTTPClient
client = SyncHTTPClient(url="http://localhost:1933", api_key="your-key")
```
```bash
# Or use curl / any HTTP client
curl http://localhost:1933/api/v1/search/find \
-H "X-API-Key: your-key" \
-H "Content-Type: application/json" \
-d '{"query": "how to use openviking"}'
```
- Server runs as standalone process (`openviking-server`)
- Clients connect via HTTP API
- Supports any language that can make HTTP requests
- See [Server Deployment](../guides/03-deployment.md) for setup
## Design Principles
| Principle | Description |
|-----------|-------------|
| **Pure Storage Layer** | Storage only handles RAGFS operations and basic vector search; Rerank is in retrieval layer |
| **Three-Layer Information** | L0/L1/L2 enables progressive detail loading, saving token consumption |
| **Two-Stage Retrieval** | Vector search recalls candidates + Rerank improves accuracy |
| **Single Data Source** | RAGFS holds source files; vector records retain the text and metadata needed for retrieval |
## Related Documents
- [Context Types](./02-context-types.md) - Resource/Memory/Skill types
- [Context Layers](./03-context-layers.md) - L0/L1/L2 model
- [Viking URI](./04-viking-uri.md) - Unified resource identifier
- [Storage Architecture](./05-storage.md) - Dual-layer storage details
- [Retrieval Mechanism](./07-retrieval.md) - Retrieval process details
- [Context Extraction](./06-extraction.md) - Parsing and extraction process
- [Session Management](./08-session.md) - Session and memory management
- [Transaction Model](./09-transaction.md) - Write and consistency model
- [Data Encryption](./10-encryption.md) - At-rest encryption and key architecture
- [Multi-Tenant](./11-multi-tenant.md) - Account, user, and peer isolation model
- [Metrics](./12-metrics.md) - `/metrics` usage and key metric explanations
- [Privacy Configs and Skill Privacy Extraction/Restore](./13-privacy.md) - Versioning, placeholder extraction, and read-time restore