pageai
v1.0.2
Published
System-wide AI overlay. Press arrow combos anywhere on your OS to ask Gemini about what's on your screen. Hidden from screen sharing.
Downloads
297
Maintainers
Readme
pageai
System-wide AI overlay. Press the same arrow-key combos you'd use in a Chrome extension — but anywhere on your OS (browser, IDE, PDF viewer, terminal, games, anything). The overlay is hidden from screen sharing and screen recording by default, so Zoom / Meet / Teams / Loom / OBS / QuickTime can't see it.
Powered by Google Gemini. The package ships with a small bundled key pool, so
on first install you don't even need to paste your own key — pick one with
pageai rotate if "yours" gets rate-limited, or use pageai key <YOUR_KEY>
to bring your own.
Install & run
npx pageai startThat's it. A tray icon appears, the system-wide hotkey listener attaches, and the overlay is ready.
To stop it:
npx pageai stopHotkeys (work everywhere on your OS)
| Combo | Action |
|---|---|
| Left + Right | Capture full-screen screenshot |
| Up + Right | Ask Gemini about the current screen |
| Up + Down | Toggle the overlay |
| Up + Left | Toggle follow-cursor mode |
| Alt + A | Full scan of foreground app + ask Gemini |
| Alt (alone) | Hide the overlay |
These are the same combos as the legacy Chrome extension, just lifted to
OS level via a low-level keyboard hook (uiohook-napi).
Hidden from screen sharing
By default the overlay window has OS-level "content protection" turned on:
- macOS:
NSWindowSharingNone— invisible to ScreenCaptureKit /CGWindowListCreateImage/ Zoom / Meet / Teams / Loom / OBS / QuickTime. - Windows:
WDA_EXCLUDEFROMCAPTURE(Win10 2004+) — hidden from Windows Graphics Capture and Desktop Duplication APIs. - Linux/X11: not supported by the OS — the overlay will appear in screen share. (Wayland support is on the roadmap.)
To toggle:
pageai stealth on # default
pageai stealth offOr click the tray icon → Stealth (hide from screen share) checkbox.
A physical phone camera pointed at your screen will obviously still see it. No software can defend against that.
Commands
pageai start # launch the tray daemon (default command)
pageai stop # kill the daemon
pageai status # show daemon, stealth, and key state
pageai stealth on|off # toggle hide-from-screen-share
pageai rotate # pick the next bundled Gemini key
pageai key <YOUR_KEY> # use your own Gemini key (overrides the pool)
pageai clear-key # forget your override and fall back to the poolPermissions
- macOS: First run pops the OS Accessibility prompt (System Settings →
Privacy & Security → Accessibility). Enable PageAI, then
pageai stopandpageai startagain. The tray menu has a quick-link. - Windows: No prompt; works out of the box.
- Linux: Requires X11 (Wayland is unsupported by the underlying keyboard hook).
How the bundled key pool works
shared/keys.json ships inside the npm tarball with N pre-provisioned Gemini
API keys. On first run, your install picks a deterministic slot via
hash(machineId) % keys.length — same machine always gets the same slot
unless you run pageai rotate.
Same Google account / same project: all keys created under one account
usually share the same Gemini free-tier quota. Rotating keys does not
give you more requests. To avoid 429 / quota errors, enable billing in
Google AI Studio, use keys from different Cloud projects (each with its
own billing), or run pageai key <YOUR_KEY> on a paid-capable key.
Warning for maintainers: keys in
shared/keys.jsonare publicly downloadable as part of the tarball. Use throwaway / budget-capped keys only. For production users,pageai key <YOUR_KEY>is always the safer path.
After npx pageai start, you can close the terminal — the app stays in
the tray until pageai stop or Quit from the menu.
Project layout
pageai/
├── cli/ # `pageai` CLI entry (start/stop/status/rotate/stealth/key)
├── desktop/src/ # Electron daemon, hotkeys, capture, overlay window
├── shared/ # types, storage (Conf), gemini client, keyPool
├── extension/ # legacy Chrome extension (no longer the primary path)
├── docs/ # release notes
├── package.json
└── README.mdDevelopment
npm install
npm run build
node dist/cli/index.js start # foreground-friendly: append --foregroundBuild & publish
# 1. Populate shared/keys.json with real Gemini keys.
# 2. Build:
npm run build
# 3. Sanity check:
npm pack --dry-run
# 4. Publish:
npm publishCaveats
- The bundled key pool is a convenience, not a security boundary. Anyone can download the tarball and read the keys. Google may auto-revoke leaked keys.
- We do not run OCR; Gemini reads the screenshot directly. If the model can't see fine-grained text, drop in your own OCR (Tesseract) before posting.
- The overlay is click-through (
setIgnoreMouseEvents); selection works via copying the cached answer (pageai statuswill show what's stored).
