v0.7.0 — Contextual rewrite: same-language tone shift on a hotkey
New feature: Contextual rewrite. Bind a hotkey to a tone and the app rewrites the current input line in that tone — same language, intent preserved. Built for the moment you typed something blunt or angry and need to soften it before sending. Always shows a preview before sending — never auto-paste.
How to use
- Settings → Contextual rewrite → Add binding
- Pick a tone — Polite, Professional, De-escalate, Friendly, Firm-but-polite, Concise, or Custom (your own free-text instruction)
- Click Change… to record a hotkey (e.g. ⌥R)
- Type a message that needs softening, press the hotkey
- Review the rewritten version in the preview HUD, edit if needed, hit Send
Example:
| You typed | Tone | App rewrites |
|---|---|---|
| Chị ngu quá chị không hiểu gì hết | Polite | Chị ơi, chỗ này hơi khó hiểu một chút, để em giải thích lại rõ hơn cho mình nhé. |
| Trả tiền đi không tôi không giao hàng nữa đâu | Firm but polite | Anh/chị vui lòng hoàn tất thanh toán giúp em ạ, để bên em sắp xếp giao hàng đúng hẹn nhé. |
| Lỗi của shipper chứ đâu phải lỗi của tôi mà bắt đền | De-escalate | Em rất xin lỗi về sự cố vừa rồi ạ. Trường hợp này phát sinh từ khâu vận chuyển, em sẽ hỗ trợ kiểm tra và xử lý sớm cho mình. |
Vietnamese-aware
The prompt preserves your existing anh/chị/em pronoun pairing exactly and adds politeness particles (ạ / dạ / nhé) as the tone requires.
Provider requirements
Rewrite needs an LLM provider — Gemini, Ollama, or any OpenAI-compatible API. DeepL and Google Translate cannot rewrite (translation-only, no instruction following) — Settings shows a warning when the active provider can't.
Safety
- Always preview. A tone-changed message must be reviewed before it goes out.
- Refusal handling. If the model declines on a profane draft, the app retries once with a stronger anti-refusal prompt; if it still refuses, your original text is kept and you get a clear error.
- Original-text guard. Empty custom binding? Wrong provider? Network error? The app fails fast with an actionable message and never overwrites your input with garbage.
Auto-update
If you are on v0.6.1+, this arrives automatically via Sparkle — the app offers v0.7.0 with an "Install and Relaunch" prompt.
Compatibility
- macOS 14 Sonoma minimum
- Liquid Glass effects on macOS 26 Tahoe
Tests
- 220 Swift tests / 50 suites GREEN
- Apple notarization: DMG + zip both Accepted and stapled