DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Trusted Host Proxy 403 Fix — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

dsh-trusted-host-proxy-403-fix

Trusted Host Proxy 403 Fix

Fix privileged /api 403 when DeepSeek Harness Web UI is reached through a reverse proxy Host already listed in --trusted-host; make settings persistence work for those hosts too. Not an authentication layer.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:roojay/dsh-trusted-host-proxy-403-fix#7bd231cb7843715675fddd8d872ac0f645f98af5
READMECompatibilityVersions

Compatibility and provenance

Trusted Host Proxy 403 Fix is published as dsh-trusted-host-proxy-403-fix and currently resolves to version 0.7.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/20/2026

Versions

0.7.0stable
9/12/2026
0.6.0stable
9/12/2026
0.5.0stable
9/11/2026
Show 5 more versionsCollapse versions
0.4.1stable
9/6/2026
0.4.0stable
9/6/2026
0.3.0stable
8/25/2026
0.2.0stable
8/15/2026
0.1.0stable
8/14/2026

Related plugins

Loading related plugins…

Latest
0.7.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
160
Last push
9/12/2026
View source ↗Project homepage ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in security-access.

Doctor@linxin666/dsh-doctorTransactional rescue mode for DSH profiles with a supervised launcher, isolated recovery capsule, deterministic repairs, health monitoring, and a local Web recovery consolePocketdsh-pocketPut DeepSeek Harness in your pocket: one package, one settings page, and scan a QR code on your phone to access DSH on your computer in sync (LAN + public network, real-time screen mirroring).DSCODE@toddzheng024/dscode-bundleA complete DeepSeek coding agent with persistent shell, Ultra collaboration and automatic permission review.Auto Reviewdsh-auto-reviewSecond-model AI auto-review for DeepSeek Harness approval requests: a read-only reviewer subagent decides allow/deny on the approval answerer chain, with fail-closed fallback and full session-log audit.

README

dsh-trusted-host-proxy-403-fix

English | 中文

A standalone DeepSeek Harness plugin for the web profile. Version 0.7.0 is pinned to @deepseek-ai/dsh@0.1.5-rc.2.

DSH 0.1.2+ adds a process-token or signed-cookie gate to Web pages and API requests. In reverse-proxy deployments that already authenticate users with Cloudflare Access or an equivalent layer and constrain the public authority with --trusted-host, this plugin skips only the cookie 401 for requests that pass the trusted Host, Origin, and Fetch Metadata fence. It also keeps settings, locale, and theme persistence in host mode.

This plugin is not an authentication layer. Untrusted Host headers, cross-site requests, and mismatched Origins remain rejected.

Security boundary

  • Keep dsh web bound to a loopback address; never expose it directly to the public network.
  • Add only canonical host[:port] values actually used by clients to --trusted-host. Schemes, paths, user info, and wildcards are invalid.
  • Protect public entry points with Cloudflare Access, an authenticating reverse proxy, or equivalent network isolation.
  • A browser Origin must have the same host and port as the Host header. sec-fetch-site: cross-site and Origin: null are rejected.
  • Existing cookies, process tokens, redirects, and non-401 responses keep their original behavior.

Settings persistence

For pages admitted by that boundary, the client half enables the same host-backed persistence used by a loopback page:

  • It keeps connection.isLoopback and ctx.remote.$host.isLoopback in the host-settings-capable state.
  • It upgrades the shared Settings mirror from memory to host and calls load().
  • It upgrades the Locale and Theme controllers to host persistence.

Credentials state in Settings → Models, language, appearance, and Composer Enter preferences therefore survive refreshes and DSH process restarts.

Effective configuration viewer

On a trusted reverse-proxy page, the Host desktop's Open configuration file action is replaced with View effective config:

  • It reads namespace values resolved by the running DSH process through the existing settings.describe() boundary.
  • It supports YAML / JSON views, refresh, and copy.
  • Keys, tokens, and passwords remain redacted by the DSH server-side schema. The plugin never reads or returns the raw settings.yaml document.
  • The view represents effective values, not the source file's comments or original formatting.

Install

Install the published npm version:

dsh plugin --profile web add dsh-trusted-host-proxy-403-fix@0.7.0

Install the GitHub Release tarball:

dsh plugin --profile web add https://github.com/roojay/dsh-trusted-host-proxy-403-fix/releases/download/v0.7.0/dsh-trusted-host-proxy-403-fix-0.7.0.tgz

Test a local checkout before release:

cd /absolute/path/to/dsh-trusted-host-proxy-403-fix
npm install --ignore-scripts --no-package-lock
dsh plugin --profile web add "$PWD"

Install peer dependencies before linking a local checkout. Keep trustedHosts: !!js ctx.webRuntime.trustedHosts in cordis.patch.yml; do not hard-code an authority there.

Fully restart the Web process after installing or changing the source, and continue passing the public authority:

dsh web --port 3080 --trusted-host app.example.com

Verify

Inspect the merged profile first:

dsh --profile web --dump-config

Then verify the index boundary through the server loopback address:

# Trusted Host: the index loads without a DSH cookie.
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3080/ \
  -H 'Host: app.example.com'

# Untrusted Host: the index must not load.
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3080/ \
  -H 'Host: evil.example'

# Wrong Origin: API requests remain forbidden.
curl -sS -o /dev/null -w '%{http_code}\n' -X POST http://127.0.0.1:3080/api/settings.describe \
  -H 'Host: app.example.com' \
  -H 'Origin: https://evil.example' \
  -H 'content-type: application/json' \
  -d '{}'

After authenticating at the front end, also verify in a real browser that sessions open, messages can be sent, Settings → Models can read and save credentials, locale/theme preferences survive a hard refresh and a full process restart, and View effective config contains only redacted current values.

Develop

npm install --ignore-scripts --no-package-lock
npm test
npm pack

Tests pin the DSH 0.1.5-rc.2 peer versions and assert the HostConnectionService.requestRejection and authorizeIndex contracts so an upstream API change fails closed instead of silently weakening the boundary or breaking existing behavior.

License

MIT. Request-fence logic follows the MIT-licensed @deepseek-ai/dsh-client-connection implementation.