Select. Shortcut. ShakespAIre it. Universal AI-powered proofreading for macOS, Windows, and Linux.
Rust
1
20 commits
updated Sep 30, 2026
Select. Shortcut. shakespAIre it.
Universal AI-powered proofreading for macOS, Windows, and Linux.
Select text in any application, press a global shortcut, and a small floating popup streams an AI-proofread version. Press Enter to replace the original text, ⌘/Ctrl+C to copy, or Esc to cancel. shakespAIre lives in your menu bar (system tray on Windows and Linux), so it is always one shortcut away and never in your way.
Demo · Why · Features · How it works · Download · Usage · Configuration · Updates · Platform notes · Troubleshooting · Privacy & security · Build from source · Project layout · Releasing · Contributing
| Any app, one shortcut | Email, browser, terminal, chat, docs — select, press, done. No plugin per app. |
| Your model, your data | Bring your own OpenAI-compatible key, or run a local model and keep every word on your machine. |
| No subscription, no account | Nothing to sign up for. No telemetry. Open source under MIT. |
| Small and native | Rust and Tauri, not Electron. It sits in the menu bar and stays out of the way. |
| Strict by design | Fixes grammar, spelling, and punctuation and leaves your voice alone. It never rewrites. |
Prebuilt installers for every release are on the Releases page.
| OS | Installer | Notes |
|---|---|---|
| macOS (Apple Silicon) | .dmg | Grant Accessibility permission (details) |
| Windows | .exe / .msi | Unsigned for now, so expect a SmartScreen warning (details) |
| Linux | .AppImage / .deb / .rpm | Needs a small helper for pasting (details) |
Every release also contains latest.json and .sig files. Those are what the built-in updater uses; you do not need to download them.
| Action | Default |
|---|---|
| Trigger a proofread | macOS ⇧⌘Space · Windows/Linux Shift+Ctrl+Space |
| Replace the original text | Enter (configurable) |
| Copy the result | ⌘/Ctrl+C |
| Cancel / close | Esc |
The trigger shortcut and the Replace key are both customizable. Esc and ⌘/Ctrl+C are reserved and cannot be used as the Replace key.
The popup shows a status (Connecting → Writing → Ready), the result exactly as it will be pasted, and three actions: Replace, Copy, and Close. If something goes wrong, it shows the message and a Try again button, and Replace stays disabled so a half-finished result can never overwrite your text.
Click the icon in the menu bar (or system tray) to open its menu:
| Item | What it does |
|---|---|
| shakespAIre v… | Shows the installed version (greyed out). |
| Check for Updates… | Checks for a newer release. The item changes as it works: Install Update vX.Y.Z… → Downloading… 42% → Restarting…. |
| Settings… | Opens the settings window. |
| Quit shakespAIre | Exits the app. Closing the settings window only hides it. |
Choose Settings… from the menu bar icon. On first launch the window opens once by itself.
| Setting | Default | Notes |
|---|---|---|
| Server | https://api.openai.com/v1 | Any OpenAI-compatible base URL. |
| API key | (empty) | Optional for local servers; stored in the OS keychain. |
| Model | gpt-5.6-luna | Any model name your endpoint accepts. |
| Connection → Test connection | Sends a tiny request using the values in the form, without saving them. Shows Connected or the reason it failed. | |
| Shortcut | ⇧⌘Space / Shift+Ctrl+Space | Global trigger. |
| Replace key | Enter | Used inside the popup. |
| Launch at login | off | Starts shakespAIre quietly in the menu bar when you log in. |
| Accessibility (macOS) | Shows whether the permission is granted, with a link to fix it. |
Click Save to store the server, key, and model. The keys and the login switch apply as soon as you change them. Preview popup (under the Save button) opens the popup on a sample sentence and streams a real proofread, so you can check your setup end to end. Replace is disabled in the preview.
Point shakespAIre at a local server to keep your text on your machine — no API key needed.
com.artamrj.shakesp-ai-re, account ai-api-key). Where no keychain exists (common on minimal Linux desktops), a file ai-api-key.txt in the app's config folder is used instead, readable only by your user.ai-settings.json) holds the base URL, model, shortcut, and Replace key — never the API key (enforced by a unit test).shakesp-ai-re/logs/shakesp-ai-re.log in your user data folder (~/Library/Application Support on macOS, ~/.local/share on Linux, %LOCALAPPDATA% on Windows).OPENAI_BASE_URL, OPENAI_API_KEY, and OPENAI_MODEL take precedence over the settings file.shakespAIre updates itself from the menu bar icon.
.deb or .rpm with your package manager.SendInput API and requires no helper program.xclip or xsel (X11) or wl-clipboard (Wayland). Install one of them.xdotool is only a limited XWayland fallback and cannot control every native Wayland application.| Symptom | What to check |
|---|---|
| "no text selection was captured" | Make sure text is actually highlighted. On macOS, grant Accessibility (Settings shows its status). On Linux, install xclip, xsel, or wl-clipboard. In terminals, use Copy mode where Ctrl+C means interrupt. |
| Result appears but Replace does nothing | macOS: re-check Accessibility. Linux: install xdotool (X11) or wtype (Wayland, not GNOME). Windows: run both apps at the same privilege level. |
| "Authentication failed" | Wrong or missing API key. Use Test connection, or create a new key at platform.openai.com/api-keys. A ChatGPT subscription does not include API access. |
| Popup appears at the mouse, not the selection | The app in front does not report where the selection is. This is expected in many Chromium/Electron apps and on Linux/Windows. |
| Shortcut does nothing | Another app may already own that shortcut. Pick a different one in Settings; the log will say could not register global shortcut. |
| "Couldn't check for updates" | No published release with update files was found, or you are offline. It is harmless. |
| Tray icon missing on Linux | Your desktop needs a system tray; on GNOME install an AppIndicator extension. |
The log file (see Where things are stored) records each capture and popup with timings and is the first place to look.
npm install # install frontend deps
npm run tauri dev # run a dev build
npm run dev:side-by-side # dev build with its own settings, next to an installed copy
npm run check # svelte-check (typecheck the frontend)
cargo fmt --manifest-path src-tauri/Cargo.toml --check # formatting
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings
cargo test --manifest-path src-tauri/Cargo.toml # Rust tests
npm run bundle:macos # .app + .dmg
npm run bundle:windows # NSIS .exe + .msi
npm run bundle:linux # AppImage + .deb + .rpm
Builds produce update files, so bundling needs the signing key in the environment (TAURI_SIGNING_PRIVATE_KEY_PATH). See docs/RELEASING.md.
Regenerate icons from the master source:
npm run icons # tauri icon assets/branding/shakesp-ai-re-icon-master.png
Both copies would share settings and fight over the same global shortcut. This script gives the dev copy its own identity (com.artamrj.shakesp-ai-re.dev, defined in src-tauri/tauri.dev.conf.json), so it has separate settings:
npm run dev:side-by-side
Then open the dev copy's Settings and choose a different shortcut from the installed app's, and leave Launch at login off. The API key is shared, because both use the same keychain entry. Or simply quit the installed app while you develop.
src/ Svelte 5 frontend (settings window and popup)
App.svelte Settings window
Popup.svelte Proofread popup
theme.css Shared design system
shortcut.ts Shortcut parsing and labels
fonts/ Bundled Inter (SIL OFL)
src-tauri/ Rust backend (Tauri 2)
src/lib.rs App setup, commands, tray menu, shortcuts
src/ai.rs Streaming chat client
src/clipboard.rs Selection capture and clipboard restore
src/input.rs Copy/paste simulation, selection bounds (per OS)
src/popup.rs Popup window, positioning, focus
src/glass.rs Native glass/vibrancy backdrop
src/updater.rs Menu bar self-update
docs/RELEASING.md Release, signing, and updater guide
.github/ CI, releases, Dependabot (see .github/CI.md)
Releases are automatic and driven by commit messages. Merge changes with Conventional Commit titles (feat:, fix:, …); a bot keeps a Release pull request up to date with the next version and changelog. Merging it builds and publishes the installers after one approval. Nobody edits a version number or pushes a tag by hand.
The whole pipeline is described in .github/CI.md. Signing, notarization, and the updater key are covered in docs/RELEASING.md.
Pull requests are welcome — see CONTRIBUTING.md for the full guide, and SECURITY.md to report a vulnerability privately. In short:
fix: …, feat: …, docs: …). CI checks it, and the title becomes the commit message that decides the next version.npm run check, cargo fmt --check, cargo clippy -- -D warnings, and cargo test. CI also compiles the app on macOS and Windows.tauri crate and the @tauri-apps/* npm packages must share a minor version.MIT © 2026 Arta
Rust
72.5%
Svelte
20.6%
CSS
3.6%
TypeScript
2.3%
Select. Shortcut. ShakespAIre it. Universal AI-powered proofreading for macOS, Windows, and Linux.
Rust
1
20 commits
updated Sep 30, 2026
Select. Shortcut. shakespAIre it.
Universal AI-powered proofreading for macOS, Windows, and Linux.
Select text in any application, press a global shortcut, and a small floating popup streams an AI-proofread version. Press Enter to replace the original text, ⌘/Ctrl+C to copy, or Esc to cancel. shakespAIre lives in your menu bar (system tray on Windows and Linux), so it is always one shortcut away and never in your way.
Demo · Why · Features · How it works · Download · Usage · Configuration · Updates · Platform notes · Troubleshooting · Privacy & security · Build from source · Project layout · Releasing · Contributing
| Any app, one shortcut | Email, browser, terminal, chat, docs — select, press, done. No plugin per app. |
| Your model, your data | Bring your own OpenAI-compatible key, or run a local model and keep every word on your machine. |
| No subscription, no account | Nothing to sign up for. No telemetry. Open source under MIT. |
| Small and native | Rust and Tauri, not Electron. It sits in the menu bar and stays out of the way. |
| Strict by design | Fixes grammar, spelling, and punctuation and leaves your voice alone. It never rewrites. |
Prebuilt installers for every release are on the Releases page.
| OS | Installer | Notes |
|---|---|---|
| macOS (Apple Silicon) | .dmg | Grant Accessibility permission (details) |
| Windows | .exe / .msi | Unsigned for now, so expect a SmartScreen warning (details) |
| Linux | .AppImage / .deb / .rpm | Needs a small helper for pasting (details) |
Every release also contains latest.json and .sig files. Those are what the built-in updater uses; you do not need to download them.
| Action | Default |
|---|---|
| Trigger a proofread | macOS ⇧⌘Space · Windows/Linux Shift+Ctrl+Space |
| Replace the original text | Enter (configurable) |
| Copy the result | ⌘/Ctrl+C |
| Cancel / close | Esc |
The trigger shortcut and the Replace key are both customizable. Esc and ⌘/Ctrl+C are reserved and cannot be used as the Replace key.
The popup shows a status (Connecting → Writing → Ready), the result exactly as it will be pasted, and three actions: Replace, Copy, and Close. If something goes wrong, it shows the message and a Try again button, and Replace stays disabled so a half-finished result can never overwrite your text.
Click the icon in the menu bar (or system tray) to open its menu:
| Item | What it does |
|---|---|
| shakespAIre v… | Shows the installed version (greyed out). |
| Check for Updates… | Checks for a newer release. The item changes as it works: Install Update vX.Y.Z… → Downloading… 42% → Restarting…. |
| Settings… | Opens the settings window. |
| Quit shakespAIre | Exits the app. Closing the settings window only hides it. |
Choose Settings… from the menu bar icon. On first launch the window opens once by itself.
| Setting | Default | Notes |
|---|---|---|
| Server | https://api.openai.com/v1 | Any OpenAI-compatible base URL. |
| API key | (empty) | Optional for local servers; stored in the OS keychain. |
| Model | gpt-5.6-luna | Any model name your endpoint accepts. |
| Connection → Test connection | Sends a tiny request using the values in the form, without saving them. Shows Connected or the reason it failed. | |
| Shortcut | ⇧⌘Space / Shift+Ctrl+Space | Global trigger. |
| Replace key | Enter | Used inside the popup. |
| Launch at login | off | Starts shakespAIre quietly in the menu bar when you log in. |
| Accessibility (macOS) | Shows whether the permission is granted, with a link to fix it. |
Click Save to store the server, key, and model. The keys and the login switch apply as soon as you change them. Preview popup (under the Save button) opens the popup on a sample sentence and streams a real proofread, so you can check your setup end to end. Replace is disabled in the preview.
Point shakespAIre at a local server to keep your text on your machine — no API key needed.
com.artamrj.shakesp-ai-re, account ai-api-key). Where no keychain exists (common on minimal Linux desktops), a file ai-api-key.txt in the app's config folder is used instead, readable only by your user.ai-settings.json) holds the base URL, model, shortcut, and Replace key — never the API key (enforced by a unit test).shakesp-ai-re/logs/shakesp-ai-re.log in your user data folder (~/Library/Application Support on macOS, ~/.local/share on Linux, %LOCALAPPDATA% on Windows).OPENAI_BASE_URL, OPENAI_API_KEY, and OPENAI_MODEL take precedence over the settings file.shakespAIre updates itself from the menu bar icon.
.deb or .rpm with your package manager.SendInput API and requires no helper program.xclip or xsel (X11) or wl-clipboard (Wayland). Install one of them.xdotool is only a limited XWayland fallback and cannot control every native Wayland application.| Symptom | What to check |
|---|---|
| "no text selection was captured" | Make sure text is actually highlighted. On macOS, grant Accessibility (Settings shows its status). On Linux, install xclip, xsel, or wl-clipboard. In terminals, use Copy mode where Ctrl+C means interrupt. |
| Result appears but Replace does nothing | macOS: re-check Accessibility. Linux: install xdotool (X11) or wtype (Wayland, not GNOME). Windows: run both apps at the same privilege level. |
| "Authentication failed" | Wrong or missing API key. Use Test connection, or create a new key at platform.openai.com/api-keys. A ChatGPT subscription does not include API access. |
| Popup appears at the mouse, not the selection | The app in front does not report where the selection is. This is expected in many Chromium/Electron apps and on Linux/Windows. |
| Shortcut does nothing | Another app may already own that shortcut. Pick a different one in Settings; the log will say could not register global shortcut. |
| "Couldn't check for updates" | No published release with update files was found, or you are offline. It is harmless. |
| Tray icon missing on Linux | Your desktop needs a system tray; on GNOME install an AppIndicator extension. |
The log file (see Where things are stored) records each capture and popup with timings and is the first place to look.
npm install # install frontend deps
npm run tauri dev # run a dev build
npm run dev:side-by-side # dev build with its own settings, next to an installed copy
npm run check # svelte-check (typecheck the frontend)
cargo fmt --manifest-path src-tauri/Cargo.toml --check # formatting
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings
cargo test --manifest-path src-tauri/Cargo.toml # Rust tests
npm run bundle:macos # .app + .dmg
npm run bundle:windows # NSIS .exe + .msi
npm run bundle:linux # AppImage + .deb + .rpm
Builds produce update files, so bundling needs the signing key in the environment (TAURI_SIGNING_PRIVATE_KEY_PATH). See docs/RELEASING.md.
Regenerate icons from the master source:
npm run icons # tauri icon assets/branding/shakesp-ai-re-icon-master.png
Both copies would share settings and fight over the same global shortcut. This script gives the dev copy its own identity (com.artamrj.shakesp-ai-re.dev, defined in src-tauri/tauri.dev.conf.json), so it has separate settings:
npm run dev:side-by-side
Then open the dev copy's Settings and choose a different shortcut from the installed app's, and leave Launch at login off. The API key is shared, because both use the same keychain entry. Or simply quit the installed app while you develop.
src/ Svelte 5 frontend (settings window and popup)
App.svelte Settings window
Popup.svelte Proofread popup
theme.css Shared design system
shortcut.ts Shortcut parsing and labels
fonts/ Bundled Inter (SIL OFL)
src-tauri/ Rust backend (Tauri 2)
src/lib.rs App setup, commands, tray menu, shortcuts
src/ai.rs Streaming chat client
src/clipboard.rs Selection capture and clipboard restore
src/input.rs Copy/paste simulation, selection bounds (per OS)
src/popup.rs Popup window, positioning, focus
src/glass.rs Native glass/vibrancy backdrop
src/updater.rs Menu bar self-update
docs/RELEASING.md Release, signing, and updater guide
.github/ CI, releases, Dependabot (see .github/CI.md)
Releases are automatic and driven by commit messages. Merge changes with Conventional Commit titles (feat:, fix:, …); a bot keeps a Release pull request up to date with the next version and changelog. Merging it builds and publishes the installers after one approval. Nobody edits a version number or pushes a tag by hand.
The whole pipeline is described in .github/CI.md. Signing, notarization, and the updater key are covered in docs/RELEASING.md.
Pull requests are welcome — see CONTRIBUTING.md for the full guide, and SECURITY.md to report a vulnerability privately. In short:
fix: …, feat: …, docs: …). CI checks it, and the title becomes the commit message that decides the next version.npm run check, cargo fmt --check, cargo clippy -- -D warnings, and cargo test. CI also compiles the app on macOS and Windows.tauri crate and the @tauri-apps/* npm packages must share a minor version.MIT © 2026 Arta
Rust
72.5%
Svelte
20.6%
CSS
3.6%
TypeScript
2.3%