A keyboard-driven Twitter/X engagement tool that helps you craft authentic replies at speed. Navigate your timeline, generate AI-powered reply suggestions, and engage — all without touching your mouse.
Reply Guy is a Chrome extension + local server combo that overlays on Twitter/X. It lets you:
- Navigate tweets with J/K keys (like Vim)
- Generate reply options using Claude AI
- Train your voice by analyzing any Twitter account's style
- Track engagement with a local database of tweets you've seen
The goal isn't to spam — it's to help you engage more authentically and efficiently with your timeline.
J/K— Navigate down/up through tweetsG— Generate 3 reply optionsV— Cycle through generated optionsE— Generate variations of current replyT— Refine reply with custom feedbackR— Post the replyS— Skip tweet (move to next)I— Like current tweetB— Recenter on current tweetM— Jump to nearest visible tweetP— Toggle panel position (left/right)Esc— Close overlay
- Generates short, punchy one-liners (under 15 words)
- Matches the vibe — casual, witty, not "thought leader brain"
- Considers quote tweet context when present
- Analyzes images in tweets using Claude's vision capability
- Supports custom voice profiles trained on real accounts
Train the AI to write like anyone:
- Enter a Twitter handle
- The system analyzes their last 500 tweets
- Creates a voice profile capturing their style (not opinions)
- All future replies match that voice
Automatically stores every tweet you see while scrolling:
- Track what you've replied to vs skipped
- Build context for future features (theme detection, original tweet generation)
- Local SQLite database — your data stays yours
When a tweet contains images:
- Automatically extracts and sends to Claude Vision
- AI considers both text AND visual content
- Sessions persist so you don't re-upload images for variations
- Node.js 18+
- Python 3.8+ (for paste server)
- Chrome browser
- API keys:
- Anthropic API key (for Claude)
- ScrapeCreators API key (for tweet fetching)
- Supabase project (for voice profiles)
git clone https://github.com/yourusername/reply-guy.git
cd reply-guy
npm installCreate .env.local in the project root:
# Required
ANTHROPIC_API_KEY=sk-ant-...
# For tweet fetching (voice profile training)
SCRAPECREATORS_API_KEY=your_key_here
# For voice profiles storage
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_keyThe paste server enables automatic text injection into Twitter's reply box:
cd paste-server
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt- Open Chrome →
chrome://extensions/ - Enable "Developer mode" (top right)
- Click "Load unpacked"
- Select the
extension-v2folder
# Terminal 1: Start Next.js dev server
npm run dev
# Terminal 2: Start paste server (optional)
cd paste-server
source venv/bin/activate
python server.py- Go to twitter.com or x.com
- Press
Alt+Shift+R(or click the extension icon) - Navigate with
J/K, generate withG, reply withR
reply-guy/
├── src/
│ ├── app/ # Next.js app router
│ │ ├── api/
│ │ │ ├── reply/ # Reply generation endpoints
│ │ │ ├── tweets/ # Tweet storage & stats
│ │ │ └── voice-profiles/ # Voice training
│ │ └── page.tsx # Web dashboard
│ ├── lib/
│ │ ├── claude.ts # Claude AI integration
│ │ ├── sqlite.ts # Local tweet database
│ │ └── sessions.ts # Per-tweet session management
│ └── types/
├── extension-v2/ # Chrome extension
│ ├── manifest.json
│ ├── content.js # Main overlay logic
│ ├── overlay.css # Styling
│ └── background.js # Service worker
├── paste-server/ # Python paste automation
│ ├── server.py
│ └── requirements.txt
└── data/ # SQLite database (gitignored)
| Endpoint | Method | Description |
|---|---|---|
/api/reply/generate-direct |
POST | Generate replies (supports images) |
/api/reply/variations |
POST | Generate variations of a reply |
/api/reply/refine |
POST | Refine reply with feedback |
/api/tweets/store |
POST | Store discovered tweets |
/api/tweets/stats |
GET | Get tweet statistics |
/api/voice-profiles |
GET/POST | Manage voice profiles |
/api/voice-profiles/analyze |
POST | Train new voice profile |
/api/voice-profiles/activate |
POST | Set active voice |
Edit the system prompt in src/lib/claude.ts. The default encourages:
- One-liners under 15 words
- Casual, friend-like tone
- Matching the original tweet's energy
- No "thought leader" speak
By default, tweets are stored in data/tweets.db. Override with:
SQLITE_DB_PATH=/custom/path/tweets.db- Make sure you've reloaded the extension after code changes
- Check the browser console for parsing errors
- Try refreshing Twitter and re-opening the overlay
- Ensure the paste server is running on port 8765
- Check that
http://localhost:8765/healthreturns OK - Twitter's Draft.js editor is finicky — worst case, it copies to clipboard
- Verify the extension is loaded in
chrome://extensions/ - Check that you're on twitter.com or x.com
- Try
Alt+Shift+Ror click the extension icon
- Original tweet generation based on timeline themes
- Scheduled posting
- Analytics dashboard
- Multi-account support
- Firefox extension
ISC
Built for scrollers who want to engage, not just lurk. ⚡