dsh-simple-memory ๐ง
August 22, 2026 ยท View on GitHub
A simple memory keeper plugin for DeepSeek Harness (dsh) web: retrieval-style memory with zero-code storage. No database, no vector store โ just well-organized markdown files plus a thin plugin that handles the entry points. Normal work is never interrupted; memory accumulates as a sidecar filesystem beside your projects, and rules nudge you to record a note from time to time.
Status: core pipeline verified (0.2.0), real-world effect still under testing โ see docs/verification-log for the test run and docs/design for how it works.
Unofficial project: independently developed and maintained by a community member, not an official DeepSeek product.
Screenshot
Memory button (the bulb icon left of the input box): one click starts the memory flow โ review โ propose each item with a project/global scope and reason โ confirm โ write โ show output โ commit:

Memory management page (Settings โ Memory): status overview, memory-root config, flat per-project lists plus global, click to read:

Features
| Action | Effect |
|---|---|
| Open a session | Memory index (current project + global + loose root files) is injected once per session โ the model "remembers" what exists |
| Click the memory button | A fixed memory-flow instruction is inserted โ the model runs the standardized flow (review โ propose with scope โ confirm โ write โ show output โ commit) |
| Write memory | The memory-write tool enforces the format (name ๅ็ฑป-ไธป้ข.md, โค2KB, date header; scope = project/global) |
| Browse memory | Inline browser in the settings page: flat per-project lists + global common/, click to read |
| Initialize | One click creates the repo skeleton (common/projects/references/archive/staging) + git init |
| Relocate | Change the memory root from the settings page (writes patch config, takes effect after restart) |
Install
dsh plugin --profile web add "github:a903067276-rgb/dsh-simple-memory#main"
Restart dsh web, then Settings โ Memory โ Initialize memory repo.
Manual install fallback: see docs/install.md.
Usage
- Memory button (the bulb icon left of the input box) โ one click inserts a fixed, self-contained memory-flow instruction; the model then runs the standardized flow (review โ propose each item with a project/global scope and reason โ confirm โ write โ show output โ commit).
- Settings โ Memory โ status overview, memory-root config, one-click repo init, and an inline browser: flat per-project lists plus global, click to read.
Platform support
| Platform | Status |
|---|---|
| macOS | โ development environment |
| Linux | โ ๏ธ expected to work (plain file operations), untested |
| Windows | โ ๏ธ expected to work (plain file operations), untested |
Requirements
- DSH web >= 0.1.0-rc.6
- Version compatibility (best effort โ the settings card uses dual-field
key+idregistration to satisfy both rc.6 (id) and rc.7+ (key); verified locally on rc.6/rc.8/0.1.1-rc.2, not guaranteed on every DSH version):- DSH 0.1.0-rc.6 and newer (incl. 0.1.1-rc.1/rc.2): try
main(default). - Conservative fallbacks (the last pre-0.1.1 build): DSH 0.1.0-rc.7/rc.8 โ
v0.2.5(dsh plugin add github:a903067276-rgb/dsh-simple-memory#v0.2.5); DSH 0.1.0-rc.6 โ frozenrc6-compattag (no maintenance).
- DSH 0.1.0-rc.6 and newer (incl. 0.1.1-rc.1/rc.2): try
- git CLI (optional: without git, the memory repo is just a plain directory)
- Maintenance policy: this plugin keeps evolving with the latest DSH releases; compatibility with older DSH versions is best-effort only and not guaranteed going forward.
How it works
A retrieval-style memory: files are the storage, the plugin only handles the entry points. Full design: docs/่ฎฐๅฟ็ณป็ป่ฎพ่ฎก่ฏดๆ.
-
Storage (zero code) โ everything lives in one memory root
~/Documents/DSH/memory/(configurable from the settings page):memory/ โโโ common/ global experience (active zone, cross-project reuse) โโโ projects/<name>/ per-project memory (auto-created on first write) โโโ references/ cold zone: reference material (search-only) โโโ archive/ cold zone: forgotten memory moved out of the index โโโ staging.md promotion pool (candidates for global reuse) โโโ .git/ one git repo for the whole root โ rollback safetyPer-project memory does NOT live inside the project directory: a
.gitignore'dmemory/would hide it from grep. Keeping it in the shared root keeps publication isolation automatic and search universal. -
Index injection (remembers what exists) โ on the first step of every session (
agent/pre-step), the plugin injects a filename list (never the content), grouped by category, covering the current project + global + loose root files. The model then reads a full note (โค2KB each) on demand. Cold zones are not injected โ searched only when a topic hits. -
Write tool (records it) โ
memory-writeenforces the format: filenameๅ็ฑป-ไธป้ข.md, first line## date ๅ็ฑป-ไธป้ข, โค2KB, category prefixes open (built-in: ่ธฉๅ/ๆต็จ/ๅณ็ญ/ๅๅฅฝ/่ๆฏ).scopepicks project or global. Writing outside the workspace asks for approval (built-in confirmation). -
Memory button (triggers the flow) โ the bulb icon in the input bar inserts a fixed, self-contained instruction: โ review the conversation โก propose each item with a scope (project/global) + reason โข wait for user confirmation โฃ write via
memory-writeโค show the output โฅ git commit (mem: ่ฎฐ xxx). -
Settings page (manage + browse) โ status line (active count, staging count), memory-root config, one-click repo skeleton init, and an inline browser listing every project flat plus global, click to read.
-
Search (finds it) โ no index files: the agent's grep scans the whole memory root (all projects + global + cold zones) in one pass, active zones first.
-
Promotion (cross-project reuse) โ project memory that looks reusable goes into
staging.md(low friction, no instant decision); when the pool is non-empty the user is reminded, and after confirmation it is distilled intocommon/and removed from the pool. -
Forgetting (fresh context) โ outdated notes move to
archive/(soft delete: still on disk, just out of the index). Context stays lean, disk stays complete. -
Rollback โ every memory operation is committed immediately (
mem: <action> <subject>); a wrong write is onegit checkoutaway.
Notes
- Memory git repos are local-only, never pushed to a remote.
- Writing memory outside the workspace asks for approval (built-in confirmation, per the memory spec).
- The memory-flow instruction is self-contained and does not depend on the global AGENTS.md; the judgment rules there are only a reference.