These five strings appear verbatim across the product — the legend, the Sources screen, and the Impact recap. Every screen below is an application of one or more of them.
1 · Context, never the reply.
The only action is "Add to my reply context." The agent writes and sends.
2 · No signal without a source.
Every signal traces to a replay moment or source event.
3 · Relevance is explained, not assumed.
Re-ranking shows why each signal moved for the current issue.
4 · Uncertainty is labeled, not hidden.
Provisional signals are pinned below confirmed events, never above.
5 · Shape + label, never colour alone.
Signal type is carried by shape and text, not hue.
score = salience × issue-affinity × freshness Freshness decays from 1.0 toward a ~0.45 floor over about twelve hours. The issue lens is the term that changes: pick the issue and issue-affinity re-weights.
Workspace home — 1440px on web preview · Authenticated · Sets the model: surface, explain, prove — never reply
Signal Inbox ● LIVE: production [ ◐ Light/Dark ] [ D.P ]
Agent context, made legible Signal Inbox — see what the customer did, felt, and experienced before you reply. Surface the context in priority order. Show why each signal matters. Prove it with the evidence behind it. [ View the lo-fi wireframes ] [ Open the full prototype ] [ Jump to the signal feed ]
Conversations in queue 4 1 live · 3 waiting Avg time-to-context 0:08 ▼ from 0:41 last quarter Signals surfaced today 1,732 every one traced to a source Replies written by you 100% Signal Inbox never sends one
Surfaces, in priority order Pick the issue and the feed re-ranks — what the customer did, felt, and experienced, ordered by how much it matters for the problem in front of you, not by when it was logged. Explains why it surfaced Each signal carries a plain "why surfaced" line for the current issue — salience, issue-affinity, and freshness, shown as a reason you can read. Nothing is ranked against something you can't see. Proves it with evidence Open the drawer and the signal becomes a replay moment plus the raw source events behind it — with an honest interpretation note. The agent adds it to reply context; the agent writes and sends.
▲ Surfaced Payment declined ×2 at checkout ● Confirmed Relevance 92
Why surfaced for Billing — a payment failure on the exact issue she raised.
● Confirmed — a source event that happened ◐ Provisional — inferred or low-confidence ○ Awaiting — not yet observed ▲ Surfaced — lifted for this issue + Context only — never sent for you
The signature interaction · three-pane: conversation list · Maya Chen's thread · the Signal Feed
Prioritize for: [ Billing ] [ Technical ] [ Returns ] [ Account ] Pick the issue and Signal Inbox recomputes every score, re-sorts, animates the reorder, and marks each move with a ↑ surfaced / ↓ lowered delta and a one-line reason.
Maya Chen · live "I don't want to be double-charged"
Maya: I think I just got charged twice for one order. I don't want to be
double-charged. Can you sort this out?
Agent: [ the agent composes the reply here — Signal Inbox does not ]
Signal feed — prioritized for Billing
▲ Surfaced ⊟ Payment declined ×2 at checkout 2m ago Transaction Relevance ████████████████████░ 92 Why surfaced for Billing — a payment failure on the exact issue she raised. [ + Add to reply context ] [ ⊙ Evidence ] [ ✕ Not relevant ]
⊟ Possible duplicate hold — $128.40 2m ago Transaction ◐ Provisional Relevance ██████████████████░░ 86 Inferred, not confirmed — pinned below the confirmed charge it might explain.
Surfaced for {Issue} — {the plain reason this event bears on the issue}.
Billing: Surfaced for Billing — two declines minutes apart, then a retry, directly
on the issue Maya raised.
Provisional: Inferred, not confirmed — pinned below the confirmed charge it might explain.
Issue lens · Billing (default order)
1 Payment declined ×2 92
2 Confirmed charge · order #4471 76
3 Viewed billing FAQ 41
— provisional · pinned below —
◐ Possible duplicate hold 86
Switch the lens · Technical (re-ranked live)
1 Checkout error 500 ▲6 74
2 Rage-clicked ×4 ▲4 72
3 Payment declined ×2 ▼2 58
— provisional · pinned below —
◐ Possible duplicate hold ▼1 52
+ The only action on a signal is "Add to my reply context." No compose · no suggested reply · no auto-resolve. The agent writes and sends.
Payment declined ×2 at checkout Session replay · checkout Replay 0:00 ●━━━━━━━━━━ 0:18 [ ▶ play ] Today, 2:41 PM The declined tap is marked on the timeline. Source event Event payment.declined (×2) Gateway code do_not_honor → retry Amount $128.40 Page /checkout/payment Device iPhone · Safari 17
Two declines, ~20s apart, on the same card. No successful capture recorded — consistent with a pending hold, not a completed charge. (Provisional "Possible duplicate hold — $128.40" carries its own note: the ledger shows one authorization hold, not two captures, and settlement has not posted. Confirm with billing before telling Maya she was charged twice.)
Every drawer ends with what the evidence can't carry. The only forward action out of it is still "Add to my reply context."
Reply context · Maya Chen Billing ✓ Added to your reply context Top signal Payment declined ×2 · 92 Confidence Confirmed Evidence Session replay · checkout · Today 2:41 PM Also weigh Duplicate hold · provisional No message is drafted or sent. The agent reads this brief and writes the reply in their own words.
Added to your reply context Removed from reply context Marked not relevant — it won't surface for this issue again
Where every number on the feed has a derivation, and the wall guarantees an inferred signal can never out-rank something that actually happened.
Sources — the honesty layer that makes the feed checkable
Law 2 — No signal without a source. Every signal traces to a replay moment or source event. Law 4 — Uncertainty is labeled, not hidden. Provisional signals pin below confirmed, never above. Law 5 — Shape + label, never colour alone. Signal type is carried by shape and text, not hue.
⊟ Transaction a money / order event e.g. Payment declined ×2 at checkout ↻ Behavior something the customer did e.g. Rage-clicked "Place order" 4× ♨ Emotion how the customer felt (inferred) e.g. Frustration rising this session ◷ History prior standing / account changes e.g. Loyal customer · 12 orders · 3 yrs ⚙ Technical a system error they hit e.g. Checkout returned error 500
score = salience × issue-affinity × freshness Salience how strong the event is on its own Issue-affinity how much it bears on the chosen issue (the lens changes this term) Freshness a time decay — 1.0 toward a ~0.45 floor over ~12h
Freshness over time — 1.0 → ~0.45 floor over ~12h [ decay curve area ] A rage-click from this morning matters more than one from last week — but old context never drops to zero.
● Payment declined ×2 at checkout Confirmed 92 ● Read "Why was I charged twice?" Confirmed 76 — — — — — — Provisional — confirm before relying — — — — — — ◐ Possible duplicate hold — $128.40 Provisional 86 The provisional hold scores 86 — above the confirmed read at 76 — yet it sits below the wall. A high score never lets an unverified claim jump it.
A billing specialist and an escalations lead don't want the same things first. Calibrate tunes the order each sees while the provisional wall holds and the reply stays untouched.
+ Calibration changes the order you see — never what you send. There is no setting anywhere that lets Signal Inbox compose or send a reply.
Calibrate — teach the feed, never the reply Issue: [ Billing ] [ Technical ] [ Returns ] [ Account ] Tune the order; the "Your ranking" column re-sorts live.
Recency ●————————○ 35 Confirmed-first strictness ——————————●— High Emotion sensitivity ———●———————— 40 [ Save your surfacing preference ] [ Reset to default ]
Default ranking Your ranking 1 Payment declined ×2 1 Payment declined ×2 — 2 Checkout error 500 2 Read "charged twice?" ▲1 3 Read "charged twice?" 3 Checkout error 500 ▼1 — provisional wall — — provisional wall — 4 ◐ Possible duplicate hold 4 ◐ Possible duplicate hold — This changes the order you see — never what you send. Confirmed signals reorder; the provisional hold stays pinned below the wall in both columns.
Saved your surfacing preference Reset to the default ordering
Four outcome metrics, a black-box vs Signal Inbox before/after, and a recap of all five product laws.
45% faster time-to-resolution 38% drop in escalations 52% faster root-cause analysis 40% less investigation time
The black box · what most tools expose Logged in 14:02 Viewed order #4471 14:03 Payment event 14:05 A flat, time-ordered log. No priority, no evidence, no read on what mattered for this issue, and no sign of what the customer felt. Signal Inbox · the glass box ▲ Surfaced Payment declined ×2 ● Confirmed · 92 Why surfaced for Billing — on the exact issue she raised. Evidence one tap away. The same payment event, ordered for the issue and traced to the source that earned it.
1 · Context, never the reply. The only action is "Add to my reply context." 2 · No signal without a source. Every signal traces to a replay moment or source event. 3 · Relevance is explained, not assumed. Re-ranking shows why each signal moved for the issue. 4 · Uncertainty is labeled, not hidden. Provisional signals pin below confirmed events. 5 · Shape + label, never colour alone. Signal type is carried by shape and text, not hue.
Signal Inbox turns a thirty-second hunt into a prioritized, traceable read of the issue in front of you — surfaced, explained, and proven — while the reply stays human. Surface → Explain → Prove: customer context you can read, trust, and act on in seconds, and never a reply written for you.