A native macOS AI agent that lives on your screen.
Aquarius is an embodied AI assistant that manifests as a floating, animated "ghost" β a living Metal shader that breathes, pulses, and reacts to your voice. It can see your screen, control your interface, and handle complex tasks while you focus on what matters.
- Push-to-Talk: Hold
Control + Gto speak β the ghost awakens and listens - Real-time voice conversations powered by Gemini Live
- Bidirectional audio streaming with low latency
| Brain | Model | Purpose |
|---|---|---|
| Fast Brain | Gemini 2.5 Flash (Native Audio) | Instant conversational responses |
| Deep Brain | Gemini 3 Pro | Complex reasoning & analysis |
- Screen Sharing: Say "share my screen" and the agent can see what you see
- Visual Halo: A subtle glow around your screen indicates when sharing is active
- Real-time screen analysis for context-aware assistance
Aquarius uses a discoverable tool architecture β just describe what you need in natural language:
- "Run npm install" β finds and uses
shelltool - "Open Safari" β finds and uses
open_applicationtool - "Edit the config file" β finds and uses
text_editortool - "Click on the submit button" β finds and uses
click_mousetool
Available Tools:
Developer Tools
shellβ Execute terminal commandstext_editorβ View, create, and edit files with precise replacementsanalyze_codeβ Extract symbols, functions, classes from codebasessearch_filesβ Grep through directorieslist_directory/find_filesβ Navigate filesystems
Automation Tools
click_mouse/type_textβ Control mouse and keyboardrun_applescriptβ Native macOS automationopen_application/close_application/focus_applicationβ App managementfind_element_coordinatesβ UI element discovery
Memory System
save_memoryβ Persist information long-termsearch_memoryβ Recall stored knowledgeupdate_core_profileβ Store user preferences & facts
Background Tasks & Task Queue
- Long-running research and analysis tasks
- Async execution with completion notifications
- Configurable tool access levels
- Idle-triggered execution β queued tasks run when you're inactive
- Scheduled tasks β "remind me in 10 minutes", "check this at 3pm"
- Repeatable tasks β daily, weekly, or custom intervals
- Beautiful task overlay β ask "what's in your task list?" for an ethereal UI
- "Remind me to check the build in 10 minutes" β schedules a reminder
- "Research competitor pricing when I'm not busy" β queues for idle time
- "Check my email every morning at 9am" β creates repeatable task
- "What's in your task list?" β shows ethereal overlay with all tasks
Task Priorities:
| Priority | Behavior |
|---|---|
| Immediate | Runs now in background |
| When Idle | Waits for user inactivity |
| Scheduled | Runs at specific time |
| Reminder | Notifies user at specific time |
| Repeatable | Runs at intervals (daily/weekly/custom) |
Task Management:
- "Cancel that reminder" β uses
cancel_scheduledtool - "Stop the research task" β uses
cancel_tasktool - "What tasks are pending?" β uses
get_tasksto list all tasks with IDs - "Show me my tasks" β displays ethereal overlay via
show_task_list
Aquarius learns from your conversations, behavior, and connected services to become more helpful over time:
- Pattern Detection: Extracts topics from conversations using NLP
- Time-Based Learning: Notices when you ask about certain things
- Recurring Interests: Tracks topics you frequently discuss
- Proactive Suggestions: Offers help based on learned patterns
- Automation Suggestions: Proposes tasks that could be automated
- MCP Exploration: Proactively explores connected services (email, calendar, files) to discover patterns
- Semantic Deduplication: Uses AI to merge similar patterns, keeping your learning store clean
Learning Sources:
| Source | What's Learned |
|---|---|
| Conversations | Topics, preferences, workflows from your chats |
| MCP Tools | Patterns from email, calendar, files (e.g., meeting habits, frequent contacts) |
| Ambient Audio | Optionally learns from meetings via on-device transcription |
How Learnings Are Used:
| Method | What's Included | When |
|---|---|---|
| Auto-injected in context | High-confidence patterns only (β₯75%) | Every conversation |
get_patterns tool |
All patterns (any confidence) | On request |
| Proactive suggestions | Contextually relevant patterns | During idle time |
Learning Examples:
- "What have you learned about me?" β shows all learned patterns via
get_patterns - "Forget everything you've learned" β clears all patterns
- User frequently asks about weather at 8am β Aquarius may proactively mention weather
- MCP exploration finds unread emails pile up on weekends β suggests automation
Privacy-First:
- All learning happens locally on your Mac
- No data leaves your device
- Toggle learning on/off in Settings
- Toggle MCP exploration separately in Settings
- View and delete learned patterns anytime
- Configure idle threshold for learning in Settings
- Block patterns you don't want re-learned
Aquarius can proactively offer helpful suggestions based on learned patterns:
Suggestion Types:
| Type | Example |
|---|---|
| Automation | "You manually check email every morning β want me to summarize it for you?" |
| Prediction | "You have a meeting in 30 minutes β want me to prep?" |
| Reminder | "You usually review PRs around this time" |
| Contextual | "I see you're in Xcode β need help with Swift?" |
Smart Delivery:
- Only suggests when you're not actively engaged
- Rate-limited (configurable, default 2/hour max)
- Never repeats similar suggestions within 24 hours
- Tracks delivered messages to prevent duplicates across restarts
- Minimum confidence threshold (configurable)
Natural Integration:
- Suggestions are delivered as natural conversation, not intrusive alerts
- Aquarius stays silent if a suggestion isn't relevant or was recently mentioned
- You can configure suggestion types in Settings
Settings:
- Toggle proactive suggestions on/off
- Adjust suggestions per hour (1-5)
- Set confidence threshold (50%-90%)
- Enable/disable automation vs prediction suggestions
Aquarius automatically manages its data storage to prevent disk bloat:
Memory Cleanup:
- Memories with time-sensitive content ("tomorrow", "next week") auto-expire
- Unused memories gradually decay in relevance
- Old, low-relevance memories are summarized using AI
- Duplicate memories are automatically merged
Conversation Compaction:
- Recent conversations (7 days) kept in full
- Older conversations summarized into insights
- Summaries preserved as learning patterns
Log Rotation:
- Daily log files with 7-day retention
- 5MB size limit per file with automatic rotation
Extend Aquarius with external tools via MCP servers:
- Standardized Integration: Connect any MCP-compatible server
- Tool Discovery: MCP tools are automatically discoverable
- Visual Output: Servers with UI can show WebView popups
- Proactive Exploration: Aquarius explores connected MCPs to learn patterns
Example MCP Servers:
- Gmail/Email servers for inbox insights
- Google Calendar for scheduling patterns
- Filesystem server for file operations
- Slack/Communication tools for collaboration patterns
- Database connectors
- Custom tool servers
MCP Exploration (Proactive Learning):
When idle, Aquarius can automatically explore your connected MCP servers to discover patterns and automation opportunities:
| Phase | What Happens |
|---|---|
| Phase 1: Individual Exploration | Each MCP gets its own agent with only its tools (parallel) |
| Phase 2: Cross-MCP Analysis | All reports analyzed together for patterns |
This enables insights like:
- "You have 47 unread emails, mostly from automated systems"
- "Meeting invites tend to arrive on Tuesdays"
- "Files in ~/Projects haven't been accessed in 30 days"
Toggle MCP exploration in Settings β Learning β MCP Exploration.
Transport Types:
- stdio β Local process (npx, python, node)
- http β Remote HTTP server with SSE streaming
- sse β Server-Sent Events
Configuration:
Add servers via Settings β MCP tab, or edit ~/Library/Application Support/Aquarius/mcp_servers.json:
{
"servers": {
"filesystem": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "~/Documents"],
"enabled": true
},
"remote-api": {
"transport": "http",
"url": "https://mcp.example.com/api",
"headers": {"Authorization": "Bearer token"},
"enabled": true
}
}
}A beautiful, breathing visualization powered by Metal shaders:
- Red β Listening to your voice
- Purple β Speaking a response
- Orange β Working on a task
- Idle β Small dot, always present
- macOS 14.0 (Sonoma) or later
- Xcode 15+
- Gemini API Key from Google AI Studio
- Download the latest
Aquarius-unsigned.zipfrom Releases - Unzip the archive
- Remove quarantine (required for unsigned apps):
xattr -cr ~/Downloads/Aquarius.app - Open the app normally
β οΈ The app is unsigned, so macOS Gatekeeper will block it without thexattrcommand above.
git clone git@github.com:Kvadratni/Aquarius.git
cd AquariusIf you have xcodegen installed:
brew install xcodegen
xcodegen generateOption A: Xcode GUI
open Aquarius.xcodeprojThen build and run with Cmd + R in Xcode.
Option B: Command Line
# Clean build (removes previous build artifacts)
rm -rf build && xcodebuild -scheme Aquarius -destination 'platform=macOS' -derivedDataPath build build
# Open the built app
open build/Build/Products/Debug/Aquarius.app- Enter your Gemini API Key in the setup window
- Grant Permissions when prompted:
- Microphone β Required for voice input
- Screen Recording β Required for screen sharing feature
- Accessibility β Only needed for UI automation tools (mouse/keyboard control)
| Shortcut | Action |
|---|---|
Control + G |
Toggle listening mode |
Logs are written to a rotating log system:
~/Library/Application Support/Aquarius/Logs/aquarius-YYYY-MM-DD.log
Features:
- Daily rotation with date-based filenames
- Auto-rotates when file exceeds 5MB
- Automatically deletes logs older than 7 days
To tail today's logs in real-time:
tail -f ~/Library/Application\ Support/Aquarius/Logs/aquarius-$(date +%Y-%m-%d).logAquarius requires these permissions to function:
| Permission | Why It's Needed |
|---|---|
| Microphone | Voice input for conversations |
| Screen Recording | Screen sharing with the AI |
| Accessibility | UI automation (mouse/keyboard control) β only needed if using automation tools |
π‘ The global hotkey (
Control + G) works without any permissions using macOS's Carbon API.
β οΈ The app runs outside the sandbox to enable global hotkey detection and system-wide automation.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Aquarius App β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Ghost β β Audio β β Vision β β
β β (Metal) β β Manager β β Service β β
β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β
β β β β β
β ββββββββββββββββββββΌβββββββββββββββββββ β
β β β
β ββββββββββΌβββββββββ β
β β AgentState β β
β β (ViewModel) β β
β ββββββββββ¬βββββββββ β
β β β
β ββββββββββββββββββββΌβββββββββββββββββββ β
β β β β β
β ββββββββΌβββββββ ββββββββΌβββββββ ββββββββΌβββββββ β
β β Gemini β β Reasoning β β Tool β β
β β Live β β Service β β Registry β β
β β (Fast Brain)β β(Deep Brain) β β β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Aquarius/
βββ AquariusApp.swift # App entry point & window management
βββ AgentState.swift # Central state management & idle detection
βββ ContentView.swift # Ghost visualization
βββ FloatingPanel.swift # Transparent floating window
βββ ScreenHaloView.swift # Screen sharing indicator
βββ TaskListOverlayView.swift # Ethereal task list UI
βββ TaskListPanel.swift # Floating panel for task overlay
βββ MCPUIPanel.swift # WebView panel for MCP UI output
βββ MCPSettingsTab.swift # MCP server management UI
βββ Services/
β βββ GeminiLiveService.swift # WebSocket voice connection
β βββ ReasoningService.swift # Deep thinking integration
β βββ ToolRegistry.swift # Discoverable tools system
β βββ TaskManager.swift # Task queue, scheduling & execution
β βββ LearningStore.swift # Persistent pattern storage
β βββ ObservationService.swift # Behavior learning & analysis
β βββ MemoryCleanupService.swift # Intelligent memory cleanup & summarization
β βββ ScreenContextService.swift # Screen OCR & window tracking
β βββ ConceptAnalysisService.swift # LLM concept extraction
β βββ MCPClient.swift # JSON-RPC client for MCP servers
β βββ MCPManager.swift # MCP server coordination
β βββ MCPTypes.swift # MCP data models
β βββ MCPExplorationService.swift # Proactive MCP exploration for learning
β βββ DeveloperService.swift # Code & file operations
β βββ ActionService.swift # Mouse/keyboard automation
β βββ AccessibilityService.swift # UI element discovery
β βββ VisionService.swift # Screen capture
β βββ MemoryService.swift # Long-term memory with decay
β βββ LogManager.swift # Rotating log system
β βββ AudioManager.swift # Mic & speaker handling
β βββ ...
βββ Resources/
βββ Shaders.metal # Ghost visual effects
βββ logo.png
Contributions are welcome! Please feel free to submit issues and pull requests.
MIT License β see LICENSE for details.
Built with π for macOS
