Redesign proposal · pass 2
Polylogue — Capture, Recall & Control

A trust & legibility redesign — the everyday signal moves onto the page you're already reading, the popup becomes a multi-tab mission-control that can't fail silently. This pass grounds the in-page surfaces in real authenticated ChatGPT & Claude.ai dark UIs and resolves the two placement strategies into one boundary. Buildable as MV3 popup + shadow-DOM overlay, no remote assets, daemon-offline as a calm normal state.

Status language → Safe Catching up Needs attention Failed Not captured IBM Plex Sans / Mono · violet #8b7bf2
F1 Popup — mission control multi-tab health · the "why nothing happened" timeline · agent control
Polylogue
Capture · Recall · Post
4 tabs · all safe
Receiver connected 127.0.0.1:8765
last contact 2s ago
Open conversations 4 tabs
G
SQLite locking under concurrent writers
active tab · ChatGPT
Safe
C
Refactoring the ingest watcher
Claude.ai
Indexing
X
Grok — thread on RL reward hacking
Text-only capture · attachments may be missing
Partial
G
Cost accounting for Codex sessions
seen 4m ago · auto-capture skipped
Not saved
Active conversation
Archived — safe & searchable
Full fidelity · native app data · branches & attachments preserved
Cost so far
$0.42
Tokens
128k
Captured
24/24
What Polylogue did here newest first
Captured 24 turns · full fidelity
12:04:11 · req 3f9a · spooled → archived in 1.8s
Detected 2 new messages since last capture
12:03:58 · page 24 vs archive 22
Held auto-capture — receiver was mid-ingest
11:20:02 · retried automatically after 3s
First saw this conversation
11:19:47 · not yet archived
Agent control OFF — safe

When enabled, the daemon can draft or send replies into a chat you opt in per-session. Ships off, double-gated, and every command lands as a dry-run draft first — never an auto-send.

ChatGPT ✓ Claude ✓ Grok ✓ Gemini ·
Settings ⚙
DECISION In-page: two layers, one boundary

F2/F3 (floating chip + slide-over) and F4 (blended into the host's own action row) aren't alternatives — they're a passive layer and an on-demand layer, split by one rule:

Per-message state blends in.  Cross-conversation intelligence floats.
Layer 1 — Ambient, blended (F4)

Two elements slot into the host's existing copy/feedback/regenerate row at the same ~30px ghost size: a capture-status dot and a save-to-Polylogue action. Always present, reads as native, zero layout shift. Answers "is this captured?" without a click.

Layer 2 — Deep-dive, separate (F2/F3)

A corner chip (⌥P) opens a slide-over holding everything with no host equivalent: session cost, archive recall, relevant judged assertions, the "what Polylogue did" timeline. Deliberately its own surface — inventing host-blended UI for this would read as foreign.

Grounded to the real hosts
  • Action-row adds match host icon size (~30px), ghost/hover style & horizontal placement — they extend a pattern both sites already have.
  • Composer signal sits as a peer to what's already docked there (ChatGPT's model badge, Claude's weekly-limit banner), never overlapping it.
  • Corner chip & 360px slide-over checked against real ~600px composer / ~240px sidebar proportions.
F2 ChatGPT — blended action row + ambient chip Layer 1 woven in · Layer 2 collapsed corner chip
ChatGPT Pro
New chat
Search chats
Library
Scheduled
Apps
Pinned
SQLite locking under conc…
DMS analysis & structure
Physics request clarifica…
Projects
Taxes
Translation
SSinity Pro
Share
SQLite serializes writes behind a single write lock, so a second writer waits up to busy_timeout and then throws "database is locked". Switch the connection to WAL mode with PRAGMA journal_mode=WAL and set a busy timeout — writers append to a log instead of blocking readers.
Polylogue · archived through this message
Ask anything 5.4 Pro Extended
ChatGPT can make mistakes. Check important info.
Archived $0.42 ⌥P
F3 Claude.ai — blended row + slide-over deep-dive Layer 2 open · composer signal is a peer to the usage banner
Claude
Home Code
New chat
Chats and tasks
Projects
Artifacts
Scheduled
Customize
Pinned
Refactoring the ingest wat…
Claude Nerd essay
Teoria konfliktu i błędu
MBSinity Max
Refactoring the ingest watcher Share

Moving to a write queue

A single-writer archive still contends when the watcher and a live capture both write. Serialize writes through one queue and let WAL absorb the read load. The watcher becomes the sole writer; everything else enqueues.
You've used 75% of your weekly limit Get more usage
Write a message…
Opus 4.5 Medium ▾
Polylogue
Catching up — indexing
saved locally · searchable in ~2s
This session
$0.18
Tokens
54k
The archive already knows
claim ref a1b2 · 89%
WAL mode fixed the daemon's locking — verified against exit codes, not prose.
correction ref 7c3e · 76%
A single write queue beat per-connection busy_timeout tuning under load.
+ 3 more · expand all
F4 Blended detail — matched to each host exactly two additions · host icon size & hover · composer signal as a peer
G ChatGPT action row
↑ host copy / feedback / more ↑ dot: captured ↑ save
C Claude action row
↑ host copy / speak / retry ↑ dot: captured ↑ save
Composer signal is a peer, never an overlap

Near the composer, Polylogue shows one small "archived through this message" chip — placed beside ChatGPT's model badge / Claude's weekly-limit banner, at the same weight, in the same docked zone. It reads as one more piece of session meta, not an injected panel competing for the same space.

F5 Selection → assertion — the killer feature select any passage · save as note / claim / correction · evidence auto-attached
Writers then append to a log instead of blocking readers, so WAL mode lets one writer and many readers proceed concurrently without the "database is locked" error, which is why it resolves your load spikes.
Save to Polylogue
New assertion
Claim Note Correction
WAL mode lets one writer and many readers proceed concurrently without the "database is locked" error
Evidence attached msg #a1b2 › this passage
F6 The states — legible, never silent
Receiver asleep

Not an error. Captures queue locally and sync the moment it's back.

2 queued · will drain on reconnect
Partial fidelity

Captured visible text only — the app's native data wasn't available. Branches & attachments may be missing.

Reload page & re-capture for full fidelity →
Capture failed

Receiver rejected the envelope — bearer token invalid.

Fix token Retry
3 new messages

The page has moved past what's archived. Nothing lost — just newer.

Capture the latest →
Silent failure is designed out

Every conversation Polylogue sees gets a timeline entry — capture, decision, or skip-with-reason. "Saw it and did nothing" is impossible: doing nothing is itself a logged, visible event. No more reading 160 lines of debug JSON by hand.