A pouch of practical micro-plugins for DSH: per-turn wall-clock time injection, safe restart, session ID header badge, Tavily search provider, configurable LLM request-header routes, and an MCP server console managing the official @deepseek-ai/dsh-mcp-client at runtime — add/edit/enable/disable/reconnect, per-tool switches, live status over SSE, mcpServers JSON import, and auto-migration of profile-YAML MCP entries.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:moon16u/dsh-pouch
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
dsh-pouch
English | 中文
dsh-pouch is a pocket toolkit of practical, lightweight, and beautiful plugins designed for DeepSeek Harness (DSH).
It delivers out-of-the-box micro-extensions to enhance your daily workflow, interactive experience, and development productivity.
📦 Plugins Included
| Plugin | Type | Description |
|---|---|---|
@moon16u/dsh-plugin-restart |
Host / Web UI | Safe, detached DSH process restart commands (/restart, /dsh-restart) and agent tool (dsh_restart) with native Web UI candidate styling. |
@moon16u/dsh-plugin-current-time |
Host / Agent | Injects the host's real date, time, and timezone into agent context at the start of every turn, so a long-running session never reasons from a stale date. |
@moon16u/dsh-plugin-session-id |
Web UI | Displays a native-styled Session ID badge in the web session header with one-click clipboard copy. |
@moon16u/dsh-plugin-web-search-tavily |
Capability Seam | Real-time web search provider backed by the Tavily REST API, seamlessly integrating with DSH's ctx.web capability seam. |
@moon16u/dsh-plugin-llm-headers |
LLM Seam + Web UI | Provider routes whose request headers are yours to set from settings.yaml — including the User-Agent the harness reserves for itself: literals, ${env:NAME} interpolation, per-model overrides, null deletion, plus a visual Request Headers settings page. Wire up any of pi-ai's 37 built-in providers with headers only. |
@moon16u/dsh-plugin-mcp-console |
Web UI + Host | MCP server console in the settings page: runtime add/edit/enable/disable/reconnect/delete, per-tool switches, live status over SSE, and mcpServers JSON import. Zero MCP protocol code — everything rides the official @deepseek-ai/dsh-mcp-client. Profile-YAML MCP entries are auto-migrated into dynamic management on boot/refresh (and exportable back). |
🚀 Quick Start & Installation
Method 1: One-Command Installation via DSH CLI (Recommended ⭐️⭐️⭐️⭐️⭐️)
Run a single command in your terminal. DSH will automatically download, bundle-register, and mount all 6 pocket plugins (zero manual configuration):
# 1. Install the entire toolkit via npm (recommended)
dsh plugin --profile web add @moon16u/dsh-pouch
# Or install directly from GitHub
dsh plugin --profile web add https://github.com/moon16u/dsh-pouch.git
Method 2: Local Git Clone Installation
Clone the repository:
git clone https://github.com/moon16u/dsh-pouch.git ~/dsh-pouchAdd the bundle to your DSH profile:
dsh plugin --profile web add file:~/dsh-pouchDSH automatically detects
dsh.bundleand applies the built-incordis.patch.ymllayer without manual configuration file edits.
🛠️ Plugin Highlights
1. @moon16u/dsh-plugin-restart
- Problem: After editing plugins or configs, restarting DSH manually in an external terminal is tedious; killing the process directly inside an agent tool causes the session to freeze; stock commands in web chat lack native icons or localized names.
- Solution: Exposes
/restart(and backwards-compatible/dsh-restart) slash commands with native🔄 Restart restartslash candidate styling, plusdsh_restartagent tool. Spawns an asynchronous detached worker process that returns immediately and restarts cleanly after 3 seconds.
2. @moon16u/dsh-plugin-current-time
- Problem: A model has no clock. It infers "today" from whatever the harness injected once at startup, so a session left open across midnight keeps reasoning from yesterday's date — and nothing in the transcript contradicts it.
- Solution: Hooks
agent/pre-stepand appends one wall-clock reading after the prompt on the first step of every turn. Once per turn rather than per step, so a tool-call loop does not bury the transcript in near-identical timestamps.
3. @moon16u/dsh-plugin-session-id
- Problem: Retrieving the current session UUID for debugging or log tracking requires digging into URLs or console logs.
- Solution: Injects a clean capsule button displaying the Session ID in the web header utility bar with instant one-click clipboard copying.
4. @moon16u/dsh-plugin-web-search-tavily
- Problem: Built-in search engines may be restricted or lack high-quality synthesized web answers.
- Solution: Formally implements the
ctx.web.registerSearchProvidercontract. Automatically resolves API keys from theTAVILY_API_KEYenvironment variable or DSH Credentials service.
5. @moon16u/dsh-plugin-llm-headers
- Problem: DSH merges its own attribution
User-Agentinto every provider request last, and aheadersmap written intollm-pi-aicannot override that reserved name. Gateways that authenticate by client identity — Tencent CodeBuddy returns500 {"code":11128,"msg":"request illegal"}— are unreachable with configuration alone. - Solution: Declare routes in your own
llm-headerssettings section, still served by the officialPiAiAdapter; only the pi-ai provider is wrapped, so the configured headers get the final word before the socket. Ships with a Request Headers settings page (independent sidebar entry) — the stock provider cards expose no slot, and headers written intollm-pi-aiare stripped anyway. Wrapping the provider rather than the protocol object keeps pi-ai's own route implementations, so such routes wire up in a couple of lines. Routes without configured headers keep sending the DSH attribution unchanged, and deleting it is refused. - Version span: built for DSH
0.1.7-rc.2. The settings page reads the provider directory and writes settings over the rc.2 schema-driven settings surface — sections are discovered from each plugin'sexport const Configand GUI edits land as.volatile()hot-updates (no fiber restart), with this plugin re-registering adapters and routes onsettings/document-updated. Two host contracts it must honour: the provider profile is validated against a copy of the route, so thedeepFreezed section a settings provider hands out stays untouched; and the resolved profile carries themodelErrorsmapdsh-llm-pi-aireads inPiAiAdapter.modelOf.
6. @moon16u/dsh-plugin-mcp-console
- Problem: The official way to attach MCP servers is a static
cordis.patch.ymlentry — no GUI, no runtime changes, and every restart to apply an edit. Declared servers show up as untouchable read-only instances. - Solution: A full MCP servers settings section managing the official
@deepseek-ai/dsh-mcp-clientat runtime: one fiber per server via cordis dynamic assembly (hot edit, no DSH restart), master switches, per-tool enable/disable pills, live status + tool lists over SSE, and mcpServers JSON import. External agents writing MCP entries intocordis.patch.ymlare handled by an auto-ingest engine: on boot/refresh the entries are migrated into~/.dsh/dsh-mcp.json(fiber takeover included, YAML trimmed precisely), reversible viaPOST /export-yaml. Secrets stay masked in every API response.
🧪 Testing
This monorepo uses pnpm workspaces and Node.js native test runner for contract and smoke tests:
cd dsh-pouch
pnpm install
pnpm test
📄 License & Credits
- MIT License © 2026 moon16u
- Logo icon: Toolbox icon by Icons8.
Links
More in this category
Tencent/WeKnora#dsh-weknora★ 33047
Four read-only tools over a WeKnora knowledge base: list knowledge bases, hybrid passage search, reassemble one document's chunks in order, and WeKnora's own cited RAG or ReAct-agent answer with a resumable session id.
superdesigndev/treg★ 4972
Tool catalog for agents: search ~2,600 external endpoints (SEO and SERP, backlinks, social, people and company enrichment, ad libraries, scraping) by the task you want done, read each one's parameters and per-call price, then call it with the credential injected server-side. Ships the skill plus an MCP row that stays disabled until TREG_TOKEN is set.
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1136
Tencent CloudBase backend for DeepSeek Harness — scaffold and deploy full-stack apps from chat, render query results as table cards with paging, sorting and CSV export, preview a deployment on its domain, and call the CloudBase MCP toolset (`mcp__cloudbase__*`) with device-code login.
gitroomhq/postiz-agent#dsh-postiz★ 509
Connects DeepSeek Harness to Postiz over MCP: list connected social media channels, fetch per-platform posting rules, and schedule, draft, or publish posts to X, LinkedIn, Instagram, Facebook, Threads, TikTok, YouTube, Reddit, Bluesky, Mastodon, Discord, Slack, Telegram and more; adds a postiz workflow skill.
EthanYoQ/Invoice-Downloader#dsh-invoice-downloader★ 502
Local IMAP invoice download, OCR, archive, and Excel reimbursement summaries for DeepSeek Harness.
anysearch-team/anysearch-dsh★ 457
AnySearch-powered real-time web and vertical search provider for DeepSeek Harness.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.