Adom Desktop - Puppeteer Bridge
Public Made by Adomby adom
The Adom Desktop Puppeteer (pup) bridge — drive a real headful browser on the user's desktop from the cloud: open/screenshot/eval/record. Cold-start drives the browser ALREADY on the machine (installed Chrome, else Microsoft Edge — every Windows PC ships with Edge) with a fresh isolated profile, so the common case needs NO download; Chrome for Testing is fetched only as a last resort. Two artifacts: the Releases zip is the bridge runtime (also bundled in Adom Desktop); the pkg installs the container-side Claude skills.
Releases 176
Standalone per-platform binaries to download and run, no tools needed. The newest is pinned on top.
Claim the jump-list dedupe key before the await so two concurrent callers cannot both commit (a redundant CommitList rebuilds the menu and dismisses one the user is opening)
All releases
Claim the jump-list dedupe key before the await so two concurrent callers cannot both commit (a redundant CommitList rebuilds the menu and dismisses one the user is opening)
Brand the jump-list header BEFORE stamping the new appId (Win11 bakes button art at creation, so branding after had no visible effect), and dedupe jump-list commits on appId+view so a CommitList cannot dismiss a menu the user is opening
Brand the jump-list header row: pass hwnd plus headerIcon to desktop_set_window_jumplist (AD 1.9.153). hwnd is required, titleContains silently no-ops. Log headerBranded and iconCheck so it is verifiable in code
Set the thumbnail tooltip from updateTabCountBadge so the normal open path gets one (it was only wired into refreshWindowChrome and the category-change hook, so freshly opened windows had no tooltip)
Rebuild all category icons with PNG-compressed 256 frames (Vista+ rule: a BMP 256 entry renders the generic white document on the jump-list header), bump icon generation to i3, and add the thumbnail tooltip using AD 1.9.152 desktop_taskbar thumbnailTooltip
Agent-activity indicator: taskbar progress bar marks which pup window a thread is currently driving (indeterminate while verbs land, cleared 2.5s after the last one); browser_configure agentActivity on|off
Self-healing session-title tag: collapse duplicate (session: id) tags to exactly one so the taskbar thumbnail caption is not bloated and AD title resolution cannot hit a duplicated tag
Retire adom-pup-browser3.ico as the default: new pup-cat-default9.ico matches the teal-tile category family for category-less windows and the base Adom Pup identity
Jump-list task rows now use the windows category icon (pup-cat-*9.ico) instead of the retired adom-pup-browser3.ico
Shorten wiki jump-list task titles to Switch to logged-in view / Switch to public view so the login word is no longer truncated; the page context stays in the description line
Fix jump-list first-right-click blip: stop stamping a transient .plain AUMID while a window is still loading (it created a jump-list-less button that Explorer resolved first), and clear an AUMIDs jump list when unregistering so stale CustomDestinations files stop piling up
Add Close-ALL-pup-windows jump-list task to every window, unregister AUMIDs on close-all, and reconnect+reattach disconnected-but-alive sessions via rescanProfile so a zombie window stops showing the old default icon
Stop reclaim adopting windows mid-launch: skip profiles with a launch in flight and require two consecutive sweeps before adopting
Inject the session title marker even when a page has no title, so title-less app pages stop making their window invisible to every branding call
Re-evaluate a window category when a tab finishes navigating, so a window whose tabs were still loading no longer freezes on the wrong taskbar icon
Reclaim unmanaged pup windows (openerless popups and orphans whose session died) so they can never sit unbranded in the taskbar
Replace the per-session recovery strike with a crash sentinel so a normal restart can no longer quarantine healthy sessions, and defer the AUMID prune so it cannot unbrand live windows
Add icon-generation token to the per-window AUMID so an icon or branding change forces Windows to rebuild the taskbar button, repairing already-baked white tiles
Fix white taskbar icon: write IconResource into HKCU ourselves because AD register_app_identity ignores iconPath when shortcut is false, leaving every AUMID unbranded; prune orphaned Adom.Pup AUMID keys on startup
Skip placeholder favicons, retry the overlay instead of failing silently, and strip every old session suffix while disconnecting the previous title observer
Skip the check when nothing is multi-tab and throttle it to once per 1.5s so a noisy desktop cannot turn it into a poll
Any adom.cloud slug host counts as an Adom app, and brandSweep re-evaluates categories for long-lived and recovered windows
Adopted dragged-out tabs now get their own session title suffix before branding
Grow the dark teal window 30 percent and keep a real margin between it and the glyph, plus corrected stroke weight
Remove the browser toolbar line, enlarge the category glyph to fill the window body, and embed the authentic Adom mark for app windows
Scale the inner content glyph 1.3x for legibility at taskbar size while keeping the frame and margins
Refresh identity icon, favicon overlay and jump list together with retries on both sides of a drag-out
Parse AD command responses defensively for both the relay wrapped shape and the bare loopback payload
Reuse an existing global window-opened watch instead of leaking one per restart, and ship the drag-out detection diagnostics
Log every step of the drag-out detection so a silent failure cannot hide
Stop filtering window-opened events by window name since a new window has none at creation time
Subscribe to the AD window-opened UIA event and adopt a dragged-out tab as its own session with its own identity and category icon
Match the proven raise path so a detached browser window is shown via CDP instead of PowerShell targeting the wrong window
pup skill gains the window-type icon section: five taskbar icons and their meanings, the wiki view toggle jump list, and the favicon-overlay rule
Log identity stamp failures and retry the category change re-stamp with backoff
Per-session appIds carry the category so a flip creates a fresh taskbar button, per AD's Win11 measurement
Seed the authed flag at session creation so the first taskbar icon is already the signed-in book plus person
Signed-in wiki icon becomes book plus solid person bust so login state reads at taskbar size
Solid dark window body with teal knockout category glyphs and proper margins per design review
Redraw category icons around a shared browser-window frame with the category as window content, Adom mark for apps
Re-stamp the base icon immediately when a window category changes instead of waiting out the ten minute brand debounce
Redraw the five category glyphs in the family dark teal instead of white, and document the Explorer icon-cache failure mode
Regenerate the five category icons with classic BMP frames because the shell RelaunchIconResource loader cannot parse PNG-compressed ICO frames
Give each session its own OS window so per-window branding resolves, add monochrome category icons per the brand icon law, and strip emoji from every user-visible string
Repaint the taskbar overlay after the wiki auth state is recorded so the plate colour is correct
Switch the signed-in plate and icon green from an ad-hoc Tailwind value to the Adom design-system green token
Recolour the overlay plate behind the site favicon green when signed in to the Adom wiki, keeping the favicon in the slot
Retry the identity re-stamp with backoff so the icon flip does not lose the race against the relaunched window title injection
Revert the overlay padlock and put the Adom wiki login state on the main icon as a solid green filled browser glyph
Move the Adom wiki login indicator to the taskbar overlay slot as a green closed or slate open padlock, readable at real 16px taskbar size
Swap the pup main icon between a browser-window outline and a solid padlock to signal Adom wiki login state, with state-keyed identity and AUMID caches
Consume AD 1.9.141/1.9.143/1.9.144: expiresInMs captions on the loopback API, relaunchCommand trio to brand the jump-list header, retire the in-page toast
In-page wikiToast feedback since desktop_caption is relay-only on this AD, caption call now logged not silent, branding waits for the title suffix
Escape JSON quotes in jump-list task args so the CLI receives valid JSON, plus desktop_caption feedback on switch start and completion
Async PS raise (no event-loop block), respond immediately after raise with background cosmetics, optimistic glyph with delayed auth-recheck self-correction
browser_wiki_set_view now does a real OS SetForegroundWindow raise via osRaiseSessionWindow plus a taskbar flash, so the clicked switch is visibly brought to front
Persistent circuit breaker quarantines crash-poison session files so recoverSessions can't loop-crash the bridge; jump-list task carries the pup icon
Jump-list toggle titles now lead with Adom wiki so the menu is self-describing, not generic
Add _launchInFlight dedup so concurrent opens on one profile can't collide and wedge the bridge; add recovery hints and skill troubleshooting
Add browser_wiki_set_view and per-window wiki jump-list toggle (logged-in vs public) via desktop_set_window_jumplist
Register per-session AUMIDs (#207) for alt-tab/jumplist Adom icon.
Favicons win the overlay; active tab, count in tooltip.
Adom-wide auth gating; overlay favicon(1)/count(2+).
Profiles moved out of the clobbered bridge cache to ~/.adom.
Wiki authed shared across threads; routing fix; sharper hints.
Suppress browser sign-in/work-profile prompt in CfT via launch flags.
pup skill gains the window-type icon section: five taskbar icons and their meanings, the wiki view toggle jump list, and the do-not-repurpose-the-favicon-overlay rule
App-favicon overlay: pup auto-fetches the loaded page's served favicon (the ui-design standard artifact) and wears it on a dark plate in the taskbar overlay, with explicit appIconB64/appName overrides, a reprimand for app URLs serving no favicon, tooltip-carried tab counts when an app icon owns the slot, and refresh on navigate.
Grouped counter digits sit on rounded-rectangle plates, dark with white windows digit and teal with dark tabs digit, keeping large type with proper contrast.
Circle-less grouped counter with white windows digit and teal tabs digit for dark-theme legibility.
Trial circle-less grouped counter: bold bare digits with a hairline halo, about a quarter taller than the circled variant.
Grouped dual-counter digits enlarged again for taskbar legibility.
Grouped-mode dual counter laid out side by side across the top of the overlay instead of diagonally.
Badge digits enlarged fifteen percent across split badges and the grouped dual counter.
Grouped mode shows a dual counter, window count dark circle plus total tabs in a light teal circle, rendered at runtime via sharp with per-pair caching; all badge circles flattened with no white outline.
Tab-count badge lightened per feedback: sixty percent size anchored upper-right with a hairline translucent outline instead of the heavy white ring.
Per-session AUMIDs (Adom.Pup.) so each pup window gets its own taskbar button with its own accurate tab-count badge; the shared AUMID had grouped all windows into one button with a misleading badge; plain Adom.Pup remains the registered pinnable launcher.
Tab-count overlay badge: pup windows with two or more tabs show the count in the overlay slot freed by the identity takeover, updated on tab open, close, and popup attach, so many-tab review windows are instantly distinguishable from single-tab neighbors.
Brand sweep at startup and after rescans: re-asserts each live session's title suffix and re-stamps it to the current identity so icon rebrands propagate to already-open windows and the taskbar never shows mixed icon generations.
AD-version awareness: pup probes the desktop's AD at startup and on boxes older than 1.9.124 warns visibly that the foreground raise gate is bypassed there (yellow chip, status fields, open-response advisory); all other version gaps continue to self-gate silently.
pup owns its browser provisioning: warmup at every bridge spawn now background-fetches Chrome for Testing whenever it is not cached regardless of installed browsers, so fresh boxes provision at install time and first opens never wait; AD prewarm policy no longer involved and issue 204 withdrawn.
Browser glyph shrunk and tucked into the lower-right corner with clear teal space so it no longer touches the leaf mark; ships as adom-pup-browser3.ico under a new filename per the icon-cache rule.
Identity icon simplified to a minimal line-art browser glyph in the leaf dark-teal with no white, shipping as adom-pup-browser2.ico under a new filename per the icon-cache rule.
New Adom Pup identity icon: the favicon with a browser-window glyph inlaid lower-right so the icon reads as an Adom browser window; ships as adom-pup-browser.ico under a new filename per the icon-cache rule, master SVG in the repo pending promotion to the brand-icons wiki repo.
Full Adom Pup window identity on AD 1.9.134: self-registration at bridge start with a pin that launches a managed pup window, per-window identity stamp at create/park/heal with cacheKey, overlay badge demoted to a self-gating fallback for older AD, adom-pup.ico ships in the zip.
The demarcation gate: unpinned opens require cached Chrome for Testing and return the pollable installing status instead of ever silently driving the user's branded browser; explicit browser_use pin is the only branded path; AD issue 204 filed to flip the prewarm default so install-time prewarm erases the first-use wait.
Foreground gate matching abe's dual-key contract: foreground:true without foregroundReason opens background with foregroundDenied, raise/focus without a reason is refused with foreground_reason_required, and every granted foreground is logged, recorded in lastAgentUpdate, and surfaced as lastForeground in status.
Sized opens keep their requested x/y (the legacy re-assert clobbered geometry back to the primary origin, blocking second-monitor placement; now z-only via AD state:bottom force:false), and window-management is granted by default so getScreenDetails can enumerate the real monitor layout.
Park after the page settles so the first paint's window-raise happens invisibly off-screen; the window's first visible frame is full-size, z-bottomed, and z-confirmed, eliminating the transient on-top blip other threads' windows showed.
Re-assert z-bottom after the open's navigation and at the load event (the first cross-origin nav re-shows the window at first paint and raised it after the park's z-confirm had passed), and after open_tab's new-tab first paint; all with force:false so a user-held window is never yanked.
Placement doctrine: geometry via CDP plain bounds only sized from the page's own screen metrics, re-bottom after every move, confirm the z-order via desktop_list_windows, and move the window back off-screen if z-bottom cannot be confirmed; AD set_window_bounds and CDP maximize are both banned from background placement because each raises the window.
Never use CDP windowState maximized for background placement: Chromium implements it as SW_MAXIMIZE which raises the window to the top of the z-order and covered the user's work; placement now uses AD desktop_set_window_bounds restore:false sized from desktop_list_monitors, preserving the forced z-bottom.
Background windows now appear already-maximized: the park stages the window just past the left screen edge (invisible but monitor-adjacent) before the OS maximize, eliminating the visible small-then-grow; verify and heal thresholds tightened to catch a window stuck at the staging spot.
Adopt AD 1.9.115's force:true on desktop_set_window_state state:bottom so the launch park bottoms a foreground window in one AD call; legacy PS fallback retained only for AD 1.9.114 and older and auto-obsoletes as desktops update.
When AD skips z-bottom because the window is foreground (its requested skip-on-foreground semantics), the launch park now force-bottoms via the legacy path, fixing park-failed on the post-restart foreground-reassignment case; AD follow-up filed for a force flag.
Adopt AD 1.9.114's desktop_set_window_state state:bottom for the park's z-order step, deleting the last PowerShell from the open path so window management is fully direct API, with a legacy PS fallback for desktops on older AD.
Remove the launch-park user-click escape hatch entirely: foreground-at-park has non-user causes (Windows reassigns foreground to a fresh window after the previous foreground window is destroyed, e.g. on a bridge-update restart), which forced never-clicked windows onto the user's screen; the launch park now bottoms unconditionally and a user who clicked during the 2s gap just clicks once more.
Hard rule: a window is never moved on-screen until z-bottom is confirmed; under parallel-open load a lagged hwnd lookup used to place an un-bottomed window on top of the user's work; now it retries up to 8x then stays off-screen as an honest park-failed, and park-failed windows self-heal on any status query.
Badge calls now check AD's real result and log failures instead of silently swallowing them, and the tab-path badge debounce only arms on success so a failed badge retries on the next call.
Self-heal windows stranded off-screen by older builds at reattach and on the open_tab/switch_tab hot path, re-badge debounced so long-lived shared windows like adom-shotlog stay clickable and badged; teach anonymous creators the owner param; enrich open_tab and switch_tab describe entries.
Fix the flash 'pending vs cleared' focus latch: install the window-focus hook into the CURRENT document too, not only future navigations, so windows the user already clicked report flash cleared and the still-unseen window is identifiable programmatically.
Park places the window via the OS maximize (CDP windowState) instead of a screen-size probe that could fail mid-navigation and produce 1600x900 windows; move to primary monitor then maximize, no activation.
Fix the user-click detection: use GetForegroundWindow (the OS truth) instead of document.hasFocus which lies for CDP-created windows and false-fired user-foreground on every open; the z-bottom PS call now checks foreground first at zero extra cost.
Direct-API park: CDP setWindowBounds addresses the exact window (parking the wrong window impossible), AD find_window replaces EnumWindows PS, park runs at newPage so no wait loop, verification checks position not focus, badge fires the instant the park lands.
Close the launch gap: a taskbar click during the first seconds now brings the window up on-screen at top full-size instead of activating it invisibly off-screen; unambiguous because no-startup-window means only the user can make the window foreground.
Eliminate the focus steal at the source: background launches use --no-startup-window so the window is created by a background process the OS denies foreground to; the stability watch, timers, and re-parks are deleted, so a user taskbar click at any moment sticks.
Replace the blind-timer background park with one event-driven watchdog: wait for the window to exist, park once deactivate-first, re-park Chrome self-raises within 50ms, exit after 500ms of calm; afterwards nothing ever re-parks so a user taskbar click sticks; open response awaits the self-verified verdict.
Remove the GetLastInputInfo user-click heuristic, which false-fired whenever the user was typing anywhere and left fresh windows small and foreground; launch passes always park full-size, late re-parks use a simple pup-is-foreground check, centered-80 placement removed.
Revert minimize (it broke screenshots, visibilityState hidden hangs captureScreenshot); background is on-screen z-bottom with EnumWindows real-window handle, deactivate-then-park to avoid pop, and a short 1.2s re-park window so user clicks are not fought.
Background state is now MINIMIZE instead of on-screen z-bottom: minimizing hands focus back automatically and removes the re-park retry loop that fought user clicks, so a taskbar click restores the window and it stays; restore rect set on-screen; screenshots still work via disabled occlusion.
Resolve the real browser window via EnumWindows (largest visible Chrome_WidgetWin_1) instead of the flaky MainWindowHandle, which returned a hidden helper window on some boxes and left pup windows stuck off-screen so clicking their taskbar button showed nothing.
User-AI window balance: a deliberate user click now brings the pup window on-screen and shows it instead of activating it off-screen invisibly; browser_alert_window stop truly clears the Win11 flash tint via off-screen activation; programmatic per-window flash state added.
Respect a deliberate user raise: clicking a background pup window to watch a page load no longer forces it back to the background (open-time re-park now detects a real user click via GetLastInputInfo and latches off).
- v1.8.42: pup taskbar badge = the actual Adom favicon (was a hand-composited tile) (John Lauer)
- v1.8.41: pup taskbar badge is now the favicon-style tile — white Adom leaves on a teal rounded-rect (was bare white leaves) (John Lauer)
- v1.8.40: auto-badge pup windows with the white Adom leaves via AD-core desktop_taskbar (custom PNG overlay, AD >=1.9.106) — resolves the window by its (session: id) title, cross-process, on every open (John Lauer)
- v1.8.39: remove in-bridge ITaskbarList3 overlay (in-process-only, doesn't badge the browser's window) — taskbar badge is an AD-core desktop_taskbar capability; filing a pup-distinct-badge request to AD instead (John Lauer)
- v1.8.38: taskbar overlay badge — stamp the white Adom leaves on each pup window's taskbar button (ITaskbarList3::SetOverlayIcon) so pup windows are distinct from the user's real browser (John Lauer)
- Publish 1.8.38 (John Lauer)
- v1.8.37: cleanup nudge — browser_status/open _hint reminds the agent to close stale/piled-up pup windows (never auto-closes); skill: 'clean up after yourself' section (John Lauer)
- v1.8.36: snappy auto-flash — fire the taskbar flash the moment the window is backgrounded (after the local welcome page), not after the heavy URL's domcontentloaded (John Lauer)
- v1.8.35: browser_alert_window {stop:true} clears the taskbar highlight (FLASHW_STOP); fix alert_window to actually flash (was wrongly calling bringToFront) (John Lauer)
- Document the solved background-by-default/focus-steal playbook in the dev skill + CHANGELOG so it's never re-derived (off-screen launch, z-bottom park, AttachThreadInput focus handback, hidden PowerShell) plus the dead-ends (John Lauer)
- v1.8.34: AttachThreadInput focus hand-back — deterministically returns keyboard focus to the user's window after launch (no more keystroke steal); no minimize (no flicker) (John Lauer)
- v1.8.33: revert WS_EX_NOACTIVATE (broke taskbar-click); final = off-screen launch + on-screen-behind park (no pop, not covering, clickable, hidden PS) (John Lauer)
- v1.8.32: WS_EX_NOACTIVATE on background windows = deterministic no-focus-steal (never still-foreground); raise clears the style (John Lauer)
- v1.8.31: park background window ON-SCREEN sized-to-monitor at z-bottom (behind user windows, invisible, but clickable via taskbar); single background retry to avoid flicker (John Lauer)
- v1.8.30: run all window-mgmt PowerShell HIDDEN (execFileSync+windowsHide, no cmd shell) so pup never flashes a console; keep off-screen background shown for screenshots (John Lauer)
- v1.8.29: background = minimize-and-leave (off-screen already invisible), fully drops keyboard focus (John Lauer)
- v1.8.28: launch background windows OFF-SCREEN (never visually pops/covers user's work); raise repositions on-screen (John Lauer)
- v1.8.27: remove redundant pup-side localhost probe (AD core already reprimands localhost on failure); keep the real background-by-default fix + foreground-gate + finite flash (John Lauer)
- v1.8.26: real background-by-default (minimize->show-no-activate drops focus, self-verifying 'background' field); stop navigate/reload/switch_tab from raising bg windows (foreground-state gate); localhost reprimand (desktop-side port probe); finite flash (John Lauer)
- v1.8.25: fix foreground-restore threading (getOrLaunchBrowser now receives foreground; 1.8.24 threw 'foreground is not defined' on every open) (John Lauer)
- v1.8.24: fix background-by-default focus steal (capture user's foreground window before launch, restore it + push pup to back the instant the window appears via CDP-port owner resolution); finite 4-blink taskbar pulse instead of blink-forever (John Lauer)
- Remove internal identifiers from page.json (git-wiki)
- Publish 1.8.30 (John Lauer)
- Skills v1.8.30: teach auto-flash + updateNote/lastAgentUpdate signalling, keystroke-safe raise, open_tab tabId/tabCount, browser_render_html (UTF-8 HTML render) (John Lauer)
- v1.8.23: auto-flash on agent updates (debounced taskbar flash, {silent}/autoFlash:false), lastAgentUpdate/updateNote in list_tabs/list_windows, blur page focus before raise (keystroke-leak fix), open_tab returns tabId/tabCount, new browser_render_html verb (UTF-8-safe HTML render); doc steers alert-not-raise (John Lauer)
- Re-push page.json after pkg 1.8.29 (John Lauer)
- Publish 1.8.29 (John Lauer)
- skill: teach the new first-class page-driving verbs (browser_scroll / browser_set_viewport / browser_screenshot_element) + eval helpers, replacing the hand-rolled evals; pkg 1.8.29 (John Lauer)
- v1.8.22: screenshot_element below-fold clip fix + closest option (John Lauer)
- v1.8.21: browser_scroll + browser_set_viewport + browser_screenshot_element + shadow-DOM eval helpers + fullPage nested-scroll hint (John Lauer)
- Re-push page.json after pkg 1.8.28 (John Lauer)
- Publish 1.8.28 (John Lauer)
- README + pkg description: lead with a crisp 'Install (skills) vs Download (runtime)' explainer incl. why the two version numbers differ; refresh the stale pkg description to the current model. pkg 1.8.28 (John Lauer)
- Re-push page.json after pkg 1.8.27 (John Lauer)
- Publish 1.8.27 (John Lauer)
- Add pup-adom-wiki user skill (driving/verifying the wiki in pup + the logged-out reality) + README 'Extend pup' third-party breadcrumb section; skill map updated. pkg 1.8.27 (John Lauer)
- Re-push page.json after pkg 1.8.26 (John Lauer)
- Publish 1.8.26 (John Lauer)
- skills: add 'Driving & verifying tricky pages' — shadow-DOM piercing survey, scroll-the-element (not window) for nested scroll containers, count-in-DOM-then-confirm; + pointer from the main skill's key rules. From the adom-desktop download-card audit. pkg 1.8.26 (John Lauer)
- Re-push page.json after pkg 1.8.25 (John Lauer)
- Publish 1.8.25 (John Lauer)
- README: add a full Recording section — example GIF preview, the two recorders (CDP screencast VP9 vs MediaRecorder), and a WebM/MP4/GIF format comparison with real sizes, pros/cons, and verified ffmpeg convert commands (incl. the H.264 even-dimension gotcha); pkg 1.8.25 (John Lauer)
- Add example recording assets (native VP9 WebM + H.264 MP4 + GIF preview) for the README recording section (John Lauer)
- v1.8.20: lazy ffmpeg re-detection on record_start (install-then-record, no restart) (John Lauer)
- v1.8.19: fix browser_open_tab hang — tolerant title-suffix injector (prefix match) + drop the redundant per-tab observer that dueled it (John Lauer)
- v1.8.18: fix browser_open_tab CDP-pipe deadlock on Edge (opener() check before target.page() in popup-tracker) + newPage timeout guard (John Lauer)
- Re-push page.json after pkg 1.8.24 (John Lauer)
- Publish 1.8.24 (John Lauer)
- Re-push page.json after pkg 1.8.23 (John Lauer)
- Delete skills/pup-bridge-publish/SKILL.md (John Lauer)
- Delete skills/pup-bridge-dev/SKILL.md (John Lauer)
- SDK correction (maintainer-provided): pkg ships ONLY the pup user skill; dev/publish skills are source-only in dev-skills/ + publish-skills/ (not in files[], no user-invocable scoping); skillpack package.json declares dependencies:{adom/adom-desktop:^1.9.63} to pull the AD CLI + core skills; docs corrected (John Lauer)
- Publish 1.8.23 (John Lauer)
- Re-push page.json after pkg 1.8.22 (John Lauer)
- Delete publish-skills/pup-bridge-publish/SKILL.md (John Lauer)
- Delete dev-skills/pup-bridge-dev/SKILL.md (John Lauer)
- SDK re-audit: pup is open source, so ship dev/publish skills in skills// scoped user-invocable:false (dev-skills/*.md is dead per the Bridge SDK checklist); skillpack package.json dependencies emptied to {}; docs corrected (John Lauer)
- Publish 1.8.22 (John Lauer)
- maintainer docs: correct the skill-layout convention — dev/publish skills belong in dev-skills/ + publish-skills/ (auto-excluded from the pkg tarball), NOT skills/ (which ships them as user skills). Fixes the backwards 'skillpack way superseded source-only' framing that caused the 28KB tarball (John Lauer)
- Delete skills/pup-bridge-publish/SKILL.md (John Lauer)
- Delete skills/pup-bridge-dev/SKILL.md (John Lauer)
- Re-push page.json after pkg 1.8.21 (John Lauer)
- pkg leanness: move maintainer skills to dev-skills/ + publish-skills/ (auto-excluded from tarball); install.sh installs only the pup user skill; drop them from pkg files[] — user containers no longer get ~37KB of publish/dev recipes (tarball 28K->12K) (John Lauer)
- Publish 1.8.21 (John Lauer)
- Re-push page.json after pkg 1.8.20 (John Lauer)
- Publish 1.8.20 (John Lauer)
- docs: README rewritten for the generic non-profile-browser model (drop stale real-signed-in-browser + CfT-primary claims; background-by-default + ownership); CHANGELOG consolidated 1.6.0->1.8.17; pkg 1.8.20 (John Lauer)
- Re-push page.json after pkg 1.8.19 (John Lauer)
- Publish 1.8.19 (John Lauer)
- v1.8.17: hard background guarantee (sizing decoupled from foreground) + evaluateOnNewDocument title-suffix resilience; pkg 1.8.19 (John Lauer)
- Re-push page.json after pkg 1.8.18 publish (John Lauer)
- Publish 1.8.18 (John Lauer)
- v1.8.16: session ownership — refuse declared cross-thread window steals, reprimand anonymous grabs, expose owner in status; skill teaches owner + task-prefixed sessionIds; pkg 1.8.18 (John Lauer)
- Re-push page.json after pkg 1.8.17 publish (John Lauer)
- Publish 1.8.17 (John Lauer)
- Skills: document the AD 1.9.86 shell-approval flow — gate-hits auto-surface the in-window dialog, request_shell_approval re-summons it, retry the original verb, never shell_auto_approve; pkg 1.8.17 (John Lauer)
- Re-push page.json after pkg 1.8.16 publish (John Lauer)
- Publish 1.8.16 (John Lauer)
- dev skill: add the outbound bridge->AD notify recipe (direct-API, AD 1.9.84 full verb surface, bridge token, cross-AD target, notify-first ordering); pkg 1.8.16 (John Lauer)
Teach the v1.8.23 agent-signalling features: auto-flash on mutating verbs (silent/autoFlash/readOnly), updateNote + lastAgentUpdate in list_tabs/list_windows, keystroke-safe raise, open_tab tabId/tabCount, and the new browser_render_html UTF-8 HTML-render verb.
Fixes the peer-ping parse from 1.8.14: AD's direct-API targets verb returns {clients:[...]} including the local box, not {targets:[...]}. adPeerNames now reads clients, excludes self by hostname, and dedupes — so the Chrome-approval toast actually reaches the user's OTHER devices (laptop) via cross-AD target:all while the UAC stays on the box that needs it
Temporary debug build echoing received open_window arg keys to diagnose whether width/height reach the bridge
Bridge now binds loopback-only, so no Windows Firewall prompt for Node.
Edge now launches reliably (was a false 'exited immediately'); bridge self-warms on install; disk-space + install-real-Chrome + verbose hints so the AI resolves any browser situation in fewer turns.
Spawn-verified browser fallback + browser_use to pin chrome/edge/cft; pup now falls through a broken browser instead of failing, caches the working one, and tells the AI exactly what it picked.
pup now drives the browser already on the machine (Chrome->Edge) with a fresh profile — usually no download; Chrome for Testing only as a last resort.
SDK self-audit pass: homepage now the platform wiki page; every verb response carries _hint/_next/related/pitfalls.
SDK self-audit pass: bridge.json homepage now the wiki page; discovery_triggers tightened to pup's niche.
Skill note: pup launches with FULL browser permissions by default for full debug (strictPermissions:true to opt out).
Skill update for AD v1.9.47 Tier-1 model: for 'is it ready' use AD bridge_readiness (not browser_status); AD background-fetches Chrome via the bridge's prewarm declaration.
Container-side skills only: the pup user skill (now with the cold-start playbook) + pup-bridge-dev + pup-bridge-publish developer skills. The bridge runtime is the Releases zip + bundled in Adom Desktop, not this tarball.