← Commit history

pup start-here skill: truth pass against the shipped code. Fixed four stale claims: windows described as opening MAXIMIZED (they are born at the 10px-inset work area in normal state since the 2026-08-20 placement rules; OS-maximize raises and is never used), split described as the taskbar default (tiles has been the default since 2.0.152), the audit section expecting exactly 1 AUMID key (tiles registers one content-token key per live thread since 2.0.271, so the old expectation reads every healthy machine as broken), and the badge described as favicon plus Adom mark (mark removed 2.0.192). Also replaced the audit's title-based window ground-truth step with hwnd resolution, since titleTag is off by default and the titleContains probe matches nothing.

John Lauer ·4f311a18b1 ·2mo ago ·parent 0d01f78
1 file changed +26−15
SKILL.md+26−15
@@ -38,7 +38,9 @@ You never need an hwnd, `desktop_find_window`, or `desktop_screenshot_window` fo window. pup keys every window to its owning `--ai-thread` name and resolves ids for you:  - **Open**: `pup_open_window {"url":"..."}` — omit sessionId. Your thread gets its OWN window-  (first open creates it, later opens become tabs in it). It opens MAXIMIZED, in the background.+  (first open creates it, later opens become tabs in it). It opens full-work-area sized with a+  10px inset on every edge (the visible signature of a deliberately placed window; never the+  OS-maximized state, which raises), in the background, on screen and clickable from birth. - **Come back to it, from any later turn**: just call verbs with NO ids — `pup_screenshot {}`,   `pup_reload {}`, `pup_navigate {"url":"..."}` all resolve to your thread's window. - **See everything you own**: `pup_my_windows {}` — windows, tabs, urls, titles, state, plus@@ -346,12 +348,14 @@ Every `pup_*` verb works on macOS; only the OS-presentation layer differs: > **WINDOWS ONLY.** macOS has no taskbar; `pup_configure` stores the preference and returns > `taskbarSupported:false`, but nothing changes on screen. Don't propose it to a Mac user. -pup windows each get their own taskbar button by default ("split": one button per window, badged-with its tab count). If the user says anything like "combine my pup windows", "group the pup-icons", "one taskbar button for pup", "my taskbar is cluttered with pup windows" — that's the-GROUPED preference: `pup_configure {"taskbarGrouping":"grouped"}` stacks every pup window-under one "Adom Pup" button whose badge shows windows + total tabs. "Split them back" / "separate-icons" → `{"taskbarGrouping":"split"}`. The setting persists across updates. Change it ONLY when+The DEFAULT is `taskbarMode: tiles` — ONE button per AI thread, wearing the thread's NAME on the+teal tile, all that thread's windows grouped under it (v2.0.152+; see `pup-taskbar-states` for the+six states). The `taskbarGrouping` split/grouped knob below only applies in `aumid` mode. If the+user says "combine my pup windows", "one taskbar button for pup", "my taskbar is cluttered" — in+tiles mode that is already the behavior per thread; across ALL threads it means+`pup_configure {"taskbarMode":"aumid","taskbarGrouping":"grouped"}` (one "Adom Pup" button whose+badge shows windows + total tabs). "Split them back" / "separate icons" →+`{"taskbarGrouping":"split"}`. The setting persists across updates. Change it ONLY when the user asks — it's their taskbar. Details: `pup-windows-sessions-tabs`.  ## Window-type taskbar icons (split mode) — what the user sees per window@@ -499,15 +503,22 @@ Run ALL SEVEN sections, in this order, and report them as a table:      its reason**. A `none` on a favicon-serving page is a regression; a `none` on local PDFs is      legitimate (no favicon exists).    - AUMID keys: `reg query HKCU\Software\Classes\AppUserModelId` filtered to `Adom.Pup*`.-     Expect **exactly 1** (`Adom.Pup`) under minimalTouch. More = stale keys from closed windows, or-     per-window identity churn that destroys/recreates taskbar buttons.+     In tiles mode (the default) expect the `Adom.Pup` anchor **plus one thread key per live+     thread** (`Adom.Pup.thread.<slug>.<gen><tile-token>`; the token hashes the tile's content —+     v2.0.271). MANY more than live threads = stale keys the janitor missed. The old "exactly 1"+     expectation was the minimalTouch-era rule and reads every healthy tiles-mode machine as broken.    - **ON GLASS:** `desktop_screenshot_screen`, crop the taskbar strip, and LOOK. Confirm each pup-     button wears the composite badge (page favicon + Adom mark inset flush in the lower-right).-     Report how many of N windows are actually badged.-3. **OS ground truth** — `desktop_find_window {titleContains:"(session:"}`: one real window per-   session (no ghosts, no untracked strays), and each rect at the standard inset frame-   (15,15 2531x1499 on this laptop). A maximized window reads ~-11,-11 2582x1550 — that is-   maximized, not stranded. `-32000,-32000` = minimized, confirm with IsIconic before calling it lost.+     button wears its favicon badge at the configured `overlaySize` (default 75%) with the tile+     text readable under it. There is NO Adom mark on the badge (removed v2.0.192; only the+     generic faviconless glyph keeps it). Report how many of N windows are actually badged.+     Better: run `pup_audit_icons {}` first — and remember its clean verdict is model-vs-shell,+     not pixels; `{force:true}` re-asserts art when a human says the glass is wrong.+3. **OS ground truth** — resolve windows by HWND (`pup_window_info`), never by title (`titleTag`+   is off by default, so `titleContains:"(session:"` matches nothing). Each rect at the standard+   10px-inset work-area frame (10,10 on every machine; the exact width/height follows that+   monitor). A maximized window reads slightly negative origin — that is maximized, not stranded.+   `-32000,-32000` = minimized, confirm with IsIconic before calling it lost; a HIDDEN or+   off-screen window is always pup's own bug (the 30s visibility sweep repairs both). 4. **Health** — `pup_eval` per window: `readyState`, `visibilityState`, a `1+1` drivability check.    `visibilityState:hidden` is NORMAL for a parked/minimized window; only **frontmost-yet-hidden** is    the broken state. Note any crashed tabs.