Disclosure note DSK-1 · published 8 October 2026 · updated 26 October 2026

DeepSeek's coding agent sends your session to DeepSeek by default. Its telemetry switch does not stop it.

The short version

A model can't phone home. Its harness can.

DeepSeek Harness (dsh) is DeepSeek's open-source coding agent. With every model request in our tests, it also attaches a field called dsh_session_log. DeepSeek's own design note says that log contains "message text, tool arguments and results, workspace paths, and feedback". Tool results include the contents of the files the agent opens: your code, your config, and anything else it reads.

It is on by default. The command line shows no notice. The obvious off switch, DSH_TELEMETRY_DISABLED=1, does not stop it: in our tests 3 of 3 requests still carried the log. When we first tested it, DeepSeek's Data Processing Statement said session content stays on your device and is not uploaded without your consent. That page now redirects elsewhere. DeepSeek's web setting for the upload calls it "Help improve DeepSeek models and products".

There is a switch that works, and it is below. Until you set it in every place you run dsh, your sessions go with your prompts.

What DeepSeek Harness sends with each model request Your prompt and the files the agent reads pass through DeepSeek Harness, which attaches a session log to every request to DeepSeek's official API. With the telemetry switch set the log is still sent 3 of 3 times; with the session-log plugin disabled it is not sent, but user and session identifiers still are. PLATE I · WHAT LEAVES YOUR MACHINE WITH EACH REQUEST YOUR MACHINE your prompt files the agentreads (code, config) DEEPSEEK HARNESS(dsh, the harness) attaches thesession log DEEPSEEK OFFICIAL API model request + dsh_session_log: messages, tool calls, tool results, workspace paths + harness user id, session id 1 2 THE SWITCHES, TESTED (command line, dsh 0.2.1-rc.2, 19 Oct 2026) default settingslog sent: 3 of 3 DSH_TELEMETRY_DISABLED=1log still sent: 3 of 3 session-log plugin: enabled: falselog sent: 0 of 3 (ids still sent) 3 1 the harness, not the model, adds the log · 2 it travels inside the same request as your prompt 3 the telemetry switch most people would try does not stop it FIG. 1 Observed in our captures on our own machine and API account. Field contents as described in DeepSeek's own design note.
Summary

What we found, in detail.

DeepSeek Harness (dsh), DeepSeek's open-source coding agent, attaches a field called dsh_session_log to model requests sent to DeepSeek's official API. It is on by default. DeepSeek's own design note says it contains "message text, tool arguments and results, workspace paths, and feedback". Tool results can include the contents of files the agent reads.

An off switch exists and works. This note sets out what we tested, where DeepSeek's published statements and the software's behaviour differ, and how to turn the upload off. It describes behaviour; it does not make claims about intent or legality.

Update · 19 October 2026

Still present in the latest release.

We re-tested DeepSeek Harness 0.2.1-rc.2, the npm latest release since 17 October 2026, from the command line, using the same method as on 7 October. By default, 3 of 3 model requests carried dsh_session_log, containing the system prompt, the user prompt, the working directory, tool calls and tool results. With DSH_TELEMETRY_DISABLED=1 alone, 3 of 3 still carried it. With enabled: false set for session-log-deepseek, 0 of 3 did.

With the upload switched off, requests still carried dsh_plugin_packages and the x-deepseek-harness-user-id and x-deepseek-harness-session-id headers. The plugin ships as a runtime dependency of the bundled base packages, every shipped profile turns it on, and its own documentation calls it "default-on".

The Data Processing Statement quoted in this note now redirects to the DeepSeek Harness Terms of Use, which do not mention session logs. DeepSeek's Harness Privacy Policy (last updated 20 September 2026, and already in place when this note was first published) says it collects session logs, including user inputs, uploaded content, model outputs and tool invocation information. It does not say the upload is on by default or how to turn it off. We did not re-test the web app. DeepSeek has not replied to our report.

Tests

What we tested.

Current npm release, dsh 0.2.0-rc.2, 7 and 8 October 2026. Requests were recorded with a local capture proxy on our own machine, using our own API account.

SetupRequests carrying the session log
Web app, fresh HOME directory, default settings2 of 2
Web app, "Upload Session Log" switched off, new session0 of 2
Web app, switched off, after a restart0 of 2
Command line (headless), same machine and HOME, web switch off2 of 2
Command line, default3 of 3
Command line, DSH_TELEMETRY_DISABLED=13 of 3
Command line, enabled: false for session-log-deepseek0 of 3

With the session log switched off, captured requests still carried a list of installed plugin packages (dsh_plugin_packages) and the headers x-deepseek-harness-user-id and x-deepseek-harness-session-id.

In September, on 0.1.7-rc.2, resuming a session that had been recorded with the upload off sent that session's entire earlier history in the first request.

Statements and behaviour

Where they differ.

DeepSeek's statementObserved
Data Processing Statement (archived 26 Sep 2026): session content and tool records are stored "locally on the user's device by default, and does not upload them to the server without the user's consent".Uploaded by default in our tests. The web app's first-run screen did not mention the upload, and the command line showed no prompt or notice. Since 29 September the page shows "Page moved" and points to the Terms of Use (last updated 20 September), which do not mention session logs. The upload remains on by default.
Telemetry opt-out DSH_TELEMETRY_DISABLED.Does not stop the session log upload. DeepSeek's design note says: "disabling OTel does not disable this contribution".
Web app first-run "Preview Notice".Does not mention the upload. The upload setting is on by default.
Web app setting "Upload Session Log when using the official model API".Applies to the web app only. On the same machine, the command line keeps uploading until it is switched off separately.
Since our report

What DeepSeek has changed.

On 28 September DeepSeek added the web app setting, described as "Help improve DeepSeek models and products" (commit 7ded036, PR #5337), and the command-line reference now documents that the upload is on by default and is not affected by telemetry settings. We welcome both.

How to turn it off

Switch it off in each place you use dsh.

Web app: Settings, General, switch off "Upload Session Log".

Command line: the web setting does not apply. Save this as no-upload.yml:

- id: session-log-deepseek
  config:
    enabled: false

and run dsh --profile headless --patch no-upload.yml "your task". This is the method we tested (0 of 3). The web app stores its own switch in ~/.dsh/profiles/web/cordis.patch.yml.

DSH_TELEMETRY_DISABLED=1 on its own does not stop this upload.

Timeline

Disclosure timeline.

  • 26 Sep 2026: reported to harness-privacy@deepseek.com and privacy@deepseek.com. Same day, corrected our report: enabled: false does stop the upload.
  • 28 Sep: told DeepSeek the upload had reached the npm latest release and set publication for 8 October, as our first report said we would if that happened (see our disclosure policy).
  • 28 Sep: DeepSeek added the web setting (commit 7ded036).
  • 29 Sep: Data Processing Statement page replaced by "Page moved".
  • 8 Oct, 16:10 UK: final notice sent. Published 17:00 UK.

We have received no reply from DeepSeek. Any response will be added here. Evidence and reproduction steps are available to DeepSeek and to researchers on request: research@agenticthinking.uk.