2nd dokployH
Find a file
creatixchu 0a95a9eed8 fix(session): refuse foreign format versions before parsing current structure
Review round: the JSONL backend now refuses a foreign header version straight
from the raw header line, before validating today's header shape or decoding
any event row, so a structurally different future format reports the upgrade
direction instead of corruption (shared message builder
sessionFormatVersionRefusal). HMR live-prefix adoption runs the unknown-type
guard like the other read paths. The appendCore comment now states why the
unknown-type guard is read-side only, the loadStoredFrom JSDoc and README pin
the seek-vs-sequential refusal-scope divergence, and the generated catalog
preamble lists the ignorable envelope field.
2026-08-11 11:23:48 +08:00
.agents fix(session): refuse foreign format versions before parsing current structure 2026-08-11 11:23:48 +08:00
.claude Revert "test(repository-plugin): drop the skill contribution from the preset-composed e2e" 2026-08-09 22:10:50 +08:00
.github Merge pull request #2211 from deepseek-harness/worktree/event-driven-issue-review-status-20260810 2026-08-11 11:15:16 +08:00
apps Merge pull request #2211 from deepseek-harness/worktree/event-driven-issue-review-status-20260810 2026-08-11 11:15:16 +08:00
assets docs: make the top-level README product-first 2026-07-23 00:15:44 +08:00
bin feat(cli): enable Node environment proxy in launcher 2026-07-30 16:53:35 +08:00
docs fix(session): refuse foreign format versions before parsing current structure 2026-08-11 11:23:48 +08:00
examples test(acp): re-record cordis-inspect-jsdoc snapshot for the ignorable envelope field 2026-08-11 11:23:48 +08:00
native build(release): make the release set publishable under the private scope 2026-08-11 00:09:31 +08:00
packages fix(session): refuse foreign format versions before parsing current structure 2026-08-11 11:23:48 +08:00
patches cleanup: remove TUI package and legacy dsh entrypoints 2026-08-04 13:20:28 +08:00
python fix: prerelease version 2026-08-11 03:20:34 +08:00
scripts fix(session): refuse foreign format versions before parsing current structure 2026-08-11 11:23:48 +08:00
skills docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
vendor release(vendor): cordis 4.0.1-rc.1, cosmokit 1.8.2-rc.1, group 1.0.1-rc.1, hmr 1.0.16-rc.1, include 1.0.5-rc.1, loader 1.0.1-rc.1, logger-console 1.0.1-rc.1, schemastery 3.18.1-rc.1, timer 1.1.3-rc.1 2026-08-11 02:46:10 +08:00
website docs(python): generalize SDK guide 2026-08-10 19:53:51 +08:00
.editorconfig Declare LF and final-newline conventions in .editorconfig 2026-07-15 16:09:12 +08:00
.gitattributes feat(i18n): compose pairing records during merges 2026-08-08 21:11:59 +08:00
.gitignore chore: untrack the local .claude/launch.json and ignore it 2026-08-08 23:45:38 +08:00
.gitlab-ci.yml fix(python): rename SDK distribution 2026-08-10 19:45:54 +08:00
.jscpd.json chore(lint): bring .tsx files into the eslint, lefthook, and jscpd lanes 2026-07-27 21:42:08 +08:00
.oxlintrc.json refactor: make lint workflows Oxlint-only 2026-08-09 14:55:15 +08:00
.oxlintrc.staged.json refactor: make lint workflows Oxlint-only 2026-08-09 14:55:15 +08:00
.rgignore chore: exclude archived Agent Notes from rg 2026-08-10 14:49:30 +08:00
AGENTS.md feat(session): refuse session logs a build cannot faithfully read 2026-08-11 11:23:48 +08:00
CLAUDE.md Initialize repo with README, AGENTS.md, and CLAUDE.md symlink 2026-06-10 22:58:56 +08:00
knip.json fix(release): follow the workspace protocol in the invariant fixture and knip config 2026-08-11 01:01:40 +08:00
lefthook.yml feat: direct issue status from PR review events 2026-08-10 23:13:32 +08:00
LICENSE Initialize repo with README, AGENTS.md, and CLAUDE.md symlink 2026-06-10 22:58:56 +08:00
package.json release(dsh): 0.0.1-rc.1 2026-08-11 03:20:36 +08:00
pnpm-lock.yaml fix(feedback): drop rebase residue from the sharing acknowledgement 2026-08-11 11:01:48 +08:00
pnpm-workspace.yaml fix(packaging): materialize runtime dependencies 2026-08-10 22:47:18 +08:00
pytest.ini Merge remote-tracking branch 'origin/master' into codex/trim-ai-prose 2026-07-14 00:40:36 +08:00
README.i18n.yaml refactor(cli)!: complete app-owned profile startup 2026-08-10 23:45:04 +08:00
README.md refactor(cli)!: complete app-owned profile startup 2026-08-10 23:45:04 +08:00
README.zh.md refactor(cli)!: complete app-owned profile startup 2026-08-10 23:45:04 +08:00
THIRD_PARTY_NOTICES.md Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt 2026-08-10 22:18:22 +08:00
tsconfig.base.client.json refactor(tsconfig): single root solution graph over host/client aggregates 2026-07-23 03:59:05 +08:00
tsconfig.base.json refactor(cli)!: complete app-owned profile startup 2026-08-10 23:45:04 +08:00
tsconfig.client.json Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-5-web-ui 2026-08-08 22:51:17 +08:00
tsconfig.host.json feat(feedback): disclose session sharing in the /feedback acknowledgement 2026-08-11 11:01:43 +08:00
tsconfig.json refactor(tsconfig): single root solution graph over host/client aggregates 2026-07-23 03:59:05 +08:00
tsdown.config.ts refactor(cli)!: complete app-owned profile startup 2026-08-10 23:45:04 +08:00
vitest.config.ts Merge remote-tracking branch 'origin/master' into fix/windows-native-acl-coverage 2026-08-10 21:04:44 +08:00
vitest.e2e.config.ts fix(typert): close remote gateway review gaps 2026-08-07 21:47:15 +08:00
vitest.shared.ts fix(typert): close remote gateway review gaps 2026-08-07 21:47:15 +08:00
vitest.snapshot.config.ts refactor(packages): dissolve ui/ and rename sdk/ to scaffold/ 2026-08-09 01:21:12 +08:00
vitest.web-stress.config.ts test(web): add opt-in reasoning chunk stress lane 2026-08-04 14:37:31 +08:00
vitest.web.config.ts fix(test): isolate jsdom storage on Node 26 2026-07-30 21:49:33 +08:00
vitest.web.perf.config.ts test: add opt-in web performance scenario 2026-08-04 14:23:34 +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.

Install

Clone the repository, then run the installer:

git clone <repo-url>
cd deepseek-harness
scripts/install.sh

The installer requires git and Node ^22.19 || >=24, offers to install pnpm when it is missing, prompts for a DeepSeek API key, builds the required repository artifacts, and launches the Web UI.

The default active checkout is ~/.dsh/source/current, and the launcher is linked into ~/.local/bin. Re-run the installer to update. scripts/install.sh owns alternate locations, update mechanics, and recovery options.

Use DeepSeek Harness

Web UI

For the recommended local interface, choose Web UI when the installer finishes. To start it later, or after updating the active checkout, build the repository and run:

(cd ~/.dsh/source/current && pnpm run build)
dsh web

The path above is the installer's default. If you set DSH_SOURCE or DSH_CURRENT, or reused an existing checkout, replace ~/.dsh/source/current with that checkout path; see scripts/install.sh for details. The Web UI is served at http://127.0.0.1:3080 by default.

Profiles

dsh boots profiles — ordered stacks of plugin-bundle patch layers under your own overrides in $DSH_HOME/profiles/<name>:

dsh --profile web                       # the browser UI (same as: dsh web)
dsh plugin --profile tui add <package>  # install a plugin into a custom profile
dsh --profile tui                       # boot it

The CLI reference describes profile layout, layer semantics, and config dump commands.

Headless

Run one task, print the final answer, and exit:

dsh --profile headless "summarize this workspace"

Automation and SDKs

From a source checkout with DEEPSEEK_API_KEY in the environment or its root .env, start the ACP automation server:

pnpm run demo:acp

The Python SDK drives a bundled JSON-RPC runtime. The examples cover the runnable headless, ACP, JSON-RPC, Code Mode, and self-referential compositions.

Why DeepSeek Harness

Built-in capabilities cover file reading, editing, and search; shell and persistent PTY execution; reusable skills; task tracking, goals, plans, todos, and background tasks; subagents and workflows; sandboxing and approvals; settings and credentials; persistent, resumable, forkable, and queryable sessions; LSP and web access; context compaction; and telemetry. Each composition selects the subset appropriate to its surface. The Web UI includes Plan Mode.

  • Everything is a plugin. Models, tools, policies, storage, context management, and interfaces are composable Cordis plugins, so deployments can extend or replace behavior without forking the agent loop. See the architecture for the underlying design.
  • Runs are reconstructable. Anything visible to the model is logged in the authoritative session stream; persistence, resume/fork/query, replay, telemetry, and UIs derive from the same events. See the session-log architecture.
  • Code Mode (opt-in). It exposes a run_code tool and a generated TypeScript SDK; only program output re-enters model context. See Code Mode.
  • Self-referential Cordis tools are opt-in. They let the agent inspect its live runtime and mount or unmount plugins while it runs. See the Cordis tools.

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.

DeepSeek Harness is currently in internal testing.

License

BSD 3-Clause

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