前言¶
在 DeepSeek Harness(DSH)里跑智能体时,模型可以连续发起 Shell、读写文件、装依赖、派生子 agent。常见做法是事后看日志,或在 prompt 里口头约定「别动某目录」——这类约定既不结构化,也很难在每次 tool call 上强制执行。Stop That Shit(STS)的思路相反:在用户消息或斜杠命令里显式声明一份按会话生效的 scope 合约,插件在 harness 侧对每一次工具调用做审计;未武装合约前,守卫处于惰性状态,调用照常放行,只给模型一条简短提示说明尚未确认合约。
Qcsj777/dsh-stop-that-shit 是 DSH 插件 bundle:内嵌上游 lennney/stop-that-shit(MIT),并加上面向 DSH 0.2.1-rc.2 的薄适配层与 /sts 斜杠命令。社区目录分类为 admin-security;维护者为 Qcsj777。目录页:https://www.skillhub.cn/plugins/Qcsj777/dsh-stop-that-shit,源码:https://github.com/Qcsj777/dsh-stop-that-shit。
这是什么¶
一句话:从 $stop-that-shit … 或 /sts … 指令解析 scope 合约,武装后对 root 会话 lineage 下的每次 tool call 判准;拒绝是真实的 tool denial,事件落盘审计,数据不出本机。
与「只靠 system prompt 自律」相比,STS 把 mode、文件边界、依赖/hash 权限、子 agent 预算等写成可解析字段;解析失败则保留上一份合约并返回说明,而不是静默放宽。
核心功能¶
惰性守卫与合约武装¶
- 未见有效 directive 时:所有 tool call 允许,模型仅看到「尚未确认合约」类 advisory。
- 武装方式:用户消息第一行以
$stop-that-shit或$stop-that-shit:开头;--之后或换行后的内容为任务正文,解析器忽略。 - 运行时整句指令(仍写在 prompt 里)包括:
$stop-that-shit status、runtime [all]、explain evt_<uuid>、label evt_<uuid> correct|incorrect|inconclusive等。
合约字段(节选)¶
| field | 常见取值 | 默认 | 含义 |
|---|---|---|---|
| mode | answer review change monitor open |
unconfirmed |
授权的工作类型 |
| level | watch guard lock off |
watch |
违规时的拦截强度 |
files= |
glob\|glob |
未设 | 文件边界,形如 src/**,不是 src/ |
deps= |
allow ask deny |
ask |
依赖/装包权限 |
hash= |
allow ask deny |
deny |
hash/版本钉死变更权限 |
agents= |
正整数 | 不限 | 委派预算 |
未知字段、冲突重复项、畸形值会被拒绝并附带 context;$stop-that-shit 不在首行则只警告,不武装。
/sts 斜杠命令¶
/sts 注入与用户手打等价的 directive 文本(普通 user message),走同一条武装路径,避免静默扩权。示例:
/sts # 同 /sts status
/sts status
/sts review files=src/** -- look at it
/sts change lock files=src/**,test/** deps=deny hash=allow agents=4
/sts off # 解除武装
依赖 harness 的 commands 服务;无该服务时插件仍可加载并守卫,只是没有 /sts。
状态与会话 lineage¶
OFF:尚未见到 directive。OBSERVING:见过 directive 但未确认变更权限(watch)。ARMED:有效 level 下的合约生效。
审计依据调用会话所在 root 会话的合约;子 agent(root → child → grandchild)仍按 root 合约判。通过 live session store 回溯 lineage;父存在但 root 无法解析时,拒绝调用并给出「no verified root session」,不猜测。
拒绝后:模型收到原因文本,事件写入 audit,harness 仍会对 synthesized error 跑 tools/post-execute。
本地存储¶
默认状态目录:~/.dsh/stop-that-shit(Windows:%USERPROFILE%\.dsh\stop-that-shit)。可在 bundle patch 里改 dataDir。
<dataDir>/sessions/<sha256(sessionId)[0..24]>.json # 合约与委派账本
<dataDir>/audit/<sessionKey>.jsonl # 追加式审计
纯 JSON 落盘;删除目录即重置全部合约。
安装与启用¶
harness 以 profile bundle 安装;包内自带 cordis.patch.yml:
- insert:
- id: sts-bridge
name: 'dsh-stop-that-shit'
config:
dataDir: ''
dataDir 为空则用上述默认目录;可指向其他路径以便按 profile 隔离状态。
从 GitHub 安装(README 原文):
dsh plugin --profile desktop add github:Qcsj777/dsh-stop-that-shit
package.json 声明引擎要求:dsh >=0.2.1-rc.2,当前包版本 0.1.0,许可证 MIT。
典型用法¶
1、在 profile 中按上面命令加入插件并重启或 reload harness(按你本地 DSH 习惯操作)。
2、需要改代码前,首行武装合约,后面写任务,例如:
$stop-that-shit change lock files=src/**,test/** deps=deny hash=allow agents=4 -- implement the parser
3、只想只读审视时,可缩小 mode 与 files,或用 /sts review files=src/** -- look at it。
4、查当前合约与来源:/sts status 或 $stop-that-shit status。
5、某次拦截要复盘:$stop-that-shit explain evt_<uuid>,必要时 label … correct|incorrect|inconclusive。
上游 README 注明测试可通过:
node --test test/dsh-adapter.test.cjs test/dsh-compat.test.cjs test/bridge-mount.test.cjs
(76 tests,资料记载全部通过。)
适用场景与注意¶
适合谁:需要在 DSH 桌面或自建 profile 里,对「能改哪些路径、能否装包、能否派 agent」做可审计、可重复约束的开发者;分类 admin-security 也表明偏向管理面与风险控制。
务必知晓:
- 插件与 harness 同一进程权限运行;安装前应自行阅读
lib/、src/与VENDOR.md,确认许可证(MIT)与 vendored 上游 commit。 - SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系;安装源以你信任的 GitHub 仓库为准。
watch/guard/lock挡的是 tool 层违规,不能替代 OS 级沙箱;敏感环境应叠加系统权限与人工 review。- 无
commands服务时仅缺/sts,武装仍依赖首行$stop-that-shit。
结尾¶
dsh-stop-that-shit 把 STS 的 per-session scope 合约接到 DSH 事件链上:显式武装、逐 call 审计、拒绝可解释、状态本地 JSON 留存。若你已经在用 Harness 跑长链路 agent,又希望「口头别乱动」变成可解析、可查询的合约,可以从目录页或 GitHub README 对照字段表试装一版。