前言¶
DeepSeek Harness(簡稱 DSH)把智能體運行時拆成一套可插拔的宿主:官方倉庫的口號是「Everything is a Plugin」(一切皆插件)。任務跑完、需要人拍板、或者要把結論同步給同事時,很多人還在終端或網頁界面裏盯着輸出。團隊日常溝通往往在 Slack 裏,終端通知和桌面彈窗解決不了「把智能體放進頻道」這件事。
社區插件 dsh-slack 做的就是這一層橋接:讓當前這套 DSH agent 能向 Slack 發消息、列頻道,也能用 Socket Mode 把頻道/私信裏的消息收進進程內收件箱,再按線程回覆。它由 STARDUSTLC666 維護,分類在「通知與集成」。本文依據插件目錄頁、GitHub 倉庫 README 與源碼交叉覈實後整理,版本以倉庫 package.json 中的 0.2.3 爲準。
需要先說明生態邊界:DSH 本體是 DeepSeek 開源的 agent harness;社區插件目錄 是獨立站點,用來檢索和安裝社區插件,與 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。
這是什麼¶
dsh-slack 是一款跑在 DSH 宿主進程裏的社區插件。安裝後會向模型註冊四個工具:slack_notify、slack_channels、slack_inbox、slack_reply。目錄頁給出的定位是:讓 DSH agent 與 Slack 雙向通信。
倉庫 README 把能力按版本拆開寫得很清楚:
- v0.1:只做「agent → Slack」單向通知。
- v0.2:加上 Socket Mode,支持「Slack 消息 → agent」。收消息走
slack_inbox,回線程走slack_reply。
未配置 App-Level Token 時,插件不會崩潰,只打印告警,slack_inbox 返回空隊列,相當於退回單向模式。發消息、列頻道、線程回覆仍然可用(前提是機器人令牌配好了)。
GitHub 倉庫地址:https://github.com/STARDUSTLC666/dsh-slack
目錄詳情頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-slack/
截至 2026-08-18,目錄頁與 GitHub 倉庫均顯示 4 顆星;主要語言是 TypeScript。倉庫 README 與 package.json 標註許可證爲 MIT;GitHub 倉庫元數據裏尚未識別到獨立的 LICENSE 文件,安裝前應自行打開倉庫覈對。
核心功能¶
四個工具對應四件實事,底層分別打 Slack Web API 的 chat.postMessage 和 conversations.list。
1、slack_notify:往頻道或線程發一條 Markdown 文本
必填參數是 channel(頻道名如 #general,或頻道 ID)和 text。可選 thread_ts,用來回某一條已有消息所在的線程。成功時返回消息的 ts 和頻道,後續可以把這個 ts 再傳給 thread_ts。
2、slack_channels:列出機器人當前可見的頻道
無參數。源碼裏會沿 next_cursor 自動翻頁,公開頻道和私有頻道都會請求(types: public_channel,private_channel),並按頻道 ID 去重。v0.2.3 給分頁加了頁數上限(源碼中爲 20 頁),避免異常遊標把請求打成死循環。企業工作區頻道很多時,這一步比只拿第一頁有用。
3、slack_inbox:讀取 Socket Mode 收到的消息
收件箱是進程內內存隊列,容量 200 條,新的在前;滿了丟最舊的。Slack 事件是至少投遞一次,隊列會按 channel + ts + user + text 去重。可選參數:
limit:最多返回條數,默認 10,範圍 1–50。markRead=true:返回後原子消費並清空隊列,避免「先列出再清空」的間隙裏新消息被誤刪。
重啓 dsh 進程後隊列就沒了,不會落盤。
4、slack_reply:按線程回覆收件箱裏的某條消息
必填 channel、text、thread_ts。thread_ts 應來自 slack_inbox 返回的 ts。底層同樣是 chat.postMessage,只是帶上 thread_ts。
除此之外,有三項實現細節值得單獨說:
- Socket Mode,不需要公網回調 URL。 傳統 Slack Events API 要暴露一個 HTTPS 端點給 Slack 推事件;Socket Mode 由客戶端向 Slack 建長連接收事件。本機、內網、沒有公網 IP 的開發機都可以用。開啓後需要 App-Level Token(
xapp-開頭),並訂閱message.channels(公開頻道)和message.im(機器人私信)。 - 可自定義
slackApiUrl。 源碼config.ts會解析該字段,默認走官方https://slack.com/api/。目錄頁和倉庫簡介寫明:可用來對接代理網關;註釋裏也提到企業網格(Enterprise Grid)和本地協議級測試可以覆蓋這個地址。WebClient 按token + slackApiUrl緩存,配置變了會重建客戶端。 - 內置假 Slack 服務器做協議級驗收。 倉庫
test/fake-slack-server.mjs在本地起一個零依賴的 HTTP 服務,模擬chat.postMessage和conversations.list;pnpm run test:protocol會用官方@slack/web-api真實發 HTTP,打到http://127.0.0.1:3999/api/,校驗載荷、鑑權頭和中文錯誤映射。這是開發測試基建,不是運行時依賴。
錯誤信息全部是中文,模型和人都能直接讀。常見映射包括:令牌未配置、invalid_auth、channel_not_found、not_in_channel(機器人還沒被拉進頻道)、token_revoked / missing_scope / not_authed、頻道已歸檔、單條消息超過 40,000 字符、觸發限流。令牌缺失時插件仍會加載(懶加載),真正調用發消息/列頻道/回覆工具時才報錯。
v0.2 明確不包含:RTM,以及按鈕、彈窗、slash command 回覆這類交互組件。README 寫的路線圖是 v0.3 計劃做交互組件和持久化收件箱,目前還不是現成能力。
安裝與啓用¶
插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查源代碼倉庫和許可證;如需可復現安裝,請固定 commit 哈希。
目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端中運行:
dsh plugin add github:STARDUSTLC666/dsh-slack
固定某個 commit 時,按目錄頁的寫法把哈希接在倉庫名後面:
dsh plugin add github:STARDUSTLC666/dsh-slack#<commit>
倉庫 README 另外記錄了一種按 profile 安裝的寫法(安裝進 web profile,重啓後生效):
dsh plugin --profile web add dsh-slack
兩處命令來源不同:前者以插件目錄頁原文爲準,後者來自 GitHub README。裝完後需要重啓 dsh Web 服務,四個工具纔會對模型可見。
配置 Slack App 與令牌¶
配置寫在 profile 的 cordis.patch.yml 裏,按 id: slack 覆蓋這一行。覆蓋是整段替換 config,不會和默認值做字段合併。可用項以 README 表格爲準:
| 鍵 | 說明 |
|---|---|
token |
機器人令牌(xoxb-)或用戶令牌(xoxp-)。留空則回退環境變量 DSH_SLACK_TOKEN。 |
appToken |
App-Level Token(xapp-),Socket Mode 收消息用。留空則回退 DSH_SLACK_APP_TOKEN。 |
defaultChannel |
例如 #general。目前只寫進 channel 參數說明,不能代替必填的 channel。 |
源碼額外支持 slackApiUrl。需要走代理網關或本地假服務器時,可以在同一段 config 里加上該字段;README 的配置表目前沒有列出它。
優先級:config.token 高於 DSH_SLACK_TOKEN,config.appToken 高於 DSH_SLACK_APP_TOKEN。README 推薦用環境變量,避免把令牌寫進配置文件:
export DSH_SLACK_TOKEN=xoxb-你的機器人令牌
export DSH_SLACK_APP_TOKEN=xapp-你的App級令牌
如果寫進 profile(路徑以 README 爲例:$DSH_HOME/profiles/web/cordis.patch.yml):
- id: slack
config:
token: 'xoxb-你的機器人令牌'
appToken: 'xapp-你的App級令牌'
defaultChannel: '#general'
創建 Slack App 並拿令牌,步驟按倉庫 README 整理如下(應用在 Slack 官方的 App 管理後臺創建):
- 新建 App(From scratch),選好工作區。
- 在 OAuth & Permissions → Bot Token Scopes 勾選
chat:write(發消息)和channels:read(列頻道)。 - Install to Workspace 授權,複製 Bot User OAuth Token(
xoxb-開頭)。 - 在目標頻道執行
/invite @你的機器人。私有頻道這一步是必需的,否則會遇到not_in_channel。
只發通知做到這裏即可。要收消息,再打開 Socket Mode:
- App 後臺打開 Socket Mode。
- Generate Token and Scopes,勾選
connections:write,保存只顯示一次的xapp-Token。 - Event Subscriptions 裏訂閱機器人事件:
message.channels、message.im。 - 把 App-Level Token 配進
appToken或DSH_SLACK_APP_TOKEN,重啓 dsh Web 服務。插件會自行建連;Socket Mode 網絡錯誤由 Slack SDK 自動重連,插件只記告警、不拋崩。
典型用法¶
裝好並重啓之後,模型能直接調這四個工具。下面的 JSON 形狀來自 README 的返回約定,便於對照參數。
發一條通知:
{
"channel": "#general",
"text": "構建已完成,產物在 dist/"
}
slack_notify 成功時類似:
{ "ts": "1700000000.000100", "channel": "#general" }
列出可見頻道(無參數),返回:
{ "channels": [{ "id": "C001", "name": "general" }, { "id": "C002", "name": "random" }] }
讀取收件箱,讀完標記已讀:
{ "limit": 10, "markRead": true }
返回每條消息包含 ts、channel、user、text。再拿其中的 ts 做線程回覆:
{
"channel": "C001",
"text": "收到,我去看日誌。",
"thread_ts": "1700000000.000100"
}
開發插件或做協議迴歸時,不必接真實 Slack。倉庫提供:
pnpm install
pnpm build
pnpm test
pnpm run test:protocol
pnpm test 覆蓋參數編譯、配置解析(含環境變量回退)、四個工具註冊、缺配置時的中文報錯、注入 fake client 斷言 postMessage(含 thread_ts)、收件箱容量/去重/原子 drain、Socket Mode 事件解析,以及缺少 appToken 時不崩潰。test:protocol 則走真實 SDK HTTP,打到本地假服務器。
適用場景與注意事項¶
比較適合這些情況:
- 團隊已經在 Slack 協作,希望 agent 把回合結果、構建狀態或需要確認的事項發到指定頻道。
- 開發機或內網環境沒有公網回調地址,但仍希望從頻道或機器人私信把消息送進 agent。
- 需要列出現有頻道、按線程把回覆釘在原消息下面,而不是另開一條新通知。
- 走企業代理或自建網關訪問 Slack API,可以覆蓋
slackApiUrl。
同一分類裏,目錄頁還收錄了桌面通知類插件(如 dsh-notification、dsh-web-ui-notify)和飛書通道 dsh-lark。它們解決的是「提醒你看終端」或「接到飛書」,和「進 Slack 頻道做雙向收發」不是同一件事,按工作區選用即可。
使用前把限制看清楚:
- 插件以當前 dsh 進程權限運行,能訪問該進程能訪問的一切。安裝前檢查源碼、依賴(運行時是官方
@slack/web-api與@slack/socket-mode)和許可證。 - 令牌不要提交進 Git。環境變量優先於把
xoxb-/xapp-寫進 yaml。 slack_inbox不持久化,重啓即空;容量 200,不能當歷史歸檔用。defaultChannel目前只是提示,調用時仍必須傳channel。- 不支持按鈕、彈窗、slash command 回覆和 RTM。
- 機器人必須被邀請進目標頻道;私有頻道尤其容易漏這一步。
- 源碼會過濾帶 subtype 的消息和帶
bot_id的消息,避免把機器人自己發的內容再喫進收件箱。
小結¶
dsh-slack 把 Slack 收發收成四個模型可調用的工具:通知、列頻道、收件箱、線程回覆。v0.2 用 Socket Mode 補上反向通道,不必暴露公網 webhook;slackApiUrl 方便對接代理或本地假服務器;倉庫自帶協議級驗收測試。它是社區維護的 DSH 插件,不是 DeepSeek 官方應用。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-slack/
源碼:https://github.com/STARDUSTLC666/dsh-slack
DSH 本體:https://github.com/deepseek-ai/deepseek-harness