Model-autonomous context compaction for DeepSeek Harness: a mind_map tool surveys the agent context surface (stable seq ids, roles, token weights, clear-boundary markers, the clear-mind playbook), a clear_mind tool replaces a chosen conversation-history span with a model-written checkpoint through the native compaction transaction, call and result pairs self-collapse into one-line tombstones, and a proactive reminder nudges the model when the context grows long or a turn runs too many steps.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-clear-mind
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:john-walks-slow/dsh-clear-mind
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
A DeepSeek Harness (cordis) plugin for model-autonomous context compaction: when failed exploration and large outputs drag the context down, the model calls clear_mind to "clear its mind" — replacing a span of conversation history with a checkpoint it wrote itself, keeping only the notes and freeing attention and token budget. The human-side history is never touched: every clear renders in the GUI as an expandable compaction row.

What the model sees
mind_map surveys the model's own context surface: every message with its stable seq id, role, token weight, and a one-line preview, grouped by turn; ▸ marks a valid range start, ◂ a valid range end, ◆ a prior checkpoint, and the result carries the clear-mind playbook (when to clear, how to pick a range, how to write the notes, the pre-commit self-check):
Mind surface: 31 nodes, ~41.2k tokens; request pressure ~41.2k tokens.
Seqs are ids in surface order (the list is NOT numeric-sorted after any clear/compaction) — use them as identities, not as an interval.
Range boundaries are marked ▸ (may start a clear) and ◂ (may end a clear); ◆ marks a prior checkpoint. Latest clearable end: seq 24.
turn 1 · seqs 1-10 · 10 nodes · ~15.3k tok — help me debug the plugin build error
▸ 1 ◆user 1.20k "help me debug the plugin build error"
2 assistant 340 "Let me look at the tsc output first."
4 tool 4.90k "bash · npm run build"
8 ◂ assistant 260 "Build passes. Summary: the include array missed the scripts directory."
turn 2 · seqs 11-24 · 14 nodes · ~18.9k tok — still failing, try a different bundler
▸ 11 user 900 "still failing, try a different bundler"
24 ◂ assistant 350 "The client bundle loads fine now, issue resolved."
— clear-mind playbook —
Range choice: clear "completed old phases" or "collapsible side branches"; keep at least the last 1-2 turns verbatim……
Pre-commit self-check: is every open requirement captured? Are paths/ids/numbers you'll need verbatim?……
clear_mind(start, end, notes) replaces the [start..end] span with a checkpoint the model distills itself, through the platform's native compaction transaction (start → summary → replace → end) so the GUI, the token meter, and later auto-compactions all understand it; failure paths are fail-closed and never leave an unclosed transaction:
Cleared 24 messages (~34.2k tokens) into checkpoint seq 25. Surface: ~41.2k → ~9.6k tokens.
Your clear_mind call and this result fold into a one-line tombstone at the next step boundary;
the checkpoint now stands for the cleared span. Reorient briefly (goal, constraints, next step), then continue.
At the next step boundary the call and its result fold into a one-line tombstone; in the GUI the checkpoint renders as a native compaction row ("compacted N history items", notes expandable).
Proactive reminder: when the context grows long or a single turn runs too many steps, the plugin folds a <system-reminder> into the next step boundary nudging the model to clear proactively (thresholds and cooldown under Configuration):
<system-reminder>
[Context / Step Alert] 当前会话已达到主动清理检查点:
- 原因:上下文已占模型窗口的 71%(95200/128000 tokens,阈值 70%)
- 建议:长上下文或单轮过多 Step 容易累积过时试错过程与冗余工具输出,分散注意力并增加推理成本。
- 行动指引:先调用 mind_map 审视当前上下文表面,然后将已完成阶段/可收敛支线通过 clear_mind 压缩为检查点,剔除噪音留下有用信息。若手头工作尚未完成,先把这一阶段的工作做完再清理即可。
</system-reminder>
(The reminder text the model receives is bilingual as shown above.)
Behavior rules
- Root agents only:
mind_map/clear_mindare registered exclusively on root agents; subagents keep the platform's automatic compaction and can never rewrite their own history. - Seqs are identities, not numbers: after a replace the surface's seqs are non-monotonic and the map header says so; commit re-validates every boundary, and
start/endalso accept thefirst/latestsentinels. - Multi-segment clearing: disjoint ranges take one
clear_mindcall each — every segment is validated and checkpointed independently. - Self-collapse: committed
clear_mindand consumedmind_mapcall/result pairs fold into a one-line tombstone at the next step boundary (compaction/prune + user/message replace, the shadow-price protocol) — no dead weight left behind. - Shadow-price protocol: every replace is immediately followed by a
compaction/summarycarrying the exact shadowedRange/shadowedSeqs/shadowedTokenCount, isomorphic to the platform compaction engine and safe for token-meter replay. - Guardrails against degenerate calls: tiny clears below
minClearTokensand notes that are too short or too long are rejected with an actionable error. - The human-side log is untouched: the append-only log is the single source of truth; clears are expressed through platform transaction vocabulary, the GUI keeps the original text, and everything stays auditable and revertible (dsh-rewind).
Configuration (optional)
- id: clear-mind
name: dsh-clear-mind
config:
minClearTokens: 1000 # minimum clearable size (heuristic tokens), blocks trivial clears
minNotesChars: 200 # checkpoint notes minimum length
maxNotesChars: 16000 # checkpoint notes maximum length
selfCollapse: true # auto-fold clear_mind / mind_map call+result pairs
reminderEnabled: true # proactive reminder toggle
reminderThresholdRatio: 0.70 # context-to-window ratio threshold (0.01~1)
reminderThresholdTokens: 0 # absolute token threshold (0 = ratio only)
reminderThresholdSteps: 100 # steps per turn threshold
reminderStepInterval: 25 # minimum step gap between reminders in one turn
The web frontend exposes every knob on its settings page (namespace clear-mind); saving hot-applies without a restart. On headless profiles without a settings service the plugin degrades gracefully to config-file-only. A reminder also requires the token count to have grown since the last one — a steady conversation is never nagged twice.
Install
dsh plugin --profile web add dsh-clear-mind
No manual configuration needed after install — the bundled cordis.patch.yml mounts automatically, and the model gets both tools after restarting dsh; every option has a sensible default.
Install straight from GitHub (source install; pnpm ≥10 requires allowing the build script):
dsh plugin --profile web add github:john-walks-slow/dsh-clear-mind
# The first add is blocked by pnpm: add the package name pnpm prints to
# allowBuilds in ~/.dsh/profiles/web/pnpm-workspace.yaml, then re-run
Permissions & compatibility
- Zero network, zero external services: makes no network requests and performs no filesystem writes; it only rewrites the session surface through the platform's compaction transaction vocabulary
- Dependencies:
@deepseek-ai/cordis4.0.2 /@deepseek-ai/dsh-session·dsh-llm·dsh-compaction·dsh-tools0.1.2-rc.1 (aligned with dsh 0.1.2-rc.1 locked versions), Node ≥ 22.5 - Platform requirements: binds the platform
ctx.tokenMeter(MeterPort); tool registration relies onctx.agents.roots(); the settings page is an optional enhancement (degrades automatically without a settings service) - Subagents unaffected: subagents keep the platform's automatic compaction — zero behavior change
- Coexists with auto-compaction: the plugin offers a semantically controlled manual exit before the platform's autocompact kicks in; the two do not conflict
Local development
npm install
npm run check # tsc --noEmit (src+test)
npm run build # outputs dist/src/ + lib/client.js (web settings page)
npm test # tsc(incl. test) + node --test dist/test/*.test.js, 47 cases
Unit tests run against a heuristic meter copy and real Session construction (including full-log shadow-price assertions); at runtime the platform ctx.tokenMeter is bound.
- Platform contracts and development discipline: see
AGENTS.md; research/plan/review docs: seedocs/features/
Release a new version
One command runs tests, bumps the version and packs (npm version also commits and tags):
npm run release # patch; for bigger changes: npm version minor or major
Then publish with the fingerprint flow and push:
node ~/.agents/skills/npm-publish/scripts/publish-webauthn.cjs /tmp/dsh-clear-mind-<newver>.tgz
git push --follow-tags
Verify with npm view dsh-clear-mind version. When releasing several packages, check "do not challenge for the next 5 minutes" on the webauthn page to publish them all with one fingerprint.
Links
More in this category
volcengine/OpenViking#examples/dsh-memory-plugin★ 38104
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.
vectorize-io/hindsight#coding-agents★ 23965
Hindsight, agent memory that learns: long-term project memory with auto recall and retain, knowledge pages, deep reflection, and per-repo memory banks.
agentscope-ai/ReMe#dsh★ 3489
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★ 2626
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★ 871
Reads the session files twenty-two 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★ 626
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.