dsh-ops-conventions:在动手前确定性注入操作约定

前言

在 DSH 里用 OpenViking 技能或记忆记下「写脚本前先看清单」「改文件前先备份」这类操作约定,很常见。真正开始改代码、写文件时,模型并不总会主动去读这些约定——记了但干活时不提就不用,和没记差不多。靠每轮全量塞进提示词或只靠 AGENTS.md,要么费 token,要么仍然不稳定。

下面介绍维护者 HeliosTangDev 发布的 DSH 工作流插件 dsh-ops-conventions(GitHub:HeliosTangDev/dsh-ops-conventions):在动手前把极短「门铃」和操作索引路径注入上下文,并可选用硬拦截,在未读过 INDEX.md 前拒绝写类工具调用。分类为工作流;社区目录页见 SkillHub 条目。

这是什么

dsh-ops-conventions 是 DeepSeek Harness 的 Cordis 组合包插件,MIT 许可。定位是:把「操作约定」在动手前确定性写进会话上下文,并可选地强制模型先读约定入口清单;约定内容本身可放在包内示例目录、自建目录,或与 OpenViking 技能目录对齐,插件负责注入时机与(可选)执行门槛。

核心功能

依据仓库 README,能力可概括为以下几点。

  1. 门铃注入:每会话、每约定版本只注入一次(README 称约 150 token;FAQ 亦提到约 70 token 量级的一条插件来源消息)。不按「像不像要动手」过滤,闲聊轮也会注入;改约定目录里的 VERSION 后,下一轮任意类型消息会再次注入。
  2. 内置常驻约定:门铃里自带 6 行左右常驻约定(收尾自检、记忆归并、_tasks 清空、不列多方案、备份回滚、只改工具区等),减少对可能被 OpenViking 抽取重写的 profile.md 段的依赖。
  3. 注入日志:每次注入记一行日志(含选中的约定目录、索引是否存在),便于核对是否生效。
  4. 硬拦截(默认开启):在「操作类」轮次中,若本会话尚未成功 read 过 INDEX.md,对 write、edit 等写类工具直接 deny,并提示先读索引;读过后本会话放行。闲聊轮不拦;bash / shell 默认不拦,可在配置里加入拦截列表。
  5. 零配置可用:包内自带 skills/ 示例清单;也可指向自有目录或 OpenViking 存储路径。

钩子异常时 fail-open(放行)并写日志;无有效 INDEX.md 时不拦。多会话各自独立。

安装与启用

官方推荐用仓库内的安装脚本(跨平台、零依赖),不要凭插件名自行拼接 dsh plugin add。

git clone https://github.com/HeliosTangDev/dsh-ops-conventions.git
cd dsh-ops-conventions
node install.mjs                       # 默认装到 ~/.dsh/profiles/desktop
node install.mjs /path/to/profile      # 指定 profile
node install.mjs /path/to/profile --uninstall   # 卸载

脚本会把包复制到 <profile>/node_modules/dsh-ops-conventions,在 package.json 的 dependencies 登记,并把包名加入 dsh.profile.bundles(未加入则不会加载)。

手动安装时,需把整个仓库放到 <profile>/node_modules/dsh-ops-conventions,并在 package.json 中声明依赖与 bundles;必须保留包内的 dsh.bundle.patch 指向 cordis.patch.yml,否则插件管理器会报「没有声明组合包」且不会加载。

装完后:在 DSH 插件页对 dsh-ops-conventions 关掉再打开即可热重载(改 skills/ 或配置时一般不必重启 DSH)。若改的是 index.mjs / rule.mjs,关掉再打开不保证重新 import,重启 DeepSeek Harness 最稳。

约定目录与配置

约定目录需包含 INDEX.md;VERSION 可选,用于触发重新注入。

skills/
├── INDEX.md          # 入口清单(注入文本里给出的路径)
├── VERSION           # 版本号;修改后下一轮会重新注入
└── ops-scripts/
    └── SKILL.md      # 各类清单,由 INDEX.md 引用

包内示例含六类:ops-scripts、ops-notes、ops-files、ops-check、ops-longtask、ops-dsh,可按需改成自己的清单。

skillsDir 解析顺序(逐个检查目录内是否真有 INDEX.md,取第一个有效):

  1. 配置项 skillsDir
  2. 环境变量 DSH_OPS_CONVENTIONS_DIR
  3. 包内 skills/
  4. OpenViking:~/.openviking/data/viking/default/user/default/memories/ops-conventions
  5. ~/.dsh/ops-conventions/skills

在 profile 的 cordis.patch.yml 中可写例如:

- id: dsh-ops-conventions
  name: "dsh-ops-conventions"
  config:
    skillsDir: "D:/my-conventions/skills"
    enforce: true
    # blockedTools: ["write", "edit", "bash"]
配置项 环境变量 默认 说明
skillsDir DSH_OPS_CONVENTIONS_DIR 包内 skills/ 约定目录,需含 INDEX.md
logFile DSH_OPS_CONVENTIONS_LOG ~/.dsh/ops-conventions/ops-conventions.log 注入 / 拦截日志
enforce — true false 时只注入门铃,不硬拦截
blockedTools — write edit multi_edit apply_patch notebook_edit 可自行加入 bash / pwsh

典型用法:保持默认或把 skillsDir 指到你的清单;开启 enforce 时,模型在写文件前会被要求先 read 注入消息中的 INDEX.md 并按清单执行,再重试写操作。若出现「硬拦截」拒绝,按提示路径读索引即可;不需要拦截时设 enforce: false。

机制简述

  • 监听 agent/pre-step(waterfall):在模型调用前,若该会话该版本尚未注入,则追加一条 instructions 来源的消息。
  • 硬拦截监听 tools/pre-execute:操作类轮次且未成功读过 INDEX.md 时,对配置的写类工具返回 deny;tools/result 观察到成功的 INDEX 读取后放行。
  • 日志中可出现 inject vN、guard deny、guard index-read、guard loaded enforce=... 等条目,用于核对行为。

适用场景与注意

适合已经把操作约定写在 OpenViking 技能或本地 Markdown 清单里、又希望 DSH 在会话里稳定提醒并在需要时强制先读索引的用户。插件以当前 DSH 进程的权限运行,安装前请阅读 GitHub 仓库 源码与 MIT 许可证;本地脚本安装不会出现在插件市场搜索结果里,需在「已装」列表中确认。若卡片报「没有声明组合包」,检查 package.json 是否保留 dsh.bundle.patch。

结尾

dsh-ops-conventions 针对「约定记了但干活时不提就不用」:用版本化的短门铃 + 可选硬拦截,把「先读 INDEX.md」变成可核对、可配置的工作流步骤。目录与文档:SkillHub、GitHub。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜