Reply Method (how your cursor got into the chat box for each reply)
A passive stats tab showing, for every reply you send into a session, how your cursor got into the chat box: you clicked it, you pressed the Reply shortcut, the auto-focus setting placed it for you, or some other way. It lives in the Stats project and is read-only. Only the source is recorded — never your message text.
What it is
Reply Method is a passive stats tab that shows, for every reply you SEND into a session, how your cursor got into the chat box: you clicked into it, you pressed the Reply shortcut (R), the auto-focus setting placed the cursor for you when you opened the session, or some other way (e.g. the Tab key).
It lives in the Stats virtual project (the bar-chart sidebar entry). Open Stats, then pick Reply Method from the left sub-sidebar — it sits in the tab list alongside Shortcut Efficiency, Hotkey Usage, and the rest. Like the other Stats tabs it's read-only: a summary card plus one row per source, built from usage data Omniscio already collects in the background.
Where to find it
Reply Method is a tab inside the Stats virtual project — the bar-chart entry in the project sidebar. Open Stats, then pick Reply Method from the left-hand sub-sidebar, where it sits alongside Shortcut Efficiency, Hotkey Usage and the other usage tabs.
Like its neighbours it is read-only: a summary card plus one row per source, scoped by the usual time-range selector that runs from Today to All Time.
How it behaves
What it shows
- A summary card with the total replies counted, a one-line description, and a note that auto-focus is the default — it places the cursor for you when you open a session, so it usually leads the numbers.
- A row per source — Clicked into the box / Reply shortcut (R) / Cursor placed for you (auto-focus) / Other — each with its count, its percentage of all replies, and a thin bar. All four rows always appear (a zero-count source still shows, so the breakdown is stable).
- A time-range selector (Today / Yesterday / 7 Days / 30 Days / 90 Days / All Time) scopes every figure. Before you've sent any replies, the tab shows a "No replies counted yet" empty state.
Only a genuinely typed reply counts. A one-click quick-reply chip never focuses the box, so it is not counted here. Counting starts from when this version is installed — there is no backfill of older activity.
Privacy
Reply Method is privacy-safe. The only thing recorded per reply is which source it was (one of four fixed values). No message text, session IDs, project names, or timing is ever stored. Everything stays in your local Omniscio database — nothing about this tab is sent to Anthropic, our servers, or anywhere off your machine.
For agents
How it works (for agents)
Each SENT typed reply records one row in feature_events with feature='reply_focus_source', action=<source> (click | hotkey | autofocus | other), and no metadata.
- The source is resolved once, at the composer textarea's
onFocus, in /src/renderer/src/lib/reply-focus-source.ts. The R handler and the auto-focus effect each callmarkPendingReplyFocusSource(...)right before they focus the box, and that mark WINS over the pointer-vs-keyboard heuristic (needed because both can follow a keyboard gesture). With no mark, a keyboard-preceded focus isother(e.g. Tab) and a pointer focus isclick. A short expiry keeps a mark that never landed from being mis-consumed by a later focus. - The three focus entry points are wired in conversation.ts (the
R/focusSessionInputhandler, markinghotkeyonly when it targets the session composer), theinputFocusTokenauto-focus effect in useSessionPanel.ts (markingautofocusonly in thefocusTarget === 'input'branch), and the composer'sonFocusin ComposerInput.tsx. - The emit happens once, on a successful send, in
executeSend(useSessionSend.ts) — gated on!sourceQuickReplyId(typed replies only, not a quick-reply) and consume-and-clear so a reply is counted exactly once. It is fire-and-forget, so a tracking failure never affects the send. - The report is computed by
getReplyFocusSourceReport(timeRange)in /src/main/db/queries-feature-events.ts: it counts rows per source, always returns all four sources in a fixed order (a zero-count source still appears), and computes whole-number percentages. It's served over IPC channelstats:reply-focus-sourceand rendered by /src/renderer/src/features/statistics/ReplyFocusSourceTab.tsx.
The four action names are declared in the feature registry entry reply_focus_source (/src/shared/feature-registry/shortcuts-and-io.ts); its empty metadata allow-list is the PII guarantee. Behavior is locked by unit + render tests (tests/unit/lib/reply-focus-source.test.ts, tests/unit/db/queries/queries-feature-events-reply-focus-source.test.ts, tests/unit/features/statistics/ReplyFocusSourceTab.test.tsx).
Related
- stats.md — the parent Stats virtual project: its other tabs and the time-range selector.
- shortcut-efficiency.md — the sibling mouse-vs-keyboard stat, same
feature_eventsmachinery. - keyboard-shortcuts.md — the
R(Reply) shortcut this tab counts, and how to rebind it.
Last verified 2026-09-23