Nebul Docs

DeepSeek Harness

Run DeepSeek Harness (dsh) on Nebul models through a custom model API provider.

DeepSeek Harness (dsh) is DeepSeek's open-source agent harness: a desktop app or self-hosted web UI with a plugin architecture for everyday work, coding, and research. Its model layer is provider-based, and any OpenAI-compatible endpoint can be added as a custom model API. That is how you run it on Nebul.

Prerequisites

Installation

Start the Web UI with one command. No global install is needed:

npx @deepseek-ai/dsh web

It serves the UI at http://127.0.0.1:3080 and opens it in your browser. Pass --no-open to skip that. A desktop build and source-checkout instructions are on the GitHub repository; everything below works the same in either.

Add Nebul as a custom model API

  1. Open Settings → Models.
  2. Choose Add model provider and switch the card to Custom model API.
  3. Fill in:
FieldValue
Provider IDnebul (lowercase; permanent after saving)
Display nameNebul
Base URLhttps://api.inference.nebul.io/v1
API protocolOpenAI Chat Completions
API keyyour Nebul key (sk-...)
  1. Under Model catalog, choose Fetch available models. dsh calls the endpoint's GET /models and offers a searchable picker. Nebul responds to this directly, so the models your project can use appear there. Tick the ones you want and choose Add selected.
  2. Save.

The key is stored write-only in $DSH_HOME/.credentials.yaml. The settings keep only a redacted reference to it.

  1. Pick the model from the model picker. Selecting it also makes it the default for new sessions.

Manual model entry

If you would rather not use discovery, add models by hand under the provider's model list. The IDs must exactly match the Model Catalog.

Reasoning models (optional)

For models that reason, check reasoning_efforts in /v1/model/info. To expose dsh's Effort menu for them, declare the accepted levels in $DSH_HOME/profiles/web/cordis.patch.yml:

- id: llm-pi-ai
  config:
    providers:
      nebul:
        apiKeyEnv: NEBUL_API_KEY
        api: openai-completions
        baseURL: https://api.inference.nebul.io/v1
        models:
          - id: zai-org/GLM-5.3
            reasoningEfforts:
              low: low
              high: high
              max: max

Each key is a level the menu offers, and its value is the reasoning_effort spelling sent on the wire. With apiKeyEnv, the key comes from the NEBUL_API_KEY environment variable in the shell that starts dsh, instead of being stored by the UI.

No compatibility overrides needed

dsh's provider layer guesses request shapes by URL and defaults to strict OpenAI behavior on unrecognized hosts. Nebul accepts what that produces. We verified all three of the shapes that trip up other gateways:

  • developer role system prompts
  • max_completion_tokens output caps
  • reasoning_effort on reasoning models

If a future dsh release changes its defaults, the dsh compatibility reference lists the switches. None are needed for Nebul today.

Troubleshooting

  • MISSING_CREDENTIAL: the provider has no key stored and no apiKeyEnv variable set. Save the key through the Models page.
  • UNKNOWN_MODEL: the session selected a model you removed. Re-add it or pick another from the model picker.
  • Fetch available models fails: check that the base URL includes /v1 and the key is valid; adding models by hand always works.
  • Provider ID typo: the ID is permanent once saved, because sessions and defaults reference it. Add a new provider with the right ID and delete the old one.

Data and telemetry

The web UI you self-host collects no product events. dsh's product telemetry ships only in the Desktop build, where it follows the launch-time analytics switch; disable it in the Desktop app's settings. Model traffic goes only to the provider you configured.

The dsh process runs locally and reads the workspace you give it. Sessions and tool calls are recorded in local logs under $DSH_HOME.

For what Nebul does with requests, see Privacy & Security.

On this page