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.

Ban Wait — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
B

dsh-ban-wait

Ban Wait

Reject tool parameters that would stall the agent loop: blocking waits, extending timeouts on the fly, and (optionally) synchronous long-running tasks.

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

npx -y @deepseek-ai/dsh plugin --profile web add github:baldovinmarques391-design/dsh-ban-wait#4580d47c6c5b729a59cfc81e312fab9065fe722f
READMECompatibilityVersions

Compatibility and provenance

Ban Wait is published as dsh-ban-wait and currently resolves to version 0.1.1. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
10/17/2026

Versions

0.1.1stable
10/17/2026

Related plugins

Loading related plugins…

Latest
0.1.1
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
Not declared
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/17/2026
View source ↗
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 agents-orchestration.

Headless@deepseek-ai/dsh-headlessThe dsh one-shot bundle: a direct core Agent/Session runner over dsh-base with no Host, HTTP, or browser layerExperimental Agent Team Profile@deepseek-ai/dsh-experimental-agent-team-profileAgent Teams collaboration, tools, and Web UI in one experimental bundleExperimental Ralph Bundle@deepseek-ai/dsh-experimental-ralph-bundleRun explicitly requested repeated work with fresh agents.Subagent Codex@deepseek-ai/dsh-subagent-codexOne-shot Codex subagent provider over the official app-server protocol

README

dsh-ban-wait

One Host plugin that refuses tool arguments which would park the DSH agent loop. The investigation that produced it — every blocking path in this composition, with file:line — is in FINDINGS.md.

It exists because the shell command timeout is not a ceiling. pwsh-sandbox's timeoutMs: 1000 promotes a long command to a background job, but the model can pass timeoutMs: 180000 on the call itself and the executor honors it up to maxTimeoutMs (600000 ms by default) — three minutes inside one tool call. The same class of leak is job_output { wait: true }, clamped only by a 10-minute default. This plugin makes "no single call parks the loop" a property of the tool registry instead of a property of the model's discipline.

Files

FileRole
index.jsthe plugin: policy + global ctx.tools.guard()
check.mjsoffline self-check of the policy (30 assertions, no DSH process)
bundle-check.mjspre-install check: replays what the plugin page inspects, with the harness's own patch loader
cordis.patch.ymlthe bundle's patch: inserts the Host-plane row
package.jsondsh.bundle.patch → cordis.patch.yml; no dependencies
FINDINGS.mdthe escape inventory and root-cause analysis
tools/wait-audit.mjsaudit every session on an instance for parked foreground time; tools/WAIT-AUDIT.md states the metric
tools/speed-audit.mjsper-conversation tok/s, actual vs with the parked time removed, plus the line chart; tools/SPEED-AUDIT.md states the metric

Policy

Config fieldDefaultMeaning
maxBlockingMs1000ceiling for any per-call blocking hint the model supplies
denyWaitTools["job_output"]tools whose wait: true is refused
timeoutHintTools["pwsh", "bash"]tools whose timeoutMs / timeout_ms is checked against maxBlockingMs
requireBackgroundTools[]tools that must be called with run_in_background: true

A refusal is a Error: … tool result that names the ban, clears the background job of blame, and states how to re-issue the call, so the model recovers in one step. An unusable config value is logged and replaced by its default rather than thrown: a typo here must not fail the instance's boot.

Install

Through the plugin page — the only channel that keeps the plugin visible in the inventory with its own toggle:

  1. 添加插件 → paste the absolute project directory D:\桌面\DSH与自动化\dsh-ban-wait. A local directory is recognised by isAbsolute() before any npm-spec parsing and never touches a registry, so the registry chooser in that dialog is irrelevant.
  2. The manager reads package.json, requires a name and a dsh.bundle, adds the dependency to the profile, then reconciles dsh.profile.bundles automatically ("new bundle dependencies activate automatically"). The plugin then appears under 已安装 with a toggle.
  3. If the result reports that a restart is required, restart the instance: a new Host module generation is not loaded into a running process.

Do not also add a raw loader row for this plugin to the profile patch. The bundle's cordis.patch.yml inserts row id ban-wait, and two rows sharing that id make id-targeted patches — the toggle, any override — reach only one of them.

Companion configuration, without which the guard is the only thing standing between the model and a three-minute call:

- id: pwsh-sandbox
  name: "@deepseek-ai/dsh-pwsh-sandbox"
  config:
    timeoutMs: 1000       # default for a command
    maxTimeoutMs: 1000    # ceiling for the model's timeoutMs argument — the line that matters
    maxOutputBytes: 10000

Verify

# the policy itself (30 assertions)
D:\dsh-v2\inst-3080\node\node.exe D:\桌面\DSH与自动化\dsh-ban-wait\check.mjs

# the package the plugin page will inspect: path, package.json, name, dsh.bundle,
# `files` coverage, and a real parse of cordis.patch.yml by the harness loader
D:\dsh-v2\inst-3080\node\node.exe D:\桌面\DSH与自动化\dsh-ban-wait\bundle-check.mjs

Neither proves activation — that happens when the profile mounts the bundle's layer, which the plugin page reports in its install result.

Live probes (each returns a refusal instead of executing):

job_output   { job_id: "pwsh-1", wait: true }        → Error: … (ban-wait): job_output was called with wait: true
pwsh         { command: "ok", timeoutMs: 180000 }    → Error: … caps how long one tool call may hold the agent loop at 1000 ms
pwsh         { command: "ok" }                       → runs normally
workflow     { script: "return 1" }                  → runs synchronously (not banned by default)

Verified on instance 3080: both refusals fire, plain calls and non-blocking job reads behave exactly as before, and the row mounts and unmounts live — no restart was needed for any of it.

Boundaries

  • The guard sees arguments, not duration. A tool with no blocking argument that simply runs long is out of its reach; that is what requireBackgroundTools is for, and what the shell maxTimeoutMs cap already handles for commands.
  • ask_user_question is deliberately never banned: blocking on a human is the feature.
  • workflow and a synchronous subagent are not banned by default. They do real work inside the call, so backgrounding them changes how the result is consumed. Enable per tool when that trade is wanted:
    requireBackgroundTools: [workflow, subagent]
    

Superseded

D:\dsh-v2\inst-3080\plugins\no-blocking-job-wait\ was the first, single-rule version of this ban (it refused only job_output { wait: true }). This project replaces it; the profile patch no longer references it and its files are inert.