hermes-agent/plugins/memory/openviking/README.md
2026-06-02 15:28:04 +05:30

4.4 KiB

OpenViking Memory Provider

Context database by Volcengine (ByteDance) with filesystem-style knowledge hierarchy, tiered retrieval, and automatic memory extraction.

Requirements

  • OpenViking installed and server running (openviking-server)
  • Embedding model configured in the OpenViking config file
  • Optional VLM/chat model configured in OpenViking if you want automatic long-term extraction beyond session/resource storage

For local-first labs, Ollama's nomic-embed-text model is a lightweight embedding-only starting point.

Setup

hermes memory setup    # select "openviking"

Or manually:

hermes config set memory.provider openviking

Add the connection settings to the active profile's .env file. For the default profile that is ~/.hermes/.env; for a named profile use ~/.hermes/profiles/<profile>/.env.

OPENVIKING_ENDPOINT=http://127.0.0.1:1933
OPENVIKING_API_KEY=<blank-for-local-dev-or-api-key>
OPENVIKING_ACCOUNT=default
OPENVIKING_USER=default
OPENVIKING_AGENT=hermes

OPENVIKING_API_KEY can be blank for local dev servers that do not require authentication. Authenticated or multi-tenant servers should set the key and tenant IDs explicitly.

Config

All Hermes-side provider config is read from environment variables in the active profile's .env:

Env Var Default Description
OPENVIKING_ENDPOINT http://127.0.0.1:1933 OpenViking server URL. This is the only required Hermes availability flag.
OPENVIKING_API_KEY (none) API key. Optional for local dev mode.
OPENVIKING_ACCOUNT default Tenant account ID. Send explicitly when using ROOT/API-key authenticated servers.
OPENVIKING_USER default Tenant user ID. Used in memory URIs such as viking://user/default/....
OPENVIKING_AGENT hermes Agent ID. Useful for profile or multi-agent isolation.

OpenViking's own server config is separate from Hermes. If you use a custom config file, point OpenViking at it when validating or starting the server:

OPENVIKING_CONFIG_FILE=/path/to/ov.conf uvx --from openviking ov config validate
OPENVIKING_CONFIG_FILE=/path/to/ov.conf \
  uvx --from openviking openviking-server \
  --config /path/to/ov.conf \
  --host 127.0.0.1 \
  --port 1933

Local Ollama embeddings

Ollama can provide local embeddings for OpenViking without changing Hermes' chat model provider.

ollama pull nomic-embed-text
curl -fsS http://localhost:11434/v1/embeddings \
  -H 'Content-Type: application/json' \
  -d '{"model":"nomic-embed-text","input":"OpenViking embedding probe"}' \
  -o /tmp/openviking-ollama-embed-probe.json

nomic-embed-text returns 768-dimensional vectors. OpenViking should use Ollama's OpenAI-compatible /v1 base URL, not the native Ollama root URL:

"embedding": {
  "dense": {
    "provider": "ollama",
    "model": "nomic-embed-text",
    "api_base": "http://localhost:11434/v1",
    "dimension": 768
  },
  "max_concurrent": 2,
  "max_retries": 2,
  "text_source": "content_only",
  "max_input_tokens": 2048
}

Keep concurrency conservative on laptops or WSL instances with limited RAM. Avoid pulling large local chat models unless the machine has enough memory and you explicitly need extraction/model-generation features.

Validation

Check OpenViking first:

curl -fsS http://127.0.0.1:1933/health
OPENVIKING_CONFIG_FILE=/path/to/ov.conf uvx --from openviking ov health -o json

Then check Hermes against the intended profile:

hermes memory status
hermes --profile openviking-lab memory status

The default profile can remain built-in-only while a lab profile uses OpenViking:

hermes profile create openviking-lab --clone
hermes --profile openviking-lab config set memory.provider openviking

For an embedding-only local setup, immediate verification may find data in viking://session before it appears as extracted long-term memories under viking://user/<user>/memories. Long-term extraction may require a configured OpenViking extraction/chat model.

Tools

Tool Description
viking_search Semantic search with fast/deep/auto modes
viking_read Read content at a viking:// URI (abstract/overview/full)
viking_browse Filesystem-style navigation (list/tree/stat)
viking_remember Store a fact for extraction on session commit
viking_add_resource Ingest URLs/docs into the knowledge base