Select text in any Windows app. Pick a tone. It’s rewritten in place.
Website & live demo · Download
A single-line AI toolbar for the apps you actually write in: WeChat, WhatsApp, Telegram, Outlook, Gmail, Slack, Word, any browser. Bring your own API key for any OpenAI-compatible provider.

WritingTools opens a large window full of buttons. Quillbar keeps it to one thin bar next to your cursor, and puts the result back in the exact window you came from, so it works for quick chat replies and emails without breaking your flow.
Rewrite in place
Three ways to trigger
Ctrl+Alt+Space shows the bar for the selected textCtrl+Alt+F = Formal) replaces instantly, no barCtrl or ShiftPreview before you commit

Enter replace · Tab retry · C copy · D toggle diff · Esc closeShift when clicking a button (or Shift+1…9) to preview just onceSmart Reply

Select a message you received, press Reply, and paste the draft into the reply box.
Knows where you are
{app} {date} {time} {lang1} {lang2}Private by default
Any provider
| Provider | Base URL |
|---|---|
| OpenAI | https://api.openai.com/v1 |
| DeepSeek | https://api.deepseek.com/v1 |
| Qwen (DashScope) | https://dashscope.aliyuncs.com/compatible-mode/v1 |
| Kimi (Moonshot) | https://api.moonshot.cn/v1 |
| Google Gemini | https://generativelanguage.googleapis.com/v1beta/openai |
| Anthropic Claude | https://api.anthropic.com/v1 |
| DMXAPI | https://www.dmxapi.com/v1 |
| OpenRouter | https://openrouter.ai/api/v1 |
| Groq | https://api.groq.com/openai/v1 |
| Ollama (local) | http://localhost:11434/v1 |
| LM Studio (local) | http://localhost:1234/v1 |
All are presets in Settings. Press Fetch models to pick a model your key can use. Different buttons can use different models.
quillbar.py and Start-Quillbar.bat into the same folder.Download Quillbar.exe from Releases and run it.
It isn’t code-signed, so Windows SmartScreen may warn on first launch: More info → Run anyway.
pip install -r requirements.txt
pythonw quillbar.py
On first launch Settings opens on AI Providers: pick a preset, paste your key, press Test. Quillbar lives in the system tray. Start with Windows is on by default (tray menu to change).
| Key | Action |
|---|---|
Ctrl+Alt+Space |
Show the bar |
1–9 |
Run a bar button (while the bar is open) |
Shift+1–9 |
Preview that button first |
Ctrl+Alt+R / P / F / K / S / G |
Rewrite / Paraphrase / Formal / Friendly / Shorter / Fix |
Ctrl+Alt+T / Y / E |
Translate / Reply / To English |
Esc |
Close or cancel |
Everything is configurable in Settings → Buttons. Ctrl+Z in your app undoes a replacement.

| Page | What’s there |
|---|---|
| General | Bar shortcut, theme (auto / dark / light), buttons on bar, start with Windows, system prompt |
| Mouse & smart | Mouse mode, text-cursor-only, excluded apps, double-tap, smart select, masking, history |
| Personalize | About me & style, translate language pair, per-app rules |
| AI Providers | Add providers, keys, models, test connection |
| Buttons | Label, shortcut, instruction, type, result (replace / preview / copy), model, import / export |
Config lives in %APPDATA%\Quillbar\config.json.
RegisterHotKey: no keyboard hook, no admin rights, near 0% CPU.Ctrl+C, and only trusts the clipboard if it actually changed.WS_EX_NOACTIVATE window, so clicking it never steals focus or drops your selection.Ctrl+Space as the main shortcut: it switches Chinese/Japanese input methods.pip install -r requirements.txt pyinstaller
pyinstaller --onefile --windowed --name Quillbar quillbar.py
Output: dist\Quillbar.exe. Pushing a tag like v1.1 builds it automatically and attaches it to a GitHub Release.
pip install -r requirements.txt pytest
set QT_QPA_PLATFORM=offscreen
pytest tests
The whole app is one file, quillbar.py, split into clearly marked sections (win32, hotkeys, config, llm, prompts, toolbar, preview, settings, app). Issues and pull requests are welcome.
Inspired by WritingTools by Jesai (theJayTea) and contributors. Quillbar is an independent implementation and shares no code with it.
MIT © 2026 Syed