bliptracker is the scope for your AI chats — a Chrome extension that labels your claude.ai conversations with a 🔴 / ✅ prefix so you can see at a glance which ones are waiting on you versus done — on desktop and on mobile. → bliptracker.xyz
⚠️ Unofficial community tool. Not affiliated with or endorsed by Anthropic. It uses undocumented claude.ai endpoints and may break without notice.
➕ Add to Chrome — the easy way.
Or load from source (unpacked)
- Clone or download this repo.
- Go to
chrome://extensions→ enable Developer mode → Load unpacked → select theextension/folder. - A setup tab opens automatically — copy the preference prompt into your Claude profile settings (it links you straight there).
After installing, do the one-time setup (below) and you're done.
| Waiting-on-you, labelled | The queue popup | One-time setup |
|---|---|---|
![]() |
![]() |
![]() |
- A one-time preference prompt in your Claude profile makes Claude end
substantive replies with a machine-readable marker:
🔴 Waiting on you: <reason>or✅ Resolved — safe to archive. This runs everywhere you use Claude, including mobile. - The extension reads that marker and renames the chat title with a
🔴/✅prefix. Because titles are stored server-side, the labels sync to the claude.ai mobile app automatically — you only run the extension on desktop. - Click the toolbar icon for a “waiting on you” queue of your 🔴 chats; the badge shows the count.
Classification is deterministic — a string match on the marker Claude wrote, never an after-the-fact guess.
Right-click the toolbar icon → Options (or the Settings link in the popup):
- Enabled — master switch.
- Mirror status to stars — also star 🔴 chats / unstar ✅ ones, so the Starred section is your mobile queue. Off by default so it doesn't collide with stars you set manually.
- Sweep interval — how often to re-check all chats. The chat you're actively viewing updates instantly regardless.
- Two triggers, one brain.
content.js(instant, the chat you're viewing) and the alarm sweep (periodic, all chats incl. mobile-finished) both funnel throughcheckConversation/applyStatusinbackground.js. No classify or rename logic is duplicated in the content script. - Idempotent renames. Renaming bumps a chat's
updated_at, so the next sweep re-checks it —titleTransform()is idempotent, so the re-check is a no-op. Convergence by design, no bookkeeping. - Best-effort DOM paint. The instant sidebar update writes to claude.ai's DOM; if React reverts it, the resulting mutation re-triggers our observer and we re-apply. The server-side rename is the source of truth regardless.
- No backend. All requests go directly to claude.ai with your own session; nothing is sent anywhere else. See PRIVACY.md.
All under /api/organizations/{orgId}:
| Method | Path | Use |
|---|---|---|
| GET | /chat_conversations?limit=N |
list (incl. updated_at, is_starred) |
| GET | /chat_conversations/{uuid} |
full chat incl. chat_messages[] |
| PUT | /chat_conversations/{uuid} {"name":…} |
rename |
| PUT | /chat_conversations/{uuid} {"is_starred":bool} |
star |
| DELETE | /chat_conversations/{uuid} |
delete (unused) |
See ROADMAP.md for shipped features, what's next, and planned future work (e.g. a popup "Resolve" button, one-click preference injection, bulk-archive, and multi-AI adapters).
Pure JS, no build step. Logic in extension/lib/ (classify.js,
titleTransform.js) is unit-testable with plain Node:
node --input-type=module -e "import {classify} from './extension/lib/classify.js'; console.log(classify('x\n✅ Resolved — safe to archive this chat.'))"Found a bug, or got an idea? Open an issue — feedback on the onboarding especially welcome. PRs are warmly received; it's a small, no-build codebase, so jump straight in.
MIT © 2026 Andrew Miller



