前言¶
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