Summary
On Windows, Copilot CLI briefly flashes an empty PowerShell / conhost console
window every time the agent executes a shell command. During normal agent
activity (many commands per task) this produces near-constant window flashing
that momentarily steals focus and is very distracting.
This appears to be the same class of bug as the already-fixed git / hook /
path-resolution flashes (PRs #10235 and #11037) and the open MCP-startup flash
(#3171), but on the general agent shell-command execution path, which is
still affected.
Environment
- Copilot CLI: 1.0.80 (latest at time of report)
- OS: Windows 11 24H2, build 26100.9106
(registry ProductName cosmetically reads "Windows 10 Enterprise" on this build)
- Shell: PowerShell (default on Windows)
- Terminal: Windows Terminal
Steps to reproduce
- Launch
copilot in Windows Terminal on Windows 11.
- Ask the agent to run essentially any shell command (e.g. a simple
Get-ChildItem, or any node -e "..." invocation).
- Watch the screen while the command executes.
Expected
Shell commands run without any visible console window appearing — as already
happens for git commands and for hook / path-resolution after #10235 / #11037.
Actual
A blank PowerShell / conhost window flashes on screen for each spawned
command, briefly stealing focus.
Real-world example that triggers it
This is an actual command a session spawned (a mermaid-diagram validation step).
Every command shaped like this flashes a window:
$node = "C:\ProgramData\global-npm\node_modules\node\bin\node.exe"
$script = @'
const fs = require("fs");
const files = process.argv.slice(2);
let idx = 0;
for (const f of files) {
const txt = fs.readFileSync(f, "utf8").split(/\r?\n/);
let inBlock = false, buf = [], start = 0;
for (let i = 0; i < txt.length; i++) {
const line = txt[i];
if (!inBlock && /^\s*```mermaid\s*$/.test(line)) { inBlock = true; buf = []; start = i + 1; continue; }
if (inBlock && /^\s*```\s*$/.test(line)) {
inBlock = false; idx++;
const base = f.replace(/^.*[\\/]/, "");
const out = `${process.env.TEMP}\\mmvalidate\\block_${idx}_${base}_L${start+1}.mmd`;
fs.writeFileSync(out, buf.join("\n"));
continue;
}
if (inBlock) buf.push(line);
}
}
'@
Set-Content -Path "$env:TEMP\mmvalidate\extract.js" -Value $script -Encoding utf8
& $node "$env:TEMP\mmvalidate\extract.js" "$env:TEMP\brga.md" "$env:TEMP\rad.md" "$env:TEMP\rrd.md"
Note: the window that flashes is the outer powershell.exe host the CLI
spawns to run the command — not node.exe. node is a console app and
inherits the parent console, so it does not create a window on its own. The
content of the command is irrelevant; any shell command triggers the flash.
Likely root cause
The CLI runs shell commands on Windows via node-pty / ConPTY (conpty.node).
The pseudo-console host (conhost.exe) for the spawned command is not being
suppressed on this path, so its window briefly appears. The earlier fixes added
window suppression (windowsHide / CREATE_NO_WINDOW) only to specific paths:
- #10235 — "Git commands no longer flash a console window on Windows"
- #11037 — "Prevent brief console windows from flashing on Windows when the
agent runs hook commands or resolves command paths"
The main agent command-execution path appears not to have the equivalent
suppression.
Related
Suggested fix
Apply the same window-suppression used in #10235 / #11037 to the agent's
shell-command execution path — i.e. ensure the ConPTY / child-process spawn
passes windowsHide: true (or creates the console host without a visible
window / uses a headless OpenConsole host consistently) for every command the
agent runs, not just git, hooks, and path resolution.
Summary
On Windows, Copilot CLI briefly flashes an empty PowerShell /
conhostconsolewindow every time the agent executes a shell command. During normal agent
activity (many commands per task) this produces near-constant window flashing
that momentarily steals focus and is very distracting.
This appears to be the same class of bug as the already-fixed git / hook /
path-resolution flashes (PRs #10235 and #11037) and the open MCP-startup flash
(#3171), but on the general agent shell-command execution path, which is
still affected.
Environment
(registry
ProductNamecosmetically reads "Windows 10 Enterprise" on this build)Steps to reproduce
copilotin Windows Terminal on Windows 11.Get-ChildItem, or anynode -e "..."invocation).Expected
Shell commands run without any visible console window appearing — as already
happens for git commands and for hook / path-resolution after #10235 / #11037.
Actual
A blank PowerShell /
conhostwindow flashes on screen for each spawnedcommand, briefly stealing focus.
Real-world example that triggers it
This is an actual command a session spawned (a mermaid-diagram validation step).
Every command shaped like this flashes a window:
Note: the window that flashes is the outer
powershell.exehost the CLIspawns to run the command — not
node.exe.nodeis a console app andinherits the parent console, so it does not create a window on its own. The
content of the command is irrelevant; any shell command triggers the flash.
Likely root cause
The CLI runs shell commands on Windows via node-pty / ConPTY (
conpty.node).The pseudo-console host (
conhost.exe) for the spawned command is not beingsuppressed on this path, so its window briefly appears. The earlier fixes added
window suppression (
windowsHide/CREATE_NO_WINDOW) only to specific paths:agent runs hook commands or resolves command paths"
The main agent command-execution path appears not to have the equivalent
suppression.
Related
(same class of bug, different trigger)
Suggested fix
Apply the same window-suppression used in #10235 / #11037 to the agent's
shell-command execution path — i.e. ensure the ConPTY / child-process spawn
passes
windowsHide: true(or creates the console host without a visiblewindow / uses a headless OpenConsole host consistently) for every command the
agent runs, not just git, hooks, and path resolution.