DSH Hub

SodaMem/dsh-plugin-sodamem

dsh-plugin-sodamem

BundleTerminal1 GitHub stars· updated 2026-08-18

Native DeepSeek Harness (dsh) plugin for SodaMem — auto-injects evidence-grounded memory into every turn and ingests each closed turn.

Install

npx @deepseek-ai/dsh plugin --profile tui add dsh-plugin-sodamem

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-plugin-sodamem DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-plugin-sodamem.svg)](https://dshhub.dev/plugins/dsh-plugin-sodamem)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from SodaMem/dsh-plugin-sodamem, cleaned of badges and images.

dsh-plugin-sodamem

Long-term memory for DeepSeek Harness, backed by SodaMem.

  • Recall — while a turn is being assembled, the plugin retrieves an evidence block for that turn's question and contributes it to the prompt. BM25 + vector + entity fusion, no model call.
  • Retain — when the turn closes, its messages are ingested back into the store.

Neither is a tool call, so the model can't skip either one and neither costs tool-schema space.

SodaMem is a separate open-source memory engine that runs as a local daemon. This repo is only the dsh plugin; you need the daemon running for it to do anything.

What you get that a notes file doesn't

Every recalled fact names the turn it came from. This is one line of a real evidence block, verbatim:

support=I flew United to Boston last week.
predicate=User flew United to Boston
entities=airline=United|destination=Boston
source=s4/s4_turn_0        ← the actual turn, not "some earlier chat"
date=2023-06-10

FactEvent → SourceSpan → RawTurn is a foreign-key chain. When the model asserts something about the user, there is a row explaining why.

Facts expire. SodaMem keeps four time axes — when the event happened, when the fact was true, when it was said, when it was stored. "I moved to Chicago last year" and "I'm moving next year" are different rows, and a fact that stopped being true stops coming back. Corrections are ADD-only: a new version plus a SUPERSEDES edge, never an in-place rewrite.

The engine is benchmarked and the answers are published.

benchmarkscore
LongMemEval-S92.8% (464/500)500 answers + 8,427 evidence rows, re-gradable with any judge
LoCoMo86.88% (1338/1540)end-to-end QA, LLM-as-judge

Those are SodaMem's numbers — the engine this plugin talks to, not the plugin itself.

Why not the MCP bridge?

SodaMem already has an MCP integration for dsh, in the main SodaMem repo (integrations/deepseek-harness/). It exposes memory as tools, which means the model has to choose to call them — and on most turns it simply doesn't. The strongest thing SodaMem offers, the zero-LLM GET /v1/context evidence block, ends up left to the model's discretion.

MCP cannot fix that. A tool is pull-only, and nothing in the protocol lets a server contribute to the prompt or observe a turn closing. This plugin uses the harness's own seams instead — system-prompt/assemble for recall and agent/turn-stopping for retain — so both happen unconditionally.

MCP bridgeThis plugin
Recallmodel calls a tool, if it decides toevery turn, automatically
Retainmodel calls a tool, if it decides toevery closed turn, automatically
Model can skip ityesno
Costs tool-schema spaceyesno

Do not run both against the same store. They would recall the same facts twice and ingest every turn twice. Pick one.

Requirements

  • Node >= 22 (the harness requires it; the plugin uses AbortSignal.any)
  • A running SodaMem daemon — see below

Install

dsh plugin --profile tui add dsh-plugin-sodamem

Related plugins