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.

Remote Retry Llm Plugin — DSH Plugin for DeepSeek Harness
← Plugins
R

dsh-remote-retry-llm-plugin

Remote Retry Llm Plugin

DSH plugin for SSH remote development (exec/read/write tools) with boosted LLM retries — for unstable or rate-limited remote LLM endpoints.

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

npx -y @deepseek-ai/dsh plugin --profile web add github:xiazhicheng/dsh-remote-retry-llm-plugin#6482c77c817a60a8e76d9ac04003bda6dfae8147
READMECompatibilityVersions

Compatibility and provenance

Remote Retry Llm Plugin is published as dsh-remote-retry-llm-plugin and currently resolves to version 0.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
9/24/2026

Versions

0.1.0
stable
9/24/2026

Related plugins

Loading related plugins…

Latest
0.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
Apache-2.0
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
9/25/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
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in developer-tools.

DSCODE@toddzheng024/dscode-bundleA complete DeepSeek coding agent with persistent shell, Ultra collaboration and automatic permission review.Automation@michengai/dsh-automationDSH Automation — 在独立 DSH Session 中按计划执行和管理编码任务 · Schedule and manage coding tasks in isolated DSH sessionsFind Plugindsh-find-pluginFind DeepSeek Harness plugins inside the agent — live GitHub dsh-plugin topic search, ranked by stars.Plugindsh-pluginA community plugin marketplace for DeepSeek Harness, built to the official plugin spec — browse, search and install 9000+ human-curated community plugins without leaving the app. · DeepSeek Harness 社区插件市场(遵循官方开发规范):9000+ 人工精选社区插件,每日更新。

README

dsh-remote-retry-llm-plugin

English | 中文

A DeepSeek Harness plugin that provides SSH remote development tools (exec, read, write) and boosts LLM retries to 50+ for unstable endpoints.

When your LLM is flaky — frequent 429/RATE_LIMIT, 5xx/SERVER, timeouts, empty responses — the built-in recovery ends the turn after just 5 retries. This plugin installs an additional listener on the agent loop's agent/request-error recovery waterfall that retries 50 times by default, or forever in always mode, stopping only on success, turn cancellation, or plugin disposal.

Written in TypeScript. Host-only — no client/UI bundle. Safe to mount alongside the built-in @deepseek-ai/dsh-llm-retry.


Why

The user request, verbatim:

因为我连的 LLM 不稳定,经常被限制,所以我需要你给 dsh 增加一个功能就是重试支持多次,目前默认的是就 5 次,我希望改成更多次,比如 50 次,一直不断重试,一直到 LLM 能正常返回。

Translation: "The LLM I connect to is unstable and frequently gets rate-limited. Add a feature to DSH that retries many times — the default is only 5, I want more, like 50, keep retrying until the LLM returns normally."

This plugin does exactly that, as an installable bundle.

How it works

DSH executes provider retry policy on the agent/request-error waterfall — an open-step extension point where each listener receives a failed request's { agent, turn, step, provider, failure, retryPolicy, signal } and returns { kind: 'retry' } to re-run the step, or calls next() to delegate. The built-in @deepseek-ai/dsh-llm-retry already listens there and enforces the provider-owned retryPolicy (normal = 5 retries by default).

This plugin adds a second listener on the same waterfall with its own, more aggressive policy:

  • always (default) — retry every eligible failure without an attempt limit.
  • normal — retry only retryableCodes up to maxRetries (default 50).

Both plugins cooperate by waterfall order: whichever owns a given retry returns { kind: 'retry' }. This plugin keeps its own per-step retry count in memory (keyed by agent object identity + turn + step + provider) and registers no session projection, so it never conflicts with the built-in retry plugin's llmRetry projection. It respects the turn abort signal and disposes cleanly (aborts active waits, drains them), so it never blocks turn quiescence or plugin disposal.

Retries emit llm/retry and llm/retry-started session events so every retry is visible in the UI (matching the built-in retry plugin's format).

SSH Remote Development

This plugin also provides SSH tools that let the agent execute commands, read files, and write files on a remote server — enabling remote development without SSH-ing manually.

Tools

ToolDescriptionParameters
ssh-execExecute a shell command on the remote servercommand (required), timeoutMs (optional, default 30000)
ssh-readRead a file from the remote serverpath (required)
ssh-writeWrite content to a file on the remote serverpath (required), content (required)

Example usage

Agent: ssh-exec { command: "ls -la /home/user/project" }
→ { stdout: "total 48\ndrwxr-xr-x ...", stderr: "", exitCode: 0 }

Agent: ssh-read { path: "/home/user/project/config.yaml" }
→ { content: "host: ...\nport: 22", path: "/home/user/project/config.yaml" }

Agent: ssh-write { path: "/home/user/project/README.md", content: "# My Project" }
→ { success: true, path: "/home/user/project/README.md" }

The SSH connection is established lazily on first tool call and cached for the plugin's lifetime. Connection parameters are configured in the plugin config (see below).

Install

From a local clone (recommended for development)

git clone https://github.com/<you>/dsh-remote-retry-llm-plugin.git
cd dsh-remote-retry-llm-plugin
pnpm install            # optional: only needed to rebuild lib/ from src/
pnpm build              # optional: regenerates lib/ (already committed)

Then in DSH, install the bundle from the absolute package directory:

plugin_manager → install_bundle → target: /absolute/path/to/dsh-remote-retry-llm-plugin

The repo commits lib/, so the bundle loads without a build step and without pnpm build-script approval.

From GitHub directly

Point plugin_manager install_bundle at the GitHub URL; DSH runs pnpm add and selects the bundle.

Configure

The row ships with sensible defaults in cordis.patch.yml. Edit config there (HMR applies changes live in YAML-enabled profiles), or change it in Settings → Plugins:

- id: retry-llm-plugin
  name: dsh-remote-retry-llm-plugin
  config:
    mode: always                 # 'always' (default, no limit) | 'normal' (honor maxRetries)
    maxRetries: 50               # normal-mode budget after the first request (default 50)
    retryableCodes:              # normal-mode eligible codes (default transient set)
      - EMPTY_RESPONSE
      - RATE_LIMIT
      - SERVER
      - TIMEOUT
      - TRANSPORT
    excludeCodes:                # never retried, even in always mode
      - AUTH
      - MISSING_CREDENTIAL
      - NO_ADAPTER
      - INVALID_REQUEST
      - PROTOCOL
      - CONTEXT_OVERFLOW
      - IMAGE_OFFLOAD_REQUIRED
      - REGISTRATION_DISPOSED
    backoff:
      initialDelayMs: 500        # first local delay (default 500)
      maxDelayMs: 30000          # cap (default 30000; built-in uses 10000)
      jitterRatio: 0.2           # symmetric jitter range (default 0.2)
    respectProviderRetryAfter: true   # honor a valid provider Retry-After within maxDelayMs

    # ── SSH remote development ──
    ssh:
      host: myserver.com         # SSH hostname (default localhost)
      port: 22                   # SSH port (default 22)
      username: myuser           # SSH username
      identityFile: ~/.ssh/id_rsa  # SSH private key path
      password: ''               # password auth (alternative to key)
      remoteDir: /home/myuser    # default remote working directory

Defaults at a glance

OptionDefaultNotes
modealwaysRetry every eligible failure until success / cancel / dispose
maxRetries50Used only in normal mode
retryableCodesEMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORTNormal-mode eligible set
excludeCodesAUTH, MISSING_CREDENTIAL, NO_ADAPTER, INVALID_REQUEST, PROTOCOL, CONTEXT_OVERFLOW, IMAGE_OFFLOAD_REQUIRED, REGISTRATION_DISPOSEDPermanent failures + codes owned by other recovery policies
backoff.initialDelayMs500
backoff.maxDelayMs30000Wider than the built-in 10s, for slow-recovering remote endpoints
backoff.jitterRatio0.2
respectProviderRetryAftertrue
ssh.hostlocalhostSSH hostname
ssh.port22SSH port
ssh.username''SSH username
ssh.identityFile''SSH private key path
ssh.password''SSH password (alternative to key)
ssh.remoteDir''Default remote working directory

Backoff is bounded exponential with symmetric jitter, matching the built-in policy's formula.

Simpler alternative (no plugin)

You can also get unlimited retries without this plugin by setting retryPolicy.mode: always on your provider route directly — this is the native DSH knob:

- name: '@deepseek-ai/dsh-llm-deepseek'
  config:
    apiKeyEnv: DEEPSEEK_API_KEY
    retryPolicy:
      mode: always
      backoff:
        initialDelayMs: 1000
        maxDelayMs: 30000
        jitterRatio: 0.2

- name: '@deepseek-ai/dsh-llm-retry'

Use this plugin when you want the boost regardless of each provider's own policy, or a finite 50-retry budget that's larger than the default 5.

Repository layout

dsh-remote-retry-llm-plugin/
├── cordis.patch.yml      # Loader patch: installs the retry-llm-plugin plugin row + defaults
├── icon.svg              # Plugin Manager card icon
├── lib/                  # Committed build output (loads without a build step)
│   ├── index.js          # Host plugin: the agent/request-error recovery listener
│   └── types/
│       └── index.d.ts    # Type declarations
├── locale/
│   ├── en.json           # Plugin Manager display title + description (English)
│   └── zh.json           # (中文)
├── src/
│   └── index.ts          # TypeScript source — the plugin (source of truth)
├── tsdown.config.ts      # Build config: src/ -> lib/
├── tsconfig.json         # Type-check config (pnpm typecheck)
├── package.json          # Bundle manifest: dsh.bundle.patch, exports, icon, devDeps
├── README.md             # This file (English)
├── README.zh.md          # 中文说明
├── LICENSE               # Apache-2.0
└── .gitignore

Build

pnpm install
pnpm build        # tsdown: src/index.ts -> lib/index.js + lib/types/index.d.ts
pnpm typecheck   # tsc --noEmit

lib/ is committed so installations that skip the build still work. Rebuild after editing src/.

Compatibility

Built and tested against DeepSeek Harness 0.1.7-rc.1 (Cordis 4.0.4, schemastery 3.18.4). Runtime dependencies: ssh2 (SSH client), @deepseek-ai/schemastery (config schema), @deepseek-ai/dsh-tools (tool definitions). The @deepseek-ai/* entries in devDependencies are for type-checking and building only.

License

Apache-2.0 — see LICENSE.