前言¶
用 DeepSeek Harness(DSH)跑長任務時,人往往離開屏幕等 agent 跑完。若只在終端裏看輸出,很難區分「還在跑」「在等審批」和「已經停下來了」。郵件或第三方 IM 也能提醒,但需要額外集成,且容易在短回合、子會話裏刷屏。dsh-ntfy 把通知接到自託管 ntfy 上:在回合實際結束時推一條純文本摘要,並在需要審批或提問時單獨提高優先級推送。
這是什麼¶
dsh-ntfy 是社區維護的 DSH Host-only bundle(維護者 Sillykjs,許可證 MIT,當前 package 版本 0.1.0)。它在 DSH 側監聽回合生命週期,向你可控的 ntfy 服務器發 HTTP 推送,不依賴 ntfy 官方 SaaS;開啓鑑權時通過本地 0600 權限文件保存 token,配置界面只保留文件路徑。
生態上 DSH 採用「一切皆插件」;SkillHub 目錄頁 是社區站點,與 DeepSeek / 幻方無官方從屬關係。
核心功能¶
下面能力均來自插件 README,可按需對照 Settings → ntfy Notify 中的選項(共 22 項,支持 live 應用與測試推送)。
只在真實停頓時推送。 收到 turn/end 後會等待 settleMs(默認 2 秒);若期間有新回合(目標續跑、排隊消息、steering 等),則取消待發通知,避免「還沒停就響鈴」。
默認偏安靜。 僅根會話、結束原因白名單、最小時長、10 分鐘去重、有界隊列;過短的回合不會推送。
卡住時立刻說。 審批請求與 agent 提問會立即推送,並使用獨立優先級。
圖形化配置。 Web 設置頁覆蓋全部選項;密鑰寫入文件後會在日誌側做脫敏,正文爲純文本、無 emoji。
推送正文示例形態如下(字段隨會話變化):
【dsh】完成 · 幫我把構建修好
用時 2分05秒 · 12 步 · 4 次工具
目錄:~/projects/demo
會話:9f2c1a4e
────────
計劃已寫入 PLAN.md,下一步……
環境與依賴¶
- DSH ≥ 0.2.1-rc.2,且使用
webprofile(設置頁依賴 client 注入)。 - Node.js ≥ 20。
- 網絡可達的 ntfy 服務;若服務端啓用鑑權(例如
auth-default-access: deny-all),需要 access token。
安裝與啓用¶
方式一:DSH GUI
進入 Settings → Plugins → add a third-party plugin,安裝 spec 爲:
github:Sillykjs/dsh-ntfy
也可讓 agent 調用 plugin_manager 的 install_bundle,使用相同 spec;管理器會安裝包並啓用 bundle。
方式二:命令行(web profile)
dsh plugin --profile web add github:Sillykjs/dsh-ntfy
# 然後將 "dsh-ntfy" 加入 $DSH_HOME/profiles/web/package.json 中的 dsh.profile.bundles
安裝後重啓一次 dsh web,以便加載 host 模塊;之後的配置變更可 live 生效。
若 ntfy 需要鑑權:打開 Settings → ntfy Notify 粘貼 token,會寫入 0600 文件,profile 中僅保留路徑。
卸載: 在插件管理器中移除 bundle,或在 profile patch 中禁用 ntfy 行。token 文件會故意保留,不用時請自行刪除。
典型用法¶
- 在本機或內網部署 ntfy(或使用已有實例),確認 DSH 所在環境能訪問該 URL。
- 按上一節安裝並重啓
dsh web。 - 在 Settings → ntfy Notify 填寫服務器地址、主題(topic)等項;需要鑑權時配置 token,並用頁面上的測試推送驗證。
- 正常發起 DSH 任務;回合真正結束且未被新回合打斷時,手機或桌面 ntfy 客戶端會收到摘要。出現審批或提問時,應收到即時通知。
適用場景與注意¶
適合: 自託管 ntfy、希望離開工位仍能感知 DSH 停下來的開發者;不想爲每次短回合收推送、又希望在「等審批 / 被提問」時立刻知道的場景。
注意:
- 插件以當前 dsh 進程權限運行,安裝前請閱讀 GitHub 源碼 與 MIT 許可證,確認推送內容與 token 存儲方式可接受。
- 必須使用 web profile;純 CLI profile 無圖形設置頁,與 README 要求不一致。
- 分類上屬於聯網工具:會向你的 ntfy 端點發起出站 HTTP,請在內網策略與防火牆中放行。
結尾¶
dsh-ntfy 把「回合真正結束」和「需要你介入」兩類事件,收斂到一條可控的自託管 ntfy 通道里,並用過 settle、去重與會話過濾減少誤報。目錄與說明見 SkillHub:Sillykjs/dsh-ntfy,源碼與 issue 見 GitHub:Sillykjs/dsh-ntfy。