DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

dsh-preset-chat

Preset Chat

Chat mode Agent preset: persona, Q&A with image and document attachments, question clarification, web search, imagegen image generation, and context compression

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add dsh-preset-chat@0.12.14
READMECompatibilityVersions

Compatibility and provenance

Preset Chat is published as dsh-preset-chat and currently resolves to version 0.12.14. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
11/4/2026

Versions

0.12.14stable
10/17/2026
0.12.13stable
10/17/2026
0.12.12stable
10/17/2026
Show 1 more versionCollapse versions
0.12.11stable
10/17/2026

Related plugins

Loading related plugins…

Latest
0.12.14
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
112.3 kB
Files
13
Surface
web
License
MIT
Source
npm
Weekly downloads
68
View source ↗Project homepage ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in memory-context.

Experimental Session Search@deepseek-ai/dsh-experimental-session-searchGive Agents tools to search and read earlier sessions from the current workspace.Hindsight Coding Agents@vectorize-io/hindsight-coding-agentsReflect-only Hindsight long-term memory for coding agents (harness-pluggable: opencode, …), with automatic background ingestion (no setup CLI).Memory Plugin@openviking/dsh-memory-pluginOpenViking memory and context bundle for DeepSeek HarnessMnemondsh-mnemonComposable, view-based context for DeepSeek Harness. Pluggable sources and strategies, with layered memory and self-evolving skills out of the box.

README

dsh-preset-chat

中文 | English

A DeepSeek Harness agent preset bundle that adds Chat mode (聊天模式) — a pure-conversation preset sitting beside the built-in standard / ptc / minimal / cordis modes. DSH 0.2.1 image compatibility: generated results appear after the final answer as an independent Conversation node. Native image positions and the imagegen tool card share context-menu actions and session-wide arrow-key navigation. Native answer/tool renderers, durable messages, and project files remain unchanged.

What the preset provides

Declared in cordis.patch.yml as one @deepseek-ai/dsh-agent-preset row (config.id: chat, row id preset-chat):

PieceEffect
@deepseek-ai/dsh-personaFull English persona — an omnipotent, top-tier expert serving "your master"; clear natural answers in Simplified Chinese by default, Markdown, proactive search/clarify/imagegen habits (complete: true, no runtime-context block)
@deepseek-ai/dsh-tool-ask-userask_user_question — clarify ambiguous intent before answering
dsh-preset-chat/attachmentsread_uploaded_file — read uploaded text, PDF, DOCX and XLSX documents in this conversation
@deepseek-ai/dsh-tool-webweb_search + web_fetch (fetch enabled, 60s search timeout)
@deepseek-ai/dsh-compaction-basic + command-compactAuto context compaction, tool-result pruning, /compact

Profile-level capabilities stay available automatically (they are not preset-owned): imagegen (from dsh-codex) and the schedule_* reminder tools. Uploaded documents have a read-only tool; bash, arbitrary filesystem access, terminal, subagents, goal and plan-mode are not added.

Chat pins the project-file sandbox to read-only and rejects escalation, independently of other modes and the deployment's default permission. /permission reports this fixed policy and cannot make Chat writable. Leaving Chat restores that session's prior permission; other sessions, modes and global defaults are unchanged. Both the lock and the prior-permission record survive restart.

Chat omits the automatic current-working-directory context from model requests, including the final context refresh before sending. Backend directory tracking and file-policy enforcement remain active; other modes still receive their native directory context. Paths already present in conversation history or explicitly supplied by the user are not erased.

Chat's imagegen reuses the existing provider, model preferences and reference-image handling, but keeps generated images as conversation attachments without automatic workspace publication or an output_path parameter. Application data such as attachments, conversations and personas can still be saved. Other modes retain their existing image-output behavior.

In the full-size Chat preview, use Left/Right to browse the session’s uploaded and generated images in first-appearance order, including history that is not mounted on screen. Repeated attachment identities appear once; the preview shows position and stops at the ends. Escape closes the menu first, then the preview.

Generated images stay visible beneath the closing Chat reply even when the tool process is collapsed, including after reopening a conversation or restarting. The display reuses the existing attachments without adding messages or writing project files.

Right-click a Chat thumbnail or full-size preview to open it in a native image tab, add it to the composer, copy the image, download the original, or reveal the existing attachment in Finder. Adding to Chat never sends automatically. Finder uses the existing attachment path without making a copy. These manual actions preserve the model's read-only project permissions and support existing attachments.

Install

Plugin Manager → install bundle → dsh-preset-chat (npm), or point at a local tarball:

pnpm pack   # produces dsh-preset-chat-<version>.tgz

Then install the tarball via the Plugin Manager. Live profiles apply changes immediately; content updates require a Host restart.

Uploads and document questions

Use + → File, drag files into the composer, or paste an image. Send the attachments with your question. Uploads and attachment cards use Harness's existing UI and durable attachment storage. Images use the selected model's normal vision input; that model must support images.

The read_uploaded_file tool lists and reads documents actually sent in the current conversation, including after context compaction. Desktop-selected files arrive as explicit @path references and are also supported. It accepts a selected filename, attachment ID or explicitly selected path; unrelated local paths remain inaccessible. Supported documents: UTF-8/UTF-16 TXT, Markdown, CSV/TSV, JSON/JSONL, YAML, XML, HTML and logs; text-layer PDF; Word DOCX; Excel XLSX (sheet names, cell addresses and displayed/cached values, without executing formulas). Convert old DOC/XLS files first. Document text is reference material, not authority to change instructions.

Limits: 20 MiB per parsed document, 300 PDF pages, 2 million extracted characters, 100,000 populated spreadsheet cells and 1,000 columns. Each tool result returns up to 16,000 characters with next_offset for continuation. Parsing runs in a bounded worker with a 30-second timeout. Scanned PDF pages need OCR; embedded pictures and complex layout are not reconstructed by the document text reader.

Sub-personas

Write sub-personas in the same voice as the base prompt: “you” addresses the model, and “the user” names the person using it. The built-in Chinese prompts use “你” and “用户” accordingly. User-authored overrides remain unchanged across bundle updates.

The persona prefix ends with a template slot — …{{sub_persona}} — that the bundle's runtime row fills per session from a configured library. Two ways to choose, both outside the model's agency:

The picker — on the New Session screen, selecting Chat mode reveals a sub-persona dropdown on the same row as the workspace and preset pickers. It reuses the native menu components and current preset selection, and hides when another mode is selected. The selector does not require Developer Tools. The choice is saved as the default for new conversations. Inside a Chat conversation, a persona menu replaces the composer permission menu and chooses the next answer’s persona. Other modes keep their permission menu.

The slash command — runs without sending anything to the model:

/persona            # list available sub-personas and mark the current one
/persona 面试官      # switch (exact, case-insensitive, or unique substring)
/persona -          # back to the base persona

The new-conversation default and each conversation’s choice persist independently across restarts. Changes apply to the next answer; the running answer and its tool continuations retain their original persona. Two sessions can hold two different identities. Tools are untouched — identity is prompt engineering, not a capability the model decides to invoke.

Choose Manage personas… (管理人设…) from either persona menu to add, edit, rename or delete an identity. Renaming preserves selections. Deleting an identity resets defaults and conversations using it to the base persona for their next answer. Save failures remain visible; concurrent editors must reload instead of silently overwriting changes.

Built-in identities come from config.personas on the chat-personas row; UI overrides take precedence. The library and selections use atomic Harness storageDomain writes outside the installed package, so bundle updates retain them. The row is mounted at profile level and gated by config.presets (default: chat only). The picker is the bundle's Web half (lib/client.js, declared through dsh.client); it talks to the node half over the /api/chatPersonas/* Connection RPC channel.

Session choices use individual native storage records; saving a choice does not rewrite the whole session map. Legacy choices migrate on first load, with interrupted migrations safe to retry. Startup cleanup removes only choices whose sessions are absent from both live and durable native storage; archived sessions and read failures are retained. Deleted custom personas leave no tombstones; deleted built-ins retain their suppression markers. Menus refresh on open, window focus and successful edits, with bounded startup retries and no idle polling.

dsh.client.inject describes client-plugin graph edges, not every require. This bundle keeps the native empty graph declaration, uses Host-provided baseline modules for React/React DOM/primitives, and declares required Cordis services in its client export. Adding arbitrary import names as graph edges can change startup ordering.

Validation

Run npm ci and npm test from this repository. Tests use local React/jsdom dependencies and the installed Desktop runtime, including its built Conversation assembler; they do not depend on another source checkout. For another installation, set DSH_TEST_EXECUTABLE and DSH_TEST_RUNTIME. A missing Desktop runtime is reported explicitly.

Customize

Edit cordis.patch.yml (persona text, sub-persona library, tool list, order, description), repack, reinstall. The row id preset-chat is the Loader edit address; config.id: chat is the identifier saved into sessions.

Notes

  • lib/index.js registers the sub_persona prompt variable and the /persona command through a service-injected child of each agent context — agent.ctx.inject(['systemPrompt', 'commands'], …) — so both stay scoped to one agent. Reading a service the agent's factory context does not declare throws rather than yielding undefined, and optional chaining does not guard a throwing getter; 0.7.0 did exactly that and broke session creation and resume for every mode.
  • A prompt variable whose provider returns undefined fails the whole section, so a global fallback provider returning '' is registered alongside the scoped one.
  • Requires a DSH profile with the agent-preset system (@deepseek-ai/dsh-agent-preset).

License

MIT