Global Ghostreader
Global Ghostreader — Motivation
Ghostreader has always been scoped to a single document — you highlight a passage, and the AI responds in that document's context. But Reader users accumulate hundreds of documents with thousands of highlights, and there's no way to ask questions that span that entire library.
Global Ghostreader is an agentic chat interface that searches across a user's full Reader library, synthesizes multi-document answers, and links back to source passages. It turns Reader from a place where you store highlights into a place where you can think with them.
From the original brainstorm (Dec 2025):
All of your research, in one place. All at your fingertips. Build up a corpus of knowledge you'll always have at your fingertips. Too much to read, not enough time? Ghostreader will help you always stay on top of everything you want to read.
Why now:
- Users have been asking for "chat with my library" for over a year — doc-level chat has been a top request, and global chat is the natural extension
- Turbopuffer indexing is ready — per-user namespace vector search, hybrid search across all documents, population + JIT indexing are built
- Strategic differentiation — this moves Reader from a read-later app to a knowledge tool, which is core to the refounding thesis
Global Ghostreader — Shape
Definition of done
Users can open a full-page chat from the left nav that searches across their entire Reader library, synthesizes multi-document answers with source attribution, and links back to source documents. Document-level chat also upgraded with the same agentic capabilities. Conversation history persists with warm/cold logic.
Key design decisions
- All chats are the same — no distinction between "global" and "document" chats. Context is fluid based on where the user is. The LLM decides what to "consider" (single doc vs. all docs) dynamically based on where the user is and what they ask.
- Default to new chats — chat is a tool (like Spotlight), not an ongoing relationship.
- Warm/cold orbit system — locations store a reference to their most recent conversation, expires after ~7 days of inactivity.
- Unified link style — dashed underline for all references, with source pills at end of responses. Links in Reader should be more prominent than ChatGPT/Perplexity because clicking them is core to the value prop.
- Blank slate varies by surface — global gets recent chats + prompt categories; doc-level stays minimal.
Scope (Milestones)
M1 ──→ M2 ──→ M3
│
├───→ M4 ──→ M5
│
└───→ M6
- M1: Basic global chat (staff-only) — full-page chat, model picker, source attribution, thinking states
- M2: Agentic loop + cheaper model — multi-tool-call loop, search strategies, source diversification
- M3: Document-level agentic loop — sidebar chat with current doc as priority context, "Add to Doc Note", preset prompts
- M4: Conversation history + warm/cold — command palette, orbit logic, auto-naming, cross-platform sync
- M5: Global chat page UI — blank slate with ghost mascot, doc count, 5 prompt categories (Find/Learn/Research/Catch Up/Recommend)
- M6: Preset prompts → skills refactor
Infrastructure (already built)
Turbopuffer per-user namespace, hybrid search, WebSocket chat service, conversation model, document/highlight tools.
Out of scope
- Mobile (separate RFD by Kris)
- Bookwise implications (needs separate decisions)
Appetite
Large — 6 milestones spanning multiple months. M1-M3 are the core agentic experience; M4-M6 are polish and architecture.
Global Ghostreader — Build (WIP)
This document is underway while the project is in Build. It will be finalized when the stage completes.
Entered Build: 2026-03-18 · Owner: @piotr · Initiative: rw-projects
Goal
Ship a full-page global chat and upgraded document-level chat in Reader web, following the M1–M6 milestone plan from Shape.
What's been built
M1: Basic global chat (staff-only)
- Full-page chat surface with model picker, source attribution, thinking states
- Agentic tool-calling loop with full-library search via Turbopuffer
- Backend deployed staff-only (merged ~2026-03-23)
M2: Agentic loop + cheaper model
- Multi-tool-call loop, search strategies, source diversification
- Agentic tool abstraction,
list_documentstool - Merged ~2026-03-30
M3: Document-level chat panel
- Sidebar chat with current doc as priority context
- PR opened ~2026-03-30, doc-level shipping first before global
M4: Conversation history + warm/cold (in progress)
- PR #8843: Feature flag + cold-state conversations card
- Auto-orbit logic, cross-platform sync
M5: UI polish (in progress)
- PR #8850: Title generation + picker style tweaks
- Auto-naming conversations
M6: Preset prompts → skills refactor
- Not yet started
What's in progress
- Feature flag rollout for broader staff/beta testing
- Cold-state UI for conversation history
- Title generation and model picker polish
What's not done yet
- M5 blank slate with ghost mascot and prompt categories
- M6 skills refactor
- Mobile (separate RFD, out of scope for this Build)
- Bookwise implications (separate decisions needed)
Open Questions (for Expedite)
- "Global ghostreader" naming — team questioning whether this is the right user-facing name
- Evals strategy — how to measure quality of agentic responses at scale
- Doc-level vs global launch sequencing — doc-level shipping first, global later
- Resize handle for chat panel deferred until global launches
| Date | Summary |
|---|---|
| 2026-04-15 | Piotr opened PRs for feature flag + cold-state conversations card, title generation + picker tweaks. Backfilled into Rai... |
| 2026-04-13 | Milestones doc updated (M1-M6). Evals discussion. "Global ghostreader" name questioned. |
| 2026-04-02 | Doc-level chat ships first, global later. No resize handle until global launches. |
| 2026-03-30 | M2 merged. M3 PR opened — document-level chat panel. GR v2 backend deployed staff-only. |
| 2026-03-23 | M1 foundation merged. M2 PR opened — agentic tool abstraction, list_documents tool. |
| 2026-03-18 | Entered Build. Piotr opened first PR — agentic tool-calling loop, full-library search. |
| 2026-02-18 | Testing Round 2: more mobile polish. GG Spec finalized with warm/cold orbit system. |
| 2026-02-04 | Testing Round 1: Kris + Tristan tested Artem's mobile build, filed detailed UI feedback. |
| 2026-02-01 | Global Chat Round 1: unified chat identity decision — all chats are the same, context is fluid. |
| 2026-01-15 | Design Round 2: settled on dashed underlines, source pills, direct snippet navigation. |
| 2025-12-18 | Design Round 1: doc-level chat UI, link style, document cards. Tristan feedback via Loom. |
| 2025-12-16 | Project kicked off with brainstorm. Moved from Backlog to Shape, @kris driving design. |