The boundaryThe persistent terminal backend starts 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.

Does not change persistent PTY startup Profile-level tool-bash

The Web bundle disables this host-level one-shot tool. Patching it does not replace the PTY executable.

Owns persistent PTY startup Preset row terminal-bash

This row passes shellPath into the terminal subprocess backend.

Use a user-owned preset.

  1. DuplicateSettings → Agent presets → Duplicate preset.
  2. Open folderUse the preset action to locate its editable files.
  3. Edit the ownerSet terminal-bash.config.shellPath to the proved path.
  4. Start freshCreate a new session and run a small persistent Bash command.

Look for executable evidence.

Startup

No PTY shell exited during startup error.

Continuity

Variables and working directory persist across tool calls.

Isolation

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.

Review the complete incident guide.

The canonical document includes source ownership, validation evidence, container notes, and reporting details.

Review the guide