Back to home

vinoth4v

dsh-tool-council

DeepSeek Harness plugin: a council tool that asks several models on different providers the same question, then reports where they agree and where they split

Stars
0
Language
JavaScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dsh-tool-council

A DeepSeek Harness plugin that gives the model a council tool: put one question to several models at once, each on a different provider, get every answer back side by side, then have a separate chair model report where they agreed and — more usefully — exactly where they split.

One model's confident answer is one sample. A council turns a contested judgement call into visible disagreement you can act on.

Council: 5/5 members answered.

## google/gemini-3.6-flash (2841ms)
...
## groq/openai/gpt-oss-120b (1204ms)
...

## Synthesis — nvidia/minimaxai/minimax-m3
Members 1-4 recommend REST; member 5 dissents for GraphQL. The split is a
weighting judgement, not a factual dispute: ...

Design

Three decisions make the output worth reading:

  • Members sit on different providers and different model families. Two checkpoints of the same base model fail the same way, so their agreement tells you nothing. Diversity is the entire signal.
  • The chair is not one of the members. It never grades its own answer.
  • A failing member is reported, not thrown. One dead provider must not collapse the panel — that is the reason for polling several in the first place. Members run concurrently, so wall-clock is the slowest member, not the sum.

Install

Requires a working DeepSeek Harness installation (npm install -g @deepseek-ai/dsh) with at least two provider routes configured in $DSH_HOME/settings.yaml.

Clone it inside the profile you are installing into, then register it:

mkdir -p "$HOME/.dsh/profiles/web/plugins"
git clone https://github.com/vinoth4v/dsh-tool-council \
  "$HOME/.dsh/profiles/web/plugins/dsh-tool-council"
cd "$HOME/.dsh/profiles/web" && dsh plugin --profile web add ./plugins/dsh-tool-council

The location matters. dsh plugin add links the package, and Node resolves a symlink to its real path before looking for dependencies — so a clone living outside $DSH_HOME/profiles cannot see @deepseek-ai/dsh-llm or @deepseek-ai/dsh-tools and fails to load with ERR_MODULE_NOT_FOUND. Cloning under profiles/ lets the ordinary parent-directory walk reach the harness's own profiles/node_modules, which carries both.

To keep the checkout somewhere else (a normal projects directory), link the two peer packages into it by hand — pointing at your harness installation — and the same walk succeeds:

DSHMOD="$(dirname "$(readlink -f "$(command -v dsh)")")/../lib/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai"
mkdir -p node_modules/@deepseek-ai
ln -sfn "$DSHMOD/dsh-llm"   node_modules/@deepseek-ai/dsh-llm
ln -sfn "$DSHMOD/dsh-tools" node_modules/@deepseek-ai/dsh-tools

Then add an entry to $DSH_HOME/profiles/web/cordis.patch.yml:

- insert:
    - id: council
      name: dsh-tool-council
      config:
        members:
          - provider: google
            model: gemini-3.6-flash
          - provider: groq
            model: openai/gpt-oss-120b
          - provider: nvidia
            model: z-ai/glm-5.2
          - provider: openrouter
            model: nvidia/nemotron-3-super-120b-a12b:free
          - provider: mistral
            model: devstral-medium-latest
        synthesis:
          provider: nvidia
          model: minimaxai/minimax-m3
        maxTokens: 2048
        timeoutMs: 120000

Restart the harness. Repeat for any other profile (headless, tui) that should have the tool.

Every provider must be a route you have configured, and every model an id that route serves — the plugin does not validate membership, so an unknown pair fails at request time with the provider's own error, reported against that member.

Configuration

FieldDefaultMeaning
members3 built-in routesThe panel. Each entry is { provider, model, role? }. Capped at 8.
synthesisgoogle / gemini-3.6-flashThe chair route, or false to never synthesize.
maxTokens2048Generation cap per member and for the chair.
timeoutMs120000Deadline per call, fused with the caller's own cancellation.

The built-in defaults exist only so the plugin loads without configuration. Set members to routes you actually have — the defaults name specific providers that may not exist in your deployment.

Tool arguments

The model calls council with:

  • question (required) — Members see only this text, not the surrounding conversation, so it must be self-contained. The tool description tells the model as much; if answers look context-starved, this is why.
  • members (optional) — Override the panel for one call. Each entry takes an optional role ("security reviewer", "performance skeptic"), which is shown to the chair.
  • synthesize (optional, default true) — Set false to read the raw answers without a chair pass.

It returns { question, answers[], synthesis? }, where each answer carries provider, model, ok, elapsedMs, and either text or error. Synthesis is skipped when fewer than two members succeed — there is nothing to reconcile a lone answer against.

Cost

One provider request per member, plus one for the chair. A five-member panel is six requests. The tool description tells the model to reserve it for consequential or contested questions rather than routine lookups, but on metered providers it is worth watching.

Relationship to the upstream project

This is a community plugin, not part of the harness. DeepSeek Harness does not accept external pull requests at this stage and instead points contributors at building plugins and tagging them dsh-plugin — which is what this is. The upstream project's own words: "We do not believe that packages in the official repository are inherently more important than packages created by the community."

License

MIT