跪拜 Guibai
← Back to the summary

DeepSeek Harness Turns AI Coding Into a Plugin-Driven Local Workspace

On August 13, DeepSeek open-sourced a project called deepseek-harness (command-line alias dsh), which rocketed to over 50,000 stars in a single day. When you click in, you'll notice something odd: the README is only about 1,700 words, with no screenshots, no feature list, and it doesn't even clearly explain "what this thing is." It just drops one line: Everything is a Plugin.

Today, let's walk through installing and experiencing it on a Mac from scratch, and see how this harness performs.

How to Install?

The official documentation provides two installation methods.

  1. Install via npm

    npx @deepseek-ai/dsh web
    

    The installation process will ask for confirmation; enter y.

    Once installation is complete, it will start a local service at http://127.0.0.1:3080. Open this link in your browser to get started.

  2. Or install from source with a single command

    git clone https://github.com/deepseek-ai/deepseek-harness.git
    cd deepseek-harness
    pnpm install
    pnpm run build
    pnpm dsh web
    

Project Configuration

  1. Open the address above, http://127.0.0.1:3080, in your browser.

  2. Follow the guide to enter your DeepSeek API key. If you don't have one, generate it on the official website at https://platform.deepseek.com/api_keys.

  3. Switch the interface language (optional). If you can't read English, click the "Settings" page in the bottom left corner to switch the language to Chinese.

  4. Add a workspace, which means adding a project. Just select a project directory. After selecting, choose a model—flash or pro, depending on your task.

  5. Model Configuration (optional). Beginners should stick with the default Standard Mode. Here's an introduction to the four modes:

    1️⃣ Standard Mode: Write code and modify repositories normally.

    2️⃣ PTC Mode: PTC stands for Programmatic Tool Calling. The model no longer calls tools one request at a time; instead, it writes a piece of TypeScript, combining multiple steps at once through the Code Mode SDK, which the system executes with run_code. Five round-trips can be collapsed into one. Multiple tools can be chained in a single step.

    3️⃣ Minimal Mode: Only the terminal and file modification are available. Just two things remain: a persistent bash shell, and str_replace_editor for modifying files by absolute path.

    4️⃣ Creative Mode: Create your own Agent presets. It has the full capabilities of Standard Mode, plus the ability to modify the Harness itself: inspect the runtime, test plugins, and write new Agent presets. Custom presets are saved to ~/.dsh/.agent-presets/. The source code is very straightforward about it: treat it as a session with a Shell, because cordis_mount executes model-written JavaScript on the live runtime.

  6. Chat Test. Enter a prompt to test connectivity.

  7. Install a third-party plugin (optional): DSH-better-sidebar, which expands the right sidebar and bottom panel into a dual workspace.

    GitHub project address: https://github.com/omdsh-dev/DSH-better-sidebar

    Installation:

    curl -fsSL https://raw.githubusercontent.com/omdsh-dev/DSH-better-sidebar/main/scripts/install.sh | bash
    

    After installation, restart DSH and perform a hard refresh (Cmd/Ctrl+Shift+R) to see the sidebar.

Model Configuration

Here, let's configure the Coding Plans for several commonly used domestic models.

First, let's look at how to configure the official presets. This demonstration uses GLM CodePlan, Alibaba's token-plan, and Xiaomi's API Key.

These officially preset model lists don't require manual configuration. After adding a valid API Key, they will be pulled automatically.

The officially preset model providers are as follows:

GLM CodePlan

"Settings" --> "Models" --> "Add Provider" --> For "Provider," select zai-coding-cn, then fill in the API-KEY and save.

Alibaba Qwen Personal Token-plan

"Settings" --> "Models" --> "Add Provider" --> For "Provider," select qwen-token-plan-cn, then fill in the API-KEY and save.

Xiaomi Personal API-Key

"Settings" --> "Models" --> "Add Provider" --> For "Provider," select xiaomi, then fill in the API-KEY and save.

After configuration, you can go back to the home page and select the corresponding model from the model list to use it directly.

I tested using the GLM-5.2 model from GLM's Coding Plan, and it worked normally.

I tested using the Qwen3.8-Max-Preview model from Alibaba Qwen's Coding Plan, and it worked normally. Alibaba Coding Plan API Key address: https://platform.qianwenai.com/home/api-keys

Xiaomi's API Key also worked normally.

Now let's look at how to configure a custom model. Here, we use Volcengine's Coding Plan. Volcengine configuration instructions: https://console.volcengine.com/ark/region:cn-beijing/subscription/coding-plan

For the protocol, select OpenAI-compatible interface protocol tool (openai-completions or openai-responses).

API Address: https://ark.cn-beijing.volces.com/api/coding/v3, enter your API Key.

Click "Get Available Models." If it can pull the model list, the configuration is correct. Select the models you want to add. Volcengine has over 100 models for this, so just pick a few you commonly use; otherwise, the list will be too large to look at... The official version should add a deselect-all feature here, because clicking one by one on a list this large is a real pain...

Delete the useless models and click "Create Provider."

Select a Volcengine model to test. If it works normally, you're all set.

To recap, up to this point we have configured 5 model providers.

We configured DeepSeek and Xiaomi as model providers using pay-as-you-go API Keys.

We configured Alibaba Qwen and Zhipu as model providers using Coding Plan API Keys through standard templates.

We also configured Volcengine as a model provider using a Coding Plan API Key through custom configuration.

You can see the positioning of DeepSeek Harness: Everything is a Plugin. Model configuration is the same—extremely flexible. With this, you can finally start playing around happily.

That's all for today's sharing. See you next time 👋.