commit: 8b8e9053ab680f1ee64c0ae3e72bd1033d1ffdeb
workflow: build-launcher/smoke
script: scripts/smoke-help.ps1
exitcode: 0
timestamp_utc: 2026-05-01T07:24:19.1095282Z


------------------------------------------------------------
  1. Identity & help pages
------------------------------------------------------------

=== version ===
  wkappbot --version
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] --version
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=--version
  wkappbot v6.6.0
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] --version[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=--version[0m
wkappbot v6.6.0

=== help-root ===
  wkappbot --help
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] --help
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=--help
  
  WKAppBot v6.6.0 - Windows App Automation Test Framework
  Give AI eyes and hands -- operate any app, help any human. No API, no rewrite needed.
  All AI agents welcome -- Claude, GPT, Gemini, Copilot, and beyond.
  Your testing, coding, and ideas are appreciated. Let's build together.
  ... (217 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] --help[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=--help[0m

WKAppBot v6.6.0 - Windows App Automation Test Framework
Give AI eyes and hands -- operate any app, help any human. No API, no rewrite needed.
All AI agents welcome -- Claude, GPT, Gemini, Copilot, and beyond.
Your testing, coding, and ideas are appreciated. Let's build together.

Usage:
  wkappbot <command> [options]

=== Public Commands ===================================================

  a11y <action> <grap>[#uia-scope] [options]        (alias: a11y.exe / wka11y.exe)
      Universal accessibility interface -- 31 standard actions for ANY window.
      3-tier fallback: UIA -> Win32 -> SendInput. Busybox: symlink `a11y.exe` works.

      Auto-pipeline per action: blocker dismiss -> minimize restore -> tab activate
        -> zoom/magnifier -> execute (3-tier) -> result feedback (green/amber) -> fade

      Window (8):  close  kill  minimize  maximize  restore  focus  move  resize
      Element (13): read  find  highlight  invoke  click  toggle
                    expand  collapse  select  scroll  type  set-value  set-range
      Async (2):   wait  eval
      Utility (4): clipboard  clipboard-write  file-read  file-write
      Discovery (4): inspect  windows  screenshot  ocr

      Target:  --nth 3 | 3~ | ~3 | 2~4 | 1,3~    --all    (default: first match)
      Options: --depth N  --force  --value N  --direction  --amount
      Grap:    AI target language for windows + a11y nodes.
               Human sees windows; AI points with grap.
               First exact match stops interactive actions fast.
               Arrays are for lookups; actions consume the highest-priority target.
               ';' = OR   # = scope drill-down
               Ex: "*Notepad*#*File*" -> Notepad's File menu

      a11y find "*app*" --depth 5       # MUD: look (Win32 + UIA children)
      a11y highlight "*app*#*button*"   # visualize target with zoom overlay
      a11y invoke "*app*#*button*"      # click (UIA Invoke -> BM_CLICK -> SendInput)
      a11y close "*Chrome*" --nth 2~    # close 2nd window onwards
      a11y type "*app*#*edit*" "hello"

  find <keyword> [--deep] [--limit N] [--process <name>]
      Unified search: window titles + UIA accessibility elements.
      --deep: Thorough search (depth 12, slower but finds more).
  run <scenario.yaml> [-v] [--no-watch]
      Run a YAML test scenario with background element tracking.
  do <window-title> <form-id> <button-text> [--confirm]
      Full automation: combo select + button click + dialog handling.
  scan <window-title> [--save] [--ocr] [--detail]
      Scan app structure, learn controls, build Experience DB.
  ocr <window-title|image.png> [--save] [-o file]
      Extract text from window/image using Windows.Media.Ocr.
  capture <window-title> [-o output.png] [--form <id>]
      Capture a screenshot of a window or MDI child form.
  dismiss <window-title> [keywords...]
      Auto-dismiss notice/popup windows (OCR importance check).
  input <window-title> <text>
      Type text into a window (focusless PostMessage preferred).
  whisper [options]
      Real-time speech recognition + sound tokenization overlay.
  whisper study [--batch N] [--for <duration>] [--engine gemini|gpt]
      Batch-transcribe MP3 segments via AI. --for loops until timeout.
      Duration: 30=30s, 2m, 500ms, 1.1s, 2h
  whisper slice [--in <dir>] [--min-ms N] [--max-ms N]
      Slice long audio into word-level MP3 segments.
  whisper clean [--wav-dir <dir>] [--dry-run]
      Sort wav/ root: voice->_unknown, noise->Recycle Bin.
  whisper index [--in <slices-dir>] [--out <db-dir>] [--move] [--dry-run]
      Extract first-syllable soundCode -> phoneme_db/<octal>/word.mp3.
      Files with <9 voiced frames (~90ms) -> Recycle Bin automatically.
  mcp
      Start MCP stdio server (wkappbot_cli tool for JSON-RPC clients).
      Add to .mcp.json: { "wkappbot": { "command": "wkappbot", "args": ["mcp"] } }
  web <subcommand> [options]
      Chrome DevTools Protocol web automation (open/click/type/eval).
      Type 'wkappbot web help' for all subcommands.
  web fetch <url> [--max-chars N]
      HTTP GET -- returns response body (no browser needed).
  web search <query> [--limit N]
      Google search via Chrome CDP (no API key required).
  web html <url>
      Capture raw HTML of browser tab via CDP.
  file read <path> [--offset N] [--limit N] [--encoding 949|utf-16]
      Read file with line numbers. .pdf -> auto-routes to read-pdf.
  file read-pdf <path> [--ocr] [--page N] [--pages N-M]
      Extract text from PDF. --ocr: Windows.Media.Ocr fallback for scanned PDFs.
  file grep <regex> [--path <dir>] [--type <ext>] [-i] [-C N] [--max N]
      Regex search across files. -i=case-insensitive, -C=context lines.
  file glob <pattern> [--path <dir>]
      Find files by ** glob pattern. ! ALWAYS use **/ prefix (e.g. **/*.cs).
  eye [--interval N] [--size WxH] [--pos X,Y]
      WK AppBot Eye -- live overlay + Slack daemon (always on).
      ctx=N% in tick output, auto-deletes stale idle messages on restart.
  newchat "prompt" [--file prompt.txt]
      Open new Claude Desktop chat + submit prompt (all focusless UIA).
      Use for session handoff when context reaches 90%+.
  slack send|reply|upload|screenshot|listen|catch-up
      Slack messaging (Socket Mode, always-on prompt forwarding).

=== Detail Commands ===================================================

Inspection:
  windows [filter] [--uia] [--deep] [--process <name>] [--limit N]
      List visible windows in Z-order. --uia: also search UIA elements.
  inspect <grap>[#<uia-scope>] [--depth N] [--win32] [--filter <pattern>]
      Dump UIA tree of a window. # narrows to UIA element by name.
      --filter: search A11Y elements. Ex: *App*#*Panel*
  win-click <window-title> <x> <y> [--uia]
      Click a coordinate inside a window + detect UIA element.
  focus [--title <text>] [--delay N] [--depth N] [--win32] [-b]
      Inspect the currently focused window (countdown + dump).
  watch [--duration N] [--live] [--win32] [--interval N]
      Real-time element tracking under mouse cursor.

  tab-select <grap>[#<uia-scope>] --aid <id> [--list|--select <text>|--index N]
      Focusless tab switching via UIA SelectionItem pattern.
      # scopes to specific form. Ex: *App*#*Panel* --aid 1000

Automation:
  click <window-title> <form-id> [button-text] [--combo N INDEX]
      Click a button in MDI form (lower-level than 'do').
  dialog-click <dialog-title> [button-index]
      Click a button in a top-level dialog (physical click).
  toolbar-ocr <window-title> [--click "text"] [--save]
      OCR-scan MFC toolbar panes + click by text match.
  titlebar <window-title> <form-id> [button-index] [--ocr]
      Access custom title bar buttons (focusless PostMessage).
  form-dump <window-title> <form-id> [--depth N]
      Recursively dump all controls in an MDI child form.

Testing & Analysis:
  validate <scenario.yaml>
      Validate a YAML scenario file (syntax + structure check).
  uia-test <grap>[#<uia-scope>] [--invoke <name>]
      Systematic 7-phase MFC UIA pattern test with zoom overlay.
      # narrows UIA root. Ex: *App*#*Panel* --invoke BtnName
  chart-analyze <window-title|image.png> [--form <id>] [--candles N]
      Extract OHLC+volume from chart screenshots (3 strategies).
      --tooltip: Y-axis recalibration. --debug: overlay image.
  tooltip-probe <process-name> [--capture]
      Enumerate tooltip windows for a process.
  hts-stress <form.xmf> [-n 20] [--pattern repeat|memory|ctx-only]
      HTS MDI stress test with memory tracking.

Utility:
  snapshot <window-title> [--tag N] [--depth N]
      One-shot diagnostic: UIA tree + screenshot + OCR.
  knowhow write|read|web|web-list
      Record/read per-control automation notes.
  skill list|show|contribute|export|import
      Manage executable automation skills (YAML-like structured knowledge).
  schedule add|list|remove|clear
      Manage scheduled prompts for auto-recovery.
  logcat [regex] [file1.glob] [file2.glob ...] [options]
      Stream/search logs. grep-style: first arg=content regex, rest=file globs.
      --hq              Include wkappbot.hq/logs + openclaw dirs
      --past <dur>      Scan existing files (e.g. 1h, 30m, 2d). Without -f: grep-style exit.
      -f, --follow      Live tail after --past scan
      --timeout <dur>   Auto-exit after duration (e.g. 30s, 5m)
      -r[=N]            Recursive. -r=unlimited, -r=3=depth 3
      --dbg [pid]       Capture OutputDebugString (DBWIN_BUFFER shared memory)
      --json            Structural JSON key+value matching
      -A/-B/-C N        After/before/context lines
      -v -l -c -m N     Invert, filenames-only, count, max-matches
      -i / -n           Case-insensitive / line numbers
      Grap patterns: wildcards, regex: prefix, ';' OR, path-segment ';' expansion.
  grep / grap  <pattern> [files]   (logcat aliases, grep-compat arg order -- run `grap --help` for details)
  ask gpt|gemini|claude "question" [file.png] [--slack] [--new-tab]
      Ask AI via CDP (focusless). Auto-closes blank tabs, validates URL.
  ask triad "question" [--debate [N]]
      Parallel GPT + Gemini + Claude. --debate: dialectic loop (max 3 rounds, cross-prompting).
      --debate N: early exit at N consensus. Without --debate: R0 only (one answer each).
  chat ["question"] [-p] [--no-fallback]
      Claude Code CLI passthrough. On rate-limit markers -> auto-fallback to ask triad.
      No args: exec claude interactively (inherits stdio).
  agent gemini|gpt|claude|triad "task" [--max-steps N] [--fresh]
      Autonomous sub-agent loop with filesystem + web tools.
  agent checkpoint [--label "text"]
      Save mid-session snapshot of all tracked files (before compile / risky change).
      Tracked: every a11y file-write is registered in agent-session.json (persistent).
  agent dump-patch [--out file.patch] [--apply]
      git diff HEAD -> unified patch + per-checkpoint diffs saved to repo root.
      Patch header includes: apply / reverse / checkpoint-restore / original-restore hints.
  agent session-status
      Show tracked files + checkpoints in current agent session.
  agent session-clear
      Delete agent-session.json + agent-checkpoints/ (start fresh).
  win-move <window-title> [--right-top] [--x N --y N]
      Move a window to a specific position.
  screen off [--no-check]
      Turn off monitor immediately.
  com ls|use|current|methods|call
      COM adapter commands (session per folder).
  telegram send "text"
      Send message via Telegram (A11Y-first).
  suggest "text" [file.png]
      Send suggestion/feature request to Slack (auto-tags CWD workspace).
      ! Write in ENGLISH -- Korean = 2-3x token cost. Short & precise wins.
  suggest resolve <ts> "note"
      Mark suggestion resolved + Slack thread reply.
  claude-usage
      Probe Claude Desktop usage (session/weekly %) via UIA. Slack alerts at 85%/95%.
  prompt-probe [names...] [--names a,b,c] [--depth N] [--limit N] [--all]
      Probe prompt candidates with thread-author names + dump UIA hits/submit state.

General Options:
  -v, --verbose         Verbose output
  --report <dir>        Generate HTML report in directory
  --timeout <duration>  Hard kill after N time (exit 124). e.g. 30, 2m, 500ms
  -h, --help            Show this help message

Rules (for fellow Claude Code agents):
  * Questions to user: ALWAYS send via BOTH Slack AND here simultaneously.
    (Do not ask only in Slack or only here - always both!)
  * AppBotEye auto-launches for all commands (except eye/slack/help/validate).
  * Slack + Prompt forwarding + keyword monitoring: ALWAYS ON (no disable flags).
  * On prompt input failure: diagnose foreground window + share via Slack.
  * NEVER create options to disable forwarding to Claude or disable AppBotEye.

Data Directory:
  Runtime data (profiles, logs, handlers, output) stored in:
  {exe_dir}/wkappbot.hq/


=== help-a11y ===
  wkappbot a11y --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] a11y --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=a11y --help --no-regression
  a11y <action> <grap>[#uia-scope] [options]
  Universal accessibility control: UIA -> Win32 -> SendInput 3-tier fallback.
  
  Actions: close  minimize  maximize  restore  focus  move  resize
           read  find  highlight  invoke  click  toggle  expand  collapse
  ... (35 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] a11y --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=a11y --help --no-regression[0m
a11y <action> <grap>[#uia-scope] [options]
Universal accessibility control: UIA -> Win32 -> SendInput 3-tier fallback.

Actions: close  minimize  maximize  restore  focus  move  resize
         read  find  highlight  invoke  click  toggle  expand  collapse
         select  scroll  type  set-value  set-range
         clipboard  clipboard-read  clipboard-write  wait  eval

Grap patterns:
  AI target language for windows and accessibility nodes.
  Humans browse windows; AIs point with grap.
  Interactive actions stop at the first exact match.
  Full lookup stays array-shaped for ranking and review.
  "*App*"              glob wildcard
  "regex:btn_\\d+"     regex
  "*App*;*Calc*"       OR (semicolon)
  "App#MenuBar"        # = UIA scope drill-down
  "Chrome#ChatGPT#btn" tab portal (auto tab switch)
  "adb://device#elem"  Android ADB

Key options:
  --nth N / N~ / ~N / 2~4 / 1,3~   which match (default: first)
  --all                      apply to all matches
  --depth N                  UIA tree depth
  --force                    skip safety guards
  --hotkey                   type: label/menu dispatch (not raw keys)
  --eval-js "js"             pre-hook or primary output (web)

Examples:
  a11y invoke "*MenuBar*#*File*"
  a11y type "*edit*" "hello world"
  a11y type "*app*#*MenuBar*" "File/Save" --hotkey
  a11y read "*Chrome*#chatgpt.com" --eval-js "document.title"
  a11y close "*Chrome*" --nth 2~

Skills for 'a11y': (wkappbot skill read <id>)
  - a11y Command Cheatsheet - Operator View for Claude and Codex  [a11y-command-cheatsheet] [unclassified]
  - a11y close safety: ambiguity + focus-node diagnostics  [a11y-close-safety-ambiguity-focus-node-diagnostics] [unclassified]
  - a11y find - output format and process resolution  [a11y-find] [operator/project (mixed)]
  - a11y playbook writing  [a11y-playbook-writing] [project (pure)]

=== help-windows ===
  wkappbot windows --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] windows --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=windows --help --no-regression
  windows [grap]  →  converted to a11y find (v6.1)
  Alias: wkappbot windows <grap> == wkappbot a11y find <grap>
  No args: finds wkappbot* windows. Use a11y find directly for full options.
  
  Skills for 'windows': (wkappbot skill read <id>)
  ... (4 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] windows --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=windows --help --no-regression[0m
windows [grap]  →  converted to a11y find (v6.1)
Alias: wkappbot windows <grap> == wkappbot a11y find <grap>
No args: finds wkappbot* windows. Use a11y find directly for full options.

Skills for 'windows': (wkappbot skill read <id>)
  - wkappbot windows -- focus flag and no-filter relevance mode  [wkappbot-windows-focus-flag-and-no-filter-relevance-mode] [unclassified]
  - OculOS vs WKAppBot: UIA-as-MCP desktop agent control  [competitive-oculos-desktop-mcp] [unclassified]
  - Anthropic Computer Use — cross-platform AI desktop control (API + Cowork/Dispatch)  [anthropic-computer-use-cross-platform] [user/developer/operator (mixed)]
  - Codex CLI usage inside WKAppBot  [codex-cli-wkappbot-usage] [project (pure)]

=== help-file ===
  wkappbot file --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] file --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=file --help --no-regression
  file <subcommand> [options]
  File operations with 4-stage encoding detection (UTF-8/CP949).
  
  Subcommands:
    open <path>[:line[:col]]
  ... (28 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] file --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=file --help --no-regression[0m
file <subcommand> [options]
File operations with 4-stage encoding detection (UTF-8/CP949).

Subcommands:
  open <path>[:line[:col]]
      Smart open in responsible VS Code window, then goto line/column.
  read <path> [--offset N] [--limit N] [--encoding 949|utf-16]
      Read with line numbers. .pdf -> auto-routes to read-pdf.
      Aliases: --path/--file, --start/--end/--count, --no-line-numbers.
  write <path> [--encoding N] (--stdin | --text "..." | --file <src>) [--append]
      Auto backup ON. Aliases: --path, --content, --source-file, --dry-run.
  edit <old> <new> <path> [--replace-all] [--context N] [--tab-size N]
      Indent-based block context. C-style escapes (\\n \\t \\r \\\\).
      Same old+new = search-only (no write). --old-file/--new-file for Korean args.
      Option aliases also work: --old-string/--text/--path/--dry-run.
  grep <regex> [--path <dir>] [--type <ext>] [-i] [-C N] [--max N]
      Regex search. ';' OR in --path: "D:/A;B" expands.
      Aliases: --pattern/--query, --root, --file.
  glob <pattern> [--path <dir>]
      ** glob. NOTE: ALWAYS use **/ prefix: "**/*.cs" not "*.cs".
      Alias: --pattern.

Aliases: file-open, file-read, file-edit, file-grep, file-glob (hyphenated)
wkedit.exe -- busybox symlink -- file edit auto-routing

NOTE: CP949 source files -- some WKAppBot sources have Korean in CP949.
  Check encoding before editing! Corruption = unrecoverable.

Skills for 'file': (wkappbot skill read <id>)
  - file -- Read/Write/Edit/Grep/Glob Cheatsheet  [file-command-cheatsheet] [operator (pure)]
  - file symlink and file link: create symbolic and hard links  [file-symlink-and-file-link-create-symbolic-and-hard-links] [unclassified]
  - File-as-scheduler: pending_prompts/ filename-encoded schedule pattern  [file-as-scheduler-pending-prompts-pattern] [unclassified]
  - Public launcher DataDir: use WKAPPBOT_HOME or %USERPROFILE%/.wkappbot  [public-launcher-datadir-use-wkappbot-home-or-userprofile-wkappbot] [unclassified]

=== help-skill ===
  wkappbot skill --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] skill --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=skill --help --no-regression
  skill <subcommand> [options]
  AI skill management -- executable knowhow for Claude instances.
  Storage: {callerCwd}/skills/ (project, git-tracked)
           {hq}/skills/       (installed, shared across all repos)
  
  ... (43 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] skill --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=skill --help --no-regression[0m
skill <subcommand> [options]
AI skill management -- executable knowhow for Claude instances.
Storage: {callerCwd}/skills/ (project, git-tracked)
         {hq}/skills/       (installed, shared across all repos)

Subcommands:
  list [app]                        List skills grouped by app, most recent first
  read <id>                         Full detail: steps, refs, version
  search <keyword> [--app X]        Search title/desc/tags/steps
  contribute --app X --title Y --desc Z
             [--steps "s1|s2"] [--tags "t1,t2"] [--id <slug>]
             [--refs "file:line:pattern|..."]
                                   Create or update (auto version bump)
  edit <id> [--title X] [--desc X] [--add-step X]
            [--add-requirement "cmd => expected"]
                                   Partial update; auto version bump.
                                   COPY-ON-EDIT: if skill is HQ-only (not in your
                                   project skills/), it is automatically forked into
                                   your repo's skills/ so you can edit and contribute.
                                   Higher-version fork propagates back via sync.
  delete <id>                       Remove from project dir
  install [--app X] [--force]       Copy project -> HQ (runs on publish)
  sync                              Immediately sync peer repo skills into HQ
                                   (Eye runs this every 30 min automatically)
  export [--app X] [--out f.zip]    Export to zip
  import <file.zip>                 Import into project dir
  verify <id>                       Check source_refs still match code
  audit [--app X]                   Audit all skills for stale/missing refs

Cross-repo skill flow:
  Any repo (suggester) can view all skills via `skill read` (shared HQ).
  Any repo can add requirements to a suggest: `suggest add-requirement`.
  Any repo can fork+edit an HQ skill: `skill edit` auto-forks if needed.
  Eye syncs peer repo skills/ → HQ every 30 min; version field resolves conflicts.

Examples:
  wkappbot skill list
  wkappbot skill sync
  wkappbot skill read handoff-checklist
  wkappbot skill edit my-skill --add-requirement "wkappbot windows => nfrunlite shown"
  wkappbot skill contribute --app wkappbot-webbot --title "X" --desc "Y" \
    --refs "csharp/src/WKAppBot.WebBot/CdpClient.cs::pattern"

Skills for 'skill': (wkappbot skill read <id>)
  - Skill Authoring Rules + Contribute & Edit Workflow  [skill-contribute-edit] [operator/developer/project (mixed)]
  - skill search/news: coverage-based ranking + skill news command  [skill-coverage-ranking-news] [operator/project (mixed)]
  - Skill Audience Taxonomy  [skill-audience-taxonomy] [operator/developer/project/user (mixed)]
  - Skill Reminder News and Invocation Log — discoverability system  [skill-reminder-news-and-invocation-log-discoverability-system] [unclassified]

=== help-schedule ===
  wkappbot schedule --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] schedule --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=schedule --help --no-regression
  schedule add|list|remove|clear [options]
  Manage scheduled prompts for auto-delivery to Claude.
  
  schedule add "<prompt>" --at "2026-03-30T15:00" [--repeat 1h]
  schedule list     show pending items
  ... (10 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] schedule --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=schedule --help --no-regression[0m
schedule add|list|remove|clear [options]
Manage scheduled prompts for auto-delivery to Claude.

schedule add "<prompt>" --at "2026-03-30T15:00" [--repeat 1h]
schedule list     show pending items
schedule remove <id>
schedule clear    remove all

Schedules are executed by Eye (must be running).

Skills for 'schedule': (wkappbot skill read <id>)
  - Joodeok YouTube Market Schedule Extractor -- Auto-Subtitle Transcript Pipeline  [joodeok-market-schedule-extractor] [unclassified]
  - schedule --cmd bash/sh/python on Windows: auto-resolve interpreter path  [schedule-cmd-bash-windows] [unclassified]
  - AI News Briefing — lunch and dinner automated digest  [ai-news-briefing] [unclassified]
  - AI News to Suggests -- fetch, filter, queue, and act on improvement items  [ai-news-to-suggests] [unclassified]

=== help-logcat ===
  wkappbot logcat --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] logcat --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=logcat --help --no-regression
  logcat [regex] [file1.glob ...] [options]
  Stream or search wkappbot logs. grep-style argument order.
  
  First arg = content regex (';' = OR). Remaining = file globs (default: *.log).
  Path segment ';' OR: "logs/媛;<name>*.log" expands to 3 patterns.
  ... (19 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] logcat --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=logcat --help --no-regression[0m
logcat [regex] [file1.glob ...] [options]
Stream or search wkappbot logs. grep-style argument order.

First arg = content regex (';' = OR). Remaining = file globs (default: *.log).
Path segment ';' OR: "logs/媛;<name>*.log" expands to 3 patterns.

Key options:
  --hq            include wkappbot.hq/logs (finished logs live here)
  --past <dur>    scan existing files (1h, 30m, 2d). Without -f: grep-exit.
  -f / --follow   live tail after --past scan
  --timeout <dur> auto-exit after N seconds (30s, 5m)
  --dbg [pid]     capture OutputDebugString via DBWIN_BUFFER shared memory
  --json          structural JSON key+value matching (AND logic)
  -i / -n / -C N  case-insensitive / line numbers / context lines
  -v / -l / -c    invert / filenames-only / count

Examples:
  logcat "SLACK\|ROUTE" --hq --past 1h
  logcat "error" *.log --past 30m -f
  logcat '{"role":"user"}' *.jsonl --json --hq --past 2h
  grap "keyword" *.log --hq --past 30m     (grep-compat alias)

Skills for 'logcat': (wkappbot skill read <id>)
  - logcat -- Log Viewer Cheatsheet  [logcat-command-cheatsheet] [operator (pure)]

=== help-eye ===
  wkappbot eye --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] eye --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=eye --help --no-regression
  eye [options]
  WK AppBot Eye -- persistent Slack daemon + status overlay.
  Runs as background process, auto-spawned by most commands.
  
  Key behaviors:
  ... (20 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] eye --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=eye --help --no-regression[0m
eye [options]
WK AppBot Eye -- persistent Slack daemon + status overlay.
Runs as background process, auto-spawned by most commands.

Key behaviors:
  - Receives Slack messages -> queues to slack_queue/ -> routes to Claude
  - Posts Eye status card to Slack (context%, current task, cwd)
  - Auto-deletes stale idle messages on restart (spam prevention)
  - Hot-swap: detects .new.exe -> transparent swap, no restart needed

eye tick           one-shot status check (ctx%, cards, queue stats)
eye --interval N   loop interval in ms (default: 100)

NOTE: Do NOT spawn Eye directly -- let normal commands trigger it.
NOTE: eye tick does NOT spawn Eye (by design).

Queue: wkappbot.hq/runtime/slack_queue/*.json
  Each received Slack message = one file, drain every 1s.
  [EYE_QUEUE] in tick output shows pending/processing counts.

Skills for 'eye': (wkappbot skill read <id>)
  - Eye Slack Thread -- Live Streaming Structure & CCABot Slot Design  [eye-slack-thread-streaming-structure] [project (pure)]
  - Eye handoff: age guard prevents false-positive on session start  [eye-handoff-age-guard] [unclassified]
  - Always-On AI Automation Daemon -- AppBot Eye Internals  [always-on-ai-automation-daemon-appbot-eye-internals] [project (pure)]
  - Admin Eye 2-phase broadcast close for clean hand-over  [admin-eye-broadcast-close-handover] [project (pure)]

=== help-slack ===
  wkappbot slack --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] slack --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=slack --help --no-regression
  slack <subcommand> [options]
  Slack messaging via Bot API (Socket Mode).
  
  Subcommands:
    send "<msg>" [file.png]             send to main channel
  ... (15 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] slack --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=slack --help --no-regression[0m
slack <subcommand> [options]
Slack messaging via Bot API (Socket Mode).

Subcommands:
  send "<msg>" [file.png]             send to main channel
  reply "<msg>" --msg <ts> [file.png] thread reply
  upload <file> [--msg <ts>]          upload file (optionally to thread)
  route --queue                       drain slack_queue/ (internal, Eye only)
  route --file <path>                 single message route (test use)
  route '<json>'                      inline JSON route (test use)

RULE: Always reply to Slack messages IN SLACK via `slack reply --msg <ts>`.
  Answering only in the Claude Code prompt is NOT acceptable.
NOTE: `slack route` is an internal Eye command -- do NOT call manually unless testing.

Skills for 'slack': (wkappbot skill read <id>)
  - slack -- Send & Reply Cheatsheet  [slack-command-cheatsheet] [operator (pure)]
  - Slack Bot Self-Mention Does NOT Trigger Socket Events — Routing Limitation  [slack-bot-self-mention-no-socket] [unclassified]
  - slack send/reply: per-CWD reply context prevents cross-project thread misroute  [slack-send-reply-per-cwd-reply-context-no-misroute] [unclassified]
  - Eye Slack Thread -- Live Streaming Structure & CCABot Slot Design  [eye-slack-thread-streaming-structure] [project (pure)]

=== help-ask ===
  wkappbot ask --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] ask --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=ask --help --no-regression
  ask gpt|gemini|claude "<question>" [file.png] [--slack] [--new-tab]
  Ask AI via CDP (Chrome DevTools Protocol, focusless).
  
  ask triad "<question>" [--debate [N]]
    Parallel GPT + Gemini + Claude. --debate = triad-style multi-round synthesis.
  ... (13 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] ask --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=ask --help --no-regression[0m
ask gpt|gemini|claude "<question>" [file.png] [--slack] [--new-tab]
Ask AI via CDP (Chrome DevTools Protocol, focusless).

ask triad "<question>" [--debate [N]]
  Parallel GPT + Gemini + Claude. --debate = triad-style multi-round synthesis.

ask gpt|gemini|claude (agent mode):
  Autonomous sub-agent loop with tools.

NOTE: Always ask in ENGLISH -- Korean = 3-4x token waste.
NOTE: CDP requires Chrome/Edge open with target AI tab.
NOTE: Result artifact = chat text only (CDP eval DOM read for full content).

Skills for 'ask': (wkappbot skill read <id>)
  - ask -- AI Delegation Cheatsheet  [ask-command-cheatsheet] [operator (pure)]
  - ask gpt editor-wait: last-resort tag-and-rescue when selector chain exhausted  [ask-gpt-editor-wait-tag-and-rescue-fallback] [unclassified]
  - ask-*/triad CDP focus-steal coverage via sentinel user-active yield  [ask-cdp-uia-focus-steal-coverage-via-sentinel] [unclassified]
  - ask/web Chrome launch: AppBotPipe focusless guard allowlist  [ask-web-chrome-launch-focusless-guard-allowlist] [unclassified]

=== help-gc ===
  wkappbot gc --help --no-regression
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] gc --help --no-regression
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=gc --help --no-regression
  gc [pattern] [--days N] [--sweep]
  Garbage collect old logs, temp files, stale caches.
  --days N: only files older than N days (default: 7).
  --sweep: aggressive cleanup.
  
  ... (3 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] gc --help --no-regression[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=gc --help --no-regression[0m
gc [pattern] [--days N] [--sweep]
Garbage collect old logs, temp files, stale caches.
--days N: only files older than N days (default: 7).
--sweep: aggressive cleanup.

Skills for 'gc': (wkappbot skill read <id>)
  - logcat -- Log Viewer Cheatsheet  [logcat-command-cheatsheet] [operator (pure)]
  - repo maintenance: gc cleanup and pre-release git audit  [repo-maintenance-gc-cleanup-and-pre-release-git-audit] [unclassified]

------------------------------------------------------------
  2. Skill system
------------------------------------------------------------

=== skill-list ===
  wkappbot skill list
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] skill list
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=skill list
  [SKILL] 197 skill(s) - most recent first:
    [wkappbot-core]
      - SDK Multi-Repo Deployment & Commercial Launch Checklist (wkappbot-sdk-multi-repo-deploy) v1.4 [HQ] [2d ago] [unclassified] - Complete deployment guide: per-repo Eye isolation, DataDir/pipe architecture, config.json setup, SDK packaging (MIT launcher + closed core), GitHub Release workflow, onboarding, and commercial launch checklist
      - File-as-scheduler: pending_prompts/ filename-encoded schedule pattern (파일명이 곧 스케줄 -- pending_prompts 패턴) (file-as-scheduler-pending-prompts-pattern) v1.0 [HQ] [2d ago] [unclassified] - Zero-memory scheduler: filename encodes trigger time + repeat + countdown. No DB, no daemon, no in-memory state. Survives process restart/reinstall automatically. The file IS the schedule.
      - WkNotification: unified dispatcher + file-based scheduler (통합 알림 디스패처 + 파일 기반 스케줄러) (wknotification-unified-dispatcher-and-file-scheduler) v1.0 [HQ] [2d ago] [unclassified] - Single WkNotify() entry point routes to Slack/Prompt/Speak/Callout/Signal. Deferred/recurring prompts stored in {cwd}/.wkappbot/pending_prompts/ as filename-encoded schedules. Zero memory overhead -- file IS the schedule.
  ... (209 more)
  exit=0
  [ASSERT OK] skill-list has wkappbot app

=== skill-search ===
  wkappbot skill search grap
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] skill search grap
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=skill search grap
  [DBG] kws=grap hits=33
  [SKILL] 33 match(es):
    [wkappbot-workflow] grap [project (pure)] cov=2.09 - grap -- UI Element Address System (Window + UIA Scope + Web + ADB)
    [wkappbot] grap-target [operator/project (mixed)] cov=1.74 - grap-target
    [wkappbot] grap-alias-system [project (pure)] cov=1.54 - GRAP Alias System
  ... (32 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] skill search grap[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=skill search grap[0m
[31;1m[DBG] kws=grap hits=33[0m
[31;1m[SKILL] 33 match(es):[0m
  [wkappbot-workflow] grap [project (pure)] cov=2.09 - grap -- UI Element Address System (Window + UIA Scope + Web + ADB)
  [wkappbot] grap-target [operator/project (mixed)] cov=1.74 - grap-target
  [wkappbot] grap-alias-system [project (pure)] cov=1.54 - GRAP Alias System
  [wkappbot] find-any-window-element-your-way-grap-multi-modal-search [project (pure)] cov=1.17 - Find Any Window Element Your Way -- grap Multi-Modal Search
  [wkappbot] a11y-grap-hwnd-authoritative-no-and-reject-on-drifted-fields [unclassified] cov=1.14 - a11y grap: explicit hwnd is authoritative in FindByMultiField
  [wkappbot-core] taskkill-compat-shim-a11y-first-kill-routing [operator (pure)] cov=1.02 - taskkill compat shim: a11y-first kill routing
  [wkappbot-workflow] wkappbot-windows-focus-flag-and-no-filter-relevance-mode [unclassified] cov=1.02 - wkappbot windows -- focus flag and no-filter relevance mode
  [wkappbot] a11y-playbook-writing [project (pure)] cov=1.01 - a11y playbook writing
  [wkappbot] a11y-find [operator/project (mixed)] cov=1.00 - a11y find - output format and process resolution
  [wkappbot-workflow] a11y-command-cheatsheet [unclassified] cov=0.81 - a11y Command Cheatsheet - Operator View for Claude and Codex
  [hts-heroes] wkappbot-run-hts-launch-loading-trace [unclassified] cov=0.81 - wkappbot exec/run managed launcher + stdin-inject + Ctrl+C/Z control chars
  [wkappbot-workflow] web-command-cheatsheet [unclassified] cov=0.35 - web -- Fetch/Search/Open Cheatsheet (URL-as-target banned, grap required for tab-bound verbs)
  [wkappbot-core] a11y-kill-json5-grap-support [unclassified] cov=0.32 - a11y kill JSON5 grap support
  [wkappbot-core] screenshot-grap-bbox [unclassified] cov=0.30 - screenshot: smart multi-grap compositing with painter's algorithm
  [wkappbot-workflow] a11y-find-verify-miss-empty-grap-guard [unclassified] cov=0.20 - A11y Ambiguity Guard: Skip Verify MISS for Empty {} Grap
  [wkappbot-core] a11y-auto-find-grap-verify-skip-miss-report-for-empty-pattern-wpf-overlays [unclassified] cov=0.12 - a11y auto-find grap verify: skip MISS report for empty {} pattern (WPF overlays)
  [wkappbot-core] screenshot-mask-transparency [unclassified] cov=0.02 - screenshot --mask: transparency outside target rects
  [wkappbot] competitive-analysis-css-selectors-rust-perf-scenario-expect-xp-sharing [unclassified] cov=0.02 - Competitive analysis: CSS selectors, Rust perf, scenario expect, XP sharing
  [wkappbot] a11y-screenshot-focusless-window-capture [unclassified] cov=0.01 - a11y screenshot: focusless window capture
  [wkappbot-workflow] diagnostic-commands-cheatsheet [unclassified] cov=0.00 - Diagnostic Commands Cheatsheet (whisper validate claude-usage eye tick)
  [wkappbot-workflow] inspect-before-automate [operator (pure)] cov=0.00 - 자동화 전 반드시 inspect 먼저
  [hts-heroes] hts-testing-cheatsheet [unclassified] cov=0.00 - HTS Testing Cheatsheet (form-dump uia-test do scan chart analyze-hack dbgview)
  [hts-xingq] mdi-form-targeting [project (pure)] cov=0.00 - MDI 자식폼 타겟팅
  [wkappbot] a11y-close-safety-ambiguity-focus-node-diagnostics [unclassified] cov=0.00 - a11y close safety: ambiguity + focus-node diagnostics
  [wkappbot] compete-roadmap-2026q2 [unclassified] cov=0.00 - Competition Response Roadmap 2026-Q2 (Gemini draft)
  [wkappbot-core] file-as-scheduler-pending-prompts-pattern [unclassified] cov=0.00 - File-as-scheduler: pending_prompts/ filename-encoded schedule pattern
  [wkappbot-core] skill-reminder-news-and-invocation-log-discoverability-system [unclassified] cov=0.00 - Skill Reminder News and Invocation Log — discoverability system
  [wkappbot-core] wknotification-unified-dispatcher-and-file-scheduler [unclassified] cov=0.00 - WkNotification: unified dispatcher + file-based scheduler
  [wkappbot-workflow] a11y-find-deprecated-eval-removal-guard [unclassified] cov=0.00 - A11y Eval Deprecated: AutoRegisterBug Guard on Use
  [wkappbot-workflow] anthropic-computer-use-cross-platform [user/developer/operator (mixed)] cov=0.00 - Anthropic Computer Use — cross-platform AI desktop control (API + Cowork/Dispatch)
  [wkappbot-workflow] claude-cli-automation-patterns-wkappbot-integration [unclassified] cov=0.00 - Claude CLI automation patterns + wkappbot integration
  [wkappbot-workflow] claude-token-optimization [unclassified] cov=0.00 - Claude Token Optimization — Exploration, Context & Search
  [wkappbot-workflow] lm-wiki-personal-knowledge-base [user (pure)] cov=0.00 - LM Wiki — Personal Knowledge Base with Markdown (Claude Code + Obsidian)

  Use: wkappbot skill read <id>

=== skill-read ===
  wkappbot skill read grap
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] skill read grap
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=skill read grap
  [SKILL] grap -- UI Element Address System (Window + UIA Scope + Web + ADB)
    ID     : grap
    App    : wkappbot-workflow
    Desc   : GRAP = Grab Accessible Pattern -- JSON5-extended universal UI element address. {JSON5-window}#AbsTagPath: identifies any Win32/UIA/web/Android element. a11y find outputs verified '# TARGET "grap" [OK] Nms' for direct copy-paste targeting.
    Audience: project (pure)
  ... (116 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] skill read grap[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=skill read grap[0m
[31;1m[SKILL] grap -- UI Element Address System (Window + UIA Scope + Web + ADB)[0m
  ID     : grap
  App    : wkappbot-workflow
  Desc   : GRAP = Grab Accessible Pattern -- JSON5-extended universal UI element address. {JSON5-window}#AbsTagPath: identifies any Win32/UIA/web/Android element. a11y find outputs verified '# TARGET "grap" [OK] Nms' for direct copy-paste targeting.
  Audience: project (pure)
  Tags   : grap, pattern, a11y, uia, scope, json5, wildcard, hwnd, adb, tab-portal, find, abs-path, project
  Steps  :
    1. [WHAT-IS-GRAP] grap = UI address. Before '#' = which window. After '#' = which UIA element inside.
Three-tier: Win32 window -> UIA subtree -> web content (CDP).
a11y find <grap> outputs clean markdown sections to stdout -- paste-ready grap + ready-to-run command.
NEW FORMAT (v5.13+):
## FOCUS
"{hwnd:...,pid:...,proc:'...'}#absTagPath"  <- focused window (dim)

## TARGET
"{hwnd:...,pid:...,proc:'chrome',domain:'chatgpt.com'}#absTagPath"  <- paste-ready grap
wkappbot a11y find "..."  <- copy this line to re-run
[OK] Nms  <- verify mark on line AFTER command (no [[double brackets]])
WindowTitle -> stderr (noise-free stdout)
MULTIPLE TARGETS: ## TARGETS N matches header + one ## TARGET block per window.
    2. [WINDOW-PATTERNS] Before '#' -- addressing a top-level windoD:
  Substring:   'ChatGPT'                    contains, case-insensitive
  Wildcard:    '*Notepad*'                      * = any chars
  OR(;):       '*Notepad*;*Calculator*'           matches either
  JSON5:       {title:'Claude',proc:'chrome'}  AND logic
  HWND direct: {hwnd:0x010B084A}             instant lookup
  HWND bracket:[0012061C]                    inspect/windows output format
  Regex:       regex:^AppName                    prefix required
    3. [JSON5-SPEC] JSON5-extended grap syntax -- official window address grammar.
SYNTAX: {field:value, field:value, ...}  -- all fields AND'd
  Single-quoted strings OK: {proc:'chrome'}
  Unquoted keys OK:         {proc:'chrome',domain:'claude.ai'}
  Trailing comma OK:        {proc:'chrome',}
  Hex literals OK:          {hwnd:0x010B084A}
FIELDS (all optional, combine freely):
  hwnd:   0x010B084A    Win32 HWND -- instant exact lookup, session-scoped
  pid:    19016         process ID -- session-scoped
  proc:   'chrome'      process name (no .exe), case-insensitive
  domain: 'claude.ai'   browser domain via CDP -- most stable web identifier
  title:  'Claude'      window title substring (30-char cap)
  cls:    'Chrome_WidgetWin_1'  Win32 window class -- essential for MFC/old apps
  cid:    100           Win32 control ID
  url:    'https://...' browser URL substring via CDP
OPERATORS:
  AND (default):    {proc:'chrome',domain:'chatgpt.com'}
  Array OR:         {title:['ChatGPT','Claude']}  -- matches if title contains either
  Glob in value:    {title:'*AppBot*'}             -- * and ? work in string values
  Regex in value:   {title:/AppBot.*/}             -- /regex/ literal, full .NET regex
  OR at top level:  use ;-syntax before '#':  '*Notepad*;*Calculator*'
COMPACT GRAP RULE (# TARGET verified output):
  browser  -> {hwnd,pid,proc,domain}         no cls/title/url
  MFC/old  -> {hwnd,pid,proc,cls}            cls essential; no accessibility tree = needs class
  modern   -> {hwnd,pid,proc}               proc sufficient
  NEVER include title/url in stored graps -- volatile, session-specific
    4. [SCOPE-CHAIN] After '#' -- UIA element drill-down. Each segment = one tree level:
  '*App*#*Button*'        find Button anywhere under App
  '*App*#Panel#*OK*'      Panel first, then OK inside
  '*App*#'               empty scope = drill to keyboard-focused element
  Depth: up to 25 levels. Match: Name first, AutomationId fallback (both substring).
  Container-first: Pane/Group preferred over Button/Edit at same level.
  Regex segment: '*App*#regex:btn_\d+'
    5. [WIN32-CHILD] '/' drills Win32 child windows (MFC/legacy multi-child-window apps):
  'Parent/Child'              Win32 GetChildren, pattern match
  'Parent/Child#UiaScope'     Win32 drill THEN UIA scope
  'Window/'                   trailing / = focus-tunnel to focused child + element
  Used for AppName/legacy apps where UIA tree is fragmented across child HWNDs.
  Example: 'AppName/MainPanel#InputField'
    6. [ANDROID] adb:// prefix routes to Android UIA pipeline:
  'adb://Fold5/*heromts*#해외잔고'          device / package / scope
  'adb://*heromts*#해외잔고'              auto-detect device
  'adb://Fold5:outer/*pkg*'            :outer = foldable outer display
  Format: adb://[device[:display]]/[pkg-grap]#[scope#scope...]
    7. [NODE-TAG] Element label format in CURSOR/TARGET sections:
  <Button>              ControlType only
  <ButtonOK>            ControlType + AutomationId
  <Button'확인'>         ControlType + Name (single-quoted, no truncation)
  <Button2Email>        ControlType + SiblingIndex + AutomationId
  <Group x7>            7 consecutive unnamed Groups (run-length in CURSOR)
  attrs: ltwh=x,y,w,h  actions="Invoke,..."
Use as scope: <ButtonOK> -> #OK   <Button'확인'> -> #*확인*
    8. [ABS-TAG-PATH] Official absolute UIA tag path -- BuildAbsoluteTagPath output.
Format: Type_aid / Type_Nth / Type -- compressed repeats use //
  Doc_RootWebArea/Gro_1th/Gro////Gro_main/Gro_thread/Gro//////Edi_msg
Type = first 3 chars of UIA ControlType:
  Doc=Document  Gro=Group  Edi=Edit  But=Button  Pan=Pane  Win=Window
  Tex=Text      Lst=List   Tab=Tab   Tre=Tree     Img=Image  Lnk=Hyperlink
_aid  = AutomationId (truncated at first '-' for readability)
_Nth  = sibling index fallback when no AutomationId
//    = consecutive unnamed same-type nodes compressed (Gro/Gro/Gro -> Gro//)
Resolution: Type_aid -> ByAutomationId(aid) fast; Type_Nth -> sibling BFS; bare -> name BFS
VERIFIED: # TARGET line includes [OK] = FindByTitle(compactGrap) confirms correct hwnd
    9. [FIND-OUTPUT] 'a11y find <grap>' stdout format (v5.13+):

## FOCUS                          (dim) -- focused window section
"{hwnd,pid,proc,...}#absTagPath"  paste-ready grap (double-quoted)

## TARGET                         (bold cyan) -- matched window section
"{hwnd,pid,proc,domain,...}#absTagPath"  paste-ready grap with mandatory fields
wkappbot a11y find "..."          COPY THIS LINE to re-run
[OK] Nms                          verify mark on line AFTER command
[stderr] WindowTitle              window title goes to stderr (not captured by pipes)

MANDATORY GRAP FIELDS (BuildFindGrap order):
  hwnd:        always first -- primary unambiguous identifier
  pid:         immediately after hwnd (collision safety, same-proc windows)
  proc:        process name always included
  domain:      browser/web windows (most stable identifier)
  file:        file:// browsing windows
  cls:         legacy MFC/old apps (no accessibility tree)
  <matchedField>: auto-injected when search matched via cmd/title/uia/etc.
                  e.g. searching chatgpt.com may match VS Code via cmd -- cmd:'...' injected

MULTIPLE TARGETS: ## TARGETS N matches (outer loop), one ## TARGET block per match.
All [DIAG:*] [KNOWHOW:*] -> stderr only. VERDICT suppressed.
    (+2 [DEV] step(s) hidden -- use --developer to show)
  Refs   :
    csharp/src/WKAppBot.Win32/Window/WindowFinder.cs -> "BuildTargetJson5"
    csharp/src/WKAppBot.CLI/Commands/A11yActions.Read.cs -> "A11yFind"
    csharp/src/WKAppBot.CLI/Commands/A11yCommand.cs -> "focusGrap"
  Author : claude
  Created: 2026-04-07  Version: 1.14

------------------------------------------------------------
  3. File tools -- basic
------------------------------------------------------------

=== file-read ===
  wkappbot file read D:\a\wkappbot-sdk\wkappbot-sdk\smoke-temp\sample.txt
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] file read D:\a\wkappbot-sdk\wkappbot-sdk\smoke-temp\sample.txt
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=file read D:\a\wkappbot-sdk\wkappbot-sdk\smoke-temp\sample.txt
  [FILE] D:\a\wkappbot-sdk\wkappbot-sdk\smoke-temp\sample.txt (4 lines, showing 1-4)
       1	line one: alpha test
       2	line two: beta value
       3	line three: wkappbot skill smoke
       4	
  exit=0
  [ASSERT OK] file-read has line 1

=== file-grep ===
  wkappbot file grep skill D:\a\wkappbot-sdk\wkappbot-sdk\smoke-temp\sample.txt
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] file grep skill D:\a\wkappbot-sdk\wkappbot-sdk\smoke-temp\sample.txt
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=file grep skill D:\a\wkappbot-sdk\wkappbot-sdk\smoke-temp\sample.txt
  
  [FILE] D:/a/wkappbot-sdk/wkappbot-sdk/smoke-temp/sample.txt
  >     3| line three: wkappbot skill smoke
  
  [GREP] 1 match(es) in 1 file(s)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] file grep skill D:\a\wkappbot-sdk\wkappbot-sdk\smoke-temp\sample.txt[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=file grep skill D:\a\wkappbot-sdk\wkappbot-sdk\smoke-temp\sample.txt[0m

[FILE] D:/a/wkappbot-sdk/wkappbot-sdk/smoke-temp/sample.txt
>     3| line three: wkappbot skill smoke

[GREP] 1 match(es) in 1 file(s)

=== file-glob-yaml ===
  wkappbot file glob **/*.yaml --path D:\a\wkappbot-sdk\wkappbot-sdk\handlers
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] file glob **/*.yaml --path D:\a\wkappbot-sdk\wkappbot-sdk\handlers
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=file glob **/*.yaml --path D:\a\wkappbot-sdk\wkappbot-sdk\handlers
  D:\a\wkappbot-sdk\wkappbot-sdk\handlers\#32770.yaml
  [GLOB] 8 file(s)
  D:\a\wkappbot-sdk\wkappbot-sdk\handlers\examples\expect-recovery-demo.yaml
  D:\a\wkappbot-sdk\wkappbot-sdk\handlers\examples\focusless-demo.yaml
  D:\a\wkappbot-sdk\wkappbot-sdk\handlers\LS증권 투혼.yaml
  ... (4 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] file glob **/*.yaml --path D:\a\wkappbot-sdk\wkappbot-sdk\handlers[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=file glob **/*.yaml --path D:\a\wkappbot-sdk\wkappbot-sdk\handlers[0m
D:\a\wkappbot-sdk\wkappbot-sdk\handlers\#32770.yaml
[31;1m[GLOB] 8 file(s)[0m
D:\a\wkappbot-sdk\wkappbot-sdk\handlers\examples\expect-recovery-demo.yaml
D:\a\wkappbot-sdk\wkappbot-sdk\handlers\examples\focusless-demo.yaml
D:\a\wkappbot-sdk\wkappbot-sdk\handlers\LS증권 투혼.yaml
D:\a\wkappbot-sdk\wkappbot-sdk\handlers\로그인.yaml
D:\a\wkappbot-sdk\wkappbot-sdk\handlers\매매실행중지.yaml
D:\a\wkappbot-sdk\wkappbot-sdk\handlers\스크립트오류.yaml
D:\a\wkappbot-sdk\wkappbot-sdk\handlers\접속끊김.yaml

=== file-glob-yml ===
  wkappbot file glob **/*.yml --path D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] file glob **/*.yml --path D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=file glob **/*.yml --path D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows
  D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\admin-history-cleanup.yml
  [GLOB] 20 file(s)
  D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\build-sidecar-artifact.yml
  D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\build.yml
  D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\codeql.yml
  ... (16 more)
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] file glob **/*.yml --path D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=file glob **/*.yml --path D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows[0m
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\admin-history-cleanup.yml
[31;1m[GLOB] 20 file(s)[0m
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\build-sidecar-artifact.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\build.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\codeql.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\docs.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\extended-smoke.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\issue-auto-reply.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\issue-triage.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\license-cleanup.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\lint.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\onboarding-test.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\paypal-license.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\release-notes.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\release.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\script-selftest-artifact.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\script-selftest.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\security-scan.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\site-health.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\sponsor-license.yml
D:\a\wkappbot-sdk\wkappbot-sdk\.github\workflows\tests.yml

------------------------------------------------------------
  4. Schedule / Windows / License
------------------------------------------------------------

=== schedule-list ===
  wkappbot schedule list
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] schedule list
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=schedule list
  [SCHEDULE] No schedules
  [SCHEDULE] File: D:\a\wkappbot-sdk\wkappbot-sdk\bin\wkappbot.hq\runtime\schedule.json
  exit=0
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] schedule list[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=schedule list[0m
[SCHEDULE] No schedules
[31;1m[SCHEDULE] File: D:\a\wkappbot-sdk\wkappbot-sdk\bin\wkappbot.hq\runtime\schedule.json[0m

=== windows-list ===
  wkappbot windows
  [LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway
  [CMD] windows
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=windows
  No window found: "wkappbot*"
  exit=1
  [SOFT] expected exit 0, got 1
[31;1m[LAUNCHER:WARN] CreateProcessW breakaway denied err=5 -- retry without breakaway[0m
[31;1m[CMD] windows[0m
[31;1m[LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=windows[0m
No window found: "wkappbot*"

=== license-status ===
  wkappbot-core license status
  [CMD] license status
  [LAUNCH:CORE] cwd=D:\a\wkappbot-sdk\wkappbot-sdk hwnd=0x cmd=license status
  Unknown command: license
   UIT
  exit=1
  [SOFT] expected exit 0, got 1
  [SKIP] license command not in this binary -- skipping Tier assertion

[INFO] CI mode -- skipping extended tests.
       Run with -Extended or locally to enable.

============================================================
  Smoke results [CI/BASIC]: 22 passed, 2 soft-fail, 0 hard-fail
============================================================
All smoke checks passed.
