# Use DeepSeek Harness with open models
URL: https://docs.munito.ai/deepseek-harness

[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (`dsh`) runs open models on Munito AI through a custom model provider that calls the OpenAI-compatible [Chat Completions API](https://docs.munito.ai/api/createChatCompletion).
Create an [API key](https://console.munito.ai/keys).
Export the key as `MUNITO_API_KEY`:

```bash
export MUNITO_API_KEY=munitoai_...
```

Add this configuration to `~/.dsh/cordis.patch.yml`:

```yaml
- id: llm-pi-ai
  config:
    providers:
      munito:
        displayName: Munito AI
        apiKeyEnv: MUNITO_API_KEY
        api: openai-completions
        baseURL: https://api.munito.ai/inference/v1
        models:
          - id: zai-org/glm-5.3-flash
            name: GLM-5.3-Flash
            contextWindow: 1048576
            maxTokens: 131072
            reasoningEfforts:
              low: low
              high: high
              max: max
- id: agent-default-model
  config:
    provider: munito
    model: zai-org/glm-5.3-flash
```

Start the Web UI in your project folder:

```bash
npx @deepseek-ai/dsh web
```

The command `npx @deepseek-ai/dsh headless "<task>"` runs one task without the Web UI, and prints the answer.
`apiKeyEnv` reads the key from the environment, so the file holds no key.
`agent-default-model` makes GLM-5.3-Flash the model of each new session.
`contextWindow` tells dsh the context window of GLM-5.3-Flash, 1,048,576 tokens.

The file applies to each dsh profile, so the Web UI and `headless` both use Munito AI.
It replaces the providers that the Models page of the Web UI saves, so keep each provider in this file.
Munito AI tested this configuration with DeepSeek Harness 0.2.1-rc.2.
See the DeepSeek Harness docs to [configure models](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/guide/providers.md).

Use a [regional host](https://docs.munito.ai/regions) to keep processing in the EU.
Replace the `baseURL` with `https://api.eu.munito.ai/inference/v1`.

To add a model, add its ID and its `contextWindow` to `models`.
The page of each chat model in the [model catalog](https://docs.munito.ai/models) gives its model ID and its context.

## Reasoning effort [#reasoning-effort]

GLM-5.3-Flash always reasons.
`reasoningEfforts` gives dsh the effort levels of the model: `low`, `high` and `max`.
The Effort menu of the model picker offers these levels, and dsh sends the level as `reasoning_effort`.
Without a level, the model reasons at its default effort.
See [Reasoning models](https://docs.munito.ai/reasoning).
