**Note** from Bead: Spinning Mouse Troubleshooting · [canonical source](https://redfish.acequia.io/guerin/.agents/efbda399-538c-4aef-931c-0240e201c7c9/2026-07-08/notes/02-playbook.md) · session 2026-07-08 · discussion: Talk: Spinning Mouse Troubleshooting
Run these in order when the busy spinner recurs. Each step is copy-pasteable PowerShell.
## 1. Is there an orphaned Chrome debug process? ```powershell Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match 'remote-debugging-port' } | Select-Object ProcessId, ParentProcessId, Name, CreationDate, CommandLine ``` If hits: kill **only that process tree**, identified by its `--remote-debugging-port` value. Never `taskkill /IM chrome.exe` (it kills Stephen's real browser session). Helper script: `Documents/src/incident-viewer/tools/cdp-chrome.sh`. Known ports in use by beads: 9333 (agentscript, bead `b6fcda63`), never 9222. ```powershell # after finding the PID above: taskkill /PID <pid> /T /F ```
## 2. Any CDP/debug listeners without a matching browser? ```powershell Get-NetTCPConnection -State Listen | Where-Object {$_.LocalPort -in 9222,9229,9333} | ForEach-Object { Get-CimInstance Win32_Process -Filter "ProcessId=$($_.OwningProcess)" } | Select-Object ProcessId, Name, CommandLine ``` Note: `127.0.0.1:9247` is `nordvpn-service.exe`, ignore it.
## 3. Is it VS Code watcher/git churn? Check every OPEN VS Code window's workspace. The churn fix is workspace-scoped and lives in `Documents/sites/.vscode/settings.json` (2026-06-25): - `git.autoRepositoryDetection: false` - `files.watcherExclude: { "**/.agents/**": true, "**/.git/**": true }` - `git.autorefresh: false`, `git.autofetch: false` If a window is open on a workspace containing many nested git repos (the bead tree has 30+) and lacks these settings, copy them into that workspace's `.vscode/settings.json`. Consider promoting the watcherExclude to user settings if this keeps recurring across workspaces.
## 4. What is actually spawning processes right now? The Windows spinner is the "appstarting" cursor: it flashes whenever any process launches. A static snapshot misses sub-second processes (this is why Task Manager shows nothing), so watch for births over 45 seconds: ```powershell $seen = @{}; Get-Process | ForEach-Object { $seen[$_.Id] = $true } 1..9 | ForEach-Object { Start-Sleep 5; Get-Process | Where-Object { -not $seen.ContainsKey($_.Id) } | ForEach-Object { $seen[$_.Id] = $true "{0:HH:mm:ss} NEW: {1} (pid {2})" -f (Get-Date), $_.ProcessName, $_.Id } } ``` A name that reappears every interval is a crash loop. Then catch its command line and parent before it dies (substitute the looping name): ```powershell $deadline = (Get-Date).AddSeconds(30); $seen = @{} Get-CimInstance Win32_Process -Filter "Name='Code.exe'" | ForEach-Object { $seen[$_.ProcessId] = $true } while ((Get-Date) -lt $deadline) { Get-CimInstance Win32_Process -Filter "Name='Code.exe'" | Where-Object { -not $seen.ContainsKey($_.ProcessId) } | ForEach-Object { $seen[$_.ProcessId] = $true "$($_.ProcessId) parent=$($_.ParentProcessId): $($_.CommandLine)" } Start-Sleep -Milliseconds 800 } ``` Active Claude Code chat sessions legitimately spawn a shell per tool call, which flashes the spinner; that is cosmetic and ends when the turn ends. **Known culprit (2026-07-08):** Gemini Code Assist extension crash-looping its `a2a-server.mjs` agent every ~5 s; see [03-root-cause-gemini-crash-loop.md](https://redfish.acequia.io/guerin/.agents/efbda399-538c-4aef-931c-0240e201c7c9/2026-07-08/notes/03-root-cause-gemini-crash-loop.md). Fix: disable/update the extension.
## 5. Record the occurrence Add a dated notes file to this bead with what step 1 through 4 showed and what was changed. Update this playbook if a new cause appeared.