app
Pup - the AI's own browser
Public Made by Adomby adom
pup gives your AI a real browser on your desktop that it drives completely, in the background, signed in as you: windows that never jump in front of your work, one shared profile that learns your logins, and every window labeled on the taskbar with its AI thread's name.
← Commit history
browser_configure: platform-accurate hint, taskbar is windows-only
2 files changed
+38−1
CHANGELOG.md+20@@ -2,6 +2,26 @@ ## UNRELEASED (rides the next version) — AD-base re-discovery + self-guarded powershell primitives +### `browser_configure` claimed a taskbar change that cannot happen off Windows++`taskbarGrouping` and `agentActivity` both drive Windows-only machinery — taskbar buttons,+badges and the progress bar are stamped via `desktop_set_window_identity` / `desktop_taskbar`,+and `stampPupIdentity`/`brandSweep` early-return on non-win32. The setting was still stored, but+the `_hint` said *"Applied to live windows immediately"* unconditionally. On macOS that handed+the calling AI a confident description of something that did not happen, and per the SDK's first+principle the AI reads the verb OUTPUT and never the on-disk skill — so it would report a+taskbar change to a user who has no taskbar.++The hint is now platform-accurate (Windows wording unchanged), and the response carries+`platform` + `taskbarSupported` so a caller can branch on a field instead of parsing prose.++Found via ABE's *description-site* rule, which is the half that every static sweep this fleet ran+today structurally cannot see: hint/error text is not a construction site — nothing joins it and+nothing stats it — but it instructs the CALLER, so the bug executes one process away and looks+like the model getting it wrong. Construction sites need AST/base-expression enumeration;+description sites need a content grep over user- and AI-facing strings. The two rules are+disjoint and both are required.+ ### The main skill installed under the REPO name instead of its own name (`pup`) `install.sh` deployed the start-here skill to `~/.claude/skills/adom-desktop-puppeteer-bridge/`
src/server.js+18−1@@ -6092,7 +6092,24 @@ const server = http.createServer(async (req, res) => { if (g === 'split') { for (const [sid, sess] of sessions) { updateTabCountBadge(sess, sid).catch(() => {}); } } }).catch(() => {}); }- sendJSON(res, { success: true, output: JSON.stringify({ ok: true, settings: pupSettings(), _hint: g ? `taskbarGrouping is now "${g}" — ${g === 'grouped' ? 'all pup windows stack under ONE "Adom Pup" taskbar button; its badge shows the WINDOW count' : 'each pup window gets its OWN taskbar button wearing its tab count'}. Applied to live windows immediately; persists across bridge updates (~/.adom/pup-settings.json).` : 'Current pup settings. Set with e.g. {"taskbarGrouping":"grouped"}.' }) });+ // v1.9.86: BOTH of these settings drive Windows-only machinery — taskbar buttons,+ // badges and the progress bar are stamped by desktop_set_window_identity /+ // desktop_taskbar, and stampPupIdentity/brandSweep early-return on non-win32. The+ // setting is still stored (it's a user preference, and the profile may later be+ // read on Windows), but off-Windows it has NO visible effect. The old hint said+ // "Applied to live windows immediately" unconditionally, so on macOS the calling AI+ // was handed a confident description of something that did not happen — and per the+ // SDK's first principle the AI reads this output, never the on-disk skill. Describe+ // the platform we're actually on.+ const _isWin = process.platform === 'win32';+ const _os = process.platform === 'darwin' ? 'macOS' : process.platform;+ const _effect = _isWin+ ? 'Applied to live windows immediately; persists across bridge updates (~/.adom/pup-settings.json).'+ : `NOTE: stored but INERT on ${_os} — pup's taskbar buttons, badges and progress bar are Windows-only (there is no equivalent Dock affordance), so nothing changed on screen. Persists across bridge updates (~/.adom/pup-settings.json) and takes effect if this profile is used on Windows.`;+ const _gHint = g+ ? `taskbarGrouping is now "${g}" — on Windows, ${g === 'grouped' ? 'all pup windows stack under ONE "Adom Pup" taskbar button and its badge shows the WINDOW count' : 'each pup window gets its OWN taskbar button wearing its tab count'}. ${_effect}`+ : `Current pup settings. Set with e.g. {"taskbarGrouping":"grouped"}.${_isWin ? '' : ' Both taskbarGrouping and agentActivity are Windows-only in effect; they are stored but inert here.'}`;+ sendJSON(res, { success: true, output: JSON.stringify({ ok: true, settings: pupSettings(), platform: process.platform, taskbarSupported: _isWin, _hint: _gHint }) }); return; } case 'browser_rescan': {