Skip to Content
Model GuideIntegrationsDeepSeek Harness

DeepSeek Harness

DeepSeek Harness , or dsh, connects to custom providers through model plugins. This guide adds Fenno API in the Web UI without replacing the built-in DeepSeek provider.

dsh evolves quickly. Older settings.yaml examples may not apply to current versions. Prefer the Models settings UI; for file edits, follow the active profile’s configuration and current official documentation.

1. Install and start

Check runtime requirements in the official repository , then install, check the version and start the local UI:

npm install -g @deepseek-ai/dsh dsh --version dsh web

Use the local URL printed in the terminal. If it contains an access token, do not share it publicly or expose the service to the internet.

2. Add a custom provider

Open Settings → Models → Add custom provider:

SettingValue
Provider IDfenno
Display nameFenno API
API addresshttps://api.fenno.ai/v1
API protocolopenai-completions
API keyYour Fenno API key

Fetch and add models, or enter an exact model ID manually. Choose a model supporting Chat Completions and tool calling; do not infer IDs from display names.

3. Select a model and workspace

Save, then select a model under Fenno API, not deepseek-official. Use a disposable workspace for the first test, review its permissions and ask “Reply with OK only. Do not call tools.”

Match the request time and model in the Fenno console before testing tools separately. A model-picker entry is not proof of valid credentials or a working end-to-end workflow.

Protocol selection

apiFenno addressRequirement
openai-completionshttps://api.fenno.ai/v1Chat Completions support
openai-responseshttps://api.fenno.ai/v1Responses support
anthropic-messageshttps://api.fenno.aiAnthropic Messages support

Do not assume every model supports every protocol. For empty output, 400 errors or unsupported endpoints, check the model/protocol pairing first.

Advanced configuration and troubleshooting

Current official documentation places Web UI provider settings in $DSH_HOME/profiles/web/cordis.patch.yml. Custom profiles have their own directories. The default configuration root is ~/.dsh, unless DSH_HOME is set.

  • apiKeyEnv is a credential reference, not a literal key. Ensure the launch environment can resolve it.
  • MISSING_CREDENTIAL: check the active provider and credential source without printing credential files.
  • Missing model: add it to the custom provider and save.
  • Duplicate route/plugin: check for repeated provider registration in the same profile.
  • Context and output limits: use the model’s actual limits, not another model’s defaults.

See the official provider guide .