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
- Node.js 20 or later
- A Nebul AI Studio account with API access
- An API key for your active project
- A model ID from the Model Catalog
Installation
Start the Web UI with one command. No global install is needed:
npx @deepseek-ai/dsh webIt 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
- Open Settings → Models.
- Choose Add model provider and switch the card to Custom model API.
- Fill in:
| Field | Value |
|---|---|
| Provider ID | nebul (lowercase; permanent after saving) |
| Display name | Nebul |
| Base URL | https://api.inference.nebul.io/v1 |
| API protocol | OpenAI Chat Completions |
| API key | your Nebul key (sk-...) |
- Under Model catalog, choose Fetch available models. dsh calls the endpoint's
GET /modelsand 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. - Save.
The key is stored write-only in $DSH_HOME/.credentials.yaml. The settings keep only a redacted reference to it.
- 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: maxEach 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:
developerrole system promptsmax_completion_tokensoutput capsreasoning_efforton 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 noapiKeyEnvvariable 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
/v1and 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.