DeepSeek Harness: Open-Source Plugin-Based AI Agent Harness

Deepseek's official open-source agent harness where models, tools, skills, sessions, storage, scheduling, and the UI all work as plugins.

DeepSeek Harness (dsh) is an open-source AI agent harness from DeepSeek AI built around one idea: everything is a plugin.

The model, tools, skills, sessions, storage, sandbox, agent loop, scheduling, and even the interface are assembled through the Cordis plugin system. A basic setup starts in the browser, where the agent can work with a selected project, run commands, edit files, maintain a plan, and request approval for protected operations.

The plugin model shapes the whole product. A DeepSeek Harness profile defines the pieces that make up an agent environment. Change the model provider, add a tool, install a skill, replace part of the runtime, or load another application layer, and the profile changes with it.

DeepSeek Harness supports several ways to use that runtime. The Web UI provides an interactive workspace, the CLI runs named profiles and headless jobs, and the Python SDK embeds the agent runtime inside Python applications. These entry points share the same underlying composition model.

Everything Is a Plugin

Most of the behavior inside DeepSeek Harness comes from plugins. Cordis loads those plugins, resolves their dependencies, and composes them into the active profile. The result is an agent environment whose major parts share one extension model.

PluginWhat It Adds to the Agent
ModelsDeepSeek, catalog providers, and custom model routes.
ToolsFile editing, shell access, search, and other callable actions.
SkillsReusable instructions and task-specific behavior.
SessionsConversation state, persistence, replay, and session history.
Sandbox & storageExecution boundaries and persistent runtime data.
Agent loops & schedulingHow work runs, delegates, and returns to scheduled tasks.
UIThe application layer used to operate the configured agent.

What You Can Do with DeepSeek Harness

  • Work with a local project: Select a workspace and give the agent access to configured file, shell, search, planning, and workflow tools.
  • Build reusable agent profiles: Combine plugin bundles and configuration into named runtime setups.
  • Add community extensions: Install compatible packages discovered through the dsh-plugin ecosystem.
  • Choose the model route: Configure DeepSeek, supported catalog providers, or a custom compatible endpoint.
  • Run interactive or headless sessions: Use the browser for hands-on work or execute a job from the CLI.
  • Inspect session history: Resume, fork, search, replay, and review the recorded event stream through Trajectory.
  • Embed the runtime in Python: Start tasks and preserve sessions through the DeepSeekHarness SDK class.

Start with the Web UI

This command starts the Web UI and prints its address. The default URL is http://127.0.0.1:3080.

npx @deepseek-ai/dsh web

Connect a Model

Open Settings → Models and configure the model route. The built-in DeepSeek card accepts a DeepSeek API key. The same page also supports AI providers such as Anthropic and OpenAI, plus custom providers with a base URL, protocol, credential, and model list.

Choose the Workspace

Click Choose workspace, add the project directory, and select it. DeepSeek Harness uses the directory that launched dsh as the default filesystem location, and the composer becomes available after a workspace is selected.

Run the First Task

Summarize this repository and identify its main packages.

Profiles Turn Plugins into Agent Setups

A profile is the practical container for a DeepSeek Harness configuration. It defines an ordered stack of plugin bundles and applies profile-specific configuration on top. This is how the plugin architecture becomes a reusable working environment.

The built-in web and headless profiles initialize from supplied templates on first use. Other profiles can be created and extended through the plugin command. A team can keep one profile focused on repository work, another on evaluation, and another on a custom tool stack.

CommandWhat It Does
dsh webStarts the Web UI profile.
dsh --profile <name>Starts a named profile.
dsh --profile headless "job"Runs one persisted job, prints the final response, and exits.
dsh plugin --profile <name> <pnpm args>Manages out-of-tree plugin dependencies for a profile.

Runtime Modes

DeepSeek includes several compositions for common types of agent work. Each mode changes the tools and orchestration available to the model.

ModeBest Fit
StandardRepository work with file tools, shell access, planning, subagents, and workflows.
CodeMulti-step tool orchestration through generated TypeScript and the Code Mode SDK.
MinimalControlled model evaluation with persistent Bash and str_replace_editor.
CreatorPlugin experiments, runtime inspection, and custom agent compositions.

Python SDK

The Python SDK exposes DeepSeek Harness as an application runtime. Python code can start an agent against a workspace, send tasks, choose session IDs, and preserve the session-owned shell state across related calls.

The current SDK requires Python 3.10 or newer, Git, a compatible model endpoint and credential, and an isolated workspace.

python -m pip install deepseek-harness-sdk

Pros

  • One plugin model across the agent stack
  • Community plugin discovery through dsh-plugin
  • Reusable profiles for custom agent setups
  • Web UI, headless CLI, and Python SDK

Cons

  • Developer-preview stage
  • More configuration than turnkey coding agents
  • Model-provider inference costs apply

Alternatives & Related Resources

FAQs

Can DeepSeek Harness use image-capable models?

Yes, when the configured model route declares image input support. A manually added custom model is treated as text-only until its configuration includes input: [text, image]. DeepSeek’s own chat-completions route is text-only.

Can I switch models inside an existing session?

Model selection becomes the default for new sessions. A session that has already sent a request keeps the model recorded in its session log, so changing the picker does not rewrite that session’s existing model history.

Can a custom provider ID be renamed later?

No. The Provider ID is permanent because saved sessions, model defaults, requests, and credential references use it. Renaming requires creating a new provider entry and removing the old one.

Leave a Reply

Your email address will not be published. Required fields are marked *

Get the latest & top AI tools sent directly to your email.

Subscribe now to explore the latest & top AI tools and resources, all in one convenient newsletter. No spam, we promise!