DeepSeek Harness (DSH) has a built-in single-shot Claude Code provider (@deepseek-ai/dsh-subagent-claude-code). It is functional, but has three obvious limitations: each configuration line can only bind one model, the model list is fixed in the configuration file, and the subagent is invisible to the parent while running — the parent can only see the final result. The dsh-subagent-claude-live plugin solves these three issues, turning Claude Code into a real, streamable subagent inside DSH.

Core Features

The plugin provides its functionality through two registered tools: claude_code and claude_models.

claude_code
Use it to delegate a standalone task. Unlike the built-in provider, it supports specifying the model and effort level at invocation. The tool creates a session-based subagent whose trajectory (thinking, text, tool calls) is streamed live to the UI.

claude_models
Use it to fetch the real-time list of models supported by the Claude Code CLI. It calls the CLI’s supportedModels() method and allows bypassing the cache via the refresh=true parameter (default cache time is 10 minutes).

Install and Enable

Add the plugin using the official installation command:

dsh plugin --profile web add dsh-subagent-claude-live
dsh plugin --profile headless add dsh-subagent-claude-live   # 可选

After installation, you need to restart Harness. Prerequisites include:
* DSH version >= 0.1.1-rc.1.
* A working claude CLI on the system PATH (claude --version). If it is not installed, set executable in the configuration to 'bundled' to use the bundled payload installed as an SDK dependency (about 250 MB per configuration).

Typical Usage

1. Delegate a Task
Call the claude_code tool. Parameters:
* description: A short task label, displayed in the subagent list.
* task: The full task text.
* model: Preset name, CLI alias (such as opus, sonnet), or full ID.
* effort: low · medium · high · xhigh · max.
* permission_mode: Overrides the configured mode (default is bypassPermissions).
* run_in_background: When set to true, immediately returns the task ID, and the subagent continues streaming in the sidebar.

2. Fetch Model List
Call claude_models:

claude_models

To refresh the cache:

claude_models refresh=true

3. Configure Aliases
Define aliases in cordis.patch.yml to bind the model and effort level to tool names:

- id: subagent-claude-live
  config:
    aliases:
      subagent_claude_fable: { model: fable }
      review_with_opus: { model: opus, effort: high }

Configuration Notes

The default configuration is located in cordis.patch.yml inside the plugin package and can be overridden via the target subagent-claude-live.

  • Default permission mode: Defaults to bypassPermissions. Because in code tasks, if the subagent halts at the first permission prompt, the task is considered failed (without human intervention). If different behavior is needed, set permissionMode or allowPermissionModeOverride: false.
  • Executable: executable defaults to an empty string, meaning use claude on PATH; set it to 'bundled' to use the SDK payload; you can also specify an absolute path.
  • Environment variables: Credential-related environment variables are cleaned up before spawning the subprocess; API keys must be passed via the env parameter.

Use Cases and Notes

This plugin is suitable for scenarios that require real-time monitoring of the Claude Code execution process, frequent model switching, or flexible control of permission modes. It presents the subagent as a session with a visible trajectory, rather than a black box that only returns results.

Known Limitations:
1. Each run spawns a brand-new CLI process and does not support restoring sub-session history.
2. It does not provide outputSchema, tool filters, personas, or deep enforcement, consistent with all external providers.
3. It depends on @anthropic-ai/claude-agent-sdk.