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, setpermissionModeorallowPermissionModeOverride: false. - Executable:
executabledefaults to an empty string, meaning useclaudeon 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
envparameter.
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.