Preface¶
DeepSeek Harness (DSH) extends its capabilities through plugins. Connecting to non-OpenAI-compatible models usually requires adapters or direct API calls. dsh-cliproxy routes requests for Claude, OpenAI/Codex, and Gemini through a local CLIProxyAPI instance, uniformly sending them to DSH. It offloads the complexity of protocols and OAuth to the proxy, providing DSH with an OpenAI-compatible client.
Core Features¶
- Unified routing: Routes Claude, OpenAI/Codex, and Gemini in DeepSeek Harness through a local CLIProxyAPI instance.
- OpenAI-compatible interface: Appears to DSH as an OpenAI client.
- Model transparency: Transparent to the underlying model; does not add tools, prompt sections, or context.
- Input restrictions: Rejects image, audio, and video inputs before sending requests.
Installation & Enablement¶
Install the plugin using the official command:
dsh plugin --profile web add github:DevViking-Persike/dsh-cliproxy
Restart DSH after installation. Three routes (cliproxy-claude, cliproxy-openai, cliproxy-gemini) will appear in the model catalog.
Prerequisites & Configuration¶
You need a running CLIProxyAPI instance (default endpoint http://127.0.0.1:8317/v1). For Gemini routes, completing -antigravity-login is required.
The plugin is configured through cordis.yml, with no directory entries to set. All fields are optional.
| Field | Default Value | Meaning |
|---|---|---|
baseURL |
http://127.0.0.1:8317/v1 |
Endpoint, including /v1. |
apiKeyEnv |
CLIPROXY_API_KEY |
Environment variable for the proxy access key. |
proxyConfigPath |
/opt/homebrew/etc/cliproxyapi.conf |
Local CLIProxyAPI YAML used to read the proxy access key. |
readLocalProxyKey |
true |
Allows local configuration discovery for loopback endpoints only. |
claudeModels |
Six Claude entries | Catalog for cliproxy-claude. |
openaiModels |
Five GPT entries | Catalog for cliproxy-openai. |
geminiModels |
Eight Gemini entries | Antigravity catalog cliproxy-gemini. |
streamIdleTimeoutMs |
300000 |
Time budget between stream reads. |
defaultContextWindow |
200000 |
Context size for models not listed in the catalog. |
maxTokens |
32000 |
Default output limit. |
retryPolicy |
Normal, 3 retries | Merged into DSH defaults. |
Example cordis.yml configuration:
- id: dsh-cliproxy
name: dsh-cliproxy
config:
baseURL: http://127.0.0.1:8317/v1
geminiModels:
- id: gemini-pro-agent
name: Gemini 3.1 Pro High
contextWindow: 1048576
maxTokens: 65535
Authentication & Security¶
For Gemini, CLIProxyAPI handles Google Antigravity OAuth. Run the login command once to authorize a Google account:
cliproxyapi -config /opt/homebrew/etc/cliproxyapi.conf -antigravity-login
CLIProxyAPI writes antigravity-<email>.json to its auth-dir and refreshes tokens by itself. The plugin never reads Google tokens.
The proxy access key is read on every request and never appears in errors or logs. Local configuration discovery is limited to loopback URLs and is automatically disabled otherwise.
Behavior & Limitations¶
- Model transparency: The plugin registers routes and streams responses, adding no tools or prompt sections.
- Text only: Currently rejects image, audio, and video inputs, even if upstream models may support them.
- Static catalog: The model catalog consists of static defaults copied from the CLIProxyAPI Antigravity registry. Providing
geminiModelscan override the defaults. - Stream handling: Truncated streams raise
STREAM_CLOSEDinstead of being treated as complete. - Testing: 64 tests, with no network or credentials required.
License & Links¶
This plugin is maintained by DevViking-Persike under the MIT license. The source code is available on GitHub: https://github.com/DevViking-Persike/dsh-cliproxy.
Ecosystem context: The DSH philosophy is “everything is a plugin.” This plugin is published through the community catalog https://www.skillhub.cn/plugins/DevViking-Persike/dsh-cliproxy and is unrelated to DeepSeek or High-Flyer.