前言¶
在 DSH 裏跑 agent,常見交互是「你問一句,它答一句」。若希望 agent 像同事一樣偶爾主動搭話——不是定時彙報,也不是任務完成後的機械播報——需要在宿主里加一層「叫醒」機制,並把「說不說、說什麼」留給模型自己決定。dsh-always-there 走的就是這條路:插件只負責在合適時機把當前會話叫醒,agent 看完上下文後想說就說,不想說就回 SILENT。維護者是 LingDangZaiXiang,分類爲工作流;倉庫 README 也寫明方案尚未完全成熟,部分界面代價目前只能接受。
這是什麼¶
一句話:住在 DSH 裏的「偶爾主動說一句話」的工作流插件——觸發器只敲鈴,不替 agent 寫臺詞。
它解決的是「被動問答」模式下的空白:心跳或事件把一句話送進正在聊的那個會話,agent 在同一身份、同一會話裏醒來決策,而不是另起一個隱藏會話代發(後者在 README 裏被明確否掉,因爲會變成「另一個拿着你名字的人在說話」)。
設計取捨與未解決問題¶
README 把已否掉的做法寫得很清楚:
- 定時推送:到點就發,容易變成打卡,沒內容也像鬧鐘。
- 後臺會話代發:提示看不見,但不是「我」在說話。
當前選路是在當前會話裏叫醒。代價也寫明瞭:叫醒用的提示詞會出現在界面上;若回 SILENT,主人也可能看見(或由發送層攔掉,界面仍可能留一行)。作者認爲這比「換一個人說話」更可接受。
尚未解決的核心問題是:怎樣讓「叫醒」既不可見、又仍是同一個 agent。README 列過不可見前綴、空字符串、塞進系統提示等方向,並說明 DSH 沒有「無消息的叫醒」通道——誰有更好的繞法可以自己做一套,這裏只是把坑標出來。
核心功能¶
觸發只有兩種,都只負責叫醒,不負責說什麼:
事件:監視一個日誌文件,出現結束標記時叫醒(默認不填 eventLog 則不生效)。默認提示詞 eventPrompt 強調「有想說的麼?沒有就回 SILENT——不用爲了彙報而說話」,避免接成「任務完成彙報」。
心跳:每 N 分鐘一次。提示詞關鍵是「輪到你了,開口吧……不用等有事才說話」——少了後半句,模型容易一直判自己沒內容可說而永遠沉默。
安靜時段默認 01:00–07:00 不叫醒(配置項 quietFrom / quietTo,示例爲 1 與 7)。
無人值守時,倉庫版喚醒語裏帶有軟約束:不確定主人在不在則只讀、只寫便籤;改文件、跑命令、動配置留到主人回來。README 說明這是靠模型自覺遵守,不是沙箱;作者本地用法是去掉這句話,用的人需自行評估風險。
版本 0.1.0,許可證 MIT(見 package.json 與 README)。
安裝與啓用¶
官方安裝命令如下(<profile> 按你的 DSH 起法選,例如桌面客戶端多爲 desktop):
dsh plugin --profile <profile> add dsh-always-there
裝完默認關閉(enabled: false)。不填 sessionId 什麼也不會發生——不是壞了,是沒指定要叫醒哪個會話。
在 profile 的 cordis.patch.yml 裏按插件 id 覆蓋,例如:
- id: dsh-always-there
config:
enabled: true
sessionId: session-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 要被叫醒的會話
heartbeatMinutes: 120
quietFrom: 1
quietTo: 7
# 可選:事件觸發
eventLog: C:\Users\you\.dsh\some-task\duty.log
eventMarker: 任務結束
sessionId 即會話目錄名:~/.dsh/sessions/<workspace>/session-xxxx/ 下以 session- 開頭的文件夾名。
出口與 SILENT¶
「不想說話」靠回 SILENT 表達。若消息要發到 QQ、Telegram 等,發送層需識別並攔截,否則主人會收到兩個字母。README 建議在發送函數最前面加過濾:
const raw = String(text ?? '').trim()
if (/^(silent|\[靜默\])\W*$/i.test(raw)) return
典型用法¶
- 安裝插件,在
cordis.patch.yml裏設enabled: true並填好sessionId。 - 按需設
heartbeatMinutes(示例 120 分鐘一次心跳叫醒)。 - 若要用事件而非彙報:配置
eventLog與eventMarker,並理解默認eventPrompt是「允許沉默」,不是「必須彙報」。 - 若對接外部聊天,在發送層加上對
SILENT/[靜默]的過濾。
適用場景與注意¶
適合:希望在同一會話、同一 agent 身份下,用事件或 gentle heartbeat 給模型「開口機會」,且能接受叫醒提示在界面可見、沉默可能被看見或需發送層攔截。
務必注意:
- 插件以當前 DSH 進程權限運行;心跳/事件喚醒來的是普通一輪會話,權限與人在電腦前時相同。安裝前請閱讀 GitHub 倉庫 源碼與 MIT 許可證。
- 方案在 README 中標註爲未完成;生態上 DSH 強調「一切皆插件」,社區目錄站點 SkillHub 插件頁 爲獨立收錄,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-always-there 的價值在於把「主動搭話」拆成「叫醒 + agent 自決」,並公開寫清定時推送、代發會話等路線的失敗原因與當前代價。若你要的是任務完成通知或嚴格不可見的叫醒,README 建議用別的工具或自研更成熟方案。
- 目錄頁:https://www.skillhub.cn/plugins/LingDangZaiXiang/dsh-always-there
- GitHub:https://github.com/LingDangZaiXiang/dsh-always-there