前言¶
DeepSeek Harness(簡稱 DSH)是 DeepSeek 開源的智能體運行時,核心理念是「一切皆插件」:模型、工具、沙箱、會話、界面都可以替換或重組。社區裏有一份獨立的插件目錄(deepseek-harness-plugin.com),用來檢索和安裝第三方插件;它不是 DeepSeek / 幻方的官方應用商店,收錄的項目需要自行覈對源碼和許可證。
內置的「極簡模式」工具面很窄:固定 persona,只暴露 bash 和 str_replace_editor,也不做上下文壓縮。很多開發者會用它來對齊模型行爲。問題是這套預設在 Windows 上經常直接起不來。失敗通常有兩層:一是持久 bash 依賴 PTY,而 @deepseek-ai/dsh-subprocess-local 在 win32 上會拒絕終端探測,報錯類似 terminal inspection is unsupported on platform win32,跟機器上有沒有 bash 無關;二是即便繞過 PTY,@deepseek-ai/dsh-bash-local 也是從 PATH 裏找名爲 bash 的可執行文件,Windows 默認並不提供。
dsh-gitbash-preset 就是針對這件事做的一個 agent preset 插件。它不改 DSH 核心,而是裝一套「極簡模式 (Git Bash)」變體:persona 和編輯器工具保持原樣,bash 調用改走 Git for Windows 的 MSYS shell,用每次 bash -c 代替持久 PTY 會話。
本文依據插件目錄頁、GitHub 倉庫 README / 源碼、npm 包說明,以及 DeepSeek Harness 官方倉庫交叉覈實後整理。倉庫當前版本爲 0.1.2(package.json 與 npm 一致),GitHub 於 2026-08-17 顯示 121 star;目錄頁收錄時標註爲 53 star,以倉庫頁面爲準。
這是什麼¶
dsh-gitbash-preset 是一款「工具與能力」類 DSH 插件,GitHub 倉庫由 liceses 維護,許可證爲 MIT。npm 包名爲 @icelily/dsh-gitbash-preset,package.json 的 author 與 LICENSE 版權聲明爲 icelily,要求 Node.js >= 20。
它做的事情可以概括成一句話:把官方極簡模式裏的 bash 工具,映射到本機 Git for Windows 的 bash.exe,讓 Windows 用戶能在 Web 界面裏選出「極簡模式 (Git Bash)」並真正執行命令。
預設 ID 是 minimal-gitbash。插件啓動時會把打包好的預設文件複製到用戶預設根目錄:
${DSH_HOME:-~/.dsh}/.agent-presets/minimal-gitbash/
複製的文件包括 agent.cordis.yml、gitbash-executor.mjs、preset.yml。界面上的顯示名是「極簡模式 (Git Bash)」,preset.yml 裏的 order 爲 6。
需要先說明邊界:這不是給 win32 補 PTY 後端。社區裏另有走持久 Git Bash / 替換 subprocess 運行時的方案;本插件的設計是 每次調用新開一個 shell,不保持上一次的 cd、export 狀態。README 寫得很清楚:Windows 上官方持久 PTY 不可用,這是替代方案,不是原極簡模式的完整復刻。
核心功能¶
倉庫 README 和源碼對得上的能力主要有下面幾項。
1、冪等安裝預設
插件行由 cordis.patch.yml 插入 web profile。啓動時檢查目標目錄裏三個預設文件是否都在:都在且未設置 force: true,就只打日誌然後跳過;文件內容與包內不一致時,日誌會提示用 force: true 覆蓋。force: true 會用包內文件覆蓋這三個文件,但用戶後來自己加的額外文件會保留。
2、自動探測 Git Bash
gitbash-executor.mjs 在 Windows 上按下面順序找 shell(顯式配置 shellPath 時優先):
- 環境變量
GIT_BASH %ProgramFiles%\Git\bin\bash.exe%ProgramFiles(x86)%\Git\bin\bash.exe%LOCALAPPDATA%\Programs\Git\bin\bash.exe- PATH 裏的
bash.exe - 都找不到時退回裸命令名
bash,把解析失敗交給後續 spawn 報錯
PATH 掃描會跳過 System32 / Sysnative / SysWOW64 目錄。這些位置常見的是 WSL 啓動器 bash.exe,不是 Git Bash;倉庫 issue #1 記錄過:Git 裝在非標準路徑時,探測會誤命中 C:\Windows\System32\bash.exe,WSL 沒裝發行版就會報「沒有已安裝的分發版」。維護者在後續提交里加了這項過濾。非 Windows 平臺上,未顯式指定路徑則直接用 bash;預設裏的 gitbash-shell 組還寫了 disabled: !!js process.platform !== 'win32',也就是 非 Windows 上這組 shell 默認不啓用。
另外,執行器會把 MSYS 風格的盤符路徑(如 /d/foo)轉成 D:\foo,避免把工作目錄傳給 Node 的 child_process 時對不上。/usr/bin 這類根路徑不會被誤改成盤符。
3、沙箱感知門控,不繞過安全邊界
MSYS 運行時在 Windows 受限令牌沙箱裏初始化會失敗(無法創建 signal pipe)。因此 run / start 只在策略爲 danger-full-access,或者部署根本沒有沙箱策略時放行;workspace-write 或更窄的模式會拋錯,並提示用 sandbox_permissions: "danger-full-access" 加 justification 做單次升級,或把會話切到完全訪問。這是門控,不是把沙箱關掉。
4、極簡工具面保持不變
agent.cordis.yml 裏 persona 文本是 You are a helpful software engineer assistant.,並且 complete: true、includeRuntimeContext: false,即系統提示詞到此爲止,後續組裝監聽器不再追加身份說明。模型側仍然是 bash + str_replace_editor,沒有上下文壓縮。tool-bash 的 enableRunInBackground 爲 false。
執行時通過 host 的 subprocess 服務跑 [shellPath, '-c', command],並處理超時、輸出截斷(溢出寫 spill 文件)和終止寬限。環境裏會覆蓋 NO_COLOR=1、TERM=dumb、PAGER=cat、GIT_PAGER=cat,減少分頁器和顏色干擾。
安裝與啓用¶
目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端裏執行:
dsh plugin add github:liceses/dsh-gitbash-preset
如需可復現安裝,目錄頁建議固定 commit 哈希:
dsh plugin add github:liceses/dsh-gitbash-preset#<commit>
倉庫 README、cordis.patch.yml 註釋以及 npm 頁面寫的是另一條,針對 web profile,並且用已發佈的包名:
dsh plugin --profile web add @icelily/dsh-gitbash-preset
兩條不要混着理解。github:liceses/dsh-gitbash-preset 是目錄頁的 GitHub 規格;@icelily/dsh-gitbash-preset 是 npm 包名,當前版本 0.1.2。DSH 官方文檔說明:從 GitHub 安裝拉的是源碼,從 npm 安裝拿到的是發佈產物。本插件包內已包含 lib/,README 這條更貼近作者給出的啓用方式。--profile 後面換成你實際在用的 profile 名即可,不一定叫 web。
也可以不裝插件,直接把倉庫裏的 agent-presets/minimal-gitbash/ 複製到 ~/.dsh/.agent-presets/。或者手動把 cordis.patch.yml 合併進 profile 的 patch 層。
重啓 DSH 後生效。 重啓後插件會嘗試安裝預設;目標已存在則 no-op,不會覆蓋你改過的版本,除非把插件配置裏的 force 設爲 true。
安裝前請檢查源碼倉庫和許可證。插件以當前 dsh 進程的權限運行,安裝時可能執行代碼,不在智能體沙箱之內。
典型用法¶
前置條件:本機已安裝 Git for Windows,能找到上面探測鏈路上的 bash.exe。如果裝在自定義目錄,可設環境變量 GIT_BASH,或在預設配置裏寫死 shellPath。
1、重啓 DSH 後,打開 Web 界面,新建會話(已有會話不會自動換成這套組合)。
2、在預設列表裏選擇 極簡模式 (Git Bash)。
3、啓用 bash 有兩種做法,README 寫的是二選一:
- 把會話沙箱切到完全訪問,之後 bash 調用直接走 Git Bash;
- 保持
workspace-write,讓模型在第一次調用失敗後,按報錯提示用sandbox_permissions: "danger-full-access"加上 justification 做單次升級,走正常審批。
4、如果 Git 不在默認路徑,可以在 agent-presets/minimal-gitbash/agent.cordis.yml 的 gitbash-executor 配置裏顯式指定:
shellPath: 'C:\\Program Files\\Git\\bin\\bash.exe'
預設裏默認可調的執行器參數如下(均來自 README / agent.cordis.yml):
| 字段 | 默認 | 說明 |
|---|---|---|
shellPath |
自動探測 | 非空時優先使用 |
timeoutMs |
120000 | 單次命令默認超時 |
maxTimeoutMs |
600000 | 超時上限 |
maxOutputBytes |
64000 | 單流保留字節,溢出寫入 spill |
graceMs |
3000 | 終止進程時 SIGTERM 到 SIGKILL 的寬限 |
插件行本身只有一個常用開關 force,默認 false。
倉庫提供的自檢命令是:
npm run check # 語法檢查:插件入口、執行器、測試文件
npm run test # 單元測試:路徑轉換 / 探測優先級 / 配置校驗,10 個用例
適用場景與注意事項¶
適合誰:在 Windows 上用 DSH Web 界面、希望沿用極簡模式那種窄工具面,並且本機已經(或可以)安裝 Git for Windows 的人。不適合指望「跨調用保持 cwd 和環境變量」的工作流——那是持久 PTY 的能力,這個預設明確沒有。
使用時注意下面幾點:
1、沙箱不會被插件放寬。 workspace-write 或更窄時 Git Bash 起不來,這是 MSYS 和 Windows 受限令牌的限制。需要執行命令就得完全訪問或單次升級;只讀會話裏 bash 不可用是預期行爲。
2、每次調用都是新 shell。 不要假設上一條 cd 還在。需要固定工作目錄時,應在命令裏寫絕對路徑,或通過執行器的 cwd / 請求裏的 workdir 傳入(MSYS 盤符路徑會被轉換成 Windows 路徑)。
3、不要用 WSL 的 System32 bash.exe 冒充 Git Bash。 當前版本會跳過這些目錄;若探測仍落到錯誤二進制,用 GIT_BASH 或 shellPath 釘死 Git 安裝路徑更穩妥。
4、這是社區插件。 目錄站點與 DeepSeek 官方倉庫無從屬關係。安裝前閱讀 GitHub 倉庫 和 MIT 許可證,確認你信任以 dsh 進程權限運行的代碼。需要可復現環境時固定 commit 或 npm 版本號。
5、和「給 Windows 補持久 PTY」的插件不是同一條路。 若你的目標是兩次 bash 調用之間變量和當前目錄仍然活着,需要看其他 Windows 運行時方案;本插件解決的是「極簡工具面 + 能在 Windows 上把命令丟進 Git Bash」。
小結¶
dsh-gitbash-preset 把官方極簡模式的 persona 和 str_replace_editor 留在原地,把過不了 win32 PTY 檢查的持久 bash,換成 Git for Windows 上的 bash -c,並加上沙箱門控和自動探路。對只想在 Windows 上用窄工具面寫代碼的人,安裝、重啓、選「極簡模式 (Git Bash)」、把沙箱調到完全訪問,就可以開始用。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-gitbash-preset/
GitHub:https://github.com/liceses/dsh-gitbash-preset
npm:https://www.npmjs.com/package/@icelily/dsh-gitbash-preset