前言¶
在 DeepSeek Harness(DSH)裏讓智能體使用 API Key、數據庫密碼或 Token 時,常見做法是把值寫進對話、貼進工具參數,或讓模型直接讀 .env。這些路徑都會增加憑證進入會話日誌、工具輸出或模型上下文的概率。社區插件 dsh-secrets(維護者 SiyuQian,分類 admin-security)換一種方式:智能體只聲明需要哪些變量名和用途,你在 Web 界面的密碼錶單裏填寫,值經認證 API 寫入工作區內的 dotenv 文件(權限 0600),模型側僅收到狀態與元數據,不接觸明文。
下面按定位、機制、安裝配置與使用注意說明該插件能做什麼、不能做什麼。
這是什麼¶
dsh-secrets 是 DeepSeek Harness 的 bundle 插件,當前 package 版本爲 0.1.0,許可證 MIT。它提供 request_secret 工具與配套 secrets skill,教智能體在何時、如何發起密鑰請求;界面與審批提示支持中英文,並跟隨 Harness 的 locale 設置(缺省爲英文)。
倉庫與目錄頁:
- GitHub:https://github.com/SiyuQian/dsh-secrets
- 社區目錄:https://www.skillhub.cn/plugins/SiyuQian/dsh-secrets
工作流程¶
典型一輪交互如下:
- 智能體調用
request_secret,傳入變量名、用途說明以及目標 dotenv 文件路徑。 - 聊天輸入框上方彈出密碼錶單並聚焦首字段;會話工作區摺疊時仍可從工具行看到請求狀態。
- 你輸入的值經已認證的
/api/dsh-secrets.*路由直達 Host,不作爲工具參數、工具結果或會話事件傳給模型。 - 值寫入 dotenv,文件模式
0600;已有行、註釋與換行符儘量保留。 - 智能體只收到
{ status, path, names, added, updated, unchanged, kept }一類摘要。
子智能體與 run_code(PTC)程序無法打開該表單;若你在當前輪次取消請求,同名變量不能在同一輪再次申請。
三層防護與日誌策略¶
插件在「讀文件」「輸出泄露」「命令外帶」幾類風險上做了分層限制,摘要如下:
| 層級 | 機制 | 作用 |
|---|---|---|
| L1 讀守衛 | ctx.tools.guard() |
拒絕對已管理文件的 read/edit/write/grep,以及 shell 中 cat、cp、source、python -c open(...) 等讀取行爲;其他插件不能覆蓋該拒絕。 |
| L2 脫敏 | tools/post-execute |
在所有工具結果裏把已管理值替換爲 [REDACTED:NAME],覆蓋 base64、URL 編碼、JSON 轉義、十六進制等變體;脫敏失敗則 withhold 輸出。 |
| L3 審批 | tools/pre-execute → ask |
使用已管理變量且涉及 curl、echo、printenv、ssh 等的 shell 命令會先徵求你同意。 |
此外,會話日誌只記錄變量名、路徑與計數;registry.json 存名稱、路徑與 8 字符指紋,不存明文值。默認要求 env_file 位於工作目錄內(可通過配置放寬)。
Settings → Secrets 以卡片列出各託管變量:完整路徑、指紋、更新時間及「停止託管 / 從文件刪除」等操作;長名稱與路徑在面板內換行,頁面不展示明文。
安裝與啓用¶
依賴 DeepSeek Harness 0.2.x 與 Node.js 22+。
在 Harness 會話中讓智能體安裝 bundle(命令須與官方 README 一致):
plugin_manager install_bundle target: https://github.com/SiyuQian/dsh-secrets.git
安裝後刷新 Web GUI。插件以當前 DSH 進程權限運行,安裝前宜自行查看倉庫源碼與 MIT 許可證條款。
可選配置¶
在 profile 的 cordis.patch.yml 中可按需覆蓋:
- id: dsh-secrets
name: dsh-secrets
config:
timeoutMs: 600000 # 表單超時,默認 10 分鐘
dataDir: /abs/path # registry 位置,默認 $DSH_HOME/plugins/dsh-secrets
allowOutsideCwd: false # 是否允許 env_file 在工作目錄外
典型用法(智能體側)¶
你無需手寫 HTTP;在對話中說明需要哪些環境變量、寫入哪個 .env,並啓用或已安裝本插件後,智能體應通過 skill 調用 request_secret。你在表單中填寫後,後續腳本或 CLI 可從 dotenv 讀取,而模型上下文與工具往返中不應出現明文。
若智能體要用到已託管變量執行帶外泄風險的命令,L3 會彈出審批;當前尚無「本會話始終允許」按鈕,審批按單次命令生效。
適用場景與已知限制¶
適合:本地或受信工作區內,需要讓 DSH 智能體配置第三方 API、數據庫連接等,又希望減少密鑰進入 LLM 與聊天日誌的場景。
需注意:
- 若智能體自行寫程序讀文件並在發送前任意變換內容,可能繞過 L1–L3;應在受信工作區使用。這些機制提高門檻,不是沙箱。
- 長度不足 6 字符的值無法脫敏,設置頁會標記。
- 僅支持 dotenv 文件,不支持 Keychain 或直接向進程注入環境變量。
結尾¶
dsh-secrets 把「向用戶要密鑰」收口到認證表單與 Host 寫盤,並用讀守衛、輸出脫敏與命令審批降低誤讀、誤泄風險;適合你已使用 DSH 0.2.x、並希望憑證儘量少經模型與明文日誌傳遞時啓用。
- 目錄頁:https://www.skillhub.cn/plugins/SiyuQian/dsh-secrets
- 倉庫:https://github.com/SiyuQian/dsh-secrets