Agent tools for a self-hosted mem0 server: add, search, get, update, delete, history, reset and status memories, with a settings-panel configuration card.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:orangeshinee/dsh-mem0
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
中文 | English
A hot-pluggable dsh (DeepSeek
Harness) plugin for reading and writing memories on a
self-hosted mem0 instance: the host Agent
talks to your own mem0 REST server directly through the mem0_* tools (new
OSS build, mem0/mem0-api-server, dashboard included, X-API-Key auth,
endpoints have no /v1 prefix).
Mounted via dsh plugin add link:<this-directory> — no dsh source changes.
No sidebar UI, but it does ship a browser half: a dsh-mem0 configuration
card in Settings → Plugins → Plugin configuration that edits the settings
below.
Tools
| Tool | Endpoint | Description |
|---|---|---|
mem0_add |
POST /memories |
Store memories (a string or a message array; attributed by defaultUserId / defaultAgentId) |
mem0_search |
POST /search |
Semantic search with relevance scores |
mem0_get |
GET /memories / GET /memories/{id} |
List (filtered by identifiers) or fetch one |
mem0_update |
PUT /memories/{id} |
Update a memory's text / metadata / expiration |
mem0_delete |
DELETE /memories/{id} / DELETE /memories |
Delete one; bulk delete needs confirm: "DELETE ALL" + admin |
mem0_history |
GET /memories/{id}/history |
Edit history of one memory |
mem0_reset |
POST /reset |
Wipe everything (needs confirm: "RESET" + admin) |
mem0_status |
GET /auth/setup-status + GET /configure |
Health / auth / configuration check (never prints the apiKey) |
Install
# Option 1: straight from GitHub (no publish step, recommended for users)
dsh plugin --profile web add github:orangeshinee/dsh-mem0
# Option 1 (pinned version): v* tag on GitHub Releases, built by CI
dsh plugin --profile web add github:orangeshinee/dsh-mem0#v0.1.2
# Option 2: from npm after publishing (maintainer runs npm publish once)
npm publish # maintainer
dsh plugin --profile web add dsh-mem0
# Option 3: local development (link style)
dsh plugin --profile web add link:$(pwd)
# Restart dsh web after installing
The runtime dependencies (@deepseek-ai/dsh-settings, @deepseek-ai/schemastery)
are hard dependencies, so dsh plugin add installs them with the
package (profiles default to autoInstallPeers:false, so peerDependencies would
not be installed).
Release
Pushing a v* tag triggers CI (.github/workflows/release.yml) to build and
publish a GitHub Release automatically: pnpm build → four offline smoke tests
→ the npm pack artifact (dsh-mem0-<version>.tgz) is attached to the
Release, with auto-generated changelog.
git tag v0.1.2 && git push origin v0.1.2
The tag version must equal the version in package.json (CI fails
otherwise). If the repository has an NPM_TOKEN secret set, the same run also
publishes to npm (npm publish); without it that step is skipped and the
GitHub Release still happens.
Configuration
Settings → Plugins → Plugin configuration → dsh-mem0 (or the config
section of the plugin row in the composition):
| Key | Default | Description |
|---|---|---|
baseUrl |
http://127.0.0.1:8888 |
Self-hosted mem0 address (no trailing slash, no /v1) |
apiKey |
empty | m0sk_... from the dashboard's API Keys, the legacy ADMIN_API_KEY, or a JWT |
authType |
apiKey |
apiKey / adminKey / jwt / none |
defaultUserId |
HeTony |
Owner used when a tool call does not specify user_id |
defaultAgentId |
dsh-agent |
Agent used when a tool call does not specify agent_id |
timeoutMs |
15000 |
Per-request timeout |
announceToAgent |
true |
Announce the plugin to agents in the system prompt |
enabled |
true |
Master switch |
Settings are persisted by the dsh settings provider; changes to baseUrl /
apiKey / the default identifiers apply immediately, no restart needed.
The configuration card is served by the browser half (
client/client.cjs) and reads/writes the settings through the plugin-owned/api/dsh-mem0/configroute (src/settings-routes.ts) — the harness's settings wire only exposes namespaces on its own allowlist, which a plugin cannot extend.apiKeyis markedrole('secret')in the schema: the route only sends a "configured / not configured" flag, the key literal never reaches the browser. After changing host-side code (src/) you mustpnpm buildand restart dsh web; a change toclient/client.cjsalone only needs a page refresh.
Development
pnpm typecheck # tsc --noEmit
pnpm build # outputs lib/ (ESM, sources in src/)
The build output is multi-file ESM (tsc); runtime dependencies
(@deepseek-ai/dsh-*) resolve from the host profile's node_modules.
For agent-oriented development notes (code map, platform traps, security red lines), see AGENTS.md.
License
Links
More in this category
vectorize-io/hindsight#coding-agents★ 43968
Hindsight, agent memory that learns: long-term project memory with auto recall and retain, knowledge pages, deep reflection, and per-repo memory banks.
volcengine/OpenViking#examples/dsh-memory-plugin★ 39063
OpenViking memory and context bundle for DeepSeek Harness: pre-step auto-recall and profile injection, session capture, `viking://` URI guarding, and recall/write memory tools backed by an OpenViking server.
agentscope-ai/ReMe#dsh★ 3541
Connects DeepSeek Harness to ReMe's local-first, self-evolving personal knowledge base: automatically captures completed main-agent conversations as user-owned Markdown memory, searches conversations and source material through reme_search with BM25, optional embeddings, and wikilink expansion, and schedules daily memory consolidation.
zilliztech/memsearch#MemSearch★ 2687
Shared Markdown memory for DSH and other coding agents, with automatic capture, pre-step context injection, searchable recall, and memory-to-skill self-evolution through a review panel.
vshulcz/deja-vu#extensions/dsh★ 1107
Reads the session files thirty-three other coding agents on this machine already wrote — Claude Code, Codex, Cursor, VS Code Copilot Chat, opencode, OpenClaw, Hermes, Kimi, Cline, Zed and more — including sessions from before it was installed: six tools (deja_recall, deja_session, deja_blame, deja_fix, deja_how, deja_remember), a /deja command, and optional automatic recall added to the runtime context. Local BM25 index, no LLM, no embeddings, no network (dsh plugin --profile web add dsh-deja).
adoresever/graph-memory★ 633
Traceable, searchable cross-session memory for DeepSeek Harness — conversation knowledge as typed graph nodes (TASK/SKILL/EVENT) and typed edges.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.