Install
August 15, 2026 · View on GitHub
Requires DeepSeek Harness 0.1.0-rc.x with the web profile (the memory unit
rides the host storage-domain facility with the JSON backend).
From this repo (development / pre-release)
dsh plugin --profile web add /path/to/dsh-native-memory
# or a git spec:
dsh plugin --profile web add github:dsh-native-memory/dsh-native-memory
From npm (after release)
dsh plugin --profile web add dsh-native-memory
Then restart dsh web and open any session. The bundle patch:
- inserts the
dsh-native-memoryrow into the host composition, and - enables session-query full-text search (
openAt: first-search, durable index at~/.dsh/storages/session-search.sqlite).
Configuration
Any field can be overridden in your profile patch
(~/.dsh/profiles/web/cordis.patch.yml), which always applies last:
- id: dsh-native-memory
config:
injectProfile: false # drop the always-on profile section
approvalWrites: true # keep the write approval gate
maxFactsPerWorkspace: 300
A patch replaces the row's whole config, but every omitted field falls back to its built-in default (300 facts, 2000 chars/fact, 8 profile entries × 240 chars, approval on) — the partial override above is therefore safe.
Verification
1. New session in a workspace → tools list shows memory_remember,
memory_recall, memory_search, memory_edit, memory_forget, memory_profile.
2. "remember that this project uses pnpm" → approve in the UI → fact lands.
3. Second session, same workspace → memory_recall returns the fact; the
profile section appears in the prompt.
4. A session in another workspace → memory_recall returns nothing.
5. ~/.dsh/storages/dsh_memory.json exists and holds the fact.
Headless profiles (opt-in storage)
Headless profiles (dsh-base + dsh-headless) do not mount the
storage-domain facility — the web-app bundle owns those rows — so memory
tools answer MEMORY_DISABLED there by default, and the plugin stays mounted
without hanging (the designed degradation path). Opt in by inserting the
storage rows in the headless profile's user patch
(~/.dsh/profiles/headless/cordis.patch.yml):
- insert:
- id: storage
name: '@deepseek-ai/dsh-storage'
- id: storage-json
name: '@deepseek-ai/dsh-storage-json'
config:
root: !!js dshHomePath('storages')
- id: storage-domain
name: '@deepseek-ai/dsh-storage-domain'
config:
backend: json
The memory unit is shared with the web profile (same ~/.dsh/storages
root), so headless sessions recall the same workspace facts. Writes stay
approval-gated; without a UI answerer they fail closed.
Uninstall
dsh plugin --profile web remove dsh-native-memory
The memory unit file and the search index are user data and are left in place; delete them manually if you want them gone.