Skip to content
dsh-market Browse plugins GitHub 中文

EternalNight996/dsh-memory-eternal

A self-contained second brain for DeepSeek Harness — auto-captures durable dialogue knowledge into a local Markdown vault (custom dedup, CJK search, git-friendly), with a graphical knowledge base and an interactive knowledge graph (legend filter, time-dimension coloring, box-select, merge, delete, PNG export/import).

Stars ★ 14 Category Memory Listed 2026-09-12 npm dsh-memory-eternal

Install

Inside DeepSeek Harness, with dsh-market

dsh plugin --profile web add dshmarket

Or from the command line

dsh plugin --profile web add dsh-memory-eternal

Installing runs third-party code with your own permissions — it can read your files, use your credentials and reach the network. Review the source first, and pin a commit (github:owner/repo#sha) when you can.

README

🚨 Important: moved to memory-eternal

This plugin has been upgraded into an agent-agnostic standalone project — no longer tied to a single DSH service. New features and ongoing development live there:

  • 📦 npm: npm i memory-eternal (or dsh plugin --profile web add memory-eternal)
  • 🐙 GitHub / Gitee: EternalNight996/memory-eternal

Auto-captures knowledge after every conversation and survives across sessions; recall fetches only the relevant chunks — saves tokens, less noise. Fully self-built, zero third-party memory framework, no DSH source changes, one vault shared by every Agent, plain Markdown & git-manageable.


🚀 Get Started in 5 Minutes

🟦 DeepSeek Harness (DSH) — focus

Install (dsh-desktop via DSH CLI, one command):

# dsh-desktop (recommended): install via DSH CLI into the profile
dsh plugin --profile web add dsh-memory-eternal

# or update directly in the profile (pnpm workspace). Use pnpm — `npm install` throws EUNSUPPORTEDPROTOCOL
cd ~/.dsh/profiles/web && pnpm add dsh-memory-eternal@latest

After restarting dsh web, three things are live immediately:

Effect Where
Auto-capture of knowledge cards Happens every turn, no action needed
memory_recall tool Agent calls it automatically when it needs history
Visual UI Sidebar bottom Memory button / Settings → Memory

Entry: The sidebar-footer Memory button opens the vault (its left rail includes Cards / Graph / Usage / Audit Center / Recycle Bin / Memory Config); "DSH Settings → Memory" is the pure config page.

Edit config: Vault left rail "Memory Config" (or DSH Settings → Memory) → DSH memory config / cost control / auto-audit config / self-hosting — just hit "Save Config". autoWebMode / watchdogAutoSpawn changes require a DSH restart.

🟨 Claude Code

npm i -g dsh-memory-eternal     # installs CLI + MCP (auto-writes ~/.claude.json + SessionEnd hook)

Ready after install: say "recall 数据库选型" in a session → auto-retrieves memory; on session end / before context compaction → auto-captures.

🟧 Codex CLI / Cursor

npm i -g dsh-memory-eternal     # auto-writes Codex config.toml / Cursor mcp.json

Restart the tool → MCP is in the list; just use: 用 memory_recall 查一下项目历史决策.

🟩 Browser (no Agent needed)

dsh-memory open    # starts web + opens browser (default http://127.0.0.1:7999)

Stats / search / card grid (add-edit-merge-import-export) / knowledge graph — all here. Same UI as the DSH embed; data stays in sync.

zcode (Zhipu): no native MCP; bridge via zcode-open-bridge or use the CLI directly.


📖 Command Reference

dsh-memory recall "database selection"   # retrieve
dsh-memory capture "important note..."   # manual capture (- reads stdin)
dsh-memory sweep ~/.claude/projects      # mine existing sessions
dsh-memory setup [--dry-run]             # re-run / preview auto-mount (idempotent)
dsh-memory mcp                           # MCP stdio (mount to any MCP client)
dsh-memory serve [--port 7999]           # run web in foreground
dsh-memory open                          # ensure web alive + open browser
dsh-memory watchdog [--port 7799]        # watchdog keep-alive (standalone process)

When not running on DSH, the dsh-memory command comes from npm i -g.


⚙️ Self-hosting (plain words)

Three concepts, don't mix them:

  • How the web server stays alive (autoWebMode) → init=pull once at DSH start (default); interval=DSH in-process timer probes & auto-restarts (0 extra memory); manual=fully manual, only from dsh-memory open.
  • Watchdog process (watchdogAutoSpawn, default on) → a standalone node process that can pull web up even after DSH exits (~+47 MB RAM). Only turn on for 7×24 keep-alive.
  • Auto-mount MCP (autoMcpSetup, default off) → whether to auto-write MCP into Claude Code/Codex/Cursor config. Off = don't touch your machine config; run dsh-memory setup manually when needed.

Change these: Vault left rail "Memory Config" (or DSH Settings → Memory) → edit the table and save; autoWebMode / watchdogAutoSpawn need a DSH restart.

MCP is a protocol, not a resident service: the agent spawns it per session and exits when done — no "auto-start on boot" concept.

Three deployment intensities

Scenario Config Memory
Personal dev (default) autoWebMode=init + watchdogAutoSpawn=off web 47 MB
Resident 7×24 watchdogAutoSpawn=on web + watchdog 47+47 MB
True boot auto-start (no DSH) Windows Task Scheduler runs dsh-memory watchdog --port 7799 --interval 5000 --max-restart 10 same

⚙️ Memory Config (plain words)

All settings live in the vault left rail "Memory Config" (or DSH Settings → Memory) — edit and hit "Save". Here's the full page (plugin info / Agent MCP mount status / auto-audit config):

1. Most used

Setting Default In plain words
Auto capture on auto-store useful content as cards after each turn
Auto recall on AI auto-queries memory when it needs history
Vault dir ~/.dsh/memory-vault where memory lives, plain Markdown & git-able

2. Save money (important)

Setting Default In plain words
Distill cards on compress a conversation into a sharp card (calls AI, costs money). Off = store raw text, zero cost
Dedup feeds AI on judge if new content is a duplicate (calls AI). Off = simple dedup, saves one AI call
Distill output cap 900 max chars per compress, bigger = sharper but pricier
Recall min score 2 how "close" a match must be to return; bigger = sharper but leaks more (cheaper)
Min capture chars 200 too-short chats aren't stored (avoids small-talk waste)
Daily quota 60 max cards per day, prevents AI burning money

3. How the service runs

Setting Default In plain words
Keep-alive autoWebMode init init=open web once at DSH start; interval=periodically check & restart if dead; manual=fully manual
Watchdog watchdogAutoSpawn on a standalone process keeps web alive (+47 MB). Personal use can turn off
Auto-mount MCP autoMcpSetup off lets Claude Code / Codex / Cursor use your memory. On = auto-configures them; Off = never touches your config, run dsh-memory setup manually

💰 To save money: turn Distill cards off, lower Distill output cap, raise Recall min score.

🎯 One-click presets

Top of the config page: 🟢 A Light / 💰 B Budget / ⭐ C Premium — click to fill, then Save:

Plan Scenario Keep-alive Watchdog Distill Distill cap Recall min Memory LLM cost
🟢 A Light Personal dev (default) init off on 900 2 ~47 MB normal
💰 B Budget Tight budget / many Agents init off off 500 3 ~47 MB ~0
⭐ C Premium Long projects / teams interval on on 1200 1 ~94 MB high

🛡️ Audit Center & Recycle Bin

New cards go to the Audit Center (pending) by default and enter the main vault only after you approve them; rejected ones move to "Rejected", where you can restore or delete to the recycle bin. Cards matching an exemption (audit mode = skip all / exempt agents / exempt kinds) go straight in; recycle-bin cards are recoverable within 30 days, then auto-purged.

  • Pending / Rejected tabs, filtered by type / date / agent; select all and approve / reject / delete-to-recycle in one click.
  • Rules in "Memory Config → Auto-audit config": audit mode (audit all / skip all) + exempt agents + exempt kinds + recycle retention days.

🥇 Why the audit system is more reliable (vs other memory products)

Most memory products (mem0 / Zep / agentmemory…) auto-ingest everything the moment a conversation ends, good or bad — noise, wrong facts, and sensitive content all go in and get recalled later, polluting context and amplifying hallucinations.

dsh-memory-eternal uses human-in-the-loop auditing — only trusted content enters the main vault:

Dimension Other memory products dsh-memory-eternal audit system
Ingest Auto-ingest all, no gate New cards first enter the Audit Center (pending), approved before entering the vault
Quality No filtering of noise/errors Only cards you've confirmed → more accurate recall, less noise
Traceability No source/audit trail Every card carries submittedBy author + pending/approved/rejected state
No-friction — Exempt agents / exempt kinds hit → trusted cards go straight in, zero wait
Safety Delete = gone forever Recycle-bin soft delete, recoverable within 30 days

🧬 Why Fully Self-built

Most memory solutions lean on third-party frameworks / spin up an MCP service / lock memory in a private store. This plugin builds the skeleton itself — zero third-party runtime deps, logic readable line by line:

Module Self-built Replaces
Dedup lexical Jaccard bigram (0.62) + semantic dedup duplicate-card prevention
Retrieval CJK-aware: Chinese whole-word + char bigram no full-text search engine needed
Graph force-directed + [[wikilink]]/shared-tag edges see knowledge links at a glance
Storage plain .md with frontmatter not locked in, readable, git-able, any tool can read

Same direction as popular projects (summarize→store→recall), but positioned differently: local, self-built, zero-dep, readable & controllable. If you already use mem0/Zep etc., just layer this as a "local persistent memory base".


🛠 Development / Test

npm i
npm test        # unit tests: vault dedup/retrieval/graph + capture pipeline + API shapes
npm run build   # builds lib/client.js (DSH embed) + web/app.js (standalone web bundle)

📄 License

MIT


Make your AI truly remember: dialogue auto-captured, knowledge at your fingertips. ⭐ Star it if you like, Let's make AI not forget.

中文 README: README.md

Content from the project README on GitHub ↗

Comments

Comments live in GitHub Discussions. Sign in with GitHub to post or react.