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.
master
John Lauer
v2.0.727 (insiders): A pup window waiting on a slow page now explains itself instead of showing a blank PUPBIRTH tab: w…
b75d102
22d ago
<!doctype html>
<!-- pup birth page (2.0.630). Every extension-lane window is CREATED on this page with a unique token in the query
string; the page's <title> is that token, so the OS window title is "PUPBIRTH-<token> - Google Chrome for Testing"
from the first instant, and pup binds the window by that title alone (pup-no-wiggle, pup-window-targeting R4).
The real URL is navigated to only after the window is bound and parked at the bottom of the z-order.
2.0.726: a slow page keeps this tab on screen, so it explains itself: which AI thread opened the window, why,
where it is going, how long it has waited, and what pup is (John, 2026-10-19). -->
<html><head><meta charset="utf-8"><title>PUPBIRTH</title>
<style>
:root{--bg:#161b22;--card:#1c2230;--ink:#e6edf3;--dim:#8b949e;--line:#30363d;--teal:#00b8b1;--amber:#d29922}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font:15px/1.5 system-ui,-apple-system,"Segoe UI",sans-serif}
body{display:flex;align-items:center;justify-content:center;padding:24px;box-sizing:border-box}
.card{max-width:620px;width:100%;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:28px 30px}
.brand{display:flex;align-items:center;gap:8px;color:var(--teal);font-weight:600;font-size:13px;letter-spacing:.04em;text-transform:uppercase}
.dot{width:8px;height:8px;border-radius:50%;background:var(--teal);animation:pulse 1.6s ease-in-out infinite}
@keyframes pulse{50%{opacity:.25}}
@media (prefers-reduced-motion:reduce){.dot{animation:none}}
h1{font-size:22px;margin:14px 0 4px;font-weight:600;word-break:break-word}
.row{margin-top:16px}
.lbl{color:var(--dim);font-size:12px;text-transform:uppercase;letter-spacing:.05em}
.val{margin-top:2px;word-break:break-all}
.val a{color:var(--teal)}
.status{margin-top:20px;padding:10px 12px;border-radius:8px;background:#0d1117;border:1px solid var(--line);color:var(--dim)}
.status.slow{color:var(--amber);border-color:#5a4a1a}
.about{margin-top:22px;padding-top:16px;border-top:1px solid var(--line);color:var(--dim);font-size:13.5px}
.hidden{display:none}
</style>
<script src="birth.js"></script></head>
<body><div class="card hidden" id="card">
<div class="brand"><span class="dot"></span>pup window</div>
<h1 id="head"></h1>
<div class="row"><div class="lbl">Opened by</div><div class="val" id="thread"></div></div>
<div class="row"><div class="lbl">Why</div><div class="val" id="reason"></div></div>
<div class="row"><div class="lbl">Going to</div><div class="val" id="target"></div></div>
<div class="status" id="status"></div>
<div class="about">This is a pup window: a browser your AI drives in the background, signed in as you, so it can
check pages and do web work without taking over your screen. Every new pup window starts on this page for a
moment while pup tucks it behind your work, and you normally never see it. It is still showing because the
page it is opening has not answered yet. Nothing is wrong with your computer, and you can keep working.</div>
</div></body></html>