前言¶
DeepSeek Harness(DSH)裏,智能體通過 shell 類工具在本地執行命令。默認情況下,Harness 自帶的執行器會按平臺選一種 Shell(例如 Windows 上常見 PowerShell,Linux 上跟隨 $SHELL)。若你希望固定用 Git Bash、WSL、cmd.exe、zsh 或 fish,又希望模型側始終只看到一個 shell 工具、不能逐條命令換 Shell,就需要把「用哪種 Shell」做成部署級配置,並在沙箱無法約束所選 Shell 時明確拒絕,而不是悄悄跑出沙箱。
下面介紹社區插件 dsh-shell-select(維護者 athif23,分類:客戶端)。它在 Harness 現有沙箱與執行鏈路上注入一層 Shell 選擇,並通過 Web 設置卡片持久化配置。
這是什麼¶
dsh-shell-select 是 DeepSeek Harness 插件:面向模型只暴露一個 shell 工具,實際使用的 Shell(PowerShell、Windows PowerShell、cmd.exe、Git Bash、WSL Bash、bash、zsh、fish 或系統 sh)由用戶在設置裏選定。選擇屬於部署配置,不屬於模型;當前權限模式無法約束的 Shell 會被拒絕執行(fail-closed),而不是在沙箱外運行。
- 目錄頁:https://www.skillhub.cn/plugins/athif23/dsh-shell-select
- 源碼:https://github.com/athif23/dsh-shell-select
- 許可證:MIT(README 與 package.json)
核心功能¶
單一 Shell 貫穿所有 agent 命令¶
所選 Shell 成爲 ctx.shell,shell 工具、Hook 命令以及 Harness 自身的探測都經它執行。插件會拒絕 Harness 自帶的 bash、pwsh 工具,並在拒絕原因中指向統一的 shell 工具,避免模型混用多套入口。
發現與顯式路徑¶
Harness 自帶的可執行文件解析按名稱查找 Shell。若安裝路徑非常規或存在多個同名安裝,可在配置裏設置 executable,該路徑優先於自動發現;無法解析或路徑指向另一種 Shell 時會報錯,而不是繼續盲目搜索。
Web 設置卡片¶
配置保存在 DSH 設置文檔的 shell-select 命名空間下,可在 Settings → Plugins → Shell selection 卡片中選擇 Shell、Save / Discard,並用 Test shell 跑一條固定命令驗證。Test shell 使用的是已保存的配置,不是卡片裏尚未 Save 的暫存編輯。
向模型說明 Shell 語法¶
每種 Shell 帶有各自的語法說明(例如 PowerShell 路徑、cmd 變量展開、WSL 的 /mnt/...、fish 的非 POSIX 語法),便於智能體寫出與當前 Shell 匹配的命令。
不另建執行棧¶
deadline、輸出上限、後臺任務與沙箱約束仍由 Harness 提供;插件不增加獨立的執行 machinery。
安裝與啓用¶
DSH profile 是 ~/.dsh/profiles/<name> 下的 pnpm 項目。在已有 Harness 的 profile(例如 web)中安裝:
dsh plugin --profile web add dsh-shell-select
該命令把參數轉給 profile 目錄中的 pnpm,並把包註冊爲 dsh.profile.bundles 中的一層 bundle;已在列表中的條目不會被改動。正在運行的 profile 仍使用啓動時的 bundle 集合,安裝後需重啓:
dsh web
dsh web 與 dsh --profile web 等價。
若從本地 checkout 開發(資料中的可選方式,需自行承擔源碼審查):
git clone https://github.com/athif23/dsh-shell-select
dsh plugin --profile web add link:/absolute/path/to/dsh-shell-select
link: 安裝保持目錄與 profile 聯動,改插件代碼後重啓 profile 即可生效。插件通過 peerDependencies 聲明 Harness 包,不在插件內再打包一份 Harness。
典型用法¶
安裝並重啓 profile 後,在應用內:
- 打開 Settings → Plugins,展開 Shell selection。
- 在下拉框中選擇 Shell。默認 Automatic 會按部署規則解析並顯示實際選中的 Shell。
- 點擊 Save;在 Save 之前,修改僅處於暫存狀態,運行時行爲不變。
- 點擊 Test shell,通過當前已保存的選擇執行固定測試命令。若返回 refusal,與真實 agent 命令在當前權限下的結果一致。
也可直接編輯 ~/.dsh/settings.yaml 中的 shell-select 段,例如:
shell-select:
shell: gitbash
loginShell: false
常用字段(完整表格見 README):
| 配置項 | 默認 | 含義 |
|---|---|---|
shell |
auto |
目錄中的 Shell id,或 auto |
executable |
空 | 顯式可執行路徑,覆蓋自動發現 |
loginShell |
false |
bash 系 Shell 是否加 -l(每次命令加載 profile) |
wslDistro |
空 | WSL 發行版名,空則用默認發行版 |
wslMountRoot |
/mnt |
WSL 掛載 Windows 盤符的根路徑 |
enableRunInBackground |
true |
是否在 shell 工具上提供 run_in_background |
另有一組自本地 executor 繼承的預算字段(如 cwd、timeoutMs 默認 120000、maxOutputBytes 等),在同一 composition 行裏統一配置。Harness 原有的 pwshPath 對 PowerShell 條目仍然生效。
設置變更隻影響之後的調用,不會改寫已在準備中、運行中或已結束的調用。
平臺支持與權限注意¶
README 用表格區分「目錄可選」「有人實際跑過 agent 命令」「沙箱拒絕寫工作區外」三檔。簡要結論:
- Windows(主要平臺):可選
pwsh、powershell、cmd、gitbash、wsl。cmd.exe與 PowerShell 5.1 在沙箱約束下經驗證可用。Git Bash 與 WSL Bash 在 restricted token 下無法啓動,因此在workspace-write與read-only下會被拒絕(含設置卡片裏的版本探測);僅在danger-full-access下可運行。這是刻意設計:避免使用無法被沙箱約束的 Shell。 - Linux(次要):CI 上對
bash、sh、pwsh跑通過插件的執行並斷言 workspace-write 拒絕;獨立審查在無可用沙箱後端的 Linux 上主要驗證了拒絕路徑。zsh、fish在測試環境中未安裝。 - macOS:README 標明 unverified,測試 workflow 僅在 Windows 與 Linux 上運行。
Automatic 默認行爲是復刻部署原有邏輯:Windows 上優先解析到 PowerShell;Linux 上跟隨指向目錄條目的 $SHELL。若 executable 指向某個 bash.exe 而 shell 仍爲 auto,則按 bash 參數運行該二進制。
適用場景與安裝前檢查¶
適合需要在 Windows 上統一用 cmd、PowerShell 或(在 danger-full-access 下)Git Bash / WSL,或在 Linux 上固定 bash / sh / pwsh,且希望智能體只面對一個 shell 工具的 DSH 部署。
插件與 Harness 一樣,在當前 dsh 進程權限下運行;安裝前應閱讀源碼與 MIT 許可證,確認 bundle 行爲符合你的安全策略。社區目錄 SkillHub 與 DeepSeek / 幻方無官方從屬關係,插件來自社區維護者 athif23。
常見報錯(README Troubleshooting):
- No
<shell>executable found:按名稱未找到可執行文件,需安裝或設置executable。 - Refused under the current permission mode:當前權限模式無法約束所選 Shell;在 Windows 上 Git Bash / WSL 在
workspace-write/read-only下屬預期行爲,應換可約束的 Shell 或調整權限模式。 - Automatic shows unknown:暫存的
executable尚未被主機解析;Save 後卡片會顯示 Automatic 解析結果。
結尾¶
dsh-shell-select 把 Shell 選擇收攏爲部署級設置和一個模型-facing 的 shell 工具,在 Harness 原有沙箱上工作,並在無法約束時拒絕執行。需要 Web 卡片或 YAML 細調 WSL、login shell、後臺任務等選項時,可按上文命令安裝並重啓 profile。
- 插件目錄:https://www.skillhub.cn/plugins/athif23/dsh-shell-select
- GitHub:https://github.com/athif23/dsh-shell-select