Select text in any app, and your own actions appear right at the cursor — translate, polish, search, speak, transform, or ask a model, and put the result straight back.
🇺🇸 English • 🇨🇳 中文
⭐ If QDuo saves you a few trips to the clipboard, please star the repo — it helps others find it.
✨ More apps I made → xueshi.dev
Select text anywhere—in a browser, a chat, an editor, or a PDF—and a small popup appears at your cursor with the actions you've set up. Tap one, and it happens right there: no copying, no switching apps, no pasting back.
- Two shapes — a capsule bar above the selection, or a ring centred on the cursor (classic or Liquid Glass). A group unfolds into a second ring on the ring, and opens a dropdown on the bar.
- Works in native apps, browsers and Electron apps; falls back to a clipboard read where an app hides its text, and puts your clipboard back afterwards.
- Screenshot text — press a hotkey, drag a box over anything on screen, and the recognised text comes up in the same popup.
- Every AI action is a prompt of your own: translate, polish, explain, summarize, fix grammar, change tone, break down a sentence, explain code…
- Answers stream in as formatted text.
- DeepSeek, OpenAI, Doubao, Qwen and Ollama built in, or any OpenAI-compatible endpoint via the base URL. Pick a model per action if you like. API keys live in the macOS Keychain.
| Kind | What it does |
|---|---|
| Open URL | Fill {text} into any address — Google, Baidu, Wikipedia, GitHub, the system dictionary (dict://), Maps, Obsidian, "ask ChatGPT / Claude"… |
| Speak | Read the selection aloud in a system voice that matches its language |
| Transform | 22 local text operations: change case, camelCase / snake_case, sort / dedupe lines, join PDF line breaks, Simplified ↔ Traditional Chinese, pinyin, spacing between CJK and Latin, format / minify JSON, URL encode / decode, strip link tracking, word count |
| Shortcut | Hand the selection to one of your Shortcuts |
| Shell script | Pipe it through a command; asks before a script runs for the first time |
Settings → Actions → Add from Template has all of these ready-made.
A result can replace the selection, go after it, or go to the clipboard — per action, or with the Replace button on the result panel. QDuo only writes where it can confirm the selection is still where you left it; anywhere else it copies the result and tells you why.
- Menu bar only — no Dock icon.
- One readable settings file —
~/.config/qduo/config.json, with a JSON Schema beside it, safe to keep in your dotfiles (keys stay in the Keychain). - 152 icons to choose from, and tags in the action list that flag what matters: AI, a missing key, a script, and where the result goes.
- English / 简体中文 interface.
- Auto-update via Sparkle.
- Privacy first — optional anonymous usage stats that never include selected text, paths or personal data. Text goes to a model only when you tap an AI action.
- Launch QDuo — it lives in your menu bar.
- Grant Accessibility when asked (see below).
- Select text anywhere; the popup appears at the cursor. Tap an action.
- For AI actions, add an API key in Settings → AI Models.
- Add, reorder and group actions in Settings → Actions, or start from a template.
brew install --cask XueshiQiao/tap/qduoPrefer the two-step form?
brew tap XueshiQiao/tap
brew trust XueshiQiao/tap # Homebrew 6.0+; earlier versions can skip this line
brew install --cask qduoSince Homebrew 6.0 a cask from a third-party tap will not load unless the tap is trusted — or the cask is named in full on the command line, which is exactly what the one-liner above does.
Or download QDuo.dmg from GitHub Releases
and drag QDuo into your Applications folder.
The app is signed with an Apple Developer ID certificate and notarized by Apple, so it installs without any security warnings.
- Accessibility (required) — to read the selected text and notice when you select
something:
System Settings → Privacy & Security → Accessibility. - Screen Recording (optional) — only for screenshot text:
System Settings → Privacy & Security → Screen & System Audio Recording.
QDuo is not sandboxed: reading another app's selection and watching the mouse globally are both impossible inside the App Sandbox.
See DEVELOPMENT.md.
GPL v3.0 — see LICENSE.
