An intelligent iMessage assistant that acts as your ride-or-die friend, going beyond traditional AI assistants to provide human-like companionship and practical help through your iPhone's Messages app. It's still under development and nedds lot of work, memory needs to be added and web search protocol is still shit and needs work, please feel free to contibute :)
- Context-aware dialogue that remembers your conversations
- Emotional intelligence and empathy in responses
- Personalized communication style that adapts to you
- Task management and reminders
- Calendar scheduling and event management
- Note-taking and information storage
- Real-time web search and news updates
- Weather forecasts and local information
- Quick answers to questions
- Automated responses when you're busy
- Smart reminders based on your habits
- Personalized recommendations
- Jokes, trivia, and games
- Daily quotes and inspiration
- Interactive storytelling
- macOS (required for iMessage integration)
- Python 3.10+
- Messages app access
- Ollama installed and running
- Clone the repository:
git clone https://github.com/abhaymundhara/imessage-assistant.git
cd imessage-assistant- Python setup:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt- Node setup (for search + booking helpers):
npm ci # for root (simple_web_search.js)
cd cdp && npm ci # for CDP booking service- Ollama:
- Ensure Ollama is running and the model in
config/settings.py(OLLAMA_MODEL, defaultgemma2:2b) is pulled:
ollama pull gemma2:2b- macOS permissions (important):
- Full Disk Access: grant Terminal/Python to read
~/Library/Messages/chat.db. - Automation/Accessibility: allow
osascript(Script Editor) to control Messages. - Messages must be signed in on this Mac.
- Run the assistant:
python main.pyOptional: the hotel booking CDP service is auto‑started by Python. To run it manually: cd cdp && npm run start.
Troubleshooting
- If you see DB access errors: recheck Full Disk Access for your terminal/IDE.
- If AppleScript send fails: open Messages once manually; verify buddy names and try sending to a simple contact.
- If web search returns empty: Google can block scraping; consider swapping to a search API.