github / github/copilot-cli

[Windows] Every shell command spawns a visible PowerShell console window (new console, not hidden) that stays open for the command's lifetime

Aperta
#4,549 2 commenti 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

triage
Lingua principale
Shell
Stelle
11.2k
Fork
1.9k
Merge medio
14h 16m
PR unite (30g)
6

Descrizione

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
  1. Launch copilot in Windows Terminal on Windows 11.
  2. Ask the agent to run essentially any shell command (e.g. a simple
    Get-ChildItem, or any node -e "..." invocation).
  3. 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
  • #3171 — [Windows] CMD windows flash on screen when MCP servers start
    (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 visible
window / uses a headless OpenConsole host consistently) for every command the
agent runs, not just git, hooks, and path resolution.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Traccia il percorso generale di esecuzione dei comandi shell dell’agente e analizza come avvia i comandi tramite node-pty/ConPTY. Confronta le sue opzioni di processo con le modifiche per la soppressione delle finestre delle PR #10235 e #11037, quindi riproduci il problema su Windows; il lavoro è completato quando i comandi shell ripetuti non fanno più comparire per un attimo una finestra di PowerShell o conhost e non sottraggono più il focus.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
node.js, powershell
Ambito
cli, operating-systems
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
55/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.