Connect iOS devices to local AI services running on your Mac with zero configuration.
Elmer is a minimalist system that bridges iOS and macOS, allowing your iPhone or iPad to securely access AI services running locally on your Mac. No exposed ports, no complex networking—just scan a QR code and start using your local AI infrastructure from anywhere.
- 🔐 Zero-config security - Uses iCloud private database as encrypted relay
- 📱 Native iOS interface - Chat with LLMs, generate images, run custom tools
- 🤖 Auto-discovery - Detects ComfyUI, Ollama, LM Studio automatically
- 🛠️ Custom tools - Define your own command-line tools and scripts
- ☁️ No external services - Everything routes through your iCloud account
- 📡 MCP integration - Connect to Model Context Protocol servers
┌─────────────────┐ ┌─────────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ iPhone/iPad │◄──►│ iCloud Private │◄──►│ Mac (Server) │
│ (Client) │ │ Database (Relay) │ │ │
│ │ │ │ │ │
└─────────────────┘ └─────────────────────┘ └─────────────────┘
- Mac app runs as menu bar service, detects local AI services
- QR code contains connection info for easy device pairing
- iOS app sends requests via CloudKit to Mac
- Mac processes requests locally and returns responses
- Push notifications deliver responses back to iOS instantly
- macOS device with AI services (Ollama, ComfyUI, LM Studio, etc.)
- iOS device signed into same iCloud account
- Xcode for building apps
cd elmerMac/elmer
xcodebuild -scheme elmer -configuration Release build
open build/Release/elmer.app
cd elmerMobile/elmer
xcodebuild -scheme elmer -sdk iphonesimulator build
# Or open in Xcode and run on device
- Mac: Click menu bar icon → "Generate QR Code"
- iOS: Open Elmer app → Scan QR code
- Done! Your devices are now connected
- Tap any detected language model service
- Start chatting immediately with native iOS interface
- Supports text, images, and multimodal conversations
- Access ComfyUI workflows through dedicated interface
- Generate and save images directly to Photos app
- Use predefined tools or create your own
- Execute terminal commands, scripts, and automations
- See
USER_TOOLS_GUIDE.md
for tool creation
Create your own tools by adding JSON files to ~/.elmer/tools/
:
{
"name": "System Info",
"description": "Get macOS system information",
"command": ["system_profiler", "SPSoftwareDataType"],
"category": "system"
}
See USER_TOOLS_GUIDE.md
for complete documentation.
Auto-detected:
- Ollama (http://localhost:11434)
- ComfyUI (http://localhost:8188)
- LM Studio (http://localhost:1234)
- Text Generation WebUI (http://localhost:7860)
Manual configuration:
- Any OpenAI-compatible API
- Custom web services
- MCP servers
elmer/
├── elmerMac/ # macOS menu bar application
│ └── elmer/
│ ├── ServiceManager.swift # AI service detection
│ ├── CloudKitRelayManager.swift # Request processing
│ ├── UserToolManager.swift # Custom tools
│ └── MCPServerManager.swift # MCP integration
├── elmerMobile/ # iOS client application
│ └── elmer/
│ ├── UnifiedControlPanelView.swift # Main interface
│ ├── CloudKitRelayClient.swift # Request sending
│ └── RelayConnectionManager.swift # Connection handling
├── example-tools/ # Sample tool definitions
└── docs/ # Documentation
- End-to-end encryption via iCloud's private database
- No external servers - all communication through Apple's infrastructure
- Local processing - AI requests never leave your devices
- Automatic cleanup - Old requests deleted automatically
- iCloud sync - Works across all your signed-in devices
Both apps are standard Xcode projects:
# Mac app
cd elmerMac/elmer && xcodebuild -scheme elmer build
# iOS app
cd elmerMobile/elmer && xcodebuild -scheme elmer -sdk iphonesimulator build
- Add detection logic to
ServiceDetector.swift
- Update service definitions in
Models.swift
- Test auto-discovery in Mac app
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature
) - Test on both Mac and iOS
- Submit pull request
macOS:
- macOS 13.0+ (Ventura)
- iCloud account
- Xcode 15.0+ (for building)
iOS:
- iOS 16.0+
- Same iCloud account as Mac
- Camera access (for QR scanning)
Connection Issues:
- Verify both devices use same iCloud account
- Check iCloud is enabled in System Preferences/Settings
- Restart both apps if QR scanning fails
Service Detection:
- Ensure AI services are running on default ports
- Check Console.app for service detection logs
- Manually add services if auto-detection fails
Performance:
- CloudKit sync may take 1-2 seconds in some regions
- Large responses (images) may take longer to transfer
- Check network connectivity if requests timeout
USER_TOOLS_GUIDE.md
- Creating custom toolsPROJECT_SUMMARY.md
- Architecture overviewMIGRATION_NOTES.md
- Version historyCLOUDKIT_IMPLEMENTATION.md
- Technical details
MIT License - see LICENSE file for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: [email protected]
Elmer: Your AI services, everywhere.