v6.0 pipe separation: normal Eye -> wkappbot_eye_ipc (tick IPC only), admin Eye -> wkappbot_elevated (command proxy onl...
Chrome React SPA buttons expose UIA Invoke but fire no trusted event. Fallback chain: LegacyIA -> WM_LBUTTON -> TryCdpT...
CLI tool ANSI color implementation: auto-disable on pipe/redirect + NO_COLOR env var support. Prevents garbage escape c...
When a new admin Eye spawns, it evicts old admin Eye(s) via 2-phase 'broadcast close' before claiming the wkappbot_elev...
Named pipe server (wkappbot_elevated) inside admin Eye. Handles admin commands, defers hot-swap while busy, and self-re...
AskCommands.ChatGpt and AskCommands.Claude must gate cdp.TryCloseAnonymousTabAsync() on ok=true. On ask failure (ok=fal...
[RULE] Skill content MUST be in English -- Korean uses 2-3x tokens. PHILOSOPHY: focusless-first is the PRIMARY goal. Re...
Win11 multi-monitor race: Progman anchors to secondary monitor after connect/disconnect, leaving primary monitor showin...
How the CDP prompt pump works, why ProseMirror ignores JS KeyboardEvent, and how SendPromptFocuslessAsync (DOM.focus +...
Runtime.consoleAPICalled is NOT subscribed in Core CdpClient. console.log in --eval-js JS silently drops to nowhere. Fi...
Runtime.evaluate can activate Chrome tab and steal fg. Fix: add to IsFocusStealingMethod (unconditional). Track weMinim...
How wkappbot automatically clears blocking popups (login prompts, ad modals, cookie banners on non-AI domains) before C...
Project CLAUDE.md delegation rules already mandatory with Haiku/Codex/Opus routing. Suggest closed as stale.
May-11 bare-title BUG-AUTO suggests for [CHROME:POS] InvalidOperationException are stale duplicates. Current source (b5...
Single source of truth for chat-session detection used by all wkappbot-core kill sweeps. Cmdline + parent-pid layers st...
Set Codex CLI to never ask for approval and permit wkappbot execution with broad allow rules.
A reusable template for writing wkappbot skills that are useful to both Claude and Codex. Use short, orthogonal options...
Every command in WKAppBot.CLI requires a CommandHelpMap entry in csharp/src/WKAppBot.CLI/Commands/CommandHelp.cs. When...
PseudoConsoleRunner's Enter handler uses Func string Action? as a two-phase gate. Interceptor returns null for passthro...
Unified guide: why user-input protection exists, how FocusStealSentinel + ResolveA11yTarget work conceptually, and the...
CONFIDENTIAL operator strategy: deliberately not auto-accepting cookie consent on AI service pages (ChatGPT, Gemini, et...
Core's DispatchCommand walks past pre-command flags (--sudo, --stderr, --only-eye, --only-core) when locating the subco...
After system crash/Kernel-Power 41 reboot, Windows component startup order breaks causing cascading failures: Korean IM...
Template for skills that help developers change code, refactor implementation, add tests, and ship behavior safely.
Admin Eye proxy must distinguish 'process hung' from 'grandchild holds stdout pipe' after WaitForExitAsync 30s cancel
AnimateMoveTo snap must wait 150ms after animation for WM_DPICHANGED to settle. Never remove snap -- it corrects WPF mi...
_lastFailedSwapStamp permanently blocked future hot-swaps after a single transient failure. _lastFailedSwapStampUtc tra...
When Eye crashes and cannot restart due to AbandonedMutexException, force-release the 3 named mutexes via PowerShell .N...
Eye CWD-fallback path was picking up a previous session large JSONL and firing handoff immediately on Eye restart. Fix:...
Eye health drops to ~34% when MouseCCA analyze-hack server returns non-JSON (U prefix = Unhandled exception or Unauthor...
Force-release abandoned Eye mutexes via PowerShell when Eye cannot restart after crash. Mutex names: Global\WKAppBotEye...
When CLR-shim assemblies (System.Net.Http, System.IO.FileSystem.Watcher, etc.) fail to load with FileNotFoundException...
Process-wide _lastHomeworkHash and _lastHomeworkFiredAt fields prevent identical payload from re-firing within 10min re...
Hot-swap operator reference. Covers force-swap (wkappbot --sudo --force-swap), manual orphan-kill + restage for stuck b...
Korean text passed from Git Bash gets mangled by CreateProcessA CP949 conversion. TryRecoverUtf8Argv() detects and reco...
v6.0.1 fix for HANDSHAKE-MISS false positives on cold-start sudo. Launcher/Program.cs checks File.Exists('\.\pipe\wkapp...
Under DETACHED_PROCESS spawn, Core stderr is BUFFERED not passthrough. Default showStderr=false -- stderr only shown on...
RESOLVED in commit 65846b1: WKAppBot.Launcher.csproj now auto-prepends the VS Installer dir to the MSBuild process PATH...
How MCP Launcher spawns an elevated admin Core on demand and cuts over transparently, with hot-swap deferral while admi...
Router for MCP desktop/browser automation patterns. Read T1 for surface contract, T2 for desktop control, and T3 for st...
Core MCP surface for WKAppBot. Covers the wkappbot_cli JSON-RPC contract, command mapping, and MCP registration smoke c...
Desktop control tier for WKAppBot MCP. Covers a11y, win-click, caller HWND routing, and the Standard AppBot Window rule...
Operational stability tier for WKAppBot MCP. Covers admin core cutover, hot-swap orphan cleanup, and MCP warmup guards...
BringWindowToTop steals focus before SetWindowPos(SWP_NOACTIVATE) can suppress it. Use SetWindowPos(HWND_TOP+SWP_NOACTI...
NVIDIA Overlay (GeForce Experience Share) periodically creates fullscreen black windows causing desktop blackout and ta...
Template for skills that help operators inspect, verify, audit, dry-run, and safely execute existing systems without ch...
Recovery checklist after compaction or session reset; re-load recent state, logs, and active drafting context.
Template for skills that capture repository-specific rules, exceptions, and local conventions so the right project-only...
PulseStep.Line() and Finish() always emit to stderr regardless of WKAPPBOT_PROFILE flag. Ring trail keeps last 20 lines...
When Korean/Hangul input fails only in console after system crash reboot or Kernel-Power 41, run scripts/recover-korean...
Re-arm Korean IME (TSF) inside an already-running Windows Terminal WITHOUT restarting WT. Use after crash reboot when c...
d
Checklist to prevent regression cascades. Read before fixing any BUG-AUTO or suggest. Core rule: understand WHY code ex...
Adopt a running process instead of launching when process: YAML key is set or --no-dup CLI flag is used. Avoids duplica...
A standard taxonomy for splitting wkappbot skills by audience and responsibility. Use it to decide whether a skill shou...
T1 core tier. Decision rules for wkappbot skill contribute and edit: English-only rule, never-direct-edit-json safety,...
Three-layer skill discoverability: (A) on-error hint: related skills shown on non-zero exit; (B) on-success tip: unseen...
Eye Slack WebSocket drops with invalid_auth when the xapp-1 app-level token is revoked. Symptom: Eye log shows Slack re...
Two-tier spam dismissal. Tier1: WM_CLOSE by cls/title substring (HncUpdateTray=Coupang ads, OneDrive Win32). Tier2: One...
test ordering
test 2
When wkappbot suggest resolve is called by a different channel than the suggest author, requires 2-of-2 confirmation be...
After filing a suggest, shows related existing suggests (>=40% word overlap) and a ready-to-run merge command. Best-eff...
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
swap fix evidence
clean swap test post-kill
swap evidence
swap evidence
swap test
swap trace
test desc
test desc
test --steps-file
EyeCard WPF overlay spawned by Eye per VS Code window. Upper-right 5px. Dim 50% unfocused, transparent hover-when-focus...
Usage patterns for the 3-AI triad system (Gemini/GPT/Claude): parallel questioning, thesis-antithesis-synthesis debate,...
Template for skills that explain product actions to end users without exposing internal implementation details.
T2 domain tier. Refactor loop, partial-class pattern, common errors, smoke check commands.
T3 reference tier. Chrome placement tolerance, skill sync rule, BUG-AUTO history.
Past Core workers toiled tirelessly yet left no logs — their labor unrecorded, their struggles invisible. Complete guid...
How to build and verify WKAppBot after code changes. Required reading for Codex / Haiku / any AI CLI delegated to refac...
Architecture of the page-side JS pump worker and C# orchestration layer for sending prompts to web AI (Claude/GPT/Gemin...
z
Kampala (YC W26) reverse-engineers apps into APIs by analyzing network traffic and UI patterns. Applicable to WKAppBot...
PUNK (punkcode.rocks) and Twill.ai (YC S25) show demand for lightweight remote agent control + result delivery. Maps to...
ARCHIVED: moved to mcp-automation-patterns
April 2026 HN survey of AI desktop automation tools competing with or complementing WKAppBot. Key players: UI Automata...
Auto-diffs parent node state before/after mutating a11y actions. File-edit format output. 1s retry on no-change then er...
When hitCompact is {} or { } (empty grap, e.g. FocuslessWarning/WhisperRing WPF overlays), skip AutoRegisterBug for ver...
a11y type callout -- input staging approval popover before typing. Shows text-to-type in retro green bubble, tail point...
FocusSafe.ShouldYieldToActiveUser guard added before a11y close and trusted-click operations to prevent focus stealing...
MANDATE for every a11y command processor (invoke click press inspect screenshot --target etc) in WKAppBot.CLI: must pri...
Key optimizations making a11y find/inspect/windows/ocr 1-5s instead of 50s in v6.2+. Electron/MFC UIA traversal skip, F...
When RestoreFocusWithRetryAsync is fighting a focus steal (Chrome/Electron) but user is actively typing (<1.5s idle), t...
WKAppBot complete OS-level focus service spec. SmartSetWindowOrder is the single focusless Z-order primitive — called b...
a11y hack used to run CCA + UIA + OCR + Gemini Vision always. Heavy runs (every invocation) would fire CDP tab activati...
a11y kill accepts JSON5 grap {proc:'x',pid:N,cmd:'...'} with AND-logic, reusing WindowFinder.TryParseMultiFieldPattern
Crash-safe restore of layered window alpha during a11y screenshot suppression -- prevents windows staying invisible aft...
DoSetValue() now waits 50ms after ValuePattern.SetValue and reads back via ReadElementValue. If empty, logs stale-cache...
When a11y type reports blocker persists and aborts, check if the blocker IS the parent of the target. Parent windows ar...
AskCommands.CdpPromptPump watchdog fires when editor retains text 10s after submit -- cause is usually a promo popover...
RunStart in AskCommands.RunRegistry.cs resolves pwsh/powershell to full path before Process.Start to survive parallel-w...
ask gpt / ask claude / ask gemini / ask triad all route through ChromeLauncher + CDP attach which used to steal foregro...
ChromeLauncher uses UseShellExecute=true+WindowStyle.Minimized so Chrome opens minimized (taskbar only, no focus theft)...
CDP probe now skips ports below 1024 (discard range) preventing 127.0.0.1:9 HttpRequestException that blocked suggest/e...
claude-usage used to post a Slack alert every call if thresholds tripped -- scheduled hourly runs spammed CRITICAL. Now...
evidence: delete-step
evidence: delete-step
evidence: draft persistence
evidence: draft persistence
evidence: draft persistence
evidence: insert-after
evidence: insert-after
evidence: insert-before
evidence: insert-before
evidence: move-step
evidence: move-step
evidence: single-step
evidence: single-step
evidence: step ordering
evidence: step ordering
evidence: step ordering
evidence: steps-file
evidence: steps-file
evidence: swap-steps
evidence: swap-steps
FindAllPrompts no longer blocks at startup. Cooldown raised 1s->10s. SupplementCardsFromPrompts skipped until MCP cache...
After Eye hot-swap, old wkappbot-core MCP/analyze/slack-route workers are not killed by CoreSwapWatcher alone. A post-s...
newchat injected /clear into wrong terminals when multiple Claude Code sessions shared CWD. All strategies now cross-ch...
Untitled #32770 reconnect popup in nfrunlite: a11y invoke fails (treated as blocker). BM_CLICK fails (UIPI). Solution:...
Reddit flair modal dialog buttons (Add, Cancel) are NOT exposed in UIA tree. Only the X-close button appears as UIA But...
wkappbot screensaver close finds every wkappbot-core process whose command line contains 'screensaver' and sends WM_CLO...
wkappbot screensaver: launch WPF sunset overlay (idle 10s+, per-monitor) or wipe all screensaver windows (4-pass close)...
Captures union bbox of multiple grap targets, applies 40% alpha outside individual target rects. PNG output with transp...
Per-target PrintWindow+CopyFromScreen compositing, back-to-front Z-order, transparency mask outside targets. Ambiguous...
wkappbot skill edit --add-step skips identical content; prevents accidental duplicate steps when same string is added t...
wkappbot skill read <id> --if-newer skips re-exporting SKILL.md when cached version matches catalog. Efficient for AI a...
wkappbot skill read auto-exports to .claude/skills/<id>/SKILL.md when invoked from Claude Code. Raw skill JSON section...
speak --bg now supports mid-playback stop: X button on karaoke overlay, ESC key, Alt-F4, or --caller-pid process exit....
Safety timer arms on first KaraokeTick when playback starts, not on window load. Duration = max(60s, lastMarker.AudioPo...
wkappbot-core --sudo output was CP949 mojibake. ElevatedEyeProxy now sets StandardOutputEncoding=UTF8 so Korean proxy o...
When --requirement has bad format or contains launcher flags, error messages now show correct format examples. CommandH...
CMD guard extracts affected commands from suggest text using HasCmdToken helper that checks word boundary after match,...
Any suggest entry written with raw Windows path strings (e.g. %USERPROFILE%\.wkappbot, D:\path) may contain single-back...
diagnosing swap
v1.6 STRICT POLICY: --force <pid1,pid2,...> is the ONLY way to kill anything via taskkill -- listed PIDs are killed exa...
Keeps web login session alive using Web Worker timer (not throttled in background tabs). Injects URL after 60s user idl...
win-click 3-tier cascade achieves focusless clicks on elevated MFC HTS (nfrunlite/nkrunlite) via PostMessage WM_LBUTTON...
Physical click path: empty-title non-#32770 blocker overlays (e.g. nfrunlite transparent guard window) are auto-dismiss...
On wkchat exit (and after window move/resize), locate the .lnk that launched this console and write the current WindowO...
Three techniques for wkchat (wkappbot chat cmd / claude) flow. (1) Enter-intercept uses Func<string, Action?> two-phase...
PseudoConsoleRunner Enter-intercept uses Func<string,Action?> two-phase. null returns passthrough so dir works. non-nul...
wkchat starts an interactive chat session. When the current or parent process already carries a chat session marker, de...
Every `wkappbot chat` (interactive) prints a boxed welcome banner at session start: WKAppBot ASCII logo, version, curre...
wkchat must restore terminal window to last-used position/size on startup, save geometry on every move/resize and on ex...
Commands like suggest, skill, eye bypass normal launcher pipe and route directly to Core for reliability.
Single WkNotify() entry point routes to Slack/Prompt/Speak/Callout/Signal. Deferred/recurring prompts stored in {cwd}/....
Zero-memory scheduler: filename encodes trigger time + repeat + countdown. No DB, no daemon, no in-memory state. Surviv...