Preface¶
When using DSH as an agent, you often need a persistently callable LLM provider. If you already have Claude Code CLI installed locally and logged in, this plugin can directly connect your local claude as an LLM provider for DSH.
It does not require an additional API key. The plugin runs claude as a subprocess and streams the CLI output back to DSH through the harness’s LLM seam. DSH still handles the agent workflow, session history, and tool execution; the plugin only handles the model calls.
What This Is¶
- Plugin name:
dsh-claude-cli - Maintainer:
katsos - License: MIT
- Repository:
https://github.com/katsos/dsh-claude-cli - Runtime dependencies:
claudeavailable in PATH, Node^22.19 || >=24, harness with@deepseek-ai/dsh-llm
This plugin is not currently on npm; installation points directly to this repository directory.
Core Features¶
This plugin solves a very specific problem: wanting to use the model capabilities of your local Claude Code CLI without letting the CLI run its own agent loop, manage its own tools, or read its own settings, memory files, or MCP servers.
Its main behaviors include:
-
Starting local
claudeas a subprocess and streaming output back to DSH’s LLM seam. -
Keeping DSH as the agent. The CLI’s own agent loop, tools, settings, memory files, and MCP servers are all disabled, retaining only model calls driven by DSH.
-
Exposing harness tools as MCP servers via
bridge.mjsand having the model output realtool_useblocks. -
Converting model-returned
tool_useblocks into harnesstool-callchunks. -
Tool execution remains the responsibility of the harness.
bridge.mjsdoes not execute tools. -
Model names are passed through directly to the CLI. Aliases accepted by the CLI, such as
fable,opus,sonnet,haiku, as well as full IDs likeclaude-sonnet-5, can be passed in.
Installation and Enabling¶
Before installation, verify three things:
claudeis available in PATH;- Node version satisfies
^22.19 || >=24; - Current harness includes
@deepseek-ai/dsh-llm.
Here is the official installation command:
dsh plugin --profile web add ../dsh-claude-cli
Here ../dsh-claude-cli is the repository path relative to the directory where the command is run. Because the plugin is not on npm, it can currently only be installed via directory.
Restart the harness after installation. The reason is that the profile’s layer stack is read at startup; already-running servers will continue using the combination from startup.
After restart, models will appear under the Claude Code CLI group in the model picker.
If you are unsure where your current dsh command comes from, choose based on how the harness is installed:
- Global:
dsh … - Source checkout:
pnpm dsh … - Neither:
npx @deepseek-ai/dsh …
When using npx, use the scoped name @deepseek-ai/dsh. The unscoped dsh on npm is an unrelated JavaScript shell.
Typical Usage¶
If you just want to run once temporarily without modifying any profile, you can load the cordis.yml from the plugin directory using the --patch approach:
dsh --profile headless --patch /absolute/path/to/dsh-claude-cli/cordis.yml "your task"
The patch path here must be written as an absolute path. This approach is suitable for quick validation, or for scenarios where you do not want to directly modify profile configuration.
The plugin supports the following configuration fields:
providers
executable
cwd
streamIdleTimeoutMs
unsupportedFields
defaultEffort
extraArgs
Among these, extraArgs is suitable for passing CLI flags that the plugin itself does not model, for example:
--betas
extraArgs is passed before the plugin’s own flags. If an entry names one of the plugin’s own flags, the plugin will refuse to load. This design avoids parameter order affecting the CLI’s final parsing result.
Limitations and Notes¶
This plugin depends on the local CLI, not an HTTP API, so there are clear limitations.
- No cross-turn prompt caching. Each request renders the harness history as a new turn and sends it to the CLI. This counts against Claude usage limits.
temperature,maxTokens, andstopare not natively supported by the CLI. By default, they are reported asUNSUPPORTED. If your agent preset always sets these fields, you can setunsupportedFieldstoignore.- Images are not sent. Image blocks appear as visible placeholders in the transcript.
- Previous reasoning is not replayed. The provider discards unsigned thinking from history.
- No app-attribution header can override requests made by the CLI itself.
- Rate limits follow the current account. Subscription logins share rate limits with interactive Claude Code sessions.
This plugin does not bypass authentication. Requests are made through the official CLI, and the identity is whatever claude is currently logged in as. Review your terms of use and plan limits before using it.
For unattended, high-throughput, or production traffic, using an API key and HTTP provider is recommended. This plugin is better suited for local work you would otherwise run manually in Claude Code.
Additionally, note: reselling access, serving others, and evaluating models to build competitive products are prohibited.
Since the plugin starts a claude subprocess in the local environment accessible to the current dsh process, review the repository source code and MIT license before installation to confirm you trust the logic it will execute.
Conclusion¶
The value of dsh-claude-cli is that it connects the existing local Claude Code CLI login state into a set of model providers callable by DSH, while preserving DSH’s control over agents, tools, and tool execution.
It is suitable for local debugging, local agent tasks, or temporary scenarios where you do not want to apply for an API key. For production or high-traffic tasks, API keys and HTTP providers should still be the priority.
Repository: https://github.com/katsos/dsh-claude-cli. The currently available materials do not include a directory page URL; it is recommended to check the GitHub repository first for the latest documentation and configuration.