github / github/copilot-cli

[Windows] Shell commands have no console handle since v1.0.57 - breaks Clear-Host and MSAL interactive auth

Open
#3,683 0 comments 0 reactions 0 assignees View on GitHub
area:platform-windows area:tools
Dominant language
Shell
Stars
11.2k
Forks
1.9k
Avg merge
14h 16m
Merged PRs (30d)
6

Description

## Describe the bug

Since upgrading from v1.0.47 to v1.0.60, the `powershell` tool launches `pwsh.exe` without a console handle attached to the process. This breaks any script that calls `Clear-Host`/`cls` or requires MSAL interactive browser authentication.

Evidence from inside a powershell tool call:
```powershell
# GetConsoleWindow() returns 0 (no console window)
Add-Type -TypeDefinition 'using System; using System.Runtime.InteropServices; public class C { [DllImport("kernel32.dll")] public static extern IntPtr GetConsoleWindow(); }'
[C]::GetConsoleWindow() # 0

[System.Console]::WindowWidth # Throws "The handle is invalid"
Clear-Host # Throws SetValueInvocationException: "The handle is invalid"

# Process has no window
[System.Diagnostics.Process]::GetCurrentProcess().MainWindowHandle # 0
```

## Affected version

```
GitHub Copilot CLI 1.0.60-0.
```

Last working version: 1.0.47 (May 13, 2026).

## Steps to reproduce the behavior

1. Launch Copilot CLI v1.0.60 on Windows
2. Ask it to run a command containing `cls` or `Clear-Host` (e.g., "run `cls; Write-Host hello`")
3. Observe exit code 1 with error:
```
SetValueInvocationException:
Line |
3 | $RawUI.CursorPosition = @{X=0;Y=0}
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Exception setting "CursorPosition": "The handle is invalid."
```

Alternatively:
1. Ask it to run any script that uses MSAL interactive auth (e.g., Azure EV2 deployment cmdlets)
2. Auth fails with:
```
Failed to get authentication information : Value cannot be null. (Parameter 'format').
```
No browser window opens for authentication.

## Expected behavior

Shell commands executed via the `powershell` tool should have a console handle attached, as they did in v1.0.47. `Clear-Host` should succeed or be a silent no-op, and MSAL should be able to open a browser for interactive authentication.

## Additional context

- Operating system: Windows 11 (10.0.26100)
- CPU architecture: x86_64
- Terminal emulator: Windows Terminal
- Shell: PowerShell 7.6.2
- The pwsh process is launched as: `pwsh.exe -NoProfile -NoLogo -NonInteractive -Command "..."`
- The Copilot shell wrapper's `finally` block checks `$?` and calls `$host.SetShouldExit(1)` on any error, making the `cls` error fatal
- Workaround: use `Start-Process pwsh -ArgumentList @("-ExecutionPolicy", "Bypass", "-Command", $cmd)` to get a real console window, but this prevents the agent from capturing stdout directly
- Possibly related: #2525

Contributor guide

Open the contributing guide

Research direction

Start by locating the powershell tool's pwsh.exe launch path and its shell wrapper, especially the finally block that calls $host.SetShouldExit(1). Reproduce on Windows with the documented pwsh arguments using Clear-Host and an MSAL interactive-auth script, then compare behavior with v1.0.47. Done means commands retain the expected console behavior without making stdout uncapturable, and the reported failures are covered by tests or verified reproduction steps.

Written by the indexing model from the issue text.

Assessment

Tech stack
powershell
Domain
cli, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.