DeepSeek Harness Configuration Guide: Profiles, Patches & Agent Presets (2026)

Mastering DeepSeek Harness (dsh) configuration: bundles, profile switching, cordis.patch.yml overrides, and custom agent preset definitions.

Last updated: 2026-09-22

Everything is a plugin tree

A running dsh is not a binary with features bolted on. It is a plugin tree — a Cordis plugin system assembled at startup from layers of configuration. Every capability (tools, model adapters, storage, sandboxes, the UI, the main loop) is a plugin in that tree, and the configuration layers decide which plugins exist, in which order.

That is the whole mental model. The rest of this guide unpacks the layers.

The layers, from base to top

Configuration stacks in a fixed order, and upper layers override lower ones:

┌─────────────────────────────┐
│  patches      (your overrides)   ← wins
├─────────────────────────────┤
│  profiles     (your named assemblies)
├─────────────────────────────┤
│  bundles      (official plugin sets)
└─────────────────────────────┘
  • Bundles — official sets of plugins shipped together. The default experience you get on first launch is a bundle.
  • Profiles — named assemblies on your machine. A profile says "load these bundles and plugins, with these settings". You can keep several and switch between them.
  • Patches — your own override layer. A patch can target any single plugin entry and replace it, without touching the profile it came from.

Because every layer is just configuration, sharing a setup is sharing the files. Copying a profile or patch is how someone hands you "their dsh".

The patch layer: a dressing system for your agent

The built-in patch layer is the part that feels least like other agents. Think of it as a dressing system — you decide what capabilities the agent wears, and under what conditions:

  • Mount local agents as sub-agents. Your machine's Codex and Claude Code can be registered as sub-agents the harness delegates to, rather than competitors it replaces.
  • Wire in capabilities. Install plugins that add tools, integrate external services, adjust run permissions, or turn on full-text search.
  • Replace the UI. Interface modules are plugins too — skins, panels and even whole UI components can be swapped through a patch.
  • Make rules conditional. Rules are JavaScript expressions, so a capability can apply only where you want it: a specific repo, a file type, a time of day.

The patch targets a single plugin entry, so each of these is an override you can add, inspect and remove without touching the profile below it.

Why "installing a plugin" is a config edit

There is no central package manager in the "install and forget" sense. Installing a plugin means adding an entry to your profile or patch layer; the plugin repository's README documents the exact line. On next start the plugin joins the tree; on removal, everything it registered is revoked — registration must be a reversible side effect, which is why a bad plugin can't leave residue behind (see the plugin development guide).

The built-in plugin manager, and what it does not do

The 0.1.6 alpha line (alpha.2, published 2026-09-17) adds a plugin management page inside dsh: install a plugin, edit its configuration, and enable or disable plugins at runtime — no restart needed for that toggle. The same release moved plugin dependency resolution to runtime resolution and supports runtime unloading, and the release notes explicitly ask plugin authors to re-check their load and unload logic. Stable (latest on npm) is still 0.1.5-rc.2, so if you do not see the page, you are not on the alpha channel.

Two things worth separating before you rely on it:

  • The built-in page manages what you already have installed — the plugin set in the profile you are running, and each plugin's options. That is exactly the layer this page has been describing: it is a friendlier front end for the same profile and patch state.
  • It does not answer what to install. There is no ranking across the ecosystem, no per-scenario grouping, no "who else uses this with that" — and that question is what this directory is for. Start at Explore Collections or Top 10 Best Plugins, copy the install command, and let the built-in page handle the on/off and options afterwards.

One consequence of runtime resolution: a plugin that loads fine today can fail after a harness update if its author has not adapted yet. If that happens, Troubleshooting §8 covers pinning the version and rolling back.

Where dsh puts things on disk

Because an "install" is a config edit, almost nothing gets copied into a hidden system folder. What an install really does is write a dependency entry into a profile — and each profile is a plain directory you can open, read and back up:

WhatLocation
Profiles — the install records (dependency entries)~/.dsh/profiles/<name> (Windows: %USERPROFILE%\.dsh\profiles\<name>)
Find your active profile pathdsh plugin --profile web list prints the entries and the profile directory (PRIVATE)
Patch overlay.dsh/cordis.patch.yml per project, or ~/.dsh/cordis.patch.yml globally
Skills.dsh/skills/<name>/ inside the project
Hand-added pluginsplain folders inside your project, referenced by their profile entry
Sessions, keys, plugin data~/.dsh/ (e.g. a memory plugin's database under ~/.dsh/memory/)
The dsh program itselfyour npm global prefix (npm install -g @deepseek-ai/dsh) — not under ~/.dsh

Two habits follow from this layout. When a plugin "isn't there", list the profile before you go digging through the filesystem: dsh plugin --profile web list shows exactly which dependency entries the profile has and which directory it read them from. And backing up — or handing someone — an environment means copying files: a profile directory plus a patch file is the whole setup. The same paths are what you remove for a clean slate (see uninstalling plugins & wiping ~/.dsh).

Agent presets: the shape of one session

The mode selector at the top of the UI picks an Agent Preset — a complete definition of the agent in this session:

  • which tools it has,
  • its system prompt,
  • which skills are loaded,
  • its sub-agent and workflow setup.

A preset is not a plugin list plus a prompt; it is the whole contract the session runs under. That's why a session locks its preset once it has content — switching mid-session would make the tool calls already in history uninterpretable.

The four built-in presets:

PresetToolsBest for
StandardThe complete assistant: understands the task, edits code, runs commands, checks the resultsEveryday coding and research
PTCEverything Standard has, plus programmatic tool calling: TypeScript programs that compose many stepsBulk mechanical steps, cheaper context
MinimalA persistent terminal and basic text-replacement tools onlySimple edits, benchmarks, teaching
CreationEverything Standard has, plus runtime inspection, trying plugins and building presetsDesigning your own presets

Making your own preset

The Creation mode is the sanctioned way to design a new preset: describe what you want ("a read-only code reviewer that never edits files and answers in Chinese"), and the harness inspects the live runtime, experiments with plugins in memory, drafts the config, mounts it and saves it for reuse.

Want the hands-on version? The frame-verified walkthrough Custom DeepSeek Harness agent presets runs the whole flow — from Creator mode to a saved, working preset — with screenshots at every step.

Two cautions from the docs worth repeating:

  • Creation mode executes model-written code against the runtime — trust it like shell access.
  • Presets are config, so review what it saved before making it your default.

When to stop configuring

The pleasant default is: run Standard, change almost nothing. Reach for profiles and patches when you repeat the same setup (a team shares one profile), when you want a fixed toolbox for one job, or when you want to swap one component (a different model adapter, a stricter approval policy). The upper layers exist so you can override one thing without forking everything.

Keep exploring

DSH Plugins is an independent community directory of DeepSeek Harness plugins. Not affiliated with or endorsed by DeepSeek. Third-party plugins are not security-audited — review the source before installing.

New DeepSeek Harness plugins, weekly. No spam.