前言¶
DeepSeek Harness(DSH)的沙箱主要從「寫」入手:read-only、workspace-write、danger-full-access 等檔位約束的是文件修改;而 read、grep、glob、present 以及 shell 仍可能讀到整臺機器上的路徑。對在意數據邊界的智能體開發者來說,缺的是與寫側對等的讀側策略。
下面介紹社區插件 dsh-readfence(維護者 doushalunae,分類 admin-security)。它在工具執行前增加讀檢查:白名單內放行,範圍外彈出審批;並把寫權限與讀權限合併成輸入框下方的一個膠囊控件。
這是什麼¶
dsh-readfence 是 DSH 的讀側權限閘門插件:支持可讀目錄白名單、會話級讀模式,以及範圍外讀取的交互式審批。當前版本 0.1.1,許可證 MIT,運行需要 Node.js 20+。
插件以應用層邏輯介入 Host,不是操作系統級沙箱;安裝前建議自行查看 GitHub 倉庫 源碼與許可證。社區目錄頁:SkillHub - dsh-readfence。
核心功能¶
讀側閘門覆蓋的工具¶
在下列工具真正訪問路徑之前,插件會做讀策略判定:
read/read_imagegrep/glob/presentpwsh/bash(shell 讀取同樣受約束)
三種讀模式¶
| 模式 | 放行範圍 | 適合 |
|---|---|---|
list(默認) |
可讀目錄 + 當前會話工作區 | 日常 |
workspace |
僅當前會話工作區 | 最嚴格 |
full |
不限制 | 完全放開 |
讀模式會寫入會話日誌(plugin:read-guard/mode,帶 ignorable: true),重啓 DSH 後仍可從會話恢復。
界面與審批¶
點擊輸入框下方的權限膠囊,在雙列輪盤裏分別選擇寫、讀權限;確定或 Ctrl+Enter 後才生效。
範圍外的讀取會轉爲審批卡片,四個按鈕區分「這一次」與「本回合內同一目錄」兩種粒度:
| 按鈕 | 作用範圍 |
|---|---|
| 允許一次 | 這一次 |
| 拒絕一次 | 這一次 |
| 本任務都允許 | 本回合內同一目錄 |
| 本任務都拒絕 | 本回合內同一目錄,且不再彈窗 |
按鈕文案可在設置裏修改,留空則恢復默認。
可讀目錄¶
在 設置 → 讀取權限 → 可讀目錄 中維護條目;支持就地增刪改。條目表示目錄根:命中某層目錄後,其下所有文件均可放行。
語法要點(與 README 一致):
| 寫法 | 含義 |
|---|---|
~/.dsh |
用戶主目錄,三平臺一致 |
%NAME% / $NAME / ${NAME} / $env:NAME |
環境變量;未定義時原樣保留 |
D:\Work\* |
一層目錄;* 不跨分隔符 |
C:\proj\**\data |
** 跨任意層;? 匹配單字符 |
C:\proj |
字面量路徑,會 realpath(跟隨軟鏈接 / junction) |
Windows 路徑大小寫不敏感;macOS / Linux 敏感。內置默認包含 ~/.dsh、~/.ssh、~/Documents/deepseek-harness 等可移植寫法。
審計¶
~/.dsh/read-guard.log 以 JSON Lines 記錄 applied、ask、deny、grant、mode 等事件。設置頁對可讀目錄等的修改會寫入 profile 的 cordis.patch.yml。
安裝與啓用¶
官方安裝(desktop profile):
dsh plugin --profile desktop add dsh-readfence
裝完後重啓 DSH(Host 插件不支持熱更新)。卸載:
dsh plugin --profile desktop remove dsh-readfence
插件作爲普通依賴裝入 profile,無額外構建步驟,也不需要單獨的構建授權。
從源碼安裝僅適用於開發:克隆倉庫後需先 pnpm install(運行時依賴 @deepseek-ai/schemastery),再用克隆目錄的絕對路徑執行 dsh plugin --profile desktop add "<路徑>"。link: 方式不會自動裝依賴;package.json 需聲明 peer @deepseek-ai/dsh-session,否則可能解析不到宿主模塊。
典型用法¶
- 加目錄:設置 → 讀取權限 → 可讀目錄,在頂部空白行輸入路徑後回車。
- 切模式:點輸入框下方膠囊,左右輪盤選寫、讀,
確定或Ctrl+Enter生效。 - 批准讀取:範圍外訪問彈出審批時,按需選「允許一次」或「本任務都允許」。
也可使用斜槓命令:
/read list|workspace|full:切換讀模式/read status:查看當前讀模式
適用場景與安全邊界¶
適合誰:需要在 DSH 裏限制 Agent 隨意讀盤的團隊或個人;希望寫沙箱之外再疊一層「可讀範圍 + 審批」的日常開發場景。
務必知曉的邊界(插件 README 已寫明):
- 這是應用層閘門,不能替代 OS 級隔離。
- Shell 中運行時拼出的路徑(例如變量拼接後再
Get-Content)無法靠靜態分析完全識別。 web_fetch等網絡讀取不經過本插件。- 插件只收緊讀取,不改變既有寫入沙箱規則。
插件以當前 DSH 進程權限運行;full 讀模式等同於讀側完全放開,應結合寫權限檔位綜合評估風險。
排錯提示¶
| 現象 | 處理 |
|---|---|
打開歷史會話報 unknown … not marked ignorable |
會話日誌異常,可用 tools/dsh-session-log-doctor.mjs --repair 修復 |
提示 this session only; the dsh-session record API is unavailable |
缺少 @deepseek-ai/dsh-session peer,或修改後未重啓 |
| 界面沒更新 | 刷新頁面;仍不行則重啓 DSH |
| 插件沒加載 | 查看 read-guard.log 是否有 applied |
結尾¶
dsh-readfence 在 DSH「一切皆插件」的生態裏,專門補上默認沙箱未覆蓋的讀側控制:白名單目錄、三種讀模式、會話記憶與審批流,併合併到統一的讀寫權限膠囊。需要安裝與細節時,可看 SkillHub 目錄頁 與 GitHub:doushalunae/dsh-readfence。