常驻置顶的 DeepSeek Harness 刘海条,显示哪些会话正在运行、哪些需要你处理、哪些已完成。支持 Windows。
33.6/100
综合分
5
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add iArxic/dsh-agents-notch该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 42 处,展示前 38 条)
- 读取本地文件lib/host-0.1.9.js:285
const info = statSync(panePath); - 写入本地文件lib/host-0.1.9.js:402
mkdirSync(stateDir, { recursive: true }); - 写入本地文件lib/host-0.1.9.js:403
appendFileSync(reportPath, `${JSON.stringify({ at: new Date().toISOString(), event, ...extra })}\n`); - 读取本地文件lib/host-0.1.9.js:436
if (!existsSync(manualPath)) return new Map(); - 读取本地文件lib/host-0.1.9.js:437
const parsed = JSON.parse(readFileSync(manualPath, "utf8")); - 发起网络请求lib/host-0.1.9.js:491
response = await fetch(url, { signal: AbortSignal.timeout(2000) }); - 写入本地文件lib/host-0.1.9.js:701
mkdirSync(stateDir, { recursive: true }); - 写入本地文件lib/host-0.1.9.js:703
writeFileSync(temp, JSON.stringify(state)); - 写入本地文件lib/host-0.1.9.js:707
renameSync(temp, statePath); - 发起网络请求lib/host-0.1.9.js:774
const response = await fetch(base, { - 读取本地文件lib/host-0.1.9.js:1016
if (!existsSync(quitPath)) return null; - 读取本地文件lib/host-0.1.9.js:1017
const parsed = JSON.parse(readFileSync(quitPath, "utf8")); - 读取本地文件lib/host-0.1.9.js:1034
if (!existsSync(file)) return false; - 写入本地文件lib/host-0.1.9.js:1209
mkdirSync(bundleDir, { recursive: true }); - 执行外部命令来自配置/变量lib/host-0.1.9.js:1214
const spawned = spawn(found.path, ["--state", statePath, "--parent-pid", String(process.pid)], { - 发起网络请求lib/client.js:128
fetch(ROUTE, { headers: { accept: "application/json" } }) - 发起网络请求lib/client.js:149
fetch(ROUTE, { - 发起网络请求lib/client.js:168
fetch(ROUTE, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ reset: true }) }) - 发起网络请求lib/client.js:252
fetch(OPEN_ROUTE, { - 发起网络请求lib/client.js:261
fetch(OPEN_ROUTE, { headers: { accept: "application/json" }, cache: "no-store" }) - 读取本地文件lib/exe.js:80
const manifest = JSON.parse(readFileSync(join(root, "package.json"), "utf8")); - 读取本地文件lib/exe.js:97
const manifest = JSON.parse(readFileSync(join(root, "package.json"), "utf8")); - 写入本地文件lib/fetch-exe.js:99
await mkdir(dirname(dest), { recursive: true }); - 写入本地文件lib/fetch-exe.js:102
await pipeline(Readable.fromWeb(response.body), createWriteStream(part)); - 删除本地文件lib/fetch-exe.js:117
await rm(part, { force: true }); - 删除本地文件lib/fetch-exe.js:123
await rm(part, { force: true }); - 删除本地文件lib/fetch-exe.js:129
await rm(part, { force: true }); - 删除本地文件lib/fetch-exe.js:136
await rm(part, { force: true }); - 写入本地文件lib/fetch-exe.js:142
await rename(part, dest); - 读取本地文件lib/fetch-exe.js:143
const { size } = await stat(dest); - 删除本地文件lib/fetch-exe.js:146
await rm(part, { force: true }).catch(() => {}); - 读取本地文件lib/settings-store.js:150
if (!existsSync(file)) return {}; - 读取本地文件lib/settings-store.js:151
const parsed = JSON.parse(readFileSync(file, "utf8")); - 写入本地文件lib/settings-store.js:242
writeFileSync(tmp, `${JSON.stringify(normalised, null, "\t")}\n`, "utf8"); - 写入本地文件lib/settings-store.js:243
renameSync(tmp, file); - 读取本地文件lib/settings-store.js:258
if (!existsSync(file)) return true; - 写入本地文件lib/settings-store.js:259
writeFileSync(`${file}.tmp`, "{}\n", "utf8"); - 写入本地文件lib/settings-store.js:260
renameSync(`${file}.tmp`, file);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成Agents Notch:屏幕顶部垂下一个深色刘海,展开后变成一块面板——一个大机器人戴着琥珀色圆环,因为它的会话需要你,旁边是原因和一个 Open 按钮,下面列出其他会话
一个常驻置顶的刘海,为 DeepSeek Harness 而生,只回答一个问题:我的哪个会话现在需要我?
安装 · 显示什么 · 配置 · 限制 · 开发 · 中文
三个机器人在干活,光沿着标签流动;其中一个停在你身上,标签长成一条提醒,带上原因和 Open 按钮;面板在它上面展开;它回去干活,面板收起,然后它完成——标签显示一条简短的「done」提示
从窗口本身录制(--record),逐帧录下——不是模拟图。
为什么
如果你同时跑好几个会话,想知道有没有东西在等你,每次都得切换一次上下文:
| 你现在怎么做 | 代价是什么 |
| 在窗口之间 alt-tab,逐个读侧边栏 | 你手头正在做的事,每次都丢 |
| 等桌面通知 | 每个会话一条,而且没一条说清哪个卡住了 |
| 让侧边栏一直可见 | 只有应用在前台时才可见——而那正是你不需要它的时候 |
刘海是一个小小的置顶标签,从不抢焦点,在全屏应用下会隐藏,并且显示侧边栏在你身处别的窗口时做不到的一件事:某个会话卡在你身上。
展开完整文档(README 剩余 1 节)
Agents Notch:屏幕顶部垂下一个深色刘海,展开后变成一块面板——一个大机器人戴着琥珀色圆环,因为它的会话需要你,旁边是原因和一个 Open 按钮,下面列出其他会话
一个常驻置顶的刘海,为 DeepSeek Harness 而生,只回答一个问题:我的哪个会话现在需要我?
安装 · 显示什么 · 配置 · 限制 · 开发 · 中文
三个机器人在干活,光沿着标签流动;其中一个停在你身上,标签长成一条提醒,带上原因和 Open 按钮;面板在它上面展开;它回去干活,面板收起,然后它完成——标签显示一条简短的「done」提示
从窗口本身录制(--record),逐帧录下——不是模拟图。
为什么
如果你同时跑好几个会话,想知道有没有东西在等你,每次都得切换一次上下文:
| 你现在怎么做 | 代价是什么 |
| 在窗口之间 alt-tab,逐个读侧边栏 | 你手头正在做的事,每次都丢 |
| 等桌面通知 | 每个会话一条,而且没一条说清哪个卡住了 |
| 让侧边栏一直可见 | 只有应用在前台时才可见——而那正是你不需要它的时候 |
刘海是一个小小的置顶标签,从不抢焦点,在全屏应用下会隐藏,并且显示侧边栏在你身处别的窗口时做不到的一件事:某个会话卡在你身上。一旦有会话卡住,标签就长成一条提醒,说明原因,并带一个 Open 按钮,把应用切到那个会话——不管它在哪,最小化了还是在托盘里。而且它从不挡路:鼠标划过,它淡出并让你的点击穿透;停在上面,面板就展开。
显示什么
四张卡片,对应折叠标签的四种状态:工作中(蓝色弧线转动)、需要你(琥珀色圆环)、完成(绿色圆环和 ^^ 表情)、失败(红色圆环和 x x 表情)
这一条就是全部视觉语言。工作中只戴一条缓慢转动的蓝色弧线,别的什么都没有,因为工作状态是安静的默认值——只要有会话正在运行工具,标签页下沿就会亮起一道光。需要你 是琥珀色,完成 是绿色,失败 是红色。每个会话在机器人边缘都保留自己的颜色,所以三个会话读起来就是三个会话,而不是同一个会话的三份拷贝。
它从不挡路
两张卡片:指针掠过标签页时,它淡成幽灵,点击直接落到下面的应用上;指针停在上面时,面板展开
标签页待在你伸手去够标签页和标题栏的位置,所以它会主动让开。指针掠过它时,它变成淡淡的幽灵,点击直接穿过去——落到下面的浏览器标签页或菜单上。只有指针停留在那里 1.6 秒,面板才会展开;把指针推到屏幕顶边,它会立刻打开。这三项都是设置(hoverMode、holdMs、topEdgeOpens);open 会恢复悬停展开。
标签页会开口说话
标签页长成的三种提醒:需要你(原因和一个琥珀色的 Open 按钮)、失败(会话和它最后运行的工具,带 Open)、完成(一条简短通知,带会话标题)
有新情况发生时——会话找你、失败或完成——标签页会长成一条提醒,几秒后再折回去。Open 直接带你到那个会话。只播报新鲜事件:等了一小时的问题留在面板上,不会怼到你脸上。
面板
展开的面板:顶部是大机器人和它所在会话的标题、项目、时长和上下文,以及它当前的工具和步骤;下方是可滚动的列表,列出其他每个会话,各带一个小机器人、正在做什么和多久之前
把指针停在标签页上,或推到屏幕顶部,面板就会展开。最上面是最近发生变化的会话,所以完成或提问会最先映入眼帘:它的标题、项目、时长、上下文有多满,以及一行它正在做什么——正在运行的工具和步骤、完整展示它正在问的问题,或者它是怎么结束的。下面用一张列表列出其他每个会话:一句话说它在做什么,以及多久之前。会话多到放不下?列表可以滚动。
单击某一行,把那个会话放到大机器人上。双击某一行,或按 Open ↗,应用就切换到它。已完成或失败的行带一个 ✕,可以把它关掉——和在应用里勾掉它一样。
十六张脸
大机器人各种表情的网格,每张都处在佩戴它的状态:专注、思考、坚定、疲惫、瞥视、困惑、眩晕、爱心、恳求、偷看、^^、星星眼、眨眼、x x 和睡着——每张都标注了它出现的时机
机器人的脸就是状态,凑近看。工作中的机器人专注在某个工具上,在工具之间思考,长时间忙碌时坚定,半小时后疲惫;工具刚失败时困惑,接连失败时晕头转向。需要你时它会恳求,干完活会眯起 ^^,宿主安静下来就睡着。它会眨眼,眼睛跟着你的指针转,每次状态变化播放一小段动作——只播一次,然后歇着。一块板子要是老在庆祝一小时前就结束的事,那就是噪音。
🫥 从不挡路 从不抢焦点,你划过时它让到一边:淡出,你的点击直接穿过去。桌面上没有阴影。全屏应用下自动隐藏。
↗️ 打开就跳过去 打开或双击,DeepSeek Harness 切到那个会话并带到前台——从任务栏或托盘里出来。
📏 数字不糊弄 没有真实预算就不显示上下文百分比,没有时间戳就不写「2m ago」,宿主停止响应时标签变灰。
🎛️ 有自己的设置面板 设置 → Agents Notch:大小、锚点、显示、行数、不透明度、动效、对指针的反应,以及弹出哪些提醒。改动下一个 tick 生效——什么都不用重启。
🧘 尊重减少动效 motion: auto 跟随 Windows。关掉后只显示各状态的静止表情,别的没有。
📦 一条命令,无需运行时 约 30 KB 的 JavaScript。窗口自己从对应的 GitHub release 拉取,校验哈希——单个自包含文件,不用装 .NET。
环境要求
- Windows 10/11,x64。 窗口是 WPF 和 Win32(置顶、不激活、全屏检测):没有 macOS 或 Linux 版本。package.json 声明了 "os": ["win32"]。
- DeepSeek Harness。 在 0.2.1-rc.2 上构建并验证。宿主那一半读取 session/event({ global: true })、ctx.webServer、ctx.agents 和 sessionQuery,应用内那一半使用 uiWorkspace;旧版本可能缺其中某个。挂载前不做任何检查——见限制。
- 插件需要 Node ≥ 22。无需 .NET 运行时:发布的窗口是自包含的。
- 可选:session-finished 插件,它负责让完成的行退场(什么能挣到一行)。
安装
dsh plugin --profile web add dsh-agents-notch
在别的配置档下运行 harness?把 web 换成它的名字。
插件约 30 KB。首次运行时,它从本仓库的 GitHub release 下载窗口(一个 65 MB 的文件,不需要 .NET 运行时),并对照公布的 SHA-256 校验。几秒后刘海在屏幕顶部。
没有刘海? 看 $DSH_HOME\state\agents-notch\host-report.jsonl 的最后一行:那里写明了宿主在哪儿找窗口、下载是否成功,以及修复用的命令。
配置
刘海有自己的设置面板:Settings → Agents Notch。 尺寸、锚点、显示器、行数、不透明度、动效和文字开关都在那儿,改动立刻生效——窗口在下一个 tick 重新读取状态,不用重启。
三层决定一个值,每层都压过上一层:
1. 内置默认值;
2. 插件行的 config:——你编辑的文件,没人会覆盖它;
3. $DSH_HOME/state/agents-notch/settings.json,由面板写入,一次点击改一项。
两个入口受同一套规则约束,所以滑块和 YAML 行效果完全一样。面板里的 Reset 清掉第三层,又由插件行说了算。面板单独存一个文件,因为浏览器没法安全地改写其他会话也在编辑的 YAML。
所有键,以及如何在 YAML 里设置
默认值在包自带的 cordis.patch.yml 里。要改某一项,就在配置档的补丁层($DSH_HOME/profiles/web/cordis.patch.yml)放一行相同 id 的行——不带 insert: 的行就是对已有行的覆盖:
- id: agents-notch
config:
contextBudget: 1000000 # your route's context window, in tokens
anchor: top-right
scale: 1.25
| 键 | 默认值 | 含义 |
| spawnWindow | true | false 让宿主不带窗口运行——测试时有用 |
| pollMs | 340 | 多久重建一次状态文件 |
| maxRows | 6 | 3–10,看板在列表滚动前显示多少个会话 |
| contextBudget | null | 你这条路由的上下文窗口,单位 token;null = 未知(见下文) |
| contextHotAt | 0.5 | 进度条变琥珀色的比例——路由的压缩触发点 |
| anchor | top-center | top-center · top-left · top-right |
| screen | primary | primary · cursor · 1 · 2 …(按 Windows 的编号) |
| scale | 1 | 0.75–2 |
| hideFullscreen | true | 全屏应用下隐藏 |
| opacity | 1 | 0.35–1,刘海挡在桌面前面的程度 |
| motion | auto | auto 跟随 Windows 的减少动效设置;on 强制动画,off 只画每个状态的静止画面,别的都不画 |
| showProject | true | 标题副行里的项目名 |
| showDone | true | false 让已完成的会话完全不上看板(也不计入数量) |
| hoverMode | ghost | ghost:标签淡出、点击穿透,直到指针停在上面;open:悬停立刻展开看板 |
| holdMs | 1600 | 500–4000,指针在标签上停多久看板才展开 |
| topEdgeOpens | true | 把指针顶到标签上方的屏幕边缘,就能打开它,不用等 |
| ghostOpacity | 0.18 | 0.05–0.6,标签让开时淡到什么程度 |
| alerts | all | 标签上的弹窗:all、needs-you(只提示提问和失败)或 off |
| finishedFallbackMs | 900000 | 没有 session-finished 时,已结束的行能保留多久 |
| stateDir | $DSH_HOME/state/agents-notch | 状态文件、日志和窗口存放的位置 |
| exePath | — | 强制指定某个窗口二进制 |
| autoDownload | true | 窗口缺失时从 release 下载 |
| downloadUrl | — | 改从镜像下载,不走 release |
实话实说的数字
contextBudget 不是猜出来的。上下文窗口属于模型路由,会话数据流里没有任何字段携带它,所以这个插件默认把它设为 null——设为 null 时,你只看到 token 数,没有百分比、没有进度条、也没有琥珀色。拿一个编出来的分母算百分比,是伪装成信息的谎言,比带单位的数字更糟。
同一块面板,没有预算:副行只写多少 token,没有进度条
把它设成你路由的真实窗口(这个构建的 DeepSeek V4 路由是 1000000),百分比和进度条就会出现。
什么才配占一行
会话能上面板,是因为它身上出了事:它在干活、卡在审批或提问上、失败了,或者已经结束但你还没收尾。光开着永远不配占一行,挂了多少会话都一样。
已结束和已失败的行不按计时器过期。它们什么时候走,由 harness 自己的收尾判定说了算——就是 session-finished 插件放在侧边栏里的那个 ✓,通过该插件的 HTTP 路由读取;或者你点行上的 ✕。没装那个插件的话,这个插件探测失败三次后就会察觉,改为 15 分钟后清掉已结束的行,并在报告(host-report.jsonl)里说明。
宿主不再应答时,面板也不装了——标签变灰,机器人睡着,副行标出最后一次心跳的时间,而不是重复一段没人更新的摘要:
宿主离线:标签变灰,机器人睡着,面板写明上次收到宿主消息是什么时候
局限,直说
- 仅限 Windows,x64。没有 macOS 或 Linux 构建,也没有半成品。
- manifest 里没声明 DSH 版本,所以装错了也没东西拦着。它是在 0.2.1-rc.2 上构建和测试的;如果你的构建缺了某个字段,宿主会继续服务,日志会写明哪里失败了,而不是让标签撒谎。
- 打开需要应用自己的窗口。 它通过插件的应用内那一半来切换会话,所以应用必须处于运行状态;刘海能把窗口从任务栏或托盘调回来,但没法启动应用。
- session-finished 可选,但建议加上 —— 不加的话,已结束的会话会一直留到 15 分钟兜底超时才消失。
- 窗口不能拖动,这是有意为之:它是固定在屏幕顶部的一块面板,可拖动的版本曾被人误拖走。要挪位置,用 anchor 和 screen。
- 两个窗口不能共存 —— 命名互斥量会让第二个实例直接退出。
- 二进制没有签名,所以第一次运行时 SmartScreen 会警告。
- 从托盘退出只是一小时内的关闭,不是永久退出:宿主会把刘海重新拉回来,因为一块可能被误关掉的状态板,比一块会自动回来的更糟。
卸载
dsh plugin --profile web remove dsh-agents-notch
Remove-Item -Recurse "$env:DSH_HOME\state\agents-notch" # state, logs, window binary, unpack cache
开发
npm test # 65 tests, node --test, no harness, no window, no network
npm run window:build # dotnet build desktop/AgentsNotch.csproj -c Release
npm run window:publish # self-contained single file + SHA256 into dist/win-x64
a still of the board, from a fixture, without a harness:
desktop/bin/Release/net9.0-windows/AgentsNotch.exe --state desktop/fixtures/working.json --open --shot dist/shots/working.png
窗口支持 --shot、--record、--open、--freeze、--face <name>、--island x1|x4|d1、--log、--fps、--no-effects 和 --probe-rect,desktop/fixtures/ 里放着 schema-4 状态文件,所以不用跑宿主,也能把每种状态、表情和提醒拍下来。这份 README 里的每张图都由窗口自己绘制:python tools/readme-media.py shots|record|art 负责渲染静帧、按窗口自己的时钟逐帧录制演示,再把它们排版。
手动安装窗口(离线,或用自己的构建):在插件行里设 autoDownload: false 关掉下载,用 downloadUrl: <url> 指向镜像,再用 tools/install-window.ps1 -Url <release asset> 或 -FromPath dist\win-x64 把窗口放到宿主查找的位置。
- docs/CONTRACT.md —— 两半之间的接口;已冻结,两半代码和测试都按它编写。
- docs/INTERNALS.md —— 工程记录:每个决定了形态的测量,以及每个都花掉一天的坑。你要改东西的话,这是这里最有用的文件。
- CHANGELOG.md —— 每个版本改了什么。
- docs/PUBLISHING.md —— 发版检查清单。
Agents Notch 是一个 DeepSeek Harness 插件:在屏幕顶部挂一个始终置顶的“刘海”,每个会话一个小机器人,一眼就能看出 哪个会话正在等你。
- 工作中是缓慢转动的蓝色弧线,正在调用工具时标签底边会有光流过;需要你是琥珀色光圈;完成是绿色光圈和 ^^ 表情;失败是红色光圈和 x x 表情。
- 有会话需要你、失败或完成时,标签会短暂展开成提示,显示原因和 Open 按钮——一键切换到该会话,即使应用最小化或在托盘里。
- 从不挡路:鼠标经过时标签变成半透明,点击直接穿透到下面的窗口;停留 1.6 秒(或把鼠标推到屏幕顶边)才展开面板:最新变化的会话在顶部(标题、项目、上下文用量、正在运行的工具或等待的问题),其余会话列在下方,超出时可滚动。单击一行在大机器人上查看,双击或 Open ↗ 切换到该会话。
- 机器人有十六种表情:思考、专注、疲惫、困惑、恳求、完成、睡着……
- 从不抢焦点,全屏应用下自动隐藏;没有真实的上下文预算就不显示百分比,宿主断开时标签变灰并注明最后心跳时间。
- 设置 → Agents Notch 有独立设置页:大小、位置、显示器、行数、不透明度、动效、悬停方式、提示类型,修改即时生效。
dsh plugin --profile web add dsh-agents-notch
仅支持 Windows 10/11 x64。插件本体约 30 KB,首次运行时会从对应版本的 GitHub Release 自动下载窗口程序并校验 SHA256,无需安装 .NET 运行时。
MIT — see LICENSE · made for DeepSeek Harness by iArxic预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
iArxic/dsh-agents-notch
常驻置顶的 DeepSeek Harness 刘海条,显示哪些会话正在运行、哪些需要你处理、哪些已完成。支持 Windows。
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,148已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,266已汉化DSH
70.7
这是你的仓库?认领条目