Clients

DeepSeek Harness

Route DeepSeek Harness (dsh) through the OpenLLM daemon on your machine by adding the OpenLLM bundle to a dsh profile with the dsh plugin command.

Commanddsh plugin --profile web add github:openllmsh/dsh
ModePersistent, per dsh profile. Added from the dsh side.
Talks toYour local daemon at http://127.0.0.1:8787/v1 (Chat Completions)
Default modelultra
NeedsA running OpenLLM daemon on the same machine
RemoveRemove the bundle from the profile in dsh

There is no openllm command for DeepSeek Harness. The bundle is a configuration patch you add with dsh's own plugin command. Its source is at github.com/openllmsh/dsh.

Before you begin

  • Install OpenLLM with your key, so the installer starts the daemon. See Install.

  • Check that the daemon is running:

    openllm status
  • Install DeepSeek Harness (dsh).

The bundle holds no key and no account details. dsh talks only to the daemon on this machine, and the daemon uses the key saved in ~/.openllm/.env.

Set up with dsh plugin

dsh profiles are separate. A bundle added to one profile is invisible to the others, so add it to the profile you run.

dsh plugin --profile web add github:openllmsh/dsh

Then restart that profile. The browser UI exists only in the web profile; the bare default profile has no web surface.

To pin a release of the bundle, add a tag: github:openllmsh/dsh#<tag>.

In that profile only, the bundle:

  • adds an openllm provider to dsh's built-in llm-pi-ai adapter, using openai-completions at http://127.0.0.1:8787/v1;
  • makes openllm / ultra the default conversation model;
  • registers the openllm MCP server, which runs openllm mcp over stdio. See MCP server.

OpenLLM itself changes nothing on disk for dsh.

If you changed the daemon port with OPENLLM_DAEMON_PORT, edit baseURL in the bundle's cordis.patch.yml to match. The bundle does not read the port.

Choose models

The bundle declares three models:

ModelContext windowMax output
ultra (default)262,14416,384
plus262,14416,384
lite131,0728,192

Switch between them in dsh. To use a specific model, change what an alias resolves to in Configuration. See Routing and fallback.

Who pays for a request

Every request goes to the daemon on this machine, which runs the chain for the alias. A subscription or local-model hop runs on this device. An API-key hop is sent on to the hosted gateway and bills your provider account. Included openllm/ models count against your plan's allowance. See Providers and Plans and limits.

The bundle sends a placeholder Authorization: Bearer local header. When a chain has no subscription or local model, the daemon passes the whole request to the hosted gateway with that header, and the gateway rejects it with 401. To use the bundle, include at least one subscription or local model in the chains you call.

Check that it works

  1. Restart the profile and send a message.
  2. Open Overview in the app. The request appears with the model that served it.

To inspect the composed configuration, run dsh --profile web --dump-config and look for the openllm provider.

Common problems

SymptomCauseFix
Connection refused on 127.0.0.1:8787The daemon is not runningRun openllm start. See Devices
No OpenLLM model in the browser UIThe bundle was added to a profile other than webAdd it to web and restart that profile
Connection refused after changing the daemon portThe bundle still points at port 8787Edit baseURL in cordis.patch.yml
401 from every requestThe chain has no subscription or local model, so the daemon forwards the bundle's placeholder header to the hosted gatewayAdd a subscription or local model to the chain in Configuration
OpenLLM tools are missingopenllm is not on the PATH dsh usesRun ~/.openllm/bin/openllm setup, then restart the profile

For anything else, see Troubleshooting.

Remove it

Remove the bundle from the same profile with dsh's plugin command, then restart the profile. OpenLLM keeps no state for dsh, so there is nothing to undo on the OpenLLM side.

Last updated on

On this page