AI-powered iMessage reply suggestions for macOS, powered by Grok.
┌────────────────────────────────────────────┐
│ Kevin Xie v :) grok ↻ │
├────────────────────────────────────────────┤
│ recv: hey where are you? │
│ │
│ ┌────────────────────────────────────┐ │
│ │ ~ omw │ │
│ │ brief ⌘1 → │ │
│ └────────────────────────────────────┘ │
│ ┌────────────────────────────────────┐ │
│ │ > on my way, be there in │ │
│ │ 10 mins │ │
│ │ verbose ⌘2 → │ │
│ └────────────────────────────────────┘ │
│ ┌────────────────────────────────────┐ │
│ │ * lol im lost tbh │ │
│ │ witty ⌘3 → │ │
│ └────────────────────────────────────┘ │
│ ┌────────────────────────────────────┐ │
│ │ ♡ thinking of you on the │ │
│ │ way over │ │
│ │ rizz ⌘4 → │ │
│ └────────────────────────────────────┘ │
│ ┌────────────────────────────────────┐ │
│ │ ! wow took you long enough │ │
│ │ to ask │ │
│ │ jerk ⌘5 → │ │
│ └────────────────────────────────────┘ │
│ │
│ ⌘⇧M: toggle grok_reply v1.0 │
└────────────────────────────────────────────┘
- Grok-powered suggestions - Uses xAI's Grok model by default
- 5 reply styles - brief, verbose, witty, rizz, and jerk (sarcastic)
- Auto show/hide - Appears when Messages.app is focused
- Auto-sync conversations - Detects active conversation in Messages.app
- Contact resolution - Resolves phone numbers to contact names via SQLite cache
- Emoji toggle - Strip emojis from suggestions with one click
- Keyboard shortcuts -
⌘1-5to send,⌘⇧Mto toggle - More like this - Generate 4 more variations of any style
- Multi-provider - Supports Grok, Claude, and GPT-5
- Click to send - Messages sent via AppleScript
- macOS with Messages.app
- Node.js 18+
- Full Disk Access permission (for reading chat.db)
- Contacts access permission (for name resolution)
npm install
npx electron-rebuild -f -w better-sqlite3
npm run start- Open Messages.app - GrokReply appears automatically
- Conversation syncs automatically based on active Messages window
- View 5 AI-generated reply suggestions
- Click a suggestion or press
⌘1-5to send - Click
[+] morefor additional variations in that style - Toggle emoji filtering with the
:)/:|button - Press
⌘⇧Mto manually toggle visibility
| Shortcut | Action |
|---|---|
⌘1-5 |
Send suggestion 1-5 |
⌘⇧M |
Toggle window visibility |
ESC |
Go back from "more like this" |
| Symbol | Style | Description |
|---|---|---|
~ |
brief | Short, snappy responses |
> |
verbose | Detailed, thoughtful responses |
* |
witty | Playful, humorous responses |
♡ |
rizz | Flirty, charming responses |
! |
jerk | Sarcastic, roasting responses |
Switch between AI providers by clicking the provider name in the header:
- grok - xAI Grok (default)
- claude - Anthropic Claude
- gpt-5 - OpenAI GPT-5
- Electron
- React + TypeScript
- Tailwind CSS v4
- Vite
- better-sqlite3 (contact caching)
- xAI Grok API / Anthropic API / OpenAI API
~/grok-reply/
├── electron/
│ ├── main.js # Electron main process, contact cache, IPC
│ └── preload.js # IPC bridge for renderer
├── src/
│ ├── App.tsx # Main React component
│ ├── services/
│ │ ├── imessageApi.ts # iMessage database queries
│ │ └── llm.ts # Multi-provider LLM service
│ └── types.ts # TypeScript interfaces
└── dist/ # Built app
MIT