deepseek-harness memory plugin · v0.2

Give your agent
one unified memory graph

No more fragmented "one markdown file per day" notes.
Facts, preferences, schedules, task progress — all in a single entity–time-fused memory graph.

0FC-SH selective forgetting · single-hop
best baseline 60.0 — beaten · #1 overall
0FC-MH selective forgetting · multi-hop
best baseline 7.0 · 6.7×
0LME(S*) accurate recall
best baseline 55.7 · +8.6 pts
Our belief

One agent, one whole memory —
undivided, unbroken, as memory was meant to be.

memoplus4dsh is the unified long-term memory plugin for deepseek-harness. Everything your agent needs to remember — facts, preferences, schedules, task progress — lives in a single entity–time-fused memory graph. No per-day markdown shards, no forgetting between sessions. One memory, for the whole life of the agent.

We believe an agent's memory should work like a human's: whole, continuous, and growing. Not diary pages piling up in a filesystem, not a scratchpad wiped clean at every session's end — but one unbroken memory, written from day one to today. An agent that remembers yesterday, and last year; that knows where the task stands, and recalls the preference you mentioned in passing. When memory becomes whole, an agent truly begins to know you. We hope memoplus4dsh is a cornerstone on that path: simple, open, and verifiable — doing one thing well: one whole memory.

One more thing: the entire v0.2 iteration was developed by DeepSeek V4.1 Flash running on dsh with memoplus4dsh v0.1 installed — the plugin kept its own developer's memory across sessions (task progress, design decisions, all of it). Our most everyday dogfooding yet.

The cost of fragmented memory

Most agent projects' "memory" is a markdown file generated per day. Naive, unsearchable, unable to evolve.

✕ Per-day md fragments
  • "Where did the task get to" is scattered across seven days of files
  • After a fact is updated, old and new values fight each other
  • No entities, no temporal semantics, no structure
  • A new session resets everything to zero
✓ One memory graph
  • Entities + events + dual-anchor time, structured and queryable
  • State updates: old values step aside, history stays on record
  • Goals / todos / schedules / conversations coexist in one graph
  • Inherited across sessions, recoverable after crashes

See it work

A looping live demo: how conversation is extracted into the graph, how fact updates coexist on the timeline (past and present are both kept), and how the graph is retrieved and injected at query time.

Conversation
Extraction turn/end · thinking off
Memory graph entities × events × dual-anchor time
usually yesterday now (query)
Query · Retrieve · Inject · Answer

Method innovations

Core mechanisms from the memoplus/ETMS research codebase, validated on LoCoMo (82.9% under the mem0 protocol), re-implemented for the dsh plugin system.

🕸

Unified memory graph

A single graph where entities (people / objects / concepts) and events (predicate · time · provenance) coexist. Not a pile of files — a queryable, evolvable graph.

⏱

Dual-anchor time

Distinguishes event_time (when it happened) from mention_time (when it was mentioned). "The setback we talked about in October" can hit something that happened in September.

🔄

State-family dedup

When a fact is updated, the old value steps aside for the new one — retrieval presents only the latest state, while the full history stays in the graph. An architectural answer to selective forgetting.

🌉

Progress event bridge

dsh-internal events for goals / todos / schedules / plans are projected straight into the graph. Long-running task progress becomes answerable across sessions — filling a native dsh gap.

🛡

Write reliability

Durable extraction queue (crash-safe re-extraction), bounded retries with backoff, segmentation of large inputs, and extraction with thinking explicitly off (measurably fixes empty-output memory loss).

🌐

Local multilingual embeddings

A harrier 0.6B sidecar (1024-dim, multilingual, ~10 ms/text on CPU) with an onnxruntime-node + distiluse fallback, character-level tokenization for Chinese. No new API keys; Linux / macOS / Windows × x64 / arm64.

How it's built

An official Cordis plugin with zero patches — install and uninstall are fully reversible. Extraction and retrieval reuse the model you already configured.

Zero patchOfficial plugin mechanism — not a single line of dsh modified
Active toolsmemory_search for recall · memory_remember for explicit saves · memory_visualize · memory_status for live status
Graceful degradationA failure in embeddings or extraction only degrades — the conversation never breaks
Your data, your handsAll memory lives in <dsh-home>/memoplus4dsh/ — delete it or take it with you

MemoryAgentBench

Official repo + dataset + metrics + judge, 1031 questions. Current release v0.2.0 with skeleton deepseek-v4.1-flash (opencode Go). Full run on 2026-09-18 (v02), all audits PASS; judged by MiniMax M3 (independent, cross-family).

Selective forgetting · single-hop FC-SH
Ours
81.0
GPT-4o
60.0
HippoRAG-v2
54.0
Mem0
18.0
Mean over four lengths (6k/32k/64k/262k): 81.0; per length 64 / 78 / 94 / 88 — #1 overall, beating even GPT-4o with the full text in the window (60.0). The r2 round (v0.1 + v4-flash, official API) scored 85.0 — see the evaluation record for the model-swap breakdown.
Selective forgetting · multi-hop FC-MH
Ours
47.0
Best agent
7.0
GPT-4o
5.0
Mem0
2.0
A "death task" where all official agents score ≤7 — 6.7× the best baseline, still 52.0 at 262k. System-prompt-guided iterative memory_search recovers most multi-hop recall. (r1 30.25, r2 51.5.)
Accurate recall LME(S*)
Ours
64.33
GPT-4.1-mini
55.7
HippoRAG-v2
50.7
Mem0
36.0
Official judge script, scored by MiniMax M3 (independent, cross-family — no self-grading leniency); #1 overall, 8.6 points above the best official baseline (same-model self-judging reads 68.0).

Also passed human-scenario tests: cross-session goal progress recall, todo evolution, SIGKILL crash re-extraction · 173 unit tests green

Disclaimer: the scores above were measured by us using MemoryAgentBench's official code, dataset, and metrics. They were not run, reviewed, or endorsed by the benchmark team, and we have no affiliation with it.

Our method is deliberately simple: one entity–time memory graph + hybrid retrieval + iterative search — no training, no heavy pipeline — which makes it a good simple baseline. If your method is more complex, you are welcome to compare against us under the same official protocol; the setup, per-question attribution, and reproduction commands are all public in the evaluation record above.

Two-minute install

bash
# Get the plugin
$ git clone https://github.com/eteced/memoplus4dsh.git
$ cd memoplus4dsh

# Install into dsh (defaults to the web profile)
$ scripts/install.sh

# Fully reversible uninstall (memory data kept)
$ scripts/uninstall.sh

# Your memory lives here — delete it or take it with you
~/.dsh/memoplus4dsh/
Requires: dsh ≥ 0.1.2-alpha.3 (verified up to 0.1.5-alpha.2) · Node ^22.19 || ≥24 · python3
One-click scripts on Linux / macOS; two manual steps on Windows (see the README)
Verify with node scripts/doctor.mjs — or just ask the agent "memory status" in chat
Optional full-featured boost: scripts/setup-python.sh (harrier embeddings + NER); models download lazily on first run (~135MB and up), hfBaseUrl can point to a mirror
Updating: git pull && npm run build, then restart dsh — memory data lives separately and is never touched