dsh-memory
A persistent, model-editable memory/notes store for DeepSeek Harness. It gives the agent a first-class way to durably write, fetch, and search "facts it wants to remember" that survive across sessions — something conversation-history search, todo_write, settings, and static skill docs do not cover.
It is a community dsh-plugin: an installable Cordis bundle shipping as plain ESM JavaScript (index.js + index.d.ts), so it installs from a git host or npm with no build step.
Records live in one storage domain (dsh_memory) routed through the built-in ctx.storageDomain seam — not hand-rolled files — so they persist under the deployment's configured backend (json/sqlite) and emit domain/changed for live UIs.
Why it is not redundant
| Existing capability | Difference from dsh-memory |
|---|---|
session_search / session_event_* |
Only read past conversation; cannot store durable facts |
todo_write |
Task-status tracking, not knowledge |
settings / credentials |
Operator config, not agent-mutable knowledge |
skills |
Static docs; the model cannot write to them |
goal / schedule |
Objectives / reminders, not a knowledge store |
| MCP memory server | Requires an external server/account; this is a lightweight built-in |
Tools
| Tool | Purpose |
|---|---|
memory_set |
Durably upsert a fact/note under a stable key (with optional tags). |
memory_get |
Read one entry by key, or list all when the key is omitted. |
memory_delete |
Delete an entry by key (idempotent). |
memory_search |
Case-insensitive substring search over key/value/tags, filterable by required tags. |
Example
user: From now on, don't touch public/ in this project.
model: memory_set key="project/convention" value="Do not modify public/" tags=["project","rule"]
→ [memory] saved "project/convention" (2 tags)
(next session)
user: Continue on that project.
model: memory_get key="project/convention" → "Do not modify public/" → works accordingly
Install
Install into a Harness profile. From a checkout:
dsh plugin --profile web add ./dsh-memory
or from this repository (no build step required — the package ships JavaScript):
dsh plugin --profile web add github:Amengclass/dsh-memory
The storage backend is provided by your deployment (web profiles mount
@deepseek-ai/dsh-storage-jsonwithbackend: jsonby default). This plugin only declares a storage domain, so no backend changes are needed.
Configuration
Schemastery-validated config, overridable from your profile patch:
| Key | Default | Meaning |
|---|---|---|
domainName |
dsh_memory |
Name of the storage domain (must match /^[a-z][a-z0-9_]*$/). |
maxItems |
1000 |
Hard cap on stored entries. |
maxKeyLength |
120 |
Max key length; longer keys are rejected. |
maxValueLength |
10000 |
Max stored value length; longer values are rejected. |
- insert:
- id: dsh-memory
config:
maxItems: 500
Dependencies & license
- Runtime peer dependencies (provided by the harness's own node_modules):
@deepseek-ai/dsh-storage-domain,@deepseek-ai/dsh-tools,@deepseek-ai/schemastery,zod. - No runtime build toolchain; no Node addons.
- MIT licensed — see LICENSE.
Contributing / topic
Published under the dsh-plugin GitHub topic. PRs and issues welcome.
No comments yet. Be the first to write one.