Plugins
Browse, filter, and install DeepSeek-Harness plugins.
35 plugins found
dsh-plugin-memory
littleblacktong/dsh-plugin-memory
Long-term cross-session markdown memory with an LLM-Wiki structure and a SOUL.md persona, injected at session start (by default only after the first user message and only in the active session), plus remember/recall/consolidate/forget workflows, an embedded memory skill, pack/unpack migration tooling, and an idle-time first-person recall nudge that surfaces real memories in a companion voice. Also gives the store observability and upkeep it lacked: a per-file boot-block budget that keeps the index routing table from being truncated, automatic last_access stamping so salience decay actually works, a read-only memory health dashboard (size, freshness, lint-parity checks), a declarative index compiler (pages declare summary:, one command re-lines the index), an interactive memory graph (page links plus shared tags, draggable, wheel zoom), structured queries (tag/type/salience/hot/stale filters), cross-link suggestions for pages that have no relationship yet, and a `checkup` report that ends in a prioritised action list. The boot payload was also cut by ~23% by moving operational detail into the on-demand skill. Its settings section now carries its own navigation mark (a brain half wired to a node cluster, since the shell offers no icon slot to plugins) and a feedback entry that opens this repository. Requires DSH session format v4 (official DeepSeek Harness 0.1.7+): injected messages declare the producer-owned source kind plugin:memory. v0.11 added a bilingual settings panel whose copy and sidebar label follow DSH language setting (中文「记忆」/ English "Memory"); v0.12 added the shared cross-plugin speech floor, a context-sensitive tone section and a weekly growth recap; v0.13 declares its DSH compatibility via engines.dsh (official 0.2.1-rc.5 series; older hosts are refused by the gate), adds a "Review now" button (POST /api/memory/control, action growth-now) that sends one growth recap immediately while still respecting the speech floor, panel accessibility (aria labels, status and alert roles, focus-visible rings), and the public PROACTIVE-PROTOCOL.md. v0.14 adds per-session memory: a composer chip with a dropdown (this session / workspace default), the /memory on|off|status command, and a settings-panel switch all flip the same gate — off means no boot injection, no digest/recall nudges and no last_access stamping for that session (nothing is deleted); disabledWorkspaces lets whole projects default to off, and session choices persist for 7 days. v0.15 adds a Basic soul (quick forging) card: my name / what I call you / baseline persona, saved into a managed block inside SOUL.md (the rest of the file is left untouched) and marks BOOTSTRAP complete; existing chat-forged souls are echoed from the SOUL text, and the boot block now asks the agent to remind the user to forge first when no soul exists yet.
dsh-win-gitbash
buhuikongpan/dsh-win-gitbash
Git Bash shell tool for Windows: runs commands through the bash bundled with Git for Windows, with timeout, sandbox, output truncation, and background jobs, replacing the slow pwsh tool and the WSL-only bash tool.
dsh-capability-panel
pure-craft/dsh-capability-panel
Manage MCP servers, skills, and tools for your agent — true in-context state (loaded/truncated/evicted) and per-session switches.
dsh-token-saver
shaw529/dsh-token-saver
DeepSeek Harness plugin that aggressively saves tokens without affecting task quality: lossless head/tail truncation of tool results (default), grep-result folding, pressure-triggered dsh-compaction-basic delegation, and an LLM-summary CompactionEngine subclass for the aggressive mode. Saves 97.6% of input tokens on an 8-scenario synthetic suite, with all reductions routed through dsh event flow so model-visible = logged stays intact.
dsh-rollback
domitor-syh/dsh-rollback
TRAE-style conversation rollback — per-turn checkpoints (10-turn sliding window) roll back touched files and truncate model context in place, keeping the same session id. Human-initiated only: a /rollback command or a per-turn Web button (works on interrupted turns too), with a preview listing each affected file and its action — restore, recover, delete, or skip.
dsh-at-any
hatsuyuki0103/dsh-at-any
Codex-style `@file` mentions for the web GUI: search and reference workspace files of every format (.java, .vue, PDF, images, extension-less, hidden) with no index truncation. Replaces dsh-at-file.
dsh-message-rewind
xcube007/dsh-message-rewind
Adds edit and delete to your own message bubbles: editing truncates the following turns and resends the new text, deleting removes the message and those turns, and either can optionally roll back the recorded file changes of the removed turns (refusing when a file has changed since). The sidebar keeps a single conversation.
dsh-sidebar-mode
meredith2328/dsh-sidebar-mode
Preset-mode badge embedded in the "New Session" button: click to pick the default agent preset for the next session (long names truncate with ellipsis so the label stays readable).
dsh-continue-on-limit
qwert702/dsh-continue-on-limit
Auto-continue for the dsh web GUI: when a local model hits its output-token cap and the max-tokens notice appears, the plugin automatically queues a short continue message so the reply keeps flowing — dual-source truncation detection, loop protection, and no UI.
dsh-cache-precision
cheng-cheng9669/dsh-cache-precision
Renders the built-in cache-hit percentage with three decimals and widens the composer stats line to prevent truncation.
dsh-skill-doctor
shuxidemosheng/dsh-skill-doctor
Diagnoses why a skill is not picked up — truncated description, broken frontmatter, missing resource files — and checks installed plugins for conflicting loader entries. Keeps a per-profile record so every checkup is diffed against the previous one, groups repeated findings into one root cause, produces rewrite worksheets for oversized descriptions, and lists the plugin patches that touch the skill directory configuration.
dsh-virtual-person
yimengsuper2432/dsh-virtual-person
Persona and memory from a single AGENT.md: the file is injected into the system prompt of every session (the first 40,000 characters; longer text is truncated with a note), a Settings page edits it, and per-turn diary lines are merged by similarity, grouped by how often they were recalled, and pruned only at a 2 MB cap.
dsh-session-rescue
jayyuen666/dsh-session-rescue
Automatic recovery when a turn ends badly: resume after a transient failure, continue after output truncation, re-run after an unfinished todo list, plus a request-level 429 backstop and a client dock with edit-resend, manual retry and stop-and-re-ask.
dsh-rollback
zhaozew/dsh-rollback
TRAE-style conversation rollback rebuilt for DSH 0.1.7-rc.2: per-turn file checkpoints restore touched files and truncate the model context in place under the same session id. Adds a /rollback doctor framework-contract self-check, an affected-file diff preview computed against the current on-disk state so it stays correct after a restart, a one-click undo-last action with a Ctrl+Shift+Z shortcut, a setting for whether rolled-back messages stay hidden, and English UI text.
dsh-shell-card-plus
antnesswcm/dsh-shell-card-plus
Replaces the stock bash/pwsh terminal rows in the DSH web UI with shell command cards: long commands soft-wrap with line numbers instead of truncating, plus separate copy-command and copy-output buttons.
dsh-wide-stats-footer
thomasvvugt/dsh-wide-stats-footer
Un-clamps the composer stats footer: long turn and token stats lines span the full composer width instead of truncating with an ellipsis.
dsh-auto-continue
vergilye/dsh-auto-continue
Keeps a turn from closing on an unfinished reply: a stream guard turns silent truncation into an in-step retry, and a completion protocol asks the model to declare how each turn ended.
dsh-relaycheck
yanyuncy/dsh-relaycheck
Adds a relay_check tool that runs relaycheck against an LLM API relay to detect model swaps, misreported usage, truncated context and injected prompts; keys are read from environment variables.
dsh-Session-Turncate
l7x6899/dsh-session-turncate
Idle-time context truncation for a single DeepSeek Harness session. After a configurable number of idle hours the older conversation is dropped without a summary, so one long-lived session cannot leak one task into the next; it ships a per-session toggle, a tab next to the chat, and a /truncate command that IM bridges can drive.
dsh-local-trim
leonlee114514/dsh-local-trim
One-step local model onboarding plus a light harness for DSH. On load it probes loopback and private-network inference endpoints (llama.cpp, Ollama, vLLM, LM Studio), reads each model's context window and output budget from the backend, and registers the provider through settings, so a local model becomes selectable without hand-writing config. It then trims only that provider: masks the tool list through tools.restrict, drops named system-prompt sections and memory contexts, swaps the injected instruction block for a short one while preserving its first 80 and last 96 characters, and truncates tool-schema descriptions without touching structure or required fields. Cloud providers are returned as the same assembly object, untouched. The injected block is re-read from disk on every assembly, so editing the file takes effect on the next request with no reload. The panel in the plugin detail page is a live operations view: it shows whether the takeover is active and by which hook, how many characters the last assembly was trimmed from and to, and which providers are online (probed concurrently, with a real one-shot completion reporting latency and reply text per provider). If a local backend is not running, the panel offers a one-click launch: it probes the port first (never starting a duplicate), then starts the matching server (ollama serve, or a custom command you supply) detached and polls until the endpoint answers, clamping the wait to 3-600 seconds, reaping the child it just spawned if it never answers, and naming the paths it searched when it cannot find the binary. A stop button kills backends this plugin started (SIGTERM, then SIGKILL) and refuses to touch a server somebody else launched. When a model has just been downloaded and no backend exists yet, the panel can also scan the machine for .gguf files with hard caps (300 models, 20000 directory entries, Downloads only one level deep), start llama-server on the chosen one (skipping the .mmproj. vision projection and reusing a server that already answers), register the provider under the model id the backend reports, and run one real completion to prove it works. Before spawning anything it does a fit check that counts only the part of the file the GPU cannot hold: hostBytes = fileSize - VRAM, compared against max(total RAM - 2GB, free RAM). A file far larger than RAM is refused outright; a heavy host-side remainder is refused unless you confirm; the same remainder under mmap is only a warning, because the weights land in reclaimable page cache. A load-mode selector (auto / mmap / none / mlock / mmap+mlock) maps to llama.cpp --load-mode, and the default is whatever the engine picks. From 0.4.2 everything above is derived from the platform instead of assumed: home and data directories come from os.homedir() and the OS conventions (LOCALAPPDATA on Windows, ~/Library/Application Support on macOS, XDG_DATA_HOME elsewhere); backend binaries are looked up in the official install locations of each OS and can be pinned with OLLAMA_BIN, LLAMA_SERVER_BIN, VLLM_BIN or LMSTUDIO_BIN; model discovery walks DSH_LOCAL_MODELS_DIR, ~/models, ~/llama.cpp/models, ~/.cache/llama.cpp and the LM Studio data directory, with the WorkBuddy layout demoted to one candidate among them. VRAM is asked from nvidia-smi, then rocm-smi, then sysctl hw.memsize on Apple Silicon (flagged unified, so the same bytes are not charged twice), and any flip to a unified-memory budget is handled explicitly. Before building a command line the plugin runs llama-server --help once and keeps only the flags that build actually has, so older engines get --n-gpu-layers 99 and no KV quantization while newer ones get auto plus q8_0; anything it cannot probe is passed through rather than dropped. LM Studio is started with lms server start --port N rather than being lumped in with the engines that need a model argument, and vLLM gets its own --model example instead of llama.cpp syntax. Windows, macOS and Linux are all exercised in CI, including a windows-latest and a macos-latest job, because a cross-platform claim that has only ever run on one OS is not a claim. Two of those suites exist specifically to catch this machine's blind spots: one replays the whole suite with process.platform rewritten to each OS, and one deletes every advantage this development box has — no nvidia-smi, no rocm-smi, no sysctl, an empty PATH, a home directory with no models — and requires graceful degradation rather than a crash. That last one caught a real class of bug: several assertions hardcoded 'lms.exe', which cannot pass where the executable has no suffix. Measured on the reference machine: a 16.9GB 27.2B MoE with 14.5GB of VRAM holds a 285-691MB working set and sustains 76 tok/s after a 1000-2000 token warm-up, so file size alone is not a fit signal. From 0.4.3 the scanned models are shown as a table rather than a dropdown (one row per gguf, with its size and any fit warning), so you can see what is on disk before choosing. From 0.4.4 the delete button on the provider table removes the provider entry, not the weights file on disk. That distinction matters: what people actually want to clear out is the dead entry - one pointing at a port that never answered, one registered twice for the same port, one whose model file was deleted long ago - not a 15.8GB gguf. Deleting a config is undone by importing again; deleting a gguf is not. The removal goes through settings.mutate with an unset op on \['providers', id], because update merges layers: writing null there leaves a null provider key that the loader reads as a broken config rather than an absent entry, and only mutate/unset is implemented as Reflect.deleteProperty. The result is read back afterwards, because unset on a key that comes from a lower layer (the profile cordis.patch.yml or a home patch) does not delete it - it restores the inherited value, so the call succeeds while the entry stays. When the entry is still there the panel says so and points at the file to edit instead of reporting success, and a DSH whose settings service predates mutate() is told plainly rather than silently ignored. Deleting takes two clicks and clearing the confirmation is as easy as clicking another row; on success the online and baseURL caches are cleared and the tool surface is recomputed, since the provider list changed. The gguf itself is never touched by this plugin - the scanned-model table is display and selection only.VRAM reporting is driver-dependent. From 0.4.5 model discovery also reads Ollama's own storage: its blobs are named sha256-… with no extension, so extension matching could never list them. Weights are now accepted by extension OR by GGUF magic header (only dot-free files of at least 8MB, capped at 600 header reads per scan; obviously-not-weights extensions like .json/.md/.safetensors/.part are never opened). Ollama models are resolved from their manifests: the model layer is picked by mediaType application/vnd.ollama.image.model (never adapter/mmproj layers), the human-readable name is restored from the manifest path (…/qwen3/8b becomes qwen3:8b, …/latest stays bare), tags sharing one blob merge into a single row, and the metadata kv supplies name, quantization and context length. Adopting an Ollama model does not start a duplicate llama-server over the same weights: it confirms ollama serve answers on 11434 (launching it if not) and registers the provider under the tag the endpoint itself reports — the blob's sha256 name would never match anything, since 11434 lists qwen3:14b, not sha256-a8cc…. Two real-machine-only traps fixed on the way: existsSync('<file>/') returns true on Windows, so manifest-vs-directory branching now goes by parseable content instead of trailing-slash semantics; and the quantization label table had been copied from a stale ggml enum generation, labelling ggml_type 15 as Q5_K_S while ollama show reports Q4_K_M. Same-blob dedup is by (dev,ino), keeping whichever entry has a name. Verified on the reference machine: the scan goes from 1 row to 4 — qwen3:14b (8.64G) and qwen3:8b (4.87G) now appear with Q4_K_M badges — in 4ms; npm run verify exits 0 (launcher 57, portable 35, panel-host green including the linux/darwin simulated-platform runs); the new panel-host suite builds a real miniature Ollama store in tmpdir and points OLLAMA_MODELS at it, so results no longer depend on whether the test machine happens to have Ollama installed. From 0.4.6 the panel shows each model its real name instead of its file name, because some download tooling stores every weight under one generic file name, leaving the real name only inside the GGUF header. The scan now reads each file GGUF KV section - not a fixed-size head buffer, because tokenizer.ggml.tokens (hundreds of thousands of strings on a large MoE model) and the chat template push general.file_type past any window; and GGUF string arrays are interleaved (u64 length plus payload per element), so treating them as a length table walks the cursor off the rails and produces astronomically large reads. Reading and skipping are accounted separately: key names and types are always read, string values over 256KB and string arrays are only walked past without copying, non-string arrays over 64 elements are skipped outright, and a cursor past the file size stops the read, because an out-of-range position means the cursor is wrong rather than that a limit should be raised. The displayed name goes Ollama tag, then general.basename plus size_label, then general.name, then the file name, with the full string kept for the hover text since it usually carries internal build numbers; mmproj files are now identified by general.type as well as by name. A short read (truncated file) no longer feeds half a value into the parser. On the reference machine, reading one file header parses 44 keys in about 16ms, and a whole scan takes about 31ms. From 0.4.7 the smoke test no longer fails the first time and passes the second. The old code gave both request attempts one shared AbortController and one shared 30-second timer, so the total budget covered both rounds: a cold load of a large model burned it in round one, the abort left the signal permanently aborted, and the second round (the Ollama-style reasoning_effort: none retry) could not even be sent - which is exactly why the first click returned This operation was aborted and the second succeeded. Now each attempt gets its own controller and timer, a timeout retries once automatically (retryOnTimeout, on by default) because a first-request timeout almost always means the weights are still being read from disk, and non-timeout errors (refused connection, HTTP error) are not retried at all. Timeouts report themselves: the message says the wait exceeded smokeTimeout, whether a retry already happened, and points at the new smokeTimeout setting (seconds, default 60, clamped to 5-600) - port responding is not the same as tokens coming out, so it is a separate knob from launchTimeout. Unrelated: an example naming one specific model was dropped from the panel copy, since not every machine has that model downloaded, and the explanation now describes the mechanism instead.
dsh-auto-title
sumingwang233/dsh-auto-title
Automatic session titles for DSH: names a session from its first prompt plus the first assistant reply ("project|task") instead of truncating the prompt. Replaces the built-in session-title provider through a bundle patch, adds an "AI rename" entry to the session row menu with a preview dialog, and a settings page for the provider/model, the naming rules and a diagnostic event log. 49 unit tests.
dsh-capability-panel
yezack/dsh-capability-panel
Manage MCP servers, skills, and tools for your DeepSeek Harness agent — true in-context state (loaded/truncated/evicted) and per-session switches for every capability.
dsh-skills-hub
xiatian-wuhan/dsh-skills-hub
Shows what each installed skill costs in the model context and hides a skill from the catalog without deleting it. Lists every skill found on disk with the exact catalog line the model receives (description normalized and truncated at the catalog cap), its body size and token estimate; previews the catalog message byte-for-byte as the agent will receive it, compares that with the copy already published in the current session, and reports skills on disk that never reach the catalog (invalid frontmatter, or shadowed by a higher-priority root). Hiding writes disable-model-invocation into frontmatter and keeps the file, so the skill still works via /name. Also imports skills from ClawHub, Skills.sh and GitHub URLs and uninstalls user-owned ones.
dsh-qzone-echo
nineoooo/dsh-qzone-echo
Archives the QQ Zone posts you published yourself into a local library, auto-sorted into three columns — thoughts, dreams and reviews (book/film recommendations) — all three of which can be corrected by hand, one column at a time, and undoing a correction never disturbs the other two. Ships a private web viewer that can be locked with a password, repairs long posts that the upstream API truncates to its first ~500 characters, counts words by year and month, and backs up attached images for offline reading. The cookie is stored on the local machine only.