Releases: gonemedia/aipointer
Release list
AIPointer - v1.1.8 Multi-monitor
Works properly across multiple displays now, and speech-to-text runs fully on your machine.
Highlights
- Multi-monitor support. Trigger AIPointer on any screen - the box, the screenshot, the drag-to-capture region, and typing all happen on whichever display your cursor is on. (Previously, with two or more monitors, the prompt could close itself after a couple of keystrokes.)
- On-device speech-to-text. Your voice is transcribed locally - multilingual, including German - no API key, no cloud round-trip. Install it on demand in Settings; skip it and voice input keeps using your cloud provider. It joins the on-device read-aloud voices already in AIPointer, so the whole voice loop can run offline.
Download
Pick your platform below. Existing installs update themselves on next launch.
Full changelog: https://github.com/gonemedia/aipointer/blob/main/CHANGELOG.md
AIPointer - v1.1.7 - Local TTS
Fixed
- Local TTS now loads cleanly on every Mac. v1.1.6 could fail at
first Read aloud with a "could not load sharp module" message on
some signed builds because two slightly-different copies of the
same internal library ended up bundled side by side. v1.1.7 ships
a single consistent runtime so the load just works the first time. - Voice picker keeps your selection. Choosing a different Kokoro
voice and clicking Save now actually persists across sessions. In
v1.1.6 the change was silently dropped and reverted to the default
on the next open of Settings.
Added
- ▶ Preview button next to the Kokoro voice dropdown. Settings →
Voice → Local now has a play button right next to the voice picker.
Click it to hear a short test sentence in the currently-picked
voice before you commit. Lets you audition all 28 voices
side-by-side without opening a real query. Click again while
playing to stop. Previewed voices are cached, so re-clicking the
same one is instant.
AIPointer v1.1.6 - Hotifx
Hotfix for AIPointer v1.1.5
v1.1.6 is a reliability hotfix on top of v1.1.5. No new features beyond
the Kokoro voice picker - the rest of this release is making the v1.1.5
voice engine + Finder auto-attach actually work on a signed, notarized
macOS build. v1.1.5 shipped with the Local TTS runtime missing from the
installer and a couple of regression-class bugs in the TTS / auto-attach
paths; v1.1.6 ships the fixes.
Fixed
- Local TTS actually loads on signed builds.
- Finder / Explorer auto-attach silent failure.
- System TTS feels instant again.
- Build YAML drift.
AIPointer v1.1.5 - Pick your Model
AIPointer 1.1.5
Read aloud now works for everyone, right away
You can now choose how AIPointer speaks under Settings, Voice:
- System (default): uses your computer's built-in voice. Nothing to set up, nothing to download, works the moment you install.
- Local: a free voice that runs entirely on your own machine. Nothing you say or hear leaves your computer. One-time download (Kokoro + Whispr) of about 231 MB, then fully offline.
- Cloud: uses your provider key for the highest-quality voices.
Attach files straight from Finder or Explorer
Select up to 5 files in Finder (Mac) or Explorer (Windows), press the AIPointer hotkey, and they are attached to your next question automatically. No dragging, no paperclip needed.
Upload more files at once
Up to 5 files per question now.
Pick your model, live
Every provider now has a refresh button that pulls its current model list, so you can choose exactly which model to use without waiting for an app update.
Set backup/fallback providers
Choose a main provider and up to 3 backups. If one is down or busy, AIPointer automatically falls back to the next one.
Clearer in light mode
Better contrast and readability across the interface in light theme, and clearer text when selecting a region of your screen.
Plus a round of fixes to voice playback, the file-attach flow, and general interface polish.
AIPointer v1.1.2
AIPointer v1.1.2
New
Cursor accent picker. Settings, Appearance, Cursor accent. Three brand presets: Lime (default), Blue (macOS system blue), Magenta. The comet trail, halo, status dot, focus rings, and every accent-tinted surface retint live without restart. No free-form picker, palette stays curated.
Chat-only mode. Settings, Behaviour. Toggle on to open AIPointer as a pure chat window with no auto-attached screenshot. A small camera button appears inside the prompt input whenever no screenshot is attached, click it to attach one per query. Good for follow-up questions and quick lookups where you already know what you want to ask. Default off, v1.1.1 behavior preserved.
Pause and resume for text-to-speech. The Read button under each response is now a real play, pause, resume toggle. First click plays, second click pauses at the current position, third click resumes from there. Stop-words ("stop", "halt", "sei ruhig"), ESC, and a new query still fully end playback. Works for both Web Speech API and provider-TTS (OpenAI, Gemini). Closes #3.
Activation section in Settings. Keyboard hotkey dropdown and a Mouse-wiggle on/off toggle, both live-applied. The wiggle has existed since v1.1.0 but had no UI control. Default stays on, no sensitivity slider. Closes #4.
Changed
Floating chip toolbar. Screenshot and Clipboard chips now render as a horizontal toolbar above the BottomPill, collapsed as small icon bubbles by default. Hover to expand to icon, label, and dismiss button. High-opacity tint with white text so they stay readable against any backdrop (light AIPointer over a dark website, dark AIPointer over a bright editor). Replaces the banner-style strip inside the prompt input.
System prompt now knows its own version. A {{VERSION}} placeholder gets substituted with the running version at request time, so the LLM always answers correctly when asked which version it is on.
All repository links point to github.com/gonemedia/aipointer across the About window, settings footer, tray menu, FAQ, save-template footer, system prompt, and package.json.
Fixed
Manual theme choice persists across macOS appearance changes. Picking Light or Dark would silently flip back to system theme whenever macOS toggled appearance. The theme preference now owns the dark class entirely.
Chip text contrast. The old translucent fill bled the desktop through and made chip text unreadable when AIPointer floated over high-contrast backgrounds. Fixed alongside the new floating toolbar.
License
AIPointer moves from MIT to the Business Source License 1.1, the same license as Skales (the author's main project). Source stays public on GitHub. Personal, educational, and internal business use remain free. Commercial redistribution, SaaS hosting, white-labeling, bundling, and resale require a written commercial license. Reverts automatically to Apache 2.0 on 2030-05-19. Older releases (v1.1.1 and earlier) keep their MIT terms.
See NOTICE.md for the public reasoning and COMMERCIAL-LICENSE.md for licensing inquiries.
Auto-update prompts existing v1.1.1 users on next launch. Manual downloads below.
Full changelog: CHANGELOG.md
AIPointer v1.1.1
AIPointer v1.1.1 — Stabilization Release
The first wide rollout of v1.1.0 hit ~300 users this weekend. This release rolls up four rounds of post-launch fixes plus a fresh visual polish pass.
Highlights
New visual identity. macOS-Control-Center-style tile surface for the BottomPill and PromptInput. Warm-grey light surface (#f5f5f5) and Claude-sidebar dark surface (#262626). Five-layer shadow for perceived depth, fractalNoise micro-grain via inline SVG (works in production where backdrop-blur drops to 1px on packaged macOS builds).
Theme picker. Settings → Appearance: System (follows your OS), Light, or Dark. Pick AIPointer's appearance independently — run macOS in light and AIPointer in dark, or vice versa.
macOS-blue Screenshot chip (#2997ff) above the input. Click × to dismiss for the current query. Paperclip chip toggles clipboard inclusion (off by default).
/lastsession command. Restores the most recent saved session — useful when you closed the box by accident. Also surfaced as a banner when you re-open AIPointer within 60 seconds of an accidental dismiss.
Save button redesigned with a Replace flow when a session with the same name exists. Document chooser styled with a glass surface that matches the new pill tile.
Critical fixes
- Child Mode game/app launch no longer routes to vision LLM. "Open game", "spiele Online-Spiel", "starte X" trigger the intent router before the LLM is called. Direct routing to
launch_app(whitelisted apps) or to safe game URLs. - Voice loop spoken-stop interrupt. "Stop", "halt", "sei ruhig", "pause", "be quiet" in EN/DE/FR/ES/IT/PT/NL now break the audio loop cleanly. Loop disarms, mic closes, user has full control.
- Windows API key persistence. DPAPI safeStorage flow no longer drops keys on app restart. Per-key encryption flag tracked, fallback path preserved, provider warnings now actually surface in the UI.
- Action commands no longer drag a screenshot through the LLM. Open/launch/play/search/volume intents go to tools directly without a vision call. Saves tokens and stops the LLM from talking about the wallpaper when you asked it to launch a game.
Visible polish
- Stop word interrupt while TTS is still speaking, not just after.
- Provider health banner sits below the macOS menu bar and clicks through to Settings.
- Toast notifications visually centered (positioning wrapper split from animated motion.div).
- Onboarding wizard layout fixes: child voice toggle is independent, footer no longer overlaps the action area.
- Light-mode chip readability fix — answer chips no longer auto-dismiss while the answer is being read aloud.
- /lastsession command + 60s recovery banner if the box was dismissed by accident.
Behind the scenes
- Independent decrypt-failure tracking per provider (was global before, hid which key broke).
- Decrypt log spam reduced from one warning per provider per IPC call to one per process lifetime per failure mode.
- Audio mode armNextRef is now reset on manual mic press, voice loop stop word, and on every settings open — prevents the auto-restart-after-stop regression.
- Onboarding consent version unchanged at
v1.1.0-2026-05-16(no consent reset for existing users on a bug-fix release).
Auto-update: existing v1.1.0 users will get prompted automatically. Manual download below.
Full changelog: CHANGELOG.md
AIPointer v1.1.0
[1.1.0] — 2026-05-16
Major feature release. Audience feedback on v1.0.0 landed at 7/10; v1.1.0
targets 10/10 by hardening the first-run experience, adding a true Child Mode
behavior layer, and polishing the visual + interaction layer. The Pillbox UI
itself is byte-identical to v1.0.0 — Child Mode is a pure behavior layer
(system prompt, tool gating, sanitizer, URL whitelist).
Added
- Onboarding wizard. Separate framed window on first launch — 5 steps:
Welcome + privacy, Mode pick (Adult / Child), PIN setup,
Autostart + updates, Provider + API key. Cancel quits cleanly; complete
boots the rest of the app. Keychain prompt fires exactly once, at the
moment the user explicitly clicks Complete. - Child Mode. Locale-driven safe-browsing layer that produces kid-friendly
responses (EN/DE), restricts tools to fetch_url / open_url / launch_app,
validates every outbound URL against a per-language allowlist, swaps the
system prompt, and stamps a stricter HTML sanitizer schema. PIN-gated
Settings, /quit, and mode-switch back to Adult. Voice-first ON by default
with a slower TTS rate (0.9). - launch_app tool. Open whitelisted desktop apps (paint, calculator,
notes, word, excel, mail, browser) with an approval pill. Cross-platform
(open -a,start,execFile). Parent-configurable allow-list in Child
Mode viachildModeAllowedApps. - Voice command router. Pre-LLM phrase router. Says "open settings" /
"einstellungen öffnen" / "ayuda" / "aiuto" — fires the matching slash
command in EN, DE, FR, ES, IT, PT, NL without an LLM round-trip.
Exact / prefix / Levenshtein-≤-2 matching. - Cross-platform autostart. Toggleable "Start AIPointer at login" with a
"Start in the tray (no window)" sub-toggle.app.setLoginItemSettingson
macOS / Windows, ~/.config/autostart/aipointer.desktop on Linux. - Mouse-wiggle activation. Wiggle the mouse left-right-left within 700ms
to summon AIPointer. Disable in Settings → Behaviour (on by default). - Left-side hotkey listening. New hotkey choices:
MetaLeft,CtrlLeft,
AltLeft,ShiftLeft, plusMetaEither/CtrlEitherthat listen on
both sides simultaneously. - Dynamic pill. Bottom pill drifts gently toward the cursor with spring
inertia, never snapping. Pure visual; the pill's hit-test position
remains centered. - Live mode switching. Adult ↔ Child without restart. System prompt,
tool registry, sanitize schema, voice defaults all rebuild on the fly. - PIN module. PBKDF2-SHA256 (200k iterations, 16-byte salt, timing-safe
compare). Plain electron-store storage on purpose — no safeStorage so
PIN setup during onboarding doesn't trigger a keychain prompt. - Per-language whitelist module. EN + DE kid-safe domain lists with
optional path-prefix gating (bbc.co.uk → /cbeebies + /bitesize only). - Intent router. Pre-LLM keyword/regex matcher for Child Mode — "I want
to play" → games URL, "show me pictures of …" → image search, etc.
Short-circuits to a direct action without an LLM round-trip. - XSS test suite. 15 attack vectors against the child sanitize schema +
12 host edge-cases against the URL validator + 6 PIN unit tests +
10 voice-command tests.npm testruns them all (vitest + jsdom). - AUTHORSHIP.md (
docs/AUTHORSHIP.md). Canonical provenance / DNA
record. Referenced by README, CHANGELOG, and the hidden/origin
slash command. Closes a long-standing dangling reference. - Diagnostics. Hidden
/diagnosticsslash command (Adult mode) prints
version, provider configuration, permissions state, hotkey, default
crop, and the last 5 in-memory errors. Useful for support emails.
Changed
- Default screenshot crop 1024×768 → 512×384. ~75% drop in vision token
cost with negligible legibility loss for cursor-centered content. Crop
size now reads from settings (screenshotCropW/screenshotCropH).
Region selection (drag-rectangle) is unchanged. - Glassmorphism restored. Main prompt box, settings, and bottom pill
now usebackdrop-blur-xl backdrop-saturate-150with reduced bg alpha
and an inner-ring highlight. NewreducedTransparencysetting and a
CSS-var-based escape hatch for older Intel Macs. - Voice-first default in Child Mode. Runtime override on
audioMode
forces it ON when in Child Mode, leaving the stored adult preference
intact for the switch back. - Provider key storage is now lazy. SettingsGet IPC no longer
decrypts API keys; the renderer never sees plaintext keys at load.
Decryption happens only at query time (router) or on an explicit
Show keyIPC call. First-run keychain prompt is fully deferred to
the wizard's Complete step.
Fixed
- TTS continues after mic press.
useTTSnow tracks aspeakId
version token; whenstop()is called mid-fetch, the post-await
branch checks the token and refuses to start a new audio element.
Previously a pendingsynthesizeSpeechIPC could resolve and quietly
restart playback after the user pressed the mic, producing parallel
voice + recording. - Audio-mode loop: mic press during speaking phase. The loop's
armNextRefis now reset when the user manually presses the mic, so
it doesn't auto-restart speaking after the user takes control. - Keychain prompt on first run before any disclaimer. SettingsGet IPC
uses a new lightweight variant (getSettingsLight) that never touches
safeStorage. The first encryptString call happens at the moment the
user submits their key in the onboarding wizard — with user-active
context — not at startup. - macOS traffic-lights flicker. Already shipped in v1.0.0 (overlay.ts
setWindowButtonVisibility + ready-to-show), verified intact.
Security
- Child Mode URL validation is defense-in-depth. The intent router,
the LLM tool declaration set, and theopen_urlexecute-time
validator each independently enforce the whitelist. A jailbroken LLM
cannot open an off-whitelist URL becauseopen_url.executerejects it
with a verbose error that the LLM re-verbalises as a kid-friendly
redirect. - Stricter sanitize schema for Child Mode drops
<a>,<details>,
<summary>,<kbd>,<mark>,<sub>,<sup>entirely and
restricts class values to akid-*allow-prefix. - PIN hashing uses PBKDF2-SHA256 (200k iterations, 16-byte salt,
timing-safe compare). Stored plain in electron-store config.json by
design (no safeStorage trigger). Brute-force is offline-resistant up
to consumer-grade. - Provider keys never leave main process plaintext. The IPC
surface returns empty strings forapiKey; the renderer must
explicitly callrevealProviderKeyto see one, which fires the
keychain prompt with full user context. - Tools blocked in Child Mode:
read_clipboard,copy_to_clipboard,
reveal_in_finder,save_document— both removed from the
LLM-visible declarations AND refused at execute time as a safety net.
Provenance
- DNA / authorship file is now real: see docs/AUTHORSHIP.md.
- v1.1.0 provenance:
aipointer/v1.1.0/ms/talentsache/skales/20260516.
AIPointer v1.0.0
AIPointer v1.0.0
The AI cursor companion. Hold a key, ask a question, get an answer about whatever your cursor is pointing at.
Highlights
- Cursor-anchored AI. Hold Right-Cmd on macOS or Right-Ctrl on Windows / Linux, a glassmorphism box opens beside your cursor with a screenshot of the surrounding region as context. Vision-capable LLM answers about what you're looking at.
- Multi-provider. OpenRouter (recommended, single key, automatic routing), or direct Anthropic, OpenAI, Google Gemini keys. Per-provider Test button with live credit balance for OpenRouter.
- Voice in and voice out. Microphone input with auto-stop on silence. Text-to-speech read-aloud. Optional voice-first conversation mode for hands-free follow-up loops.
- Region screenshots. Hold the trigger key again while the box is open and drag a rectangle to ask about an exact region.
- Six built-in tools. Fetch URL, open URL, copy, save document, reveal in Finder, read clipboard. All action tools gated behind a green-check / red-x approval.
- Ten templates.
/summary,/brief,/translate,/explain,/code,/improve,/define,/solve,/reply,/identify. Plain prose works too, intent auto-detected across languages. - Save the answer. A4-styled HTML, PDF, or Markdown. Print-ready.
- Auto-updater. Quiet daily check, prompt on restart when an update is ready. Disable in Settings.
- Local-first. No telemetry, no analytics, no crash reporting. API keys stored in your OS keychain via Electron safeStorage.
First run
- Download for your OS at aipointer.app.
- On macOS, grant Accessibility (for the global key listener) and Screen Recording (for the cursor-region screenshot) when prompted.
- Settings panel opens automatically. Paste an API key. Get one at openrouter.ai/keys, console.anthropic.com, platform.openai.com, or aistudio.google.com/apikey.
- Hold Right-Cmd (macOS) or Right-Ctrl (Windows / Linux) anywhere, ask a question, press Enter.
Privacy
Screenshots and clipboard text go only to the LLM provider you configured. Nothing else leaves your machine. API keys live in your OS keychain (macOS Keychain, Windows DPAPI, Linux libsecret) via Electron safeStorage. The auto-updater fetches a static JSON file from aipointer.app/updates/latest.json, no identifier included.
Tech
Electron 30, React 18, TypeScript 5, Tailwind 3, Framer Motion, Vite 5, uiohook-napi for the global hook, sharp for image processing, native fetch for every LLM provider.
What it isn't
Not a long-running autonomous agent. For multi-step automation, computer-use, persistent goals, and complex workflows, use Skales, same author, same design philosophy, much bigger scope.
License
MIT. See LICENSE.
Built by Mario Simic in Vienna.