This document covers optional plugin features that do not belong in the root README: markdown ingestion, Obsidian ingestion, dream promotion, and memory CLI commands.
LibraVDB Memory can watch markdown roots and sync changed notes into vector memory without changing the vector service gRPC interface.
The built-in source adapters are:
genericfor OpenClaw-owned markdown, including stock files likeMEMORY.mdobsidianfor Obsidian vault roots, with tag-aware defaults
Typical usage:
- point
markdownIngestionRootsat OpenClaw-owned markdown roots, such as.openclaw/skills/*/*.mdor a directory that containsMEMORY.md - enable the Obsidian adapter with
markdownIngestionObsidianEnabled: trueand one or more vault roots - use include/exclude globs to narrow what gets watched
Example:
{
"plugins": {
"entries": {
"libravdb-memory": {
"enabled": true,
"config": {
"markdownIngestionEnabled": true,
"markdownIngestionRoots": [
"/Users/<you>/.openclaw/memory"
],
"markdownIngestionObsidianEnabled": true,
"markdownIngestionObsidianRoots": [
"/Users/<you>/Documents/Obsidian/Main"
]
}
}
}
}
}Relevant config fields:
| Field | Purpose |
|---|---|
markdownIngestionEnabled |
Enables or disables generic markdown ingestion. |
markdownIngestionRoots |
Generic markdown roots to watch. |
markdownIngestionInclude |
Optional include globs for generic roots. |
markdownIngestionExclude |
Optional exclude globs for generic roots; defaults to common dependency/build directories (**/node_modules/**, **/.git/**, **/dist/**, and more) when not set. Setting an explicit list replaces the defaults entirely. |
markdownIngestionDebounceMs |
Watch debounce window, default 150. |
markdownIngestionObsidianEnabled |
Enables Obsidian ingestion when vault roots exist. |
markdownIngestionObsidianRoots |
Obsidian vault roots to watch. |
markdownIngestionObsidianInclude |
Optional include globs for Obsidian roots. |
markdownIngestionObsidianExclude |
Optional exclude globs for Obsidian roots; same defaults as generic markdown ingestion. |
markdownIngestionObsidianDebounceMs |
Obsidian watch debounce window, default 150. |
By default, the Obsidian adapter auto-ingests notes that look like memory notes,
using frontmatter tags or inline tags such as #project. The stock OpenClaw
MEMORY.md file is always eligible through the generic adapter path.
Dream promotion is an opt-in path for promoting vetted dream diary entries into
a dedicated dream:{userId} collection.
It does not use MEMORY.md. It expects a dream diary markdown file with
candidate bullets under promotion-oriented headings such as ## Deep Sleep.
Each promoted bullet should include trailing metadata with the gating fields:
- Preserve the recent tail buffer {score=0.82 recall=3 unique=2}Only bullets that satisfy the vector service gates are inserted. The dream collection
is isolated from normal user: and global retrieval by default, and dream
phrasing in chat or search queries routes there automatically.
Automatic diary watching:
{
"plugins": {
"entries": {
"libravdb-memory": {
"enabled": true,
"config": {
"dreamPromotionEnabled": true,
"dreamPromotionDiaryPath": "/Users/<you>/DREAMS.md",
"dreamPromotionUserId": "<userId>",
"dreamPromotionDebounceMs": 150
}
}
}
}
}Manual run:
openclaw memory dream-promote --user-id <userId> --dream-file ~/DREAMS.mdDream diary files must live under the operator's home directory or the configured
OPENCLAW_STATE_DIR. The manual command and watcher both use the same vector service
promotion RPC, so admission gates and provenance metadata are identical.
The plugin registers openclaw memory commands when the host exposes the plugin
CLI API.
| Command | Purpose |
|---|---|
openclaw memory status |
Show vector service health, counts, active thresholds, and model readiness. Use --deep to probe authored collection search health. |
openclaw memory index --force |
Refresh delegated vector service index state for OpenClaw memory CLI compatibility. |
openclaw memory search "query" |
Search LibraVDB memory through the active memory runtime bridge. |
openclaw memory export --user-id <userId> |
Stream stored memories as newline-delimited JSON for one durable namespace. |
openclaw memory export --session-key <sessionKey> |
Export a namespace derived from a session key. |
openclaw memory flush --user-id <userId> |
Delete one durable user namespace after confirmation. |
openclaw memory flush --session-key <sessionKey> |
Delete a namespace derived from a session key after confirmation. |
openclaw memory journal --limit 50 |
Inspect bounded lifecycle hints recorded by the vector service. |
openclaw memory dream-promote --user-id <userId> --dream-file <path> |
Promote vetted dream diary bullets from a file under the operator home directory or OPENCLAW_STATE_DIR. |
Use --yes with flush only when you intentionally want to skip the
confirmation prompt.