douchu004/dsh-skill-triage ↗★ 0
dsh-skill-triage
Skill triage gate for DeepSeek Harness: on a trigger word (default @skill) or every turn, search the installed skill catalog, require an explicit use/skip decision per candidate, and block other tools until every chosen skill is loaded.
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:douchu004/dsh-skill-triage说明文档
阅读完整 README ↗配置
写在 profile 的 cordis.patch.yml(或插件自己的 cordis.patch.yml)里,例如:
- insert:
- id: skill-triage
name: dsh-skill-triage
config:
triggerMode: keyword
triggerWords: ['@skill', '找技能']
maxCandidates: 6
requiredScore: 3
| 字段 | 默认 | 含义 |
|---|---|---|
enabled | true | 总开关。关掉后不注入、不拦截,只保留 skill_triage 工具 |
triggerMode | keyword | keyword=出现触发词才介入;always=每轮都介入 |
triggerWords | ["@skill","找技能"] | 触发词,大小写不敏感的子串匹配;空数组=永不触发 |
minScore | 1.6 | 候选进入分诊的最低相关度 |
requiredScore | 3 | 标记「强匹配」的阈值(强匹配如果不用,理由必须写实) |
maxCandidates | 6 | 一次最多列几个候选(1–20) |
maxDenials | 4 | 同一轮连续拒绝多少次后自动解禁(fail-open) |
announceNoMatch | true | 没有候选时也回一句「已检索、无匹配」 |
promptSection | true | 在系统提示词里加一段稳定契约 |
steerUntriaged | true | 未分诊就想收轮时 steer 一次 |
diagnostics | true | 写诊断日志 |
diagnosticsPath | '' | 默认 ~/.dsh/logs/skill-triage.log |
promptExcerptChars | 0 | 日志里保留多少字需求原文(默认不落原文) |
verifySkillPaths | false | 是否用 existsSync 复查候选的 SKILL.md 路径(内置 office skill 在 app.asar 里,普通进程看不到,默认不查以免误杀) |
excludeSkills | [] | 永不参与分诊的 skill 名 |
excludeProviders | [] | 永不参与分诊的 provider |
allowTools | ["skill","ask_user_question","todo_write"] | 门禁期间仍放行的工具 |
诊断日志是一行一条 JSON:apply / pre-step(候选与命中词)/ triage(use 与 skip 理由)/ fail-open / steer / error,只保留最近 400 行。它同时是一份审计记录:谁在哪一轮用了哪些 skill、以什么理由弃用了哪些。