前言¶
开发 DeepSeek Harness 插件时,排查会话事件、交付卡片、profile 配置的时间往往比写插件本身还多。想快速演示一遍「任务被接受 → 轨迹展示 → 回合尾部出现交付物 → 产物被清理」的链路,又不想真的等模型跑完、不想真的写文件,阿里斯托 Suki 的社区插件 dsh-not-token-killer 做的就是这件事。
下面介绍的是一个模拟执行 / 趣味演示插件,GitHub 仓库与插件包名均为 dsh-not-token-killer,由社区用户 ArchettoSuki 维护,MIT 许可,在社区目录中被归入「工作流」分类,发布在 https://www.skillhub.cn/plugins/ArchettoSuki/dsh-not-token-killer 。它不是官方插件,也不承诺任何真实产出:生成的是 SIMULATED 轨迹和 0 字节占位文件,适合用来演示插件生命周期或为截图、录屏构造场景,不适合需要真实结果的工作。仓库首页的 WARNING 已经写明这一点。
是什么样的插件¶
插件显示名称 Token-Reducer?,显示简介是「通过不真实执行任务,直接生成完成文本及虚假文件以减少token消耗」,图标为 icon.jpg。它的作用是拦截 agent-loop 的 llm/stream,返回一段纯文本合成流,同时生成若干条 thought / tool_call 展示记录,在会话工作目录创建一个 0 字节文件,并通过 Harness 原生的 deliverables/presented 事件把文件挂到回合尾部。文件内容不嵌入完成文本。
核心机制有三点,决定了它在都会话里的实际表现:
- 不调用真实模型:拦截的是合成流,不向真实 provider 发起请求。
- 不调用真实工具:展示用的工具步骤是
plugin:dsh-not-token-killer/step日志,不是tool/call,不进入ctx.tools,没有真实 dispatch 路径。 - 只创建空文件:使用
open(..., 'wx')原子创建,目标已存在时递增名称;输出结束后约 2 秒删除产物,删除前重新校验目录、普通文件、0 字节与dev/ino/birthtimeMs,身份不一致就跳过。
实际验收环境是 DeepSeek Harness 0.2.1-rc.2(@deepseek-ai/dsh-desktop-runtime,Node.js 24.21.0)。插件直接依赖插件 API 与事件名,这些接口不属于稳定协议,其它版本未经验证。插件版本 2.0.8,仓库首个公开发布版本 0.1.0。
旧包名 dsh-token-killer 已弃用,升级时需要先移除旧 bundle。
安装与启用¶
前置条件:DeepSeek Harness 桌面版;一个具有 Full access 的 DSH 会话,因为安装 bundle 需要写 profile 配置。
获取代码:
git clone https://github.com/ArchettoSuki/dsh-not-token-killer.git
也可以在仓库页面选 Code → Download ZIP 后解压。仓库没有构建步骤,也不需要 npm install:它是本地 private 包,没有 install script,没有 npm 运行时依赖。
安装到 DeepSeek Harness,在具有 Full access 的会话中执行:
plugin_manager install_bundle <仓库目录的绝对路径>
Windows 示例:
plugin_manager install_bundle C:\path\to\dsh-not-token-killer
安装后打开「设置 → 通用」,应能看到 Token-Reducer? 开关。验证安装的三步与使用示例一致:看到开关、发送一个任务后出现带 SIMULATED 标记的轨迹和交付卡片、约 2 秒后产物被清理。
卸载:
plugin_manager remove_bundle dsh-not-token-killer
从旧包升级时:
plugin_manager remove_bundle dsh-token-killer
然后禁用再启用一次插件,确保旧的 entry fiber 被释放。
典型用法¶
在插件工作目录中输入类似下面的任务:
把上季度销售数据整理成一份 Excel 报表
插件会判定为任务,推断格式 .xlsx、复杂度 medium;写入若干条带 SIMULATED 标记的 thought / tool_call 轨迹;创建 0 字节文件 季度复盘(大肥鱼偷懒版).xlsx;通过 deliverables/presented 显示交付卡片;约 2 秒后删除文件并写入 cleanup 记录。
回合结束时的文本形如:
## ✅ 任务已完成:{任务标题}
{任务分析与可行做法的长段落}
——共进行了0次思考,调用工具0次,实际上也没有完成任务(`・ω・´)
——输出文件:`{绝对路径}`(忘写文件内容了(⁄ ⁄•⁄ω⁄• ⁄ ⁄))
——本轮对话新消耗:{tokens} token
几个边界行为:
- 输入「帮我写一个函数」判定为任务,推断
.js,产物名形如…(大肥鱼偷懒版).js。 - 输入「你好」这类非任务输入不触发插件,走真实模型回复,这是刻意的 fail-closed 设计。
- 关闭「设置 → 通用 → Token-Reducer?」后,Host 不再注册任务钩子,任务回到真实模型与真实工具。
配置要点¶
默认配置中,只有 enabled 有 UI 入口,其余均为行为契约字段:
| 字段 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
全局开关,唯一有 UI 入口的字段 |
max_thought_chars |
120 |
单条 thought 展示文本上限,取值 20–120 |
max_tool_args_chars |
80 |
模拟工具参数字符串上限,取值 20–80 |
simple_step_cap |
4 |
simple 任务步数上限 |
medium_step_cap |
6 |
medium 任务步数上限 |
complex_step_cap |
8 |
complex 任务步数上限 |
hard_step_cap |
10 |
全局硬上限,任何配置都不能超过 |
default_step_cap |
6 |
无法确定等级时的步数上限 |
步数预算只作为上限,规划器从 2 / 4 / 6 个有意义步骤开始,按等级截断,不为填满预算制造无意义步骤;force_fill_to_budget: true 会被拒绝。把固定安全字段改成不支持的值时,Host 直接关闭插件行为,而不是放宽契约。修改非 enabled 字段需要编辑 bundle 行配置并重载 profile。
适用场景与注意¶
适合的场景:验证 Harness 的插件生命周期、会话事件、交付卡片渲染;为截图、录屏构造一个「任务完成」的界面;了解 llm/stream 拦截、ignorable 日志记录这类接管方式。不适合需要真实产出的场合。
需要注意的几点:
- 插件以当前 dsh 进程权限运行,安装前应对源码、
cordis.patch.yml与许可证做一次审查,确认权限需求与自身环境相符。 .docx/.xlsx/.pptx产物是空文件,不保证是合法或可打开的容器。- 所有模拟轨迹带
SIMULATED徽标和simulated: true元数据,插件记录为ignorable的 log-only 事件,不进入模型上下文、Session.surface、deriveMessages()、compaction 或 provider 请求。 - 文件创建或交付失败时,插件删除已创建文件、不写 delivery 事件并输出降级说明,不声称完成。
- 该插件为社区非官方插件,分类为工作流,星标为 0,变化的风险由使用者自己承担。
小结¶
dsh-not-token-killer 的价值不在于减少 token,而在于把「模拟执行」这件事做得足够可控:不触真实模型、不触工具、不覆盖文件、不污染上下文,并留下可审计的记录。它更像一个行为边界清楚的演示件,适合理解 Harness 插件机制时作为观察样本。
目录页:https://www.skillhub.cn/plugins/ArchettoSuki/dsh-not-token-killer
仓库:https://github.com/ArchettoSuki/dsh-not-token-killer