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.
Requirements
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 keys2. 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 web3. 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/v1Fetch 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-flashModel ids must match the gateway exactly
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-proWith 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.