Your harness forgets everything when the session ends
One plugin fixes that.
Every session, every channel, one memory. What you told dsh yesterday is right there tomorrow.
One command. Permanently.
14 days free
Full access. Install it, watch your harness remember, cancel anytime.
See the difference
You: Keep going on the migration we planned
dsh: Which migration? Can you share the plan, the target schema, and the constraints we agreed on?
A fresh session, and you are re-explaining a decision you made last night.
You: Keep going on the migration we planned
dsh: Picking up from last night: Postgres 16, the users table split, and the zero-downtime constraint. Starting with the backfill script.
Already knows. Starts working immediately.
Sound familiar?
✗ Re-pasting context into every new session
✗ Telegram, Web UI, and headless runs that know nothing about each other
✗ Decisions and preferences lost the moment a session closes
With MemoryRouter
✓ Relevant memories injected at the start of every turn
✓ One memory across Web UI, Telegram, Discord, ACP, and headless sessions
✓ Clean user and assistant text stored after every completed turn. Zero tool noise.
14-day free trial. Cancel anytime.
Set up in 2 minutes
One command, one config line, and your harness remembers forever.
$ dsh plugin --profile <your-profile> add dsh-memoryrouterInstalling from a local checkout instead? Use dsh plugin --profile <your-profile> add /path/to/dsh-memoryrouter
- id: memoryrouter
config:
apiKey: mk_your_key_here # or leave unset and export MEMORYROUTER_API_KEYPrefer an environment variable? Leave apiKey unset and run export MEMORYROUTER_API_KEY=mk_your_key_here. Get your key with a free MemoryRouter account.
Tell your harness something you want it to remember. Close the session. Open a new one, on any channel, and ask about it. That is the moment it clicks.
Sign up, copy your key, paste it in. Two minutes.
How it works
Without MemoryRouter:
You → dsh → Model → Response (gone when the session ends)
With MemoryRouter:
You → dsh (memories injected at agent/pre-step) → Model → Response (stored at turn/end)
The plugin hooks the harness core at two sanctioned extension points: the durable session/event stream for storage and the agent/pre-step waterfall for recall. It lives below every channel plugin, so memory works the same in the Web UI, IM gateways, ACP, and headless runs. Your model provider and inference stay exactly where they are. MemoryRouter only stores and retrieves memories.
Built the right way
Most memory bolt-ons store whatever flows through a chat channel. This one stores exactly what matters.
Noise-free by design
Only your words and the assistant's final reply are stored. Tool calls, tool results, reasoning blocks, system prompts, skill catalogs, and slash commands never make it into memory.
Never in the hot path
Storage is async fire-and-forget with one retry. Recall has a short timeout and degrades silently. Your harness is never blocked, slowed, or crashed by memory.
Channel-agnostic
A memory created in Telegram is recalled in the Web UI and vice versa. Zero channel-specific code, zero extra configuration.
Install in 2 minutes. 14-day free trial.
🔒 Your inference stays yours
MemoryRouter talks to two endpoints, ingest and prepare. Your model provider, your keys, and your inference stay in dsh.
🧠 Full-fidelity memory
Real conversations, not bullet-point summaries. 200M memory tokens a month, retrieved in a fraction of a second.
🎛️ Tunable
Density presets from low to xhigh, recall and store bounds, per-session or shared vaults, namespaces for multiple installs, subagent capture on demand.
Configuration
apiKey # Your mk_ memory key (or set MEMORYROUTER_API_KEY)
density # low / default / high / xhigh
vault # core (shared across sessions) or session
namespace # Share one key across several dsh installs
includeSubagents # Also remember subagent sessions
store / recall # Toggle each direction independently
enabled # Master switch
Start free. Then just $20/mo.
14-day free trial. Cancel anytime.
- ✓200M memory tokens / mo included
- ✓Unlimited memory contexts
- ✓Same memory in ChatGPT, Claude, Codex, OpenClaw, and dsh
- ✓Sub-50ms retrieval
- ✓Your keys, your data, your control
No inference markup, ever.
FAQ
Two things, every turn. After each completed turn it stores the clean user message and the assistant reply in your MemoryRouter vault. At the start of each new turn it pulls the most relevant memories from past conversations and injects them into the agent context. Your harness picks up where you left off, in any session, on any channel.
Yes. The plugin hooks the harness core, below every channel plugin, so it works identically everywhere. A memory created in a Telegram chat is recalled in the Web UI and vice versa, with zero channel-specific setup.
No. Only real human text and the assistant’s final visible reply are stored. Tool calls, tool results, thinking blocks, system prompts, skill catalogs, workspace instructions, slash commands, and channel envelopes are all filtered out. The stored memory is exactly what you said and what the assistant answered.
No. Storage is async fire-and-forget with one retry. Recall has a short timeout and degrades silently. Your harness never waits on us and never blocks on us.
Run dsh plugin --profile <your-profile> add dsh-memoryrouter, then add your memory key to the profile’s cordis.patch.yml (or export MEMORYROUTER_API_KEY). Restart the harness. That is the whole setup.
Yes. By default the plugin stores to your key’s core vault so every session can recall it. Set a namespace and vault: session if you want each install isolated instead.
Your plan includes 200M memory tokens every month. Full-fidelity memories, not bullet-point summaries, retrieved in a fraction of a second from cloud GPUs.
Set enabled: false in the plugin config to pause it instantly. Delete your vault anytime from the MemoryRouter dashboard. Your memory is yours.
Give your harness a memory tonight
14 days free. Two minutes to install. Tomorrow's first session already knows everything from today.