Yichen Jiang 50edee2dab review: sync the note this supersedes, gate the schema paths, export the modality type
The declared-provider-catalog note still recorded modalities as closed
because "nothing reads them: context.ts keeps only text blocks" — the
same reasoning this change disproves. Rewrite that fact in place, keep
pricing closed for its own still-current reason, and cross-link both
directions.

The new resolver cases never crossed the config schema, so neither
acceptance path this change adds had an executable gate: config.spec.ts
now refuses an unknown modality at both levels, pins the empty route
list to the namespace validator the settings seam actually runs, and
pins the `[]` materialization the inheritance rule depends on. A
catalog.spec.ts case re-asserts every rung through a written settings
section and `ctx.llm`, which is what the note's Testing section claimed.

Also export PiAiModality from the package entry — it types two public
config fields and consumers could not name it — record the unverified
declaration as a Known Limitation, and stop sharing one fallback array
across a route's models.
2026-08-12 16:18:52 +08:00
2026-08-11 23:33:18 +08:00

DeepSeek Harness

English | 中文

DeepSeek Harness (dsh) is an open-source coding agent built on the DeepSeek Harness SDK.

It uses an architecture where everything is a plugin.

Internal testing notice

DeepSeek Harness is under internal testing. Features and interfaces may change.

The internal build uploads all Session Logs by default to help diagnose reported problems. Set DSH_TELEMETRY_DISABLED=1 to disable telemetry. Send feedback through the internal WeChat group.

Run

Install Node.js ^22.19 or >= 24 and pnpm 11, then run the published package:

npx @deepseek-ai/dsh web

The command initializes the Web profile and prints the Web UI URL, which is http://127.0.0.1:3080 by default. Open it, add a DeepSeek API key under Settings → Models, then start a session. The invoking directory is the default workspace; try Summarize this repository and identify its main packages.

Continue with the Web UI guide.

Run from source

To run a repository checkout instead:

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

pnpm run build prepares the repository artifacts. pnpm dsh web starts the Web UI without rebuilding and opens the same path.

Profiles and plugins

A profile is an ordered list of plugin bundles. The shipped web profile powers dsh web. Manage a profile with dsh plugin --profile <name> <pnpm args>, which forwards the remaining arguments to pnpm in that profile's directory:

npx -p @deepseek-ai/dsh dsh plugin --profile web add <package>
npx -p @deepseek-ai/dsh dsh plugin --profile web remove <package>

add, remove, update, why, and other pnpm commands work unchanged. The command initializes a missing profile before changing its packages and updates its bundle list from installed packages that declare dsh.bundle. See the CLI reference for the exact behavior.

The CLI reference covers headless execution and custom profiles. The Python SDK and examples cover programmatic and custom compositions.

Community

Follow DeepSeek Harness on Twitter for project updates.

Development

Start with the development guide and read the architecture before changing packages.

For agents, follow AGENTS.md.

License

BSD 3-Clause

Third-party dependencies and their licenses are disclosed in THIRD_PARTY_NOTICES.md.

Contributing

Read CONTRIBUTING.md before contributing to this repository.

Description
No description provided
Readme MIT 120 MiB
Languages
TypeScript 97%
CSS 1.6%
Python 0.7%
JavaScript 0.6%