shellPath directly. Its shipped default is /bin/bash.Prove the host first.
command -v bash
test -x "$(command -v bash)"
readlink -f "$(command -v bash)"
Keep the exact absolute path from the same host environment that runs Harness. A path visible on the workstation may not exist inside a container.
Patch the row that owns the PTY.
Duplicate the selected Agent preset, open its folder, then edit agent.cordis.yml under $DSH_HOME/.agent-presets/<id>/.
- id: terminal-bash
name: '@deepseek-ai/dsh-terminal-bash'
config:
shellPath: /run/current-system/sw/bin/bash
timeoutMs: 300000
Replace the example with the path you proved. Start a new session after saving because a running session remains on the generation it joined.
tool-bash
The Web bundle disables this host-level one-shot tool. Patching it does not replace the PTY executable.
terminal-bash
This row passes shellPath into the terminal subprocess backend.
Use a user-owned preset.
- DuplicateSettings → Agent presets → Duplicate preset.
- Open folderUse the preset action to locate its editable files.
- Edit the ownerSet
terminal-bash.config.shellPathto the proved path. - Start freshCreate a new session and run a small persistent Bash command.
Look for executable evidence.
No PTY shell exited during startup error.
Variables and working directory persist across tool calls.
The original shipped preset remains unchanged and recoverable.
Do not substitute an arbitrary shell.
$SHELL may resolve to zsh or fish. The terminal backend ships Bash-specific arguments and prompt-readiness behavior, so a different interactive shell is not an equivalent fix.
Primary evidence.
- terminal-bash default configuration
- PTY subprocess startup implementation
- Web bundle tool composition
- Original non-FHS startup report
Review the complete incident guide.
The canonical document includes source ownership, validation evidence, container notes, and reporting details.
Review the guide