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.

Decisions Classifiers — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
D

dsh-decisions-classifiers

Decisions Classifiers

OpenAI Decisions API for DeepSeek Harness: predicate/choice/score classifiers as agent tools and an injectable service, a built-in classifier library, an opt-in pre-execution gate, a Settings page, and a "let a classifier decide" card beside ask_user_question multiple-choice prompts.

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

npx -y @deepseek-ai/dsh plugin --profile web add github:erkinalp/dsh-decisions-classifiers#3858e1533f8fef9c4db19b2308445f2bc682ef8a
READMECompatibilityVersions

Compatibility and provenance

Decisions Classifiers is published as dsh-decisions-classifiers 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
web
Release source
github
Registry updated
10/7/2026

Versions

0.1.1stable
10/7/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
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/7/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.

Hindsight Coding Agents@vectorize-io/hindsight-coding-agentsReflect-only Hindsight long-term memory for coding agents (harness-pluggable: opencode, …), with automatic background ingestion (no setup CLI).Ds Botds-botDS Bot: a team of long-lived Bots for DeepSeek Harness, with Main Bots, Bot-to-Bot messages and group chatsDSCODE Desktop@toddzheng024/dscode-desktopCoding collaboration, memory, browser workflows and task management for Harness Desktop.Headless@deepseek-ai/dsh-headlessThe dsh one-shot bundle: a direct core Agent/Session runner over dsh-base with no Host, HTTP, or browser layer

README

dsh-decisions-classifiers

OpenAI Decisions API classifiers for DeepSeek Harness.

The Decisions API (POST /v1/decisions, model gpt-6-luna) answers typed questions about text and images instead of generating prose: a predicate returns the probability that a condition holds, a choice returns one of your options with the full probability distribution, and a score returns a probability-weighted average over ordered levels. This plugin puts that capability in four places.

SurfaceWhat it gives you
Agent toolsdecisions_classify (one built-in classifier), decisions_ask (arbitrary typed questions, up to ~10 per request), decisions_status
Cordis servicedecisionsClassifiers — listPresets(), classify(), ask(), status() for other plugins
Opt-in call gateClassify every run_code/bash/write/edit call before it executes and deny the flagged ones
Advice cardA "classifier opinion" card beside ask_user_question multiple-choice prompts, with one click to adopt

Classifier library

idtypeanswers
moderationpredicateDoes this content violate a standard acceptable-use policy?
prompt-injectionpredicateDoes this text try to manipulate an AI system rather than inform a reader?
dangerous-commandpredicateDoes this command irreversibly destroy data or change machine-wide state?
piipredicateDoes this text identify a real individual?
relevancepredicateIs this passage relevant to the stated query? (pass context)
severityscoreCosmetic / workaround available / fully blocked
intentchoicebilling / technical / shipping / other

Anything else goes through decisions_ask, which takes the wire question types directly.

Setup

  1. Install the bundle (see below).
  2. Open Settings → Decisions Classifiers, paste an OpenAI API key, and press Store key. The key is written through the DSH credential seam as OPENAI_API_KEY (or the env name you set) and is never read back by the page. OPENAI_API_KEY in the process environment or a .env file works too.
  3. Press Test connection.

The call gate is off by default: installing this plugin changes no agent behaviour until you turn it on.

Install

dsh plugin --profile <profile> add /absolute/path/to/dsh-decisions-classifiers

or through the Harness plugin manager with the package directory as the target.

Configuration

Every field is settable from the Settings page (persisted to ~/.dsh/decisions-classifiers/config.json) and overridable from the bundle row; live edits win. Pin a deployment in cordis.patch.yml.

keydefaultmeaning
enabledtruemaster switch
baseUrlhttps://api.openai.com/v1endpoint base; /decisions is appended
modelgpt-6-lunathe only model the Decisions API serves today
apiKeyEnvOPENAI_API_KEYcredential-seam reference name
timeoutMs60000per-request budget
defaultThreshold0.5predicate cut-off when a preset does not fix one
advisorEnabledtruethe advice card
gateEnabledfalsethe pre-execution gate
gatePresetdangerous-commandclassifier the gate runs
gateThreshold0.5gate cut-off
gateDecisiondenydeny or escalate
systemPromptSectiontruetell the agent the classifiers exist

What the numbers mean

The endpoint returns a probability distribution over a support, then projects it: choice takes the argmax, score takes the expectation of the zero-based level index, and predicate has nothing to project. Those projections are where the interpretation lives, and they are not equally portable.

typesupport comes fromscalar you getportable?
predicatethe world (true/false)probabilityyes — the one number that travels
choiceyour options listchoice (argmax)no — menu-dependent
scoreyour ordered levelsscore = E[index]no — level-dependent, and metric-imposing

predicate is the only portable scalar. It is a Bernoulli parameter, so it is calibratable against realized outcomes (reliability diagrams, Brier score) and thresholdable against a cost rule. One caveat matters more than it looks: the endpoint accepts any input, so many predicates are subjective ("is this code maintainable?"). There, probability is not a property of the world — it is a marginal over a rule set nobody wrote. Calibration still works, but its referent becomes your raters instead of reality: it licenses "consistent with our standard", never "true".

choice distributions are menu-dependent. The support is your options list, so relabeling the menu moves the numbers while the world stays put. Measured on one fixed top category, with only the tail split ever more finely:

menumax psum p²top-2 gap
2-way [0.80, 0.20]0.80000.68000.6000
4-way [0.80, 0.09, 0.06, 0.05]0.80000.65420.7100

Two candidate concentration measures move in opposite directions under that relabeling. So a 4-option and a 2-option question in the same batch are not comparable on any confidence number, and the interpretable signal is the top-2 margin — how close the routing is to a coin flip.

score is an ordinal position presented as an interval. Levels carry only label and description; the API assigns indices 0..n-1 by position, with no client-supplied weight or value. E[index] is meaningful only if your levels are equally spaced in the quantity you care about — usually false for severity, where cosmetic→workaround is a far smaller real jump than workaround→blocked. Prefer thresholding on P(level >= k) over the returned probabilities: that needs no metric assumption.

confidence is a concentration index, not a probability. The guide calls it a separate field and never defines it, and it cannot be recovered from the published examples: sum p² and the top-2 gap both fit them to within ~0.01 while disagreeing in sign under relabeling. It is also not comparable across questions with different option counts. Read probabilities directly and compute your own statistic with weights you know.

Where the rubric actually lives

No answer type removes the standard you were supposed to specify; they relocate it.

typewhere the standard livesfailure modedetectable?
predicate (observable)the worldestimation erroryes — reliability
predicate (subjective)model prior + promptdefinition ambiguitymostly invisible
choiceyour options listmenu sensitivityyes — measurable
scoreyour levels listimposed equidistancevisible, magnitude unmeasurable

A choice externalizes the standard — readable, diffable, and its sensitivity is measurable. A subjective predicate internalizes it, which makes it less auditable, not more objective. And a subjective probability is a mixture over provenance channels with unknown weights: the model's prior over "maintainable" is built from scraped text, paid annotation, users' own chat inputs and corrections, and automatic outcome signals such as test pass/fail — each with different epistemic standing. That is the practical reason "does the test pass" is trustworthy and "is this maintainable" is not: only the first has a rubric in the loop.

Auditability

Every decisions_classify verdict carries the exact question that was sent — type, name, instructions, and the choices or levels — and decisions_ask returns the questions as normalized and sent. For a subjective predicate that instruction text is the only part of the decision with a knowable provenance, so a verdict without it cannot be reviewed after the fact. The full wire request is deliberately not echoed: it can carry inlined base64 images.

Known limitations

  • Images must be inline base64. The endpoint rejects hosted HTTP(S) URLs and file_id inputs, so decisions_ask reads local paths and inlines them. DSH attachments cannot be passed through by reference.
  • One model. gpt-6-luna is the only available model while the API is in public beta.
  • The advice card sends the questions only, not the surrounding conversation transcript; decisions that depend on earlier chat turns may be less well informed.
  • The gate fails open on a network or credential error, and logs the failure: a classification outage must not block every tool call.
  • confidence is surfaced but should not be thresholded. It is undocumented and menu-dependent; see What the numbers mean.
  • score assumes equally spaced levels, which the API imposes and you cannot override.
  • Pricing is input-token only ($0.10 per 1M tokens for gpt-6-luna), but this plugin does not meter spend.

License

MIT.