Preface

DeepSeek Harness (dsh) splits the agent runtime into pluggable capabilities: models, tools, sessions, sandboxes, and interfaces are all plugins. The official repository describes this as “Everything is a Plugin”, managed and combined by Cordis. Subagents follow this same pattern: the parent agent passes a self-contained task to a subagent, which runs in its own context before returning the result.

The official built-in tool-subagent uses the spawn path, with the model-facing tool name being subagent. It can delegate tasks, but only has one default behavior: model, persona, tool filtering, and background policies all follow the current deployment. In actual usage, another common requirement arises: using a fast model for research, a stricter persona model for code changes, and narrowing tool permissions for certain tasks. If each policy were made into a new tool, the model’s tool list would grow longer and risk conflicting with official tools.

dsh-plugin-yet-another-subagent takes a different approach: it still exposes only one subagent tool, using a profile parameter to select configurations. The community plugin catalog categorizes it under “Interface Enhancements”, maintained by HuanLinOTO. This article is written based on cross-verified content from the catalog page, GitHub repository, and npm package, and does not treat the community directory as an official app store for DeepSeek / HyperGAI.

What is it

dsh-plugin-yet-another-subagent is a community plugin for DeepSeek Harness. The npm package name is @huanlin/dsh-plugin-yet-another-subagent, and the plugin ID is yet-another-subagent. The repository README positions it as: a configurable subagent profile system that provides a single subagent tool + profile parameter, with Web UI settings, real-time progress (tool calls / tokens / activities), subagent tree tabs, and one-click navigation to child sessions.

The problems it solves can be summarized into three points:
1. Keep the model-facing tool surface flat. Adding or removing profiles only modifies the profile enum, without changing the set of tool names.
2. Each profile can independently specify the model, persona, tool filtering, recursion depth, and background mode.
3. The Web interface lets you see what the subagent is doing, instead of just waiting for a final reply.

The dsh.client.platform field in package.json is set to web, meaning the interface part is mounted on the Web UI. The GitHub repository currently has 11 stars (the community catalog page still shows 7 stars; refer to the repository page for accurate counts). The LICENSE and package.json declare AGPL-3.0; the catalog page shows NOASSERTION due to GitHub SPDX recognition, so you should cross-check with the full license text in the repository before installing.

Core Features

According to the repository README and the implementation in src/index.ts / src/tool-factory.ts, the plugin has a single bundle with three entry points: host (.), invariant (./invariant), and client (./client).

1. Single subagent Tool
The host side registers a tool named subagent, using the profile enum to select configurations. When no profile is passed, the source code defaults to the built-in general profile. The tool reuses the official spawn provider and supports both foreground and background execution; the background policy is determined by the current profile’s backgroundMode, which can be continuable (retains the child session for subsequent tasks via send_message) or one-shot (returns a job ID, use job_output / job_kill to retrieve results or abort).

cordis.patch.yml only disables the official tool-subagent (spawn path, tool name also subagent) and retains tool-subagent-fork (tool name subagent_fork) to avoid naming conflicts. Fork delegation remains available.

2. Web UI Settings Page
The client side registers a settings.section (ID ya-subagent) in the settings panel for adding, editing, and deleting profiles. State is written to the ya-subagent namespace in $DSH_HOME/settings.yaml via the settings seam. The profiles in cordis.patch.yml are only the initial seed configuration (composition base); changes made in the settings page will take precedence over user-level settings afterwards. Headless deployments without a settings provider will fall back to in-memory state, retaining only the seed configuration without persistence.

3. Real-time Progress and Subagent Tree
Tool call cards (tool.call.toolview, keyed as subagent) will display subagent progress. The underlying implementation relies on two session projections: subagentProfile on the parent session (childId → profileId, callId → childId) and yaSubagentProgress on the child session (real-time tool calls / tokens / activities). The session view also includes a subagent-tree tab, and clicking the card will navigate to the corresponding child session.

4. Default Profile
After installation, a built-in general profile is included: model auto (inherits from the parent agent), persona inherit, no tool filtering, maxDepth of 3, and backgroundMode of continuable. The generalFixed: true flag means this built-in entry is treated as a fixed seed.

Installation and Activation

The installation command given on the community catalog page, run in the DeepSeek Harness terminal:

dsh plugin add github:HuanLinOTO/dsh-plugin-yet-another-subagent

For reproducible installations, the catalog recommends pinning the commit hash by replacing commit with the specific hash below. The latest commit on the repository’s master branch as of 2026-08-15 is 1d2d2d4a93b6226740a0ae1d61ef9d95e4447f67:

dsh plugin add github:HuanLinOTO/dsh-plugin-yet-another-subagent#1d2d2d4a93b6226740a0ae1d61ef9d95e4447f67

The repository README also provides the npm installation method for the web profile (marked as recommended in the README):

dsh plugin --profile web add @huanlin/dsh-plugin-yet-another-subagent

The latest version on the npm page is currently 0.1.2 (the repository package.json still lists 0.1.1; refer to the npm page for accurate versions). After installation, restart dsh web per the README and perform a hard refresh in your browser (Ctrl+Shift+R).

The plugin runs with the permissions of the current dsh process, and may execute code during installation. You should inspect the source code repository and license before installing.

Configuration and Usage

The patch included with the bundle is roughly as follows (extracted from the repository’s cordis.patch.yml):

- id: tool-subagent
  disabled: true

- insert:
    - id: yet-another-subagent
      name: '@huanlin/dsh-plugin-yet-another-subagent'
      config:
        profiles:
          - id: general
            label: General
            model: { kind: 'auto' }
            persona: { kind: 'inherit' }
            toolFilter: { kind: 'none' }
            maxDepth: 3
            builtin: true
        generalFixed: true

You do not need to manually edit this YAML file to modify profiles daily. Open the yet-another-subagent section in the Web UI settings to add, edit, or delete profiles; when modifying $DSH_HOME/settings.yaml directly, the host will hot-reload and re-register the tool via scope.watch.

The profile fields listed in the README are as follows:
| Field | Description |
|------|------|
| id | Unique identifier, lowercase letters / numbers / hyphens, 1–32 characters |
| label | Display name |
| model.kind | auto inherits the parent agent’s model; manual requires additional provider and model fields |
| persona.kind | inherit follows the deployment persona; custom uses persona.text |
| toolFilter.kind | none / allow / deny, with the list of tools written in toolFilter.tools |
| maxDepth | Maximum recursion depth, defaults to 3 |
| backgroundMode | continuable or one-shot, takes effect when run_in_background: true |
| builtin | Whether this is a built-in profile, for display purposes only |

When the model calls subagent, the parameters come from src/tool-factory.ts:
- profile: Optional, enumerates the current profile IDs, uses general if omitted
- description: Required, a short task label of 3–5 words for interface display
- prompt: Required, the complete, self-contained task for the subagent. The subagent cannot see the parent session’s context
- run_in_background: Optional. When true, follows the profile’s backgroundMode for background execution

For example, first add a profile with id research on the settings page, using a manual model and stricter tool filtering, then have the model delegate tasks with profile: "research". The available profiles will be listed in the tool description, and the model can select one based on the nature of the task.

You can verify the effect in the interface in this order:
1. After restarting dsh web and performing a hard refresh, the settings page should show a profile editing entry.
2. After the parent agent calls subagent, the tool card in the conversation will display progress; open the subagent-tree tab to view the subagent tree.
3. Click the card to navigate to the corresponding child session.

Applicable Scenarios and Notes

This plugin is suitable for users who are already using the dsh Web UI and split work across subagents: the same main session needs to handle research, code changes, and restrict which tools certain subtasks can access. It does not replace subagent_fork on the fork path, nor does it provide a Web progress panel for headless deployments.

There are several boundary cases to be aware of before use:
1. It will disable the official spawn path tool-subagent and take over the subagent tool name. If your current profile relies on the official default behavior, confirm that it can be replaced before installing.
2. The client explicitly marks platform: web. In headless mode without a settings provider, profiles only exist in memory and will be lost after restarting.
3. The README notes that old sessions are incompatible: after the result text rendering format is changed, cards in old sessions may not be matched by parseResult and thus cannot be clicked; new sessions after a host restart will work normally. The stateVersion 2 (activity field and others) of yaSubagentProgress also requires a host restart to take effect.
4. The repository’s engines requires Node.js >=22.0.0.
5. The repository’s AGENTS.md still contains outdated descriptions such as “each profile registers a subagent_<id> tool” and “simultaneously disables fork”, which are inconsistent with the current README, cordis.patch.yml, and src/index.ts. Refer to the README and source code instead.

The plugin runs with the permissions of the current dsh process. The community catalog is an independent site and has no official affiliation with DeepSeek / HyperGAI; dshfind also indexes this plugin as part of community listings. Inspect the source code, license, and dependencies before installing, and it is recommended to test the installation in a disposable profile for important workspaces first.

Summary

dsh-plugin-yet-another-subagent consolidates “multiple subagent policies” into a profile parameter on a single tool, and adds a settings page, real-time progress, and a subagent tree to the Web UI. It reuses the official spawn functionality and does not interfere with subagent_fork. If you need multiple sets of models / personas / tool permissions without cluttering your tool list, you can install it using the catalog commands and check if the settings page and subagent tree fit your workflow.

Catalog page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-plugin-yet-another-subagent/

GitHub: https://github.com/HuanLinOTO/dsh-plugin-yet-another-subagent