---
title: Ask about this page (floating screen-aware helper)
---

# Ask about this page (floating screen-aware helper)

## What it is

"Ask about this page" is a small floating chat popover that lets you ask Claude about whatever is currently on your Omniscio screen — "what is this session waiting on?", "summarize my inbox", "what does this setting do?" — without leaving the page you're on. It is **non-blocking**: there is no full-screen backdrop and no focus trap, so the page behind the popover stays fully clickable while the chat is open.

You open it from a **button in the top bar** (a sparkle icon, alongside Bookmarks and your account indicator), or with the keyboard shortcut **Ctrl+J**. The popover **drops down from that button** — anchored under the header and height-capped — so it never covers the chat composer at the bottom of the window. When you send your first question, Omniscio takes a **snapshot of what's on screen** and starts a real, full-capability Claude session in the background, pre-fed with that snapshot. Follow-up questions continue the same chat, and the on-screen snapshot is re-captured and re-attached on **every** message, so each turn reflects what you're looking at right then. Your typed message appears in the chat the moment you hit send — even the very first one, while that background session is still starting up — so the popover never looks empty or unresponsive while it spins up.

The conversation is **persistent**: re-opening the popover continues your most-recent chat, a **New chat** button starts a fresh one, and a **History** list reopens any past chat. These helper chats are deliberately kept **out of the normal UI** — they never appear in the projects sidebar, the unified inbox, the "Needs You" counter, or anywhere else. They live only in the popover.

**This is an in-development / experimental feature, hidden by default.** Most users will not see the top-bar button or have Ctrl+J do anything until it is turned on (see "Turning it on" below). It is gated by Omniscio's unreleased-feature mechanism — see Omniscio’s unreleased-feature (“Lab”) gate.

## Where to find it

### Turning it on

Because it ships hidden, you reveal it one of three ways:

1. **Settings → Lab** — flip the **"Ask about this page"** toggle. (Lab holds experimental flags, all off by default.) This is the normal path.
2. **Launch with `AMC_SHOW_ASK_ABOUT_THIS_PAGE=1`** — a developer-only reveal (you can't set environment variables on a packaged app, so this is for dev builds).
3. **Shipped** — once a developer flips the feature's registry status to `shipped`, it is on for everyone and the Lab toggle disappears.

When revealed, all three surfaces light up together: the top-bar button, the Ctrl+J shortcut, and the popover itself. It is **desktop-only** — the top bar (and so the button) is hidden below the mobile breakpoint.

## How it behaves

### First-use privacy consent

The very first time you try to send a question, a one-time **consent gate** appears in place of the message box. It explains that the helper captures what's on your screen and sends it to Claude, and that your **KMS / secrets vault** and any region marked sensitive are never captured. You must click **Accept & continue** before the first capture+send can happen. Once accepted, the choice persists (it survives restarts and syncs to mobile like any setting) and the gate never shows again.

### What gets captured — and what never does

When you send, Omniscio builds a compact text block describing your current screen and prepends it to your question. Which branch it uses depends on what you're looking at:

- **A session** — the session's name, status, and project, plus its last ~12 messages (each capped so one giant message can't dominate).
- **The unified inbox** — one line per visible inbox item (up to ~20), each tagged with its source.
- **Anything else** — the visible text of the main content panel, with a short label for the current view.

Three privacy protections are always in force:

- **The KMS / Nothari vault is never captured.** If the vault is the active surface, the helper substitutes a neutral placeholder and reads nothing from it.
- **`[data-sensitive]` regions are stripped** out of any generic page scrape before the text is collected.
- **The captured text is wrapped in an explicit "untrusted data" block** that tells the helper to treat it as a description of what you see — never as instructions to follow. This is a prompt-injection defense: text on your screen (a webview page, a pasted message) can't hijack the helper.

There is also a hard total size budget on the captured block, and the whole capture step is failure-proof — if anything goes wrong it returns a safe minimal block rather than throwing.

The attached context is sent to the helper but **never shown in the chat** — your message bubble displays only the question you typed; the captured snapshot rides along to Claude invisibly. You can preview exactly what will be attached: click the **"Context from this page attached"** chip above the message box to expand the snapshot before you send.

Your typed **question** (with surface `ask_page`) — and **only** the question, never the captured screen context — is also recorded to Omniscio's local help-question log so the owner can review what people ask. Same store and privacy model as the "Ask Omniscio" tab: see [Ask Omniscio → Question log](ask-amc.md#question-log-owner-review).

### It's a real session — including approvals

The helper is not a lightweight one-shot. It is a real, full-capability Claude session running in its own scratch workspace (a dedicated `__ask_page__` virtual project that resolves to a private folder under Omniscio's user-data directory — separate from the "Ask Omniscio" helper's workspace). That means it can decide to use a tool that needs your permission. When it does, the **Allow / Deny approval is rendered inline in the popover** — so a full-power helper never silently hangs waiting on a gate you can't see. The popover also shows a running **cost** for the chat in its footer.

Because it runs in its own scratch workspace, the helper **cannot see or edit your real projects** unless you explicitly move it there.

### Persistent history

- **Continue-on-open** — opening the popover (button or Ctrl+J) re-binds your most-recent chat and reloads it, so you pick up where you left off.
- **New chat** — the message-plus icon in the header drops the current chat and starts fresh; the next question spawns a new background session.
- **History** — the clock icon opens this popover's private list of past chats (most-recent first); click any one to reopen it. This list deliberately bypasses the hide rule that keeps these chats out of the rest of the UI.

### Why it's hidden from the sidebar / inbox

Every "Ask about this page" chat is a session, but it should never clutter your normal session lists. Omniscio tags each one with a permanent, status-independent marker so the sidebar, the unified inbox, the "Needs You" counter, and the Ask-Omniscio `/state` snapshot all skip it — even if it's mid-question or waiting on an approval (you reach that approval through the popover, not the inbox). Unlike the "silent recipe" hide, this marker never clears, so the chat stays popover-only for its whole life.

### Relationship to "Ask Omniscio"

"Ask about this page" is a **separate feature** from "Ask Omniscio", with its own identity (`__ask_page__` vs `__ask_amc__`), its own scratch workspace, and its own sessions. One difference matters for reliability: Ask Omniscio has an internal-API-key fallback so it works even when your account credentials are momentarily unavailable; **"Ask about this page" does not** — if your Claude credentials are missing it surfaces the normal "sign in again" message rather than billing an internal key.

### Limitations

- **Desktop only** — no mobile surface yet.
- **Experimental / hidden by default** — must be enabled via Settings → Lab (or env / shipped status).
- **The vault is never readable through it** — by design; this is not configurable.

## For agents

### Implementation pointers (for agents touching this code)

The full invariant list + the test enforcing each one lives in the feature contract: [/.claude/memory/contracts/ask-page-contract.md](/.claude/memory/contracts/ask-page-contract.md). **Read it before changing this feature.** Key files:

- Popover store (open/close/newChat/selectSession/send, cache-pin lifecycle): [/src/renderer/src/stores/ask-page-store.ts](/src/renderer/src/stores/ask-page-store.ts)
- Popover view (reuses `MessageList` + `ComposerInput`, sliced subscriptions, inline approvals): [/src/renderer/src/features/ask-page/AskPagePopover.tsx](/src/renderer/src/features/ask-page/AskPagePopover.tsx)
- Top-bar button (gated, desktop-only; toggles + lazy-mounts the popover, which portals to `document.body` and anchors under the header): [/src/renderer/src/features/ask-page/AskPageToolbarButton.tsx](/src/renderer/src/features/ask-page/AskPageToolbarButton.tsx)
- First-use consent gate: [/src/renderer/src/features/ask-page/AskPageConsentGate.tsx](/src/renderer/src/features/ask-page/AskPageConsentGate.tsx)
- Context capture (vault exclusion, `[data-sensitive]` strip, untrusted-data delimiting, budget, never-throws): [/src/renderer/src/lib/capture-visible-context.ts](/src/renderer/src/lib/capture-visible-context.ts)
- Cache pin honored by both evictors: [/src/renderer/src/stores/conversation-cache-evict.ts](/src/renderer/src/stores/conversation-cache-evict.ts)
- Ctrl+J routing (`openAskPage`, gated): [/src/renderer/src/hooks/useKeyboardShortcuts.ts](/src/renderer/src/hooks/useKeyboardShortcuts.ts)
- Top-bar wiring (renders the gated button as a trailing item next to the account indicator): [/src/renderer/src/features/toolbar/AppToolbar.tsx](/src/renderer/src/features/toolbar/AppToolbar.tsx) — the popover is mounted by the button itself, not a global host (the old `AskPagePopoverHost` in `App.tsx` was removed).
- Permanent hide tag applied at session creation: [/src/main/services/session/session-create.ts](/src/main/services/session/session-create.ts) (`ASK_PAGE_SESSION_TAG`)
- Separate identity / spawnable / resolver: [/src/shared/virtual-project-ids.ts](/src/shared/virtual-project-ids.ts), [/src/shared/spawnable-project-path.ts](/src/shared/spawnable-project-path.ts), [/src/main/services/claude-project.ts](/src/main/services/claude-project.ts)
- Spawn-cluster gating (MCP-off, system-prompt shim, NO internal-key fallback): [/src/main/process/spawn-cluster-manager.ts](/src/main/process/spawn-cluster-manager.ts), [/src/main/process/spawn-build.ts](/src/main/process/spawn-build.ts) (`ASK_PAGE_SYSTEM_PROMPT_SHIM`)
- Lazy project seeder + IPC: [/src/main/services/ensure/ensure-ask-page-project.ts](/src/main/services/ensure/ensure-ask-page-project.ts), `ASK_PAGE_ENSURE` in [/src/shared/ipc-channels/ai.ts](/src/shared/ipc-channels/ai.ts)
- Registry entry + settings fields: [/src/shared/unreleased-features.ts](/src/shared/unreleased-features.ts), [/src/shared/types/settings/ai-features-settings.ts](/src/shared/types/settings/ai-features-settings.ts) (`askAboutPageEnabled`, `askPageConsentGiven`)
- Tests: [/tests/unit/lib/capture-visible-context.test.ts](/tests/unit/lib/capture-visible-context.test.ts), [/tests/unit/stores/ask-page-store.test.ts](/tests/unit/stores/ask-page-store.test.ts), [/tests/unit/session-create-ask-page-tag.test.ts](/tests/unit/session-create-ask-page-tag.test.ts), [/tests/unit/session-create-display-text.test.ts](/tests/unit/session-create-display-text.test.ts), [/tests/unit/stores/session-store-evict-nonpool-popover-pin.test.ts](/tests/unit/stores/session-store-evict-nonpool-popover-pin.test.ts), [/tests/unit/stores/evict-oldest-protected.test.ts](/tests/unit/stores/evict-oldest-protected.test.ts), [/tests/unit/lint/silent-session-filter-coverage.test.ts](/tests/unit/lint/silent-session-filter-coverage.test.ts), [/tests/unit/renderer/ask-page/AskPagePopover.test.tsx](/tests/unit/renderer/ask-page/AskPagePopover.test.tsx), [/tests/unit/renderer/ask-page/AskPageToolbarButton.test.tsx](/tests/unit/renderer/ask-page/AskPageToolbarButton.test.tsx), [/tests/e2e/ui/ask-page.spec.ts](/tests/e2e/ui/ask-page.spec.ts)

## Related

- Omniscio’s unreleased-feature (“Lab”) gate — how Omniscio hides in-development features until they ship; this feature is gated by that mechanism.
- [asides.md](asides.md) — another way to ask a side question; asides fork the current session's transcript, whereas "Ask about this page" runs a separate screen-aware helper session.
- [keyboard-shortcuts.md](keyboard-shortcuts.md) — Ctrl+J and the rest of Omniscio's shortcuts.
