---
title: Shortcut Efficiency (mouse-vs-keyboard stats with a rough time-savings estimate)
---
# Shortcut Efficiency (mouse-vs-keyboard stats with a rough time-savings estimate)

## What it is

Shortcut Efficiency is a **passive stats tab** that shows, for the handful of common actions that have BOTH a clickable button AND a keyboard shortcut, how often you reached for the mouse versus the keyboard — and a rough estimate of how much time you could reclaim by using the shortcut instead.

It lives in the **Stats** virtual project (the sidebar entry with the bar-chart icon, near Bookmarks / Automations). Open Stats, then pick **Shortcut Efficiency** from the left sub-sidebar — it sits in the tab list alongside **Overview**, **Feature Usage**, **Trends**, **Usage**, and **Records**. Like the rest of Stats, it's read-only: just a summary card and a grid of per-action cards built from usage data Omniscio already collects in the background.

The tracking layer also powers two light-touch **nudges** (described below): a brief whisper near the cursor the moment you click an eligible button, and an occasional Weekly Summary suggestion that shows you the current shortcut for something you keep clicking with the mouse.

### What it shows

At the top, a **summary card**:

- A headline count — e.g. _"35 actions done by mouse that have a shortcut"_ — the total number of times you clicked a button for something you could have done with a key.
- A big accent-colored time figure and a sentence: _"Using the keyboard shortcuts could have reclaimed about ~6 min — a rough estimate, not a precise figure."_ The wording always calls it a rough estimate so the number never reads as a precise measurement.

Below that, a **per-action card** for each tracked action that you've actually used in the selected time range (actions you haven't touched are omitted — no empty rows). Each card shows:

- The action's name (e.g. _Archive session_) and its keyboard shortcut in a little key-cap badge (e.g. `Ctrl+T`).
- A small _"~N min saved"_ / _"~Ns saved"_ figure — the rough reclaimable time for that one action.
- The raw counts: _"30 mouse"_ and _"10 keyboard"_.
- A thin progress bar showing what percentage of the time you used the keyboard for that action (with an accessible label like _"25% keyboard"_).

Cards are sorted by biggest savings opportunity first, so the action where switching to the keyboard would help you most is at the top.

A **time-range selector** in the sub-sidebar (Today / Yesterday / 7 Days / 30 Days / 90 Days / All Time) scopes every figure. If you have no shortcut activity yet, the tab shows a _"No shortcut activity yet"_ empty state.

The tab only counts activity from **Jun 9, 2026** onward — when Omniscio started excluding phone/tablet taps from these stats — and shows that start date as a small caption under the summary. Older counts couldn't tell a phone tap apart from a real mouse click (nothing recorded _which_ device a use came from), so they're left out and even _All Time_ starts at that date. Nothing is deleted — the old data still lives in your local database; it's just not counted here.

## Where to find it

Open the **Stats** virtual project in the sidebar, then pick **Shortcut Efficiency** from its own left-hand tab list.

## How it behaves

### The tracked actions

Only actions that have a real button AND a real default keyboard shortcut are tracked. There are 19 keybinding actions plus 2 Question Widget pseudo-actions (which use local key handlers rather than the global keybindings system).

### 19 keybinding actions

| Action                      | Where the button is                            | Default shortcut |
| --------------------------- | ---------------------------------------------- | ---------------- |
| Archive session             | Session ⋯ overflow menu → Archive              | Ctrl+W / E       |
| Snooze session              | Session ⋯ overflow menu → Snooze               | H                |
| File explorer               | Session ⋯ overflow menu → File Explorer        | Ctrl+E           |
| Pause session               | Session ⋯ overflow menu → Pause                | P                |
| Tag session                 | Session ⋯ overflow menu → Tag                  | T                |
| New session                 | Sidebar "+ New Session"                        | Ctrl+T / N       |
| Go to inbox                 | Inbox button                                   | Ctrl+Q / I       |
| Search                      | "Search conversations" menu item               | Ctrl+K           |
| Quick scratchpad            | Toolbar scratchpad icon                        | Ctrl+Shift+S     |
| Super Prompts               | Toolbar Super Prompts icon                     | Ctrl+Shift+K     |
| Plain Speak toggle          | Plain Speak chip below message                 | V                |
| Help & Docs                 | Toolbar help icon                              | Ctrl+Shift+/     |
| Attach files                | Composer attach-file button                    | Ctrl+U           |
| Send AI suggestion 1        | First AI suggestion chip                       | Alt+1            |
| Send AI suggestion 2        | Second AI suggestion chip                      | Alt+2            |
| Send AI suggestion 3        | Third AI suggestion chip                       | Alt+3            |
| Continue / Check in session | Composer "Continue" / "Check in" banner button | C                |
| Keep waiting                | Composer "Keep waiting" banner button          | W                |

### 2 Question Widget pseudo-actions

The Question Widget has its own local keyboard handlers (A–F to pick options, Enter / Ctrl+Enter to submit) that are outside the global keybindings system. These are tracked under a separate synthetic registry and appear in the same Shortcut Efficiency report.

| Action                        | Mouse path            | Keyboard path                         |
| ----------------------------- | --------------------- | ------------------------------------- |
| Question Widget — pick option | Click an option pill  | Press A–F                             |
| Question Widget — submit      | Click the Send button | Enter (on last question) / Ctrl+Enter |

(Your bindings may differ if you've customized them in Settings → Keyboard Shortcuts; the badge on each card shows the action's first default binding. Question Widget pseudo-actions show a fixed key hint since they are not rebindable.)

**Alternate keys count too.** When two different shortcuts do the same thing, pressing either one counts toward that action. Today the one case is the inbox: it's tracked as _Go to inbox_ (badge `Ctrl+Q`), but you can also open it with **Ctrl+1** (the "jump to first project" key — the inbox sits first), and a Ctrl+1 press is counted as a keyboard use of _Go to inbox_. Only the counting is shared; the card's badge still shows the main shortcut.

### How the time estimate works

The estimate is deliberately coarse. Each tracked action carries a fixed _seconds-saved-per-use_ value — bigger for actions buried in a menu (the mouse has to open the menu first, ~3 seconds) and smaller for a single top-level or toolbar click (~1.5–2 seconds). The reclaimable time for an action is simply:

> **reclaimable seconds = (number of times you used the mouse) × (seconds saved per use)**

Keyboard uses don't count toward "reclaimable" because you already saved that time by using the shortcut. The summary total is just the sum across every tracked action. It's a back-of-the-envelope figure meant to give you a sense of scale ("oh, that's an hour a month") — not a stopwatch-accurate measurement, which is why the UI always labels it a rough estimate.

### Privacy

Shortcut Efficiency is privacy-safe. The only thing recorded for each use is **which action** it was (a fixed identifier from a closed list) and **whether it was mouse or keyboard**. No message contents, session IDs, project names, file paths, or any other detail 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.

### Keyboard-shortcut nudges

### Instant Whisper

The moment you **click** a button that has a keyboard shortcut — whether it's a top-level button or one of the actions inside a session's ⋯ overflow menu — Omniscio briefly shows a small `or press <key>` hint near your cursor, then slides it away after about 1.5 seconds. The hint always stays readable: it uses the same dark, near-solid "glass" look as Omniscio's tooltips, so it stands out over whatever's behind it (toolbars, cards, the composer — surfaces that used to make it look see-through) in any theme, light or dark. It stays fully opaque while it moves, and if you click near a window edge it's nudged back on-screen so it never gets cut off or wraps onto two lines.

Once you've used a shortcut's keyboard version a few times (the threshold is 3), the hint stops showing for that action — Omniscio considers it learned and gets out of your way.

The session ⋯ overflow-menu actions (Archive, Snooze, Pause, File Explorer, Aside, Tag) get the whisper too: the menu still prints the key next to each item, and the floating hint is an extra active nudge right after you click. The composer **Continue / Nudge** (C) and **Keep waiting** (W) banner buttons behave the same way, and also show the key in a hover tooltip. The only thing still excluded is the Question Widget option pills — the A–F letter badges on each pill already serve that purpose.

The whisper is **for keyboard-capable devices only** — it never appears on a phone or tablet (any touch-only screen with no hover-capable pointer), where there's no physical keyboard to reach for. Taps on a phone or tablet also **don't count** toward the Shortcut Efficiency stats or the keyboard-shortcut nudge below: there's no shortcut to "miss" when there's no keyboard, so a tap there isn't recorded as a mouse-instead-of-keyboard choice. (A touch device WITH a real keyboard still counts your keyboard presses normally — only mouse/tap input on a touch-only device is skipped, and a laptop's trackpad still counts because it can hover.)

You can turn this off at any time: **Settings → Session behavior → "Show keyboard-shortcut hints when I click"** (the toggle is on by default).

### Periodic Weekly Summary nudge

Every now and then the **Weekly Summary** (if you have it and AI Coaching enabled) may point out an action you keep doing with the mouse that has a keyboard shortcut — e.g. "You clicked Keep waiting 6 times over the last two weeks without using its shortcut — about 15 seconds of extra clicking." The card **shows you that action's current shortcut right there**, as a little key-cap, so you never have to go hunting for it. It reads the key **live from your bindings**, so if you've rebound it the card shows _your_ key — and it's framed as "you already have a shortcut for this, press it instead of clicking," not as "go set one up" (the action always has a shortcut assigned — that's how it got noticed). A **Change shortcut** button opens **Settings → Keyboard Shortcuts** if you'd rather rebind it. The key is never hardcoded into the suggestion text — the card resolves and draws your live binding — so what you see is always current, even after a rebind.

This nudge covers at most one action per summary — whichever is **costing you the most time**, measured across **every** shortcut in Omniscio (not just the ones on this Efficiency tab) and weighted by how deep in a menu you had to reach — and only where you've clicked it at least 5 times without a single keyboard use. It won't fire if AI Coaching or Weekly Summary is turned off.

## For agents

### How it works (for agents)

Each use of a tracked action records one row in the `feature_events` table with `feature='hotkey_efficiency'`, `action='mouse'` or `'keyboard'`, and `metadata={ actionId }`.

- The tracked-action set, each action's human label, and its `secondsSaved` value live in one place: `TRACKED_HOTKEY_ACTIONS` in [/src/shared/hotkey-efficiency-actions.ts](/src/shared/hotkey-efficiency-actions.ts). This is the single source of truth — changing what's tracked or its savings figure happens here.
- The renderer records a use via `trackHotkeyEfficiency(actionId, source)` in [/src/renderer/src/lib/hotkey-efficiency-tracker.ts](/src/renderer/src/lib/hotkey-efficiency-tracker.ts). It first resolves **action aliases** (an alternate action id for the same operation) to the canonical tracked id via `resolveTrackedHotkeyActionId`, then no-ops for any action that is neither tracked nor a known alias, no-ops for a **mouse** use on a **touch-only device** — gated on `isTouchOnlyDevice()` (no hover-capable pointer ⇒ no keyboard to reach for), which is broader than the old `getIsMobile()` width<768 check, so phones AND tablets/landscape phones are excluded — and is fire-and-forget (a tracking failure never breaks the action you took). The only alias today is `jumpToProject1` (Ctrl+1) → `goToInbox`; the alias is deliberately not itself a tracked action (no row/button of its own), and the **resolved** id is what crosses IPC in `metadata.actionId` (locked by `an-alias-counts-as-the-action-it-performs`).
- Keyboard uses are recorded once at the top of `executeAction` in [/src/renderer/src/hooks/keyboard-shortcuts/registry.ts](/src/renderer/src/hooks/keyboard-shortcuts/registry.ts) — the keyboard-only entry point, so a single call covers every shortcut. The `KEYBOARD_TAP_EXCLUDED` actions (`closePanel`, `continueSession`, `keepWaiting`) are the exception: they are context-dependent, so they are tapped at their real fire-point instead — Archive in its session-archive branch; Continue/Nudge + Keep-waiting in `useContinueHotkeyListener` (which also avoids a double count, since the C/W keys fan out to a window event the visible panel handles). Mouse uses are recorded in each button's click handler (in `App.tsx`, `SessionsSidebar.tsx`, `SessionOverflowMenu.tsx`, and `SessionComposerBanners.tsx`). The underlying `archiveSession` store action deliberately does NOT emit, so a programmatic/auto archive can't inflate the count.
- The report is computed by `getHotkeyEfficiencyReport(timeRange, floorIso = MOBILE_AWARE_TRACKING_SINCE)` in [/src/main/db/queries-feature-events.ts](/src/main/db/queries-feature-events.ts): it groups events by `(source, actionId)`, joins `TRACKED_HOTKEY_ACTIONS` for the label + savings, computes `estReclaimSeconds = mouseCount × secondsSaved`, drops actions with no events in range, and sorts by `estReclaimSeconds` descending. **It floors the window start at `floorIso`** (default `MOBILE_AWARE_TRACKING_SINCE` — the date the touch-only guard shipped), so pre-guard rows that can't be split mobile-vs-desktop are never counted, even for All Time; this is non-destructive (rows stay in `feature_events`). It's served over IPC channel `stats:hotkey-efficiency` and rendered by [/src/renderer/src/features/statistics/HotkeyEfficiencyTab.tsx](/src/renderer/src/features/statistics/HotkeyEfficiencyTab.tsx).

The full set of test-locked invariants (event shape, no-double-count, registry join, the savings formula, the locked 19-action set, the central classification guard, and the PII guarantee) and the safe-change checklist live in the feature contract: [/.claude/memory/contracts/hotkey-efficiency-contract.md](/.claude/memory/contracts/hotkey-efficiency-contract.md).

## Related

- [stats.md](stats.md) — the parent Stats virtual project: Overview / Feature Usage / Trends / Usage / Records tabs and the time-range selector. Shortcut Efficiency is one of its tabs; the generic Feature Usage tab also lists `hotkey_efficiency` as a mouse-vs-keyboard total.
- [keyboard-shortcuts.md](keyboard-shortcuts.md) — the full list of Omniscio shortcuts and how to rebind them in Settings → Keyboard Shortcuts.
- [records.md](records.md) — the Records / trophy-case sibling tab in the same Stats project.
