Semantic retrieval, resource management, auto-recall (user + agent dual spaces) and session memory for DeepSeek Harness: memsearch/memfind/memread/membrowse/memgrep/memglob over viking:// URIs, memadd/memremove resource management, memqueue observer status, memcommit session capture, and memlearn skill playbook minting.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Rxiain/dsh-openviking
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
简体中文 | English
dsh-openviking
OpenViking retrieval, resource management, auto-recall (user + agent dual spaces) and session memory for DeepSeek Harness.
Features
| Tool | Description |
|---|---|
memsearch |
Semantic search (auto/fast/deep; deep uses session context) |
memfind |
Fast semantic find without session context |
memread |
Read a viking:// URI (abstract/overview/read/auto) |
membrowse |
Browse the viking:// filesystem (list/tree/stat) |
memgrep |
Exact/regex content search (default viking://resources/) |
memglob |
Enumerate files by glob pattern |
memadd |
Add a remote URL or local text file under viking://resources/ |
memremove |
Remove a resource — requires literal confirm: true |
memqueue |
Observer queue status |
memcommit |
Commit the current session and extract persistent memories |
memlearn |
Deliberately capture a lesson (merge into existing memory) or mint/update a skill playbook; secret-redacted, deduplicated, injected into the current turn |
Also: indexed repository context, auto recall via the context-injection channel, and session sync + auto commit.

Why OpenViking?
| Dimension | Local file / SQLite approach | OpenViking approach (this plugin) |
|---|---|---|
| Recall | Keyword / FTS5 exact matching | Semantic retrieval: vector recall + L0/L1 abstract-layer targeting |
| Content forms | Only text you write yourself | Memories, resources and skills in one viking:// virtual filesystem; remote URLs and local files can be memadd-ed into the library as searchable resources |
| Context cost | Full-context injection or hand-trimmed summaries | Three tiers — L0 abstract (one sentence) → L1 overview (key points) → L2 full text — loaded on demand, saving tokens |
| Cross-tool | One memory silo per tool | One shared memory across tools: Claude Code, Codex, MCP clients, the ov CLI and DSH all read/write the same library |
| Maintenance | Manual curation | An observer queue does embedding, summarization and content reorganization automatically (memqueue shows the status) |
Quick start
# One-shot install from the GitHub repo (prebuilt lib/ included — no build
# authorization required):
sh install.sh [profile-name] # default profile: dsh-openviking
# Or install manually:
dsh plugin --profile <name> add github:Rxiain/dsh-openviking
dsh --profile <name>
Config defaults point at http://localhost:1933. To override anything, put
the complete config under id: openviking in your profile's
cordis.patch.yml (patches replace the whole config, they don't merge):
- id: openviking
config:
# OpenViking HTTP service base URL
endpoint: 'http://localhost:1933'
# X-API-Key auth header; empty omits it. Prefer env binding; never commit real keys
apiKey: !!js process.env.OPENVIKING_API_KEY ?? ''
# X-OpenViking-Account tenant header; empty omits it
account: ''
# X-OpenViking-User user header; empty omits it
user: ''
# X-OpenViking-Agent agent header; empty omits it
agentId: 'deepseek-harness'
# Per-request timeout in ms; 1000–300000
timeoutMs: 30000
# Session-sync state file (`~` expanded); message ids only, never bodies or keys
stateFile: '~/.dsh/openviking/state.json'
# Inject the indexed-repository list into the prompt
repoContext:
enabled: true
# Repository-list cache TTL in ms; 1000–3600000
cacheTtlMs: 60000
# Auto-recall relevant memories before each model step
autoRecall:
enabled: true
# Max memories injected per turn; 1–50
limit: 6
# Minimum score for filler memories; 0–1
scoreThreshold: 0.15
# Per-memory content cap in chars; 100–5000
maxContentChars: 500
# Injection budget ≈ tokenBudget × 4 chars; 100–10000
tokenBudget: 2000
# Also search the agent space (cases/patterns/tools/skills memories, skill playbooks)
agentSpaces: true
# Mid-message refresh every N tool steps; injects only new memories (0 disables)
refreshSteps: 10
# Memory map: injected at session start, then refreshed every N user turns (1 = start only, 0 = never)
startupMapEveryTurns: 5
# Auto-commit on a user-turn rhythm
autoCommit:
enabled: true
# Commit after N uncommitted user turns (0 disables the turn trigger)
turns: 3
# Wall-clock fallback: flush dirty sessions older than this (after the first commit)
intervalMinutes: 10
Create an account and API key
Admin commands need the root key (for a local service, usually in
~/.openviking/root_api_key.txt):
ROOT=$(cat ~/.openviking/root_api_key.txt)
printf '{"url":"http://localhost:1933","api_key":"%s"}' "$ROOT" > /tmp/ov-root.conf
export OPENVIKING_CLI_CONFIG_FILE=/tmp/ov-root.conf
ov admin create-account dsh --admin dsh-admin # create account dsh + first admin; prints its key
ov admin register-user dsh dsh --role user # register regular user dsh in account dsh; prints its key
ov admin regenerate-key dsh dsh # regenerate a key (old key immediately invalidated)
unset OPENVIKING_CLI_CONFIG_FILE && rm -f /tmp/ov-root.conf
Put the returned key in the plugin's apiKey, and the matching account/user
in account/user.
Contributing
Contributions are welcome:
- Fork the repository and create a feature branch (
git checkout -b feature/your-change) - Make the change and add or update tests
- Run
npm testto verify (the default suite needs no OpenViking service) - Commit and open a pull request
License & credits
References:
- @tanyouqing/pi-openviking (source)
- Upstream: volcengine/OpenViking
Links
More in this category
volcengine/OpenViking#examples/dsh-memory-plugin★ 28855
OpenViking memory and context bundle for DeepSeek Harness: pre-step auto-recall and profile injection, session capture, `viking://` URI guarding, and recall/write memory tools backed by an OpenViking server.
vectorize-io/hindsight#coding-agents★ 20092
Hindsight, agent memory that learns: long-term project memory with auto recall and retain, knowledge pages, deep reflection, and per-repo memory banks.
bowenliang123/dsh-context★ 179
Context insight panel: see what the model's context window is made of and how it evolves — composition vs. window size, per-request history, compression/injection events, and per-message token stats.
dsh-engramory★ 155
The Engramory curated-memory discipline as an installable plugin ([npm: dsh-engramory](https://www.npmjs.com/package/dsh-engramory)): a deterministic 200-line / 25 KB cap on the `MEMORY.md` index via `ctx.tools.guard()` — growth denied, a shrinking rewrite always passes — plus the protocol registered as a runtime skill. The store is plain markdown, one file per fact, shared with Claude Code, Codex, Kiro, and OpenClaw.
omdsh-dev/dsh-mnemon★ 71
Cross-agent, local-first persistent memory plugin for DeepSeek Harness (DSH), powered by Mnemon. It shares long-term memory across Mnemon-enabled agents and adds runtime memory, searchable project documents, semantic recall, knowledge graph, and a Sidebar UI.
modusensus/dsh-mneme#dsh-mneme★ 21
Structured memory engine for DeepSeek Harness. Offline semantic search, entity-attribute-timeline, autoDream self-consolidation, and human-editable Markdown storage.