Shells & Workspaces
Shell detection
Section titled “Shell detection”The plugin enumerates every shell it can find on the machine and offers them in the shell picker. The list is refreshed on demand (it is cached for a minute), so a shell you install while the editor is open shows up without a restart. Nothing is configured by hand unless you want it to be.
| Shell | Where it looks |
|---|---|
| PowerShell | One entry. PowerShell 7 (pwsh.exe) is preferred, probing Program Files\PowerShell\7, the x86 equivalent, the Microsoft Store WindowsApps path, ~\.dotnet\tools, Scoop, and PowerShell\7-preview. Windows PowerShell (System32\WindowsPowerShell\v1.0) is used only when no pwsh exists. |
| Command Prompt | System32\cmd.exe |
| Git Bash | Program Files\Git\bin, ProgramW6432, the x86 path, LocalAppData\Programs\Git (bin and usr\bin), and Scoop (git and git-with-openssh) |
| WSL distributions | wsl.exe -l -q, one profile per distribution, labelled <Distro> (WSL). Requires Windows build 19041+. docker-desktop distributions are filtered out. |
| Cygwin | %HOMEDRIVE%\cygwin64\bin\bash.exe, then cygwin |
| MSYS2 | %HOMEDRIVE%\msys64\usr\bin\bash.exe |
On POSIX platforms (retained in source for a future release) it detects $SHELL, /bin/bash,
/bin/zsh and /usr/bin/fish.
Every external probe (wsl -l -q, the psmux and tmux checks) is guarded by a three-second
deadline, so a hung tool cannot stall the editor.
Keep-alive flags
Section titled “Keep-alive flags”Shell commands are normalised before launch so the shell stays open instead of exiting immediately:
- PowerShell / pwsh get
-NoLogo -NoExitappended if-NoExitis not already present, plus a small-Commandthat switches$PSStyleto ANSI output rendering — unless you supplied your own-Command, in which case yours wins. - cmd.exe gets
/Q /Kunless you already passed/Kor/C. - Anything else is left exactly as you wrote it.
Paths are quoted and normalised to backslashes for CreateProcessW, so a setting written as
C:/Tools/mybash.exe works fine.
Setting a default
Section titled “Setting a default”The settings page shows a single Default Shell dropdown listing the detected shells; it stores
the shell’s label (the factory default is PowerShell). The underlying DefaultShellWindows
property also accepts an executable name or a full command line, arguments included, through
SetTerminalSetting or the ini:
pwshC:\Program Files\Git\bin\bash.exe --login -i"C:\Program Files\PowerShell\7\pwsh.exe" -NoLogo -NoExitMatching is forgiving: a label, an exact command, a path with either slash style, a bare
executable name, or a substring all resolve. If the value is empty, new sessions use Command
Prompt. If the named shell fails to start, the plugin launches cmd.exe instead and prints a
warning in the pane rather than failing the session.
Working directory
Section titled “Working directory”New sessions start according to Working Directory Policy:
| Policy | Starts in |
|---|---|
| Project Root (default) | Your .uproject directory |
| Engine Root | The engine install directory |
| Custom | The path in Custom Working Directory (relative paths are resolved to absolute) |
If a custom path is missing or unreachable, the session quietly reverts to Project Root rather than failing to start.
Workspace modes
Section titled “Workspace modes”Each session runs in one of three workspace modes, chosen from the shell picker: a plain shell row,
or the same shell marked (PSMux) or (tmux).
Plain Shell
Section titled “Plain Shell”One plain shell process per session. No multiplexer, nothing extra running, nothing to install.
When you close the editor the process ends. On restart, the plugin recreates the session record — same shell, same tab, same split layout — but the shell itself is freshly spawned, so anything that was running in it is gone.
This is the default and it is the right choice for most people.
PSMux Workspace
Section titled “PSMux Workspace”psmux is a Windows-native, PowerShell-based multiplexer. In this mode the plugin wraps your shell in a named psmux workspace. Because psmux owns the process rather than the editor, the shell keeps running when the editor closes and re-attaches when you open it again — an agent mid-task survives an editor restart.
psmux transparently wraps any Windows child process, so it works with cmd, PowerShell, pwsh and Git Bash.
Workspaces are given a random railway-flavoured name — freight, whistle-stop, marshalling —
unique across everything the plugin and psmux already know about. That name is the psmux session
id, the label in the session picker, and the key the layout is persisted under; you can rename it.
Because psmux owns the layout inside a workspace, the split buttons are hidden for psmux sessions
and you use psmux’s own prefix bindings (default Ctrl+B) instead. The ? button in the top bar
shows a cheat sheet.
Workspaces you started outside the editor appear in the session picker under External PSMux Workspaces; pick one to attach to it.
Tmux Workspace
Section titled “Tmux Workspace”For WSL profiles the multiplexer has to live inside the distribution, so those use tmux rather than psmux. The workspace is owned by the tmux server inside the distro, sessions survive editor restarts, and it behaves like an ordinary *nix tmux session in every other respect. New tmux sessions are sized to the pane and run the distro’s login shell, so your rc files apply.
A standing rule
Section titled “A standing rule”The plugin never writes to your shell profile. Not .bashrc, not your PowerShell $PROFILE,
not .zshrc — not even a transient, opt-in edit.
This is deliberate and it is not going to change. Nothing the plugin does persists on your machine in a way that would need uninstalling, and no shell-integration script can rot out from under you when your shell updates. The cost is that a few tricks other terminals do with shell hooks are not available here; the benefit is that removing the plugin removes the plugin.
