Tutorial

DeepSeek Harness tutorial

From starting the Web UI to running your first agent task — and configuring every model provider. Based on the official guide.

1. Start the Web UI

After installing, run:

npx @deepseek-ai/dsh web

Open http://127.0.0.1:3080. The dsh process treats the directory you ran it in as its default filesystem location, but the Web UI won't select a workspace until you add one.

2. Configure a model

Open Settings → Models, enter your DeepSeek API key, and save. The model route becomes available immediately — no server restart needed.

DeepSeek Harness Models page

Screenshot from the official DeepSeek Harness docs (MIT).

To add other providers, use Add provider (Anthropic, OpenAI, and more from the installed directory) or Add custom provider for company gateways and self-hosted endpoints.

3. Choose a workspace

Click Choose workspace, add the project directory you started dsh in, then select it. The conversation input stays disabled until a workspace is selected.

4. Run your first task

Summarize this repository and identify its main packages.

The agent can read and edit workspace files, run commands, delegate work, and maintain a plan. When an action needs approval under the current permission policy, the Web UI asks you first.

Model configuration (providers)

Model changes take effect on the next request — no restart needed. Keys are stored in $DSH_HOME/.credentials.yaml and are write-only.

  • DeepSeek: enter the API key on the Models page.
  • Directory providers (Anthropic, OpenAI, …): add a provider and its key. Bedrock, Vertex, Azure, and Codex need their native credentials (AWS/ADC/api-version/OAuth).
  • Custom providers: lowercase Provider ID + base URL + protocol + credentials + at least one model. Use Get available models to query the endpoint.
  • Vision models: add input: [text, image] in $DSH_HOME/settings.yaml for the model.

Troubleshooting

  • MISSING_CREDENTIAL — store the provider key or set the referenced env var.
  • UNKNOWN_MODEL — pick a configured model or add it to your custom provider.
  • Get available models returns 401 — check the key; model discovery calls GET /models.
  • Images rejected before sending — the model doesn't declare the image modality; add input: [text, image].

Next: build a plugin →

🌐 中文