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) · Latest 0.9.0
In-app updates with optional automatic download and installation. Existing users: install this version once to enable updates.
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 ⌘1…⌘9. 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 ⌘1 – ⌘7 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.

Follow-up questions New

One answer is rarely the end of it.

Keep asking, right under the result. The thread stays with the answer it's about — no new window, no re-explaining what you meant — and the model still sees the whole exchange.

Selection

candid

/ˈkændɪd/ EN → 简体中文

坦率的、直言不讳的 adj.

说话不遮掩、不加修饰,尤指在本可以回避时仍如实说出来。

He was candid about what went wrong.
他坦率地说明了哪里出了问题。

Ask about this result… ⌘L
Suggestions change with what you're reading — a word, a sentence, or code. Or type your own.

Saved with the result. Reopen it from History and the whole thread comes back.

Vocabulary New

Fifty words in, a word list stops being a list.

A headword, a fixed expression and a whole sentence you kept for its shape all tile together, and the only way back to one of them is remembering how it was spelled. So every word you save is filed as it lands — what kind of thing it is, what it's about, which register it belongs to, how hard it is.

🔍 Search vocabulary 26 words ☰ Group: Topic
✦ 3 words haven't been sorted into categories yet. Organize
Rhetoric 8
obfuscation
刻意把话说得含混,让人抓不住要点。
NounC1Rhetoric
ambiguous
可以有多种解读,而且往往是故意留出的余地。
AdjectiveB2Rhetoric
Workplace 6
shipped
交付上线;在工作语境里指东西真的发出去了。
VerbB1Workplace
resilient
受得住冲击,压力过去之后还能恢复原状。
AdjectiveB2Workplace

Filed as it lands

Save a word and it's already sorted. Whatever you collected before this existed gets picked up by one Organize pass.

Narrow it down

Rows inside a dimension widen the result; rows across dimensions narrow it. Arming Word above leaves its siblings standing with their real totals, so no click lands somewhere empty.

Or read straight through

Group the collection by any of the same dimensions — or by the month you collected it — and browse it in sections instead.

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

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 encrypted on your own disk, never in a plaintext 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 are encrypted on your disk

Sealed to your Mac's hardware identity. 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

Seven keys. That's the whole product.

Hover a row to see it on the keyboard. The four global ones are 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
⌘LAsk a follow-up about the result
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
L
⇧ 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.
What does a follow-up send back to the model?›
The question, plus the exchange it's about: your original request, the answer you got, and up to eight earlier turns of the thread, trimmed. Nothing else is attached — and the thread itself is stored on your Mac, alongside the result in History.
What language does the answer come back in?›
The one you picked, always — including when the text you selected is entirely in another language and the answer is mostly quoting it. Words, examples and quotes stay in the source language; everything written about them is in yours, and every source-language example is followed by its translation.
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