← Commit history

Update 3 file(s)

John Lauer ·96f5224b07 ·2mo ago ·parent 5d1f80c
2 files changed +72
SKILL.md+18
@@ -14,6 +14,24 @@ adom-bridge-cli --ai-thread "<your thread>" pup_open_window '{"sessionId":"mytas adom-bridge-cli --ai-thread "<your thread>" pup_screenshot  '{"sessionId":"mytask-web"}' ``` +## Addressing: your thread name IS the handle++You never need an hwnd, `desktop_find_window`, or `desktop_screenshot_window` for a pup+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.+- **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+  the ready-to-run next steps. Start here whenever you are unsure what you have open.+- **Address a thread by name**: any targeting verb accepts `aiThreadName` instead of sessionId.+- `sessionId` still works everywhere as an explicit window label (needed only when one thread+  deliberately runs several windows). Prefer the thread-name forms above.+- Screenshots: `pup_screenshot {}` (Claude-safe file path comes back). Raising onto the user's+  screen: `pup_raise_os_window {"foregroundReason":"..."}` (gated). Every open/navigate response+  carries `_next` repeating these — trust the hints over hand-rolling desktop verbs.+ ## THE CORE GOAL (John's words, so everyone truly understands it)  ## "Open my web app in the browser" — the #1 use case, and its one trap
dev-skills/pup-page-integrity/SKILL.mdadded+54
@@ -0,0 +1,54 @@+---+name: pup-page-integrity+description: "DOCTRINE: pup never mutates user-visible page content to carry pup metadata — no document.title rewriting, no DOM text injection into the page's own UI. Where ownership/metadata signals belong instead. Read before adding ANY feature that touches what a page shows."+---++# Page integrity: the page belongs to the page++**The rule: pup must never alter the CONTENT a page presents to the user — its title, its+text, its own UI — to carry pup metadata.** A pup window is a real browser showing a real+page; the user reads the tab strip and the page to know WHAT they are looking at. Overwriting+any of it to say something about pup breaks that contract.++## The incident that made this a rule (2026-08-11, v2.0.96 - v2.0.101)++To make window ownership "directly visible," pup injected a keeper that rewrote every owned+page's `document.title` to lead with the AI thread name ("pup-bridge build · Adom Hydrogen…").+It looked like a clever answer to Chrome's toolbar limits (extensions get one icon, a 4-char+badge, no text). John, living with it for an hour:++> "stop mangling the title of the page. i can't fucking stand when you do that"++It was removed the same day (v2.0.102), with a cleanup rail (`titleJs('')`) that strips the+prefix from any long-lived page whose elder injected keeper still applies it. Do not+resurrect the owner build.++## Why it always fails++- The tab is the page's ONE identity slot. Chrome ellipsizes at a fixed width: any prefix+  evicts the page's real title; any suffix is invisible. Either way you destroyed the tab+  strip's purpose to serve a secondary signal.+- Pages rewrite their own titles (SPAs, notification counters). Keeping a rewrite applied+  needs an interval/observer forever fighting the page — a rail of complexity for a signal+  nobody asked to see there.+- The title flows everywhere: taskbar labels, window titles, history, bookmarks, screen+  readers. Mangling one mangles all of them.++## Where pup metadata legitimately lives++| Signal | Surface |+|---|---|+| Whose window is this | Taskbar overlay hover tooltip (uncapped, leads with owner); dashboard per-window owner chip; pup extension icon hover title |+| Signed in as you / not you | Identity toolbar tile: avatar on adom-you, the anonymous four-dot tile on any other profile |+| AI touched this window | ab window caption (bottom edge, transient); taskbar flash |+| Everything, in detail | The pup dashboard |++All of these are pup-OWNED surfaces layered around the page. That is the boundary: decorate+around the page as much as needed; never reach into what the page itself says.++## Related boundaries++- The floaty pencil / annotate overlays are opt-in UI layered OVER pages, and even they+  default off when they can interfere (the corner hover zone fought app-header buttons).+- Favicon/taskbar-icon composition (the overlay pipeline) presents the page's OWN favicon,+  fetched and re-badged outside the page; it never rewrites the page's `<link rel=icon>`.