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
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "pup-bridge",- "version": "2.0.326",+ "version": "2.0.327", "type": "app", "description": "The pup SKILL PACK \u2014 the AI skills that teach a cloud/container AI how to drive the Adom Desktop Puppeteer (pup) bridge (browser_* verbs): the everyday `pup` skill plus focused sub-skills for windows/sessions/tabs, screenshots+recording, browsers+Chrome install, and driving the Adom wiki. Installs into ~/.claude/skills + ~/.codex/skills. DOCS ONLY \u2014 this is NOT the bridge runtime. The bridge itself (the Node program that drives the browser) runs on the DESKTOP: Adom Desktop bundles it and auto-installs/updates it, and it's published separately on the Releases tab as adom-bridge-puppeteer-v<ver>.zip. The pkg version is kept in lockstep with the Release version so the page's max version row always carries BOTH a pkg tarball (skills) and a runtime zip (bridge) \u2014 a skills-only or runtime-only bump on the top row breaks constraint installs. TL;DR: pkg install = the skills for your AI; the bridge = the Release zip, which Adom Desktop manages for you.", "keywords": [
page.json+1−1@@ -4,7 +4,7 @@ "slug": "pup-bridge", "title": "Pup - Puppeteer Bridge", "brief": "pup is the AI's own browser: a real, full Chrome on the user's desktop that the AI fully controls (a sandbox, not the user's signed-in browser). Rides Bridge; pup_* verbs open windows and tabs, navigate, screenshot, and eval JS.",- "version": "2.0.326",+ "version": "2.0.327", "tags": [ "skills", "pup",
tools/pup-dashboard+7−8@@ -73,14 +73,13 @@ function censusThread(j) { // tagged dock:pup-bridge, and SUBMIT the phrase. New threads ONLY; never resume/target an existing // tid. On any failure the page falls back to copying, so the user is never stranded. async function sendToNewThread(phrase) {- if (!SAY.includes(phrase)) return { ok: false, why: 'unknown phrase' };- const mk = await hpost('/ai-threads/new', { name: 'Pup - say it', tags: ['dock:pup-bridge'] });- if (!(mk.status >= 200 && mk.status < 300)) return { ok: false, why: 'Could not reach the AI panel (' + (mk.status || mk.error) + ')' };- const sid = mk.json && (mk.json.sid || mk.json.id);- if (!sid) return { ok: false, why: 'AI panel did not return a thread id' };- const run = await hpost('/ai-threads/run-prompt', { sid, prompt: phrase, submit: true });- if (run.status >= 200 && run.status < 300 && !(run.json && run.json.ok === false)) return { ok: true, sid };- return { ok: false, why: 'Thread opened but the prompt was refused (' + (run.status || run.error) + ')' };+ // EMERGENCY PARK (dock thread, 2026-08-24): the fleet Send-to-AI success path CRASHED the ah dev+ // shell on ConfRoomROG within ~30s of the run-prompt call. Until the main ah build thread+ // certifies the /ai-threads/new + run-prompt flow, pup's backend does NOT touch the control API at+ // all. It answers parked; the page's failure path (error toast + copy fallback) carries the user,+ // so Send to AI still copies the phrase. Un-park when the broadcast says the flow is certified.+ if (!SAY.includes(phrase)) return { ok: false, parked: true, why: 'unknown phrase' };+ return { ok: false, parked: true, why: 'Send to AI is temporarily parked fleet-wide (a control-API crash is under triage); the phrase was copied to your clipboard instead.' }; } let TOOL_VERSION = '0';