Native macOS · Bring your own key · Open source

Understand any text, right where you find it.

Select a word in any app. Press F. Get the meaning, the nuance, and the translation — without leaving what you're reading.

macOS 14+ · Apple Silicon & Intel · Free and open source (AGPL-3.0)
Opening it the first time

Builds are signed but not yet notarized, so macOS checks with you before the first launch. Right-click PhraseLens.app, choose Open, then Open again. Once only — macOS remembers after that.

No account No telemetry No Electron
example.com/the-committee-statement
Longform · 6 min read

The committee that said nothing, carefully

The statement was deliberately ambiguous. Its authors were candid about that in private: vague wording kept every option open, and made the group resilient to criticism it could not yet answer. Detractors called it obfuscation. Either way the bank approved the transfer on Friday, and the team shipped.

F
Select any word above — or press ⌥F
0
languages
0
AI providers
0
built-in actions
0
servers of ours
How it works

Three keystrokes from confusion to clarity.

No copying. No tab-switching. No losing your place.

obfuscation
1

Select

Any text, in any macOS app.

F
2

Press ⌥F

A panel opens right at your cursor.

3

Read

The answer streams in, word by word.

Step 2 also captures up to 1,600 characters around your selection — that's how it knows what you meant.
One selection, seven lenses

The same sentence, seven ways.

Switch with 19. Your selection stays put.

Source

Given the constraints we're operating under, it would probably be best if we circled back on this next week.

Try pressing 17 right now — the same keys work in the app.
Compare Synonyms

Stop guessing which word is right.

Pick a word. See the two or three it gets confused with — what each one uniquely emphasizes, when to reach for it, and how natives actually collocate it.

Not a thesaurus dump. A decision.

resilient /rɪˈzɪliənt/ adj.
有韧性的 · 中性偏褒 · 书面与口语皆可
核心不是「不受伤」,而是受挫之后能弹回来。重点落在恢复力,不在硬度。
Context-aware

It knows which “bank” you meant.

PhraseLens reads the text around your selection — so the ambiguity resolves itself, before you ask.

…she sat on the grassy bank and watched the river slide past the mill.

Result

…the bank declined the transfer twice before anyone thought to call.

Result

Same word. Same shortcut. Different answer.

Everything else it does

Built for how you actually read and write.

Snip it. Read it.

Screenshot OCR via Apple Vision S
we should probably maybe try to fix this thing

Rewrite in place.

Translate or polish inside any text field W

Hear it spoken.

Edge Neural or macOS voices
resilientobfuscation

Keep the word.

Vocabulary collection, searchable

Every lookup, kept.

Local history with search & favorites

Always one key away.

Menu bar, global hotkeys, launch at login
Providers

Your key. Your model. Your call.

Twelve providers, any OpenAI-compatible endpoint, or fully offline with Ollama. Switch whenever the bill or the mood changes.

Keys stay in the macOS Keychain, never in a config file
Streaming responses decoded per-provider, so it feels live everywhere
Point it at any /v1/chat/completions endpoint you run yourself
💻
☁️
✈️ Airplane-safe · nothing leaves this Mac
ProviderOpenAI
Modelgpt-4o-mini
TypeCloud · streaming
Privacy

There is no server. There's nothing to trust us with.

PhraseLens has no backend. Your text goes from your Mac to the provider you picked, and nowhere else.

💻
Your Mac
PhraseLens.app
direct HTTPS
🤖
The provider you chose
or localhost Ollama
Our servers
There aren't any. That's the whole architecture.
🔑

Keys live in the Keychain

Never UserDefaults, never a plaintext file, never a log line.

🚫

Plain HTTP is blocked

One exception, and only one: your own localhost Ollama.

🛡️

Selected text is untrusted

Whatever was on screen gets bounded, escaped, and fenced off — never treated as an instruction.

<untrusted-context>…</untrusted-context>
💾

History stays on your disk

Lookups, vocabulary and custom actions are local JSON. Delete the folder and it's gone.

Native

It's a Mac app. Actually.

Swift and SwiftUI, top to bottom. No bundled browser engine, no JavaScript runtime shipped alongside a dictionary, no background daemon idling in your menu bar for no reason.

SwiftUI views, AppKit windows, real macOS focus & accessibility
Apple's Vision framework for OCR — on-device, no upload
System light & dark, Increased Contrast, and Reduce Motion honored
PhraseLensSwift + SwiftUI
A typical Electron translatorapp + Chromium + Node

Illustrative, not benchmarked — it's the shape of the difference, not a measurement. What is exact: PhraseLens ships zero webviews and zero bundled runtimes.

Custom actions

Not the prompt you wanted? Rewrite it.

Duplicate any built-in action and edit its prompt, or write one from scratch. Hover a variable to see what it becomes.

Prompt template
What the model receives
Shortcuts

Six keys. That's the whole product.

Hover a row to see it on the keyboard. All of them remappable in Settings.

FLook up the selection
FOpen the full workspace
SScreenshot OCR
WTranslate & replace in place
1–9Jump to an action
[ ]Cycle through actions
1
2
3
4
5
6
7
8
9
Q
W
E
R
T
Y
U
I
[ ]
A
S
D
F
G
H
J
K
⇧ shift
Z
X
C
V
B
⌥ option
⌘ command
Open source

Read every line before you run it.

That's the point of shipping a privacy tool under AGPL-3.0. Clone it, build it, run the self-tests — they cover prompt isolation, the context bound, stream decoding and hotkey parsing.

AGPL-3.0 Swift 6.2 macOS 14+ No dependencies
$git clone https://github.com/mxggle/phrase-lens.git
$./scripts/run.sh
$./scripts/test.sh

Questions worth answering

Do I need an API key?
Yes — your own, from whichever provider you like. PhraseLens doesn't resell tokens, so you pay the provider directly and nothing to us. Or run Ollama locally and pay nobody.
Is it free?
The app is free and open source under AGPL-3.0. Your only cost is your provider's usage, which for word lookups is measured in fractions of a cent.
Does it work offline?
Completely, with Ollama. Screenshot OCR and macOS system voices are on-device regardless of provider.
Why does it want Accessibility permission?
That's the only macOS API that can read the text you've selected in another app, and write a replacement back into a focused field. It's what makes ⌥F and ⌥W possible. Skip it and the workspace, OCR, and manual input all still work.
Is my text sent to you?
There is no "us" in the network path. Requests go straight from your Mac to your provider. No analytics, no crash reporting, no backend to send anything to.
Which Macs are supported?
macOS 14 Sonoma or newer, Apple Silicon and Intel.
PhraseLens

Understand everything. Everywhere.

One shortcut, and the word you didn't know stops being in your way.

macOS 14+ · Free · Open source · No account