@achasoft/dsh-memory
Persistent, searchable, per-project memory for the DeepSeek Harness: decisions, rules, and sprint context in a queryable DuckDB file, rules enforced on every model request, with a full management UI in the Web Client
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:navid-kianfar/dsh-memory说明文档
阅读完整 README ↗Configuration
Every field is a validated setting, changeable from your profile's cordis.patch.yml or from Settings → Plugins → Memory in the Web Client.
| Setting | Default | What it does |
|---|---|---|
databasePath | .dsh/memory.db | Relative to each project's directory. |
injectRules | true | Put the rule block in every model request. Off keeps rules stored but unenforced. |
injectSessionContext | true | Seed a starting session with the last summary, sprint goals, and recent decisions. |
autoSession | true | Open and close a memory session alongside each agent session. |
remind | once | When to remind the model to file a summary: never, once, every-turn. |
vectorWeight | 0.6 | The semantic signal's share of a blended ranking. Ignored without embeddings. |
minSimilarity | 0.05 | Similarity floor for a search that does not name one. |
searchLimit | 10 | Hits returned when the caller does not say. |
candidateLimit | 1000 | Rows either search probe considers. |
embedBatch | 64 | Memories embedded per background pass. |
toolset | core | core or full — see below. |
retentionDays | per category | Days per category; 0 means never. Rules never expire regardless. |
Semantic recall (optional)
Enable the embeddings row and point it at any endpoint speaking OpenAI's /v1/embeddings — a hosted API, a local inference server, or Ollama:
- id: memory-embeddings-openai
disabled: false
config:
baseUrl: https://api.openai.com/v1
model: text-embedding-3-small
apiKeyEnv: OPENAI_API_KEY
timeoutMs: 30000
batchSize: 64
The key is addressed by reference, never stored: apiKeyEnv names an environment variable resolved through the harness credential seam at the start of every call.
Memories are embedded in the background and vectors are stored as DuckDB FLOAT[]. Changing model strands the old vectors — they are excluded from comparison rather than compared — and Rebuild vectors in the UI re-embeds everything.