deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
English | 中文
Task-isolated long-term memory for DeepSeek Harness.
Memories live in per-task vaults under ~/.dsh/storages/task-memory/. Facts stored for one task are invisible to another unless you deliberately switch.
Catalog: dsh.pub/en/plugins/dsh-task-memory
Most DSH memory plugins are global or workspace-wide. This one treats task as the isolation boundary:
cwdmemory_bind_task rebinds the current session to a named vault# Install into the web profile (pin a full commit SHA for production)
dsh plugin --profile web add "github:wangyihao0001-oss/dsh-task-memory"
# Or via the catalog CLI
npx dshpub add wangyihao0001-oss/dsh-task-memory --profile web
Restart the web UI (or reboot the profile), then in a session:
memory_bind_task — e.g. taskId: "my-app" (optional title)memory_remember — key: "stack", content: "Node 22 + Postgres", optionally pinned: truememory_recall / memory_search — read back within the same taskmemory_current_task — confirm which vault this session is on| Tool | Purpose |
|---|---|
memory_bind_task |
Bind this session to a task vault |
memory_current_task |
Show the session's current vault (binding or default) |
memory_remember |
Upsert a fact by key (optional tags / pin / task override) |
memory_recall |
Exact-key read |
memory_search |
Keyword search (EN + 中文 bigrams); empty query lists recent/pinned |
memory_forget |
Delete one key |
memory_list_tasks |
List vaults |
memory_clear_task |
Wipe one vault (confirm: true required) |
Never store secrets in memory entries.
# Install
dsh plugin --profile web add "github:wangyihao0001-oss/dsh-task-memory#<40-char-sha>"
# Confirm the bundle layer is present
dsh --profile web --dump-config
# Remove from the profile when done
dsh plugin --profile web remove dsh-task-memory
After install or remove, restart dsh web (or reboot the profile) so the Cordis layer reloads.
Vault files under ~/.dsh/storages/task-memory/ are not deleted on uninstall — back up or delete them yourself if needed.
npm install
npm run build
npm test # node:test unit tests
npm run smoke # build + smoke
Link a checkout while developing:
dsh plugin --profile web add "$(pwd)"
If you run DSH from a source checkout:
pnpm dsh web --patch /absolute/path/to/dsh-task-memory/cordis.dev.yml
Update the absolute path in cordis.dev.yml so it points at this checkout’s built lib/index.js.
cordis.patch.yml defaults:
injectLimit: 8 # max memories in prompt context
injectMaxChars: 2400 # soft char budget for the injected block
injectMaxEntryChars: 400 # per-entry char cap in the injected block (truncated)
injectPrompt: true # inject pinned/recent facts for the active task
maxEntries: 500 # vault cap (>= 1); oldest non-pinned entries are evicted first
# (pinned are never evicted; new keys over the cap are rejected;
# upserts of existing keys are not blocked by capacity)
Optional storageRoot overrides ~/.dsh/storages/task-memory.
~/.dsh/storages/task-memory/
<task-id>.json
Each file:
{
"taskId": "<task-id>",
"title": "<title>",
"updatedAt": 0,
"entries": [
{
"id": "m_…",
"key": "<key>",
"content": "…",
"tags": [],
"pinned": true,
"createdAt": 0,
"updatedAt": 0
}
]
}
memory_bind_task title updates, save, and update) are serialized in-process (per-task lock); concurrent agents cannot lose updates. Prefer update over load → mutate → save for read-modify-write*.tmp files from crashed writes are cleaned up (only those older than 1h, so another process's live write is never touched)When injectPrompt is true, the plugin injects a short memory block into the current agent session's system prompt:
injectLimit / char budgetsTools remain available for explicit recall/search beyond what fits in the prompt.
>= 20package.json (@deepseek-ai/dsh-* / cordis / schemastery)dsh.bundle.patch → cordis.patch.ymlweb (or any profile that loads Host tools)MIT — see LICENSE.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。