Enter + truce.
Send, or newline? Every app treats the Enter key differently, and somewhere, every day, a message gets sent halfway through. Entruce signs a truce in your war with the Enter key.
Entruce is a macOS menu bar utility that unifies Enter-key behavior across chat and AI desktop apps. In target apps, Enter always inserts a newline and Cmd+Enter always sends, so you never fire off an unfinished message because one app decided Enter means "send".
- Press Enter to insert a newline (never send)
- Press Cmd+Enter to send
You can toggle this unified behavior per app. Even in apps where Enter sends by default (Teams, LINE, and others), enabling Entruce gives you the same editing experience everywhere.
The menu bar panel controls the global on/off switch and launch-at-login. "Advanced Settings" lets you enable or disable individual apps. The target app list only shows apps that are actually installed on your Mac. The UI is available in English and Japanese and follows your system language.
The following apps are verified to work and ship as default presets. Each can be toggled individually.
AI tools
| App | Status |
|---|---|
| Claude | Supported |
| ChatGPT | Supported |
| Gemini | Supported |
| Copilot | Supported |
| Manus | Supported |
Communication tools
| App | Status |
|---|---|
| Slack | Supported |
| Microsoft Teams | Supported |
| LINE | Supported |
| Discord | Supported |
| Telegram | Supported |
| Supported |
Only the preset apps above are currently supported. To request support for another app, please open an issue.
Requires macOS 14 or later on Apple silicon.
- Download the latest
Entruce-x.y.z.zipfrom GitHub Releases - Unzip it and move
Entruce.appto/Applications - Launch Entruce and grant Accessibility permission (System Settings > Privacy & Security > Accessibility). Entruce starts working as soon as permission is granted
The app is Developer ID signed and notarized by Apple, so Gatekeeper opens it without warnings.
brew install --cask jncch/tap/entruceQuit Entruce from the menu bar panel and delete Entruce.app from /Applications. Settings are stored only in macOS user defaults (~/Library/Preferences/dev.entruce.Entruce.plist); delete that file too for a completely clean removal.
- Terminal apps (Ghostty, iTerm2, Apple Terminal, and others) Rewriting would also affect the Enter that commits IME text conversion, destroying text as you type. Terminals are protected by a blocklist and cannot be enabled.
- Web browsers The OS cannot tell which site is active inside a browser, so rewriting would apply to every site indiscriminately. For unifying Enter behavior in web chat apps, we recommend a browser extension instead.
Entruce performs no network communication whatsoever. There is no telemetry, no usage collection, and no data leaves your Mac. The only permission it needs is Accessibility, which is used solely to rewrite key events. Keystrokes are never logged or stored. The full source code is available in this repository.
Entruce uses macOS CGEventTap to rewrite key events while a target app is frontmost.
- Enter is rewritten to Shift+Enter (which inserts a newline in most apps)
- Cmd+Enter is rewritten to plain Enter (which sends in most apps)
In supported apps, the Enter that commits Japanese IME conversion is handled by the IME before the rewrite applies, so text input is unaffected. In some apps such as terminals the conversion-commit Enter would be rewritten, which is why they are excluded.
-
Apps that do not treat Shift+Enter as a newline will not behave as expected. Presets are verified; if you enable anything else, verify the behavior yourself.
-
Google Japanese Input (Mozc) cannot commit a conversion with Enter while Entruce is active, and the suggestion window commits the first suggestion instead of your input. None of its keymap styles (Kotoeri, MS-IME, ATOK) map Shift+Enter to Commit during composition or conversion, so the rewritten Enter never reaches the IME as a commit. When Entruce detects Google Japanese Input, the menu bar panel and the Hints tab in Advanced Settings guide you through the fix for your keymap style:
- Kotoeri style (the macOS default): import the bundled verified keymap file (
Extras/GoogleJapaneseInput/entruce-keymap.txt) from the keymap editor in Preferences > General. Importing replaces the whole keymap; the file is the default Kotoeri table plus the required entries. - Custom keymap: Entruce generates an import file that keeps your current entries and only adds or changes the Shift+Enter bindings. For this, Entruce reads Google Japanese Input's local configuration file read-only; it never modifies the file and nothing leaves your Mac.
- MS-IME / ATOK styles: manually add
Composition + Shift Enter -> CommitandConversion + Shift Enter -> Commit, and change the existingSuggestion + Shift Enterentry toCommitin the keymap editor.
Once the entries are in place, the notice disappears automatically. The Apple standard Japanese IME needs no configuration.
- Kotoeri style (the macOS default): import the bundled verified keymap file (
-
Some apps let you change their own send key. Keep that setting at its default. For example, Slack is verified with "When writing a message, press Enter to" set to "Send the message" (the default); if you change it to "Start a new line", Cmd+Enter will no longer send.
-
CLI tools running inside a terminal (such as Claude Code) cannot be controlled from outside the OS. Use each tool's own settings.
Building from source requires Xcode (or the Command Line Tools).
swift build # build
swift test # unit tests
Scripts/make-app.sh # assemble dist/Entruce.app (ad-hoc signed without a Developer ID certificate)Scripts/notarize.sh submits the assembled app for Apple notarization (maintainers only; requires Developer ID credentials).
MIT License
