WSL Shell Reliability
Use this skill to maximize terminal command success on Windows.
This skill does not force WSL.
It enforces a reliability-first policy:
- pick the shell with lower failure risk,
- preserve command intent across fallback,
- never switch shells silently.
Trigger conditions
- Any terminal execution task on Windows.
- AI-generated commands that look bash/POSIX-oriented.
- Repeated failures caused by quoting/path/shell mismatch.
One-screen decision table
| Question |
If Yes |
If No |
| Windows-native task/tool? |
Use PowerShell/CMD |
Next question |
| POSIX/bash semantics required? |
Use WSL/bash |
Next question |
| Need Linux-first parity? |
Prefer WSL/bash |
Next question |
| High Windows-shell parse risk? |
Prefer WSL/bash |
Next question |
| Both paths low risk? |
Pick shell with fewer moving parts |
N/A |
Examples:
- Windows-native:
winget, reg, netsh, .exe/.msi, service/system ops.
- POSIX-heavy:
rm -rf, export, ./script.sh, grep/sed/awk, complex pipes.
Rule priority (conflict resolution)
Apply rules in this priority order when guidance appears to conflict:
- Windows-native exclusions (must use PowerShell/CMD).
- Decision table hard signals (POSIX dependence, high parse risk).
- Fallback policy + intent preservation.
- Convenience preferences (tool availability, fewer steps).
If still ambiguous, choose the shell with lower execution-failure risk.
Windows-native exclusions (prefer PowerShell/CMD)
winget, scoop, choco
- PowerShell cmdlets and registry/service/system commands
.msi/.exe installer flows
- Windows-targeted
msbuild/.NET packaging chains
Execution protocol
- Select shell with the decision table.
- Generate syntax for that shell (do not mix grammar).
- Execute command.
- If failure is shell-related, fallback to the other shell.
- Preserve intent exactly; only translate syntax.
- State fallback explicitly.
Shell-aware generation rules
- WSL/bash: POSIX syntax allowed.
- PowerShell: PowerShell-native quoting/escaping.
- CMD: use only when required by task/tool.
Do not run bash syntax directly in PowerShell/CMD.
WSL templates
wsl.exe -e bash --noprofile --norc -lc "<command>"
wsl.exe -e bash --noprofile --norc -lc "cd /mnt/<drive>/<path> && <command>"
Quick translation hints (bash -> PowerShell)
export FOO=bar -> $env:FOO = "bar"
rm -rf <path> -> Remove-Item -Recurse -Force <path>
cp -r a b -> Copy-Item a b -Recurse
mv a b -> Move-Item a b
cat file -> Get-Content file
Use translations only when fallback requires them.
Guardrails
- Never silently switch shells.
- Never change command semantics when switching shells.
- Never install tools just to enforce one-shell purity.
- Prefer existing toolchain in the selected shell first.
Fallback policy
Fallback to the other shell when:
- WSL is unavailable or unstable,
- the tool cannot be resolved in current shell,
- task is clearly Windows-native,
- command fails due to shell parsing/quoting mismatch.
When falling back, report:
- what failed,
- why shell changed,
- equivalent command intent preserved.
Known limitations
- Some enterprise environments disable WSL installation/execution.
- VPN/proxy/DNS policies may break package/network operations in one shell.
- Cross-filesystem operations can have inconsistent performance.
- Security policies may block execution scripts in PowerShell.
In these cases, prefer explicit fallback and report constraints clearly.
References
Deep technical notes and examples:
- references/REFERENCE.md
- references/SCENARIOS.md
1---2name: wsl-shell-reliability3description: Reliability-first shell selection policy for AI agents on Windows. Choose WSL or PowerShell based on execution risk, not preference.4---56# WSL Shell Reliability78Use this skill to maximize terminal command success on Windows.910This skill does **not** force WSL.11It enforces a reliability-first policy:1213- pick the shell with lower failure risk,14- preserve command intent across fallback,15- never switch shells silently.1617## Trigger conditions1819- Any terminal execution task on Windows.20- AI-generated commands that look bash/POSIX-oriented.21- Repeated failures caused by quoting/path/shell mismatch.2223## One-screen decision table2425| Question | If Yes | If No |26| --- | --- | --- |27| Windows-native task/tool? | Use **PowerShell/CMD** | Next question |28| POSIX/bash semantics required? | Use **WSL/bash** | Next question |29| Need Linux-first parity? | Prefer **WSL/bash** | Next question |30| High Windows-shell parse risk? | Prefer **WSL/bash** | Next question |31| Both paths low risk? | Pick shell with fewer moving parts | N/A |3233Examples:3435- Windows-native: `winget`, `reg`, `netsh`, `.exe/.msi`, service/system ops.36- POSIX-heavy: `rm -rf`, `export`, `./script.sh`, `grep/sed/awk`, complex pipes.3738## Rule priority (conflict resolution)3940Apply rules in this priority order when guidance appears to conflict:41421. **Windows-native exclusions** (must use PowerShell/CMD).432. **Decision table hard signals** (POSIX dependence, high parse risk).443. **Fallback policy + intent preservation**.454. **Convenience preferences** (tool availability, fewer steps).4647If still ambiguous, choose the shell with lower execution-failure risk.4849## Windows-native exclusions (prefer PowerShell/CMD)5051- `winget`, `scoop`, `choco`52- PowerShell cmdlets and registry/service/system commands53- `.msi`/`.exe` installer flows54- Windows-targeted `msbuild`/`.NET` packaging chains5556## Execution protocol57581. Select shell with the decision table.592. Generate syntax for that shell (do not mix grammar).603. Execute command.614. If failure is shell-related, fallback to the other shell.625. Preserve intent exactly; only translate syntax.636. State fallback explicitly.6465## Shell-aware generation rules6667- **WSL/bash**: POSIX syntax allowed.68- **PowerShell**: PowerShell-native quoting/escaping.69- **CMD**: use only when required by task/tool.7071Do not run bash syntax directly in PowerShell/CMD.7273## WSL templates7475- `wsl.exe -e bash --noprofile --norc -lc "<command>"`76- `wsl.exe -e bash --noprofile --norc -lc "cd /mnt/<drive>/<path> && <command>"`7778## Quick translation hints (bash -> PowerShell)7980- `export FOO=bar` -> `$env:FOO = "bar"`81- `rm -rf <path>` -> `Remove-Item -Recurse -Force <path>`82- `cp -r a b` -> `Copy-Item a b -Recurse`83- `mv a b` -> `Move-Item a b`84- `cat file` -> `Get-Content file`8586Use translations only when fallback requires them.8788## Guardrails8990- Never silently switch shells.91- Never change command semantics when switching shells.92- Never install tools just to enforce one-shell purity.93- Prefer existing toolchain in the selected shell first.9495## Fallback policy9697Fallback to the other shell when:9899- WSL is unavailable or unstable,100- the tool cannot be resolved in current shell,101- task is clearly Windows-native,102- command fails due to shell parsing/quoting mismatch.103104When falling back, report:1051061. what failed,1072. why shell changed,1083. equivalent command intent preserved.109110## Known limitations111112- Some enterprise environments disable WSL installation/execution.113- VPN/proxy/DNS policies may break package/network operations in one shell.114- Cross-filesystem operations can have inconsistent performance.115- Security policies may block execution scripts in PowerShell.116117In these cases, prefer explicit fallback and report constraints clearly.118119## References120121Deep technical notes and examples:122123- [references/REFERENCE.md](references/REFERENCE.md)124- [references/SCENARIOS.md](references/SCENARIOS.md)