DeepSeek Harness

Run DeepSeek Harness (dsh), DeepSeek's open-source coding agent, on FastMetal models. Add FastMetal as a custom model API in dsh, and the agent's file edits, shell commands and plans run on DeepSeek V4 Pro or any other model in the FastMetal catalog.

1. Create an API key

Create or reveal a key on the API keys page. It is shown once, so paste it somewhere safe.

Open API keys

2. Start DeepSeek Harness

Run the command below in any folder. It starts the dsh Web UI at http://127.0.0.1:3080 and opens it in the browser. Settings are kept in ~/.dsh.

npx @deepseek-ai/dsh web

3. Add FastMetal as a custom model API

Open Settings, then Models, choose Add model provider and switch the card to Custom model API. Fill in the form:

  • Provider ID: fastmetal. dsh keeps this id for good, because sessions and defaults refer to it.
  • Base URL: the URL below, ending in /v1.
  • API protocol: OpenAI Chat Completions.
  • API key: your FastMetal API key.
  • Model catalog: choose Fetch available models and tick the models to use, or type the ids in by hand.
https://api.fastmetal.ai/v1

Fetch available models lists every model your key can use. These two DeepSeek models have been checked with dsh, including file edits, shell commands and thinking:

deepseek-v4-pro
deepseek-v4.1-flash

List every id your key can use (this also confirms the key and the base URL):

curl https://api.fastmetal.ai/v1/models \
  -H "Authorization: Bearer your-api-key"

4. Turn on thinking

On each DeepSeek model, open Model options and turn on Reasoning levels. Keep off with an empty value, and set high to the API value high. dsh then sends reasoning_effort, and the model thinks before it answers.

Leave the DeepSeek thinking format switch off for this provider. FastMetal turns thinking on for the DeepSeek models from reasoning_effort, so a model set to DeepSeek's own thinking field answers without thinking.

5. Pick the model

Select a FastMetal model in the model picker and choose a workspace. dsh also makes it the default for new sessions. Each request is billed to your key per token, at the price on the model's page, and appears on your usage page.

Set it up in the config file

The Web UI writes the same settings to ~/.dsh/profiles/web/cordis.patch.yml, and each profile has its own file beside it (profiles/tui, profiles/headless). To set it up by hand, or for the tui and headless profiles, put this in the profile's file. apiKeyEnv names the environment variable that holds the key, so the key itself never goes in the file.

- id: llm-pi-ai
  config:
    providers:
      fastmetal:
        displayName: FastMetal
        apiKeyEnv: FASTMETAL_API_KEY
        api: openai-completions
        baseURL: https://api.fastmetal.ai/v1
        reasoning: high
        models:
          - id: deepseek-v4-pro
            name: DeepSeek V4 Pro
            reasoningEfforts:
              off:
              high: high
          - id: deepseek-v4.1-flash
            name: DeepSeek V4.1 Flash
            reasoningEfforts:
              off:
              high: high
- id: agent-default-model
  config:
    provider: fastmetal
    model: deepseek-v4-pro

With the same block in ~/.dsh/profiles/headless/cordis.patch.yml, dsh answers one task from the terminal and exits:

export FASTMETAL_API_KEY="your-api-key"
npx @deepseek-ai/dsh headless "run the tests and fix what fails"

An entry in this file replaces the whole config of that plugin, so keep any other providers you have set up in the same llm-pi-ai entry. dsh reads the file again on the next request, with no restart.

Other models

Any FastMetal model that supports tool calling can be added to the same provider: GLM, Kimi, Qwen, Claude and the others. Whether a model works well as an agent depends on the model and the host that serves it, so try it on a small task before a large one. The router name auto cannot be used as an agent's model.

For approvers and finance

Usage from DeepSeek Harness comes out of the same prepaid balance as every other FastMetal API call and appears on the same usage page and invoice. An agent calls the model many times per task and resends the conversation each time, so input tokens make up most of the cost. The DeepSeek models on FastMetal use prompt caching, which bills the repeated part at the cached-input rate.