Trying the New DeepSeek Harness

After building such great Pro and Flash models, DeepSeek has decided to step into the harness game as well. Their harness is based on this philosophy of "everything is a plugin", much like the Pi coding agent. I have been using Pi with DeepSeek models for months now, so I was curious to see DeepSeek's own take on the idea.

All tech news and influencers are talking about the new DeepSeek harness, so I had to give it a try. And my experience so far is pretty good to be honest. In this post, I will explain how I installed and set up the harness for myself and what I liked and disliked about it.

DeepSeek harness landing page

What is the DeepSeek Harness?

The DeepSeek Harness or dsh is an open-source agent harness from DeepSeek AI, and that tagline is not just marketing – every part of the product, from the model adapter to the session log to the agent loop itself, is a plugin. It runs on Cordis, so there is no core to patch. You swap a part by mounting another plugin beside it.

The agent can read and edit workspace files, run commands, delegate work to subagents, and keep a plan as it goes.

It is currently in developer preview, and the team is upfront about it in the repo README. It ships as a Web UI at http://127.0.0.1:3080, but that is just one way to use it. There is also a headless mode and a Python SDK for programmatic use, though I did not use them this time.

Installing the DeepSeek Harness

As mentioned on their GitHub repo page, using the npx @deepseek-ai/dsh web command in the terminal is the best way to quickly install and use the harness. But it didn't work for me and threw the following errors.

DeepSeek harness installation npx command error

I then quickly cloned the repo and ran it from the source with the following commands.

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

It's straightforward, and the process takes just over a minute. You get this http://127.0.0.1:3080 URL in the terminal that I opened in the browser. It showed me an "internal testing warning" popup and then asked me to provide the official DeepSeek API key or configure later, as you see.

DeepSeek official API key

Setting up a provider

My first impression was that this only works with the official DeepSeek provider, but it works with almost all major providers, and you can add custom ones for any OpenAI-compatible endpoint. Everything lives under Settings > Models.

DeepSeek harness provider setup

I added my OpenCode Go API key as you see above, and everything was set to start using OpenCode models inside the harness.

I already use DeepSeek v4 Pro and Flash through my OpenCode Go subscription inside Pi, so the harness now runs the same models with the same thinking levels. The key itself lands in ~/.dsh/.credentials.yaml, while the settings file keeps only a reference to it – the UI never shows the secret back. My ~/.dsh/settings.yaml looks like this.

llm-pi-ai:
  providers:
    opencode-go:
      apiKeyEnv: OPENCODE_GO_API_KEY
agent-default-model:
  provider: opencode-go
  model: deepseek-v4-pro
  reasoningEffort: max

The llm-pi-ai key at the top is a fun detail. The generic provider adapter is built on pi-ai, the model-provider library from the same team behind Pi. So the harness and my favorite terminal agent share more than just the plugin philosophy.

Model changes apply on the next request without restarting the server.

Using the DeepSeek Harness

After I added a local folder (they call it a workspace), honestly, it felt like I'm using the Codex app or ChatGPT web interface. All sessions are on the left side, and you can easily switch among them across different projects.

Working with the DeepSeek harness

I really liked the UI and UX.

The first real task I gave it was a deep read-only audit of this very website's repo. I asked it to go through every single line of code, from all perspectives, and give me a brief report. It read my AGENTS.md file first, so all my site rules were in the conversation. Then it split the entire audit into six parallel subagents. One took scripts/, another _data/, one went through all 161 blog posts, another all 491 raw notes, and the rest took templates, CSS, and the top-level content pages.

And here is the part I really liked. Each subagent got its own session, and the dropdown at the top showed me exactly how many were working and the progress on each of them.

Subagent dropdown in DeepSeek harness

Apart from the subagents, I also loved the live stats at the bottom – tok/sec, cache hit rate, tool calls, turns, steps. None of it is necessary, but it makes the whole session feel transparent.

Harness useful info

There is also a Trajectory tab for each session that shows the whole session as a timeline – every turn, step, tool call, and nested sub-tool call, each with its token usage and how long it took. Clicking a request opens its input, output, and timing details. It is the most transparent agent UI I have used.

It also felt safe. Everything ran inside the workspace, and the UI asked before anything that needed approval.

Session modes

The harness ships with four session modes, and you pick one when you start a session. A session's mode is fixed at creation – you cannot switch it mid-session, so a different mode means starting a new session.

dsh different session modes

  1. Standard mode is the full coding agent – file editing, shell, file and web search, skills, planning, goals, subagents, and workflows. It is the default, and the mode I have been using for everything so far.
  2. Code mode has all of Standard's capabilities, but the tools are presented through the Code Mode SDK. Instead of one tool call per action, the model writes a single TypeScript program against a generated SDK and runs it in one go – a sequence that would take five round trips becomes one.
  3. Minimal mode is the opposite extreme, just two tools, a persistent bash shell and the str_replace_editor file editor. No search, no skills, no subagents, no planning. The smallest possible coding agent.
  4. Creator mode is for making your own presets. It has all of Standard's capabilities plus a toolset that can inspect the running harness, experiment with plugins, and author presets. You can duplicate any built-in preset and make it yours, or let the agent draft a custom one for you in Creator mode.

The picker lives in the Agent presets section of the UI, and you can set a default mode for new sessions so you do not have to pick every time.

Things I like about the DeepSeek Harness

  1. Everything is a plugin, for real. There is no core to patch, unlike most tools where you get whatever the vendor ships. It feels like Pi's philosophy with a polished GUI on top, and it is fully open source under MIT – no company decides what features I get.
  2. The Web UI is clean. Sessions on the left, workspaces, and a Codex, ChatGPT or Gemini-like feel without giving up local files.
  3. Subagents with live progress. The parallel audit would have taken forever in a single thread. Six agents, one dropdown, and live progress on each one.
  4. Honest stats at the bottom. tok/sec, cache hit rate, tool calls, turns, steps. I wish more tools showed numbers like these.
  5. Any provider you want. I plugged in OpenCode Go and was done. Keys stay in ~/.dsh/ on my machine.
  6. Safe by default. A workspace-only sandbox plus approval prompts before risky operations.

Things I didn't like

Final thoughts

DeepSeek Harness is the GUI-shaped plugin agent I did not know I wanted. Pi stays my terminal agent for side projects and experiments, and Grok Build and Claude Code keep their roles in my AI stack – the harness is a strong addition, not a replacement yet.

After Pi and OMP, the plugin-first idea has clearly spread, and now DeepSeek ships their own take with real polish. I will keep using it for this site's work and update this post as I learn more.

If something breaks, GitHub Discussions and their Discord server are the places to report it.

Some links here are affiliate or referral links. Buying through them supports this site at no extra cost to you, and it doesn't affect my opinions.