DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

@playform/hook-dsh-tool-coach

Hook Dsh Tool Coach

tool-coach hook:一个 DeepSeek Harness 插件,用于教模型停止使用终端读取文件内容。它挂接 tools/post- 和 tools/pre-execute waterfall、agent/pre-step 边界、system-prompt/assemble waterfall 以及 tools/c

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add @playform/hook-dsh-tool-coach@0.2.1
README兼容性版本

兼容性与来源证明

Hook Dsh Tool Coach 以 @playform/hook-dsh-tool-coach 发布,当前版本为 0.2.1。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
npm
Registry 更新时间
2026/11/4

版本

0.2.1stable
2026/10/28
0.2.0stable
2026/10/25
0.1.0stable
2026/10/25

相关插件

正在加载相关插件…

最新版
0.2.1
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
69.4 kB
文件数
38
Surface
any
许可证
CC0-1.0
发布源
npm
GitHub
★ 2
周下载
287
安全扫描
✓ v0.2.1 扫描通过
最近提交
2026/11/4
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Better Sidebardsh-better-sidebarBetter Sidebar for DSH — 在一列中提供文件树、编辑器、变更、任务和侧边聊天,并为每个对话单独显示。同时提供服务,供其他插件注册侧边栏标签页和文件查看器。Client Ui Git Graph@linxin666/dsh-client-ui-git-graph外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包Ssh@linxin666/dsh-sshdsh Web GUI 的远程 SSH 操作:主机配置存储(~/.dsh/dsh-ssh.json,可从 ~/.ssh/config 导入)、支持跳板主机的持久化 ssh2 连接池、exec / PTY Web 终端 / SFTP 传输 / 本地端口转发隧道 / 集群执行Update@linxin666/dsh-update用于 dsh Web GUI 的自更新插件:探测 npm 上是否有更新的系列版本,并在原地运行所属配置的 pnpm 更新;可通过设置图标旁侧边栏中的触发器启动,并显示发布说明面板

README

@playform/hook-dsh-tool-coach - the four-tier ladder that teaches the model to keep file content out of the terminal

Version 0.2.1 - UNPUBLISHED (the npm bootstrap tier 2-planned / 3-candidates).

Plan: SCHEME.md - TOOL-COACH-OPERATIVE-PLAN.md - TOOL-COACH-PLAN.md - TOOL-COACH-RESEARCH.md.

The role

A DeepSeek Harness plugin teaches the model to stop using the terminal for file content: it watches the terminal tool calls (bash, pwsh, config judgeTools, while the dedicated tools are never judged) and runs a four-tier coaching ladder that escalates from silent observation to a persistent system-prompt section to an optional hard deny.

The one-sentence rule the coach enforces: the terminal runs COMMANDS (builds, tests, git, package managers); the tools handle CONTENT.

Any bash segment that reads file content into the conversation or mutates file content on disk is a regression class match, because terminal file edits are invisible to the plugin system: the harness's fs/observed chain (the trigger of the governor, pinner, and normalize plugins) fires ONLY on tool-layer writes.

Detection is deliberately adversarial: the command is normalized before any matching (heredoc bodies stripped, $(...)/backticks -> «sub», $VAR/${VAR} -> «var», $IFS -> space, quote layers removed), then the pattern rows, an intent-marker scan (redirect to a real path = write; pipe into a shell = write; --in-place = write), a craft library for the obfuscated variants, and a catch-all where any write-intent marker on a non-/dev/null path lands as write even when no row matches, so novel zero-day forms still count.

Exemptions (builds, tests, git, package managers, file lifecycle) are checked per pipeline AFTER normalization: an exempt head dominates its pipe (git diff > patch.txt is exempt), while a bare echo x > tracked.md is not.

The five classes are write, read, search, discovery, control, with class-priority resolution across chained segments (cat a; sed -i ... counts once, as write).

Every note names the correct tool with its LIVE registry data, fetched through ctx.tools.schemas(): the tool name, the FIRST SENTENCE of its description (≤ 120 chars), and the primary parameter key.

Any fetch failure degrades to the static STATIC_TOOL_LINES table and logs schema fetch failed -> static fallback, so a note never fails a waterfall.

fetchLive: false (the escape hatch) uses the static table unconditionally.

The three model-facing note texts (notes.first the tier-1 notice, notes.persistent the tier-2 section, notes.denied the tier-3 deny reason) are volatile config cells, so a profile patch that replaces any of them retexts a tier without touching the package.

The templates keep the placeholder grammar of Function/Compose (${command}, ${class}, ${count}, ${traceability}, ${tool.name}, ${tool.description}, ${tool.param}, ${table}), and inserted user data is escaped before substitution, so a composed note never gains an unfilled placeholder.

The intended override appends the "Live-container grammar" block to notes.persistent, so the tier-2 section also teaches the live-containers machinery; the lesson is the SECTION, not the notice, and the live-containers README's "Teaching the grammar (the tool-coach note)" describes it.

The surfaces

KindNameWhat
listenertools/post-executejudges every terminal call; tier-0 ledger + tier-1 notice via additionalContexts (source {kind: 'tool-coach', form: 'notice', summary: '<tool> <class> × <n>'})
listenertools/pre-executetier 3: denies the terminal call with the lesson as the deny reason
listeneragent/pre-stepthe clean-window accounting between judged calls
listenersystem-prompt/assembletier 2: the persistent "Tool discipline" section
listenertools/changerebuilds the cached section when the registry changes
configSCHEME.mdthe full Schemastery schema (see the table below)

The four tiers: tier 0 fires on every detected offense (ledger only, the model sees nothing); tier 1 fires when a class reaches threshold (3) strikes within window (8) judged calls, with cooldown (10) between notes; tier 2 escalates at escalateThreshold (6) offenses since the last note and turns off again after cleanWindow (12) clean calls; tier 3 fires at enforceThreshold (4) strikes.

Tier 3 is off by default (enforce: 'off'), where write denies only write-class segments and all adds read and search.

Discovery and control are never denied, even at all, because flagging them hard would dilute the write/read signal.

Every knob is volatile, hot-edited without remounting, and a flip lands on the next judged call.

The configuration

FieldTypeDefaultMeaning
logbooleantruevolatile - the shared factory log switch
logFilestring~/.dsh/playform/hook-dsh-tool-coach.logvolatile - the ledger file
enabledbooleantruevolatile - the coach switch
judgeToolsarray["bash", "pwsh"]volatile - the terminal tools that are judged
thresholdnumber3volatile - tier-1 strikes within the window
windownumber8volatile - the sliding judged-call window
cooldownnumber10volatile - judged calls between tier-1 notes
escalateThresholdnumber6volatile - offenses since the last note that turn tier 2 on
cleanWindownumber12volatile - clean calls that turn tier 2 off
enforceunionoffvolatile - off / write / all, the tier-3 deny scope
enforceThresholdnumber4volatile - strikes since the last note that deny
exemptPatternsarrayDEFAULT_EXEMPTSvolatile - the exempt command heads
patternTablearrayDEFAULT_PATTERNSvolatile - { pattern, class, tool, note? } rows
notesobjectfirst / persistent / denied templatesvolatile - the three model-facing note texts

The ledger

One log per module: ~/.dsh/playform/hook-dsh-tool-coach.log (config logFile), where the durable file lines are the [ISO] message forms with the hook-dsh-tool-coach: prefix.

activated (bundle 0.2.1, threshold=<t>/<w>, cooldown=<c>, escalate=<e>, clean=<cl>, enforce=<off|write|all>@<et>, judge=<list>, fetch=live|static)
disabled (enabled=false)
offense <tool> <class> <pattern>
strike <n>/<t> <tool> <class> -> note <tool>
cooldown suppressed <n> <tool> <class>
escalated persistent section (<n> strikes)
persistent section cleared (<n> clean calls)
section rebuilt (ttl <n>)
section rebuilt (tools/change)
denied <tool> <class> <pattern> -> use <tool>
exempt <tool> <pattern>
schema fetch failed -> static fallback

The build and the tests

  • Build: pnpm --config.verify-deps-before-run=false --dir Classic/packages/hook-dsh-tool-coach run prepublishOnly
  • Smokes: node Classic/packages/hook-dsh-tool-coach/Target/Test/<Folder>/Test.js - the six folders sum to the 129-check baseline exactly
    • Wiring-And-Defaults - 36 checks
    • Passthrough-And-Guards - 6 checks
    • Notes-And-Cooldown - 16 checks
    • Persistent-Section - 16 checks
    • Enforce-And-Exempts - 15 checks
    • Dynamic-And-Craft - 40 checks

The plan

SCHEME.md - TOOL-COACH-OPERATIVE-PLAN.md (Part 3) - TOOL-COACH-PLAN.md - TOOL-COACH-RESEARCH.md.

fetchLivebooleantruevolatile - fetch tool data from the live registry
maxSectionToolsnumber5volatile - the tier-2 tool-table row cap
sectionTtlnumber20volatile - judged calls between tier-2 section rebuilds