# dsh-nushell English | [中文](README.md) `dsh-nushell` is a [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) Web profile bundle that runs the standard Agent preset’s `bash` tool with [Nushell](https://www.nushell.sh/). The model-facing tool keeps the stable `bash` name and arguments, but commands are evaluated as `nu --no-config-file -c `. User `config.nu` and `env.nu` cannot affect tool calls; DSH background jobs, permission approvals, sandbox integration, timeouts, and output handling remain available. ## Requirements - DSH `0.2` series (adapted against the downloaded `0.2.1-alpha.1` source) running on Node.js `>=22.19.0`. - Nushell available as `nu` on `PATH`. To use another executable, set `DSH_NU_PATH` to its absolute path before launching DSH. ## Install ```sh dsh plugin --profile web add dsh-nushell ``` Restart the Web profile and create a new session using the `standard` preset. Existing sessions may retain their earlier preset revision. The adapter reads the installed standard preset, replaces its Bash/PowerShell tools, and isolates the Nushell shell service within that tool group. Other presets retain their own shell. Keep the source `preset-standard` row disabled: `nushell-standard` registers its adapted configuration. Restart the profile after editing the source configuration. ## Local development Install dependencies and build the package: ```powershell pnpm install pnpm run typecheck pnpm test pnpm run test:smoke ``` Generate a patch that references the local build through absolute paths: ```powershell pnpm run patch:local ``` This generates the Git-ignored `cordis.patch.local.yml` from `cordis.patch.yml`, replacing the adapter with the absolute `file:///` path to `dist/preset.js`. It resolves `sandbox.js` and `tool.js` from the same directory. Start DSH with the generated patch: ```powershell dsh web --patch ./cordis.patch.local.yml ``` After a source change, rebuild and run `pnpm run patch:local` again. ## Usage The tool is still named `bash`, but write Nushell: ```nu ls | where type == file | get name open package.json | get name $env.DSH_WEB_URL ``` Use `run_in_background` to start a job, `job_output` to collect output, and `job_kill` to stop it. With a job registry available, foreground calls are promoted to background on timeout by default; set the tool’s `promoteOnTimeout: false` to kill them instead. Without a job registry, the timeout kills the command. Each invocation is a new process. Use the tool's `workdir` argument rather than depending on a prior `cd` command. ## Limitations - Shell state, aliases, and variables do not persist between tool calls. - For compatibility, the public tool name remains `bash`; this package's own consumer makes its schema description and system prompt Nushell-specific. - The executor delegates confinement to the DSH sandbox and classifies file denials and sandbox-runner failures with the active runner's diagnostics. - The default patch targets the Web `standard` preset; other presets require separate configuration.