A context-aware thought capture and intelligent organization system for iOS.
Free and open source under the MIT license.
STASH helps you capture thoughts, ideas, tasks, and reminders while automatically gathering context from your device — location, time of day, energy levels, calendar availability — to provide intelligent classification and organization. The app learns from your feedback to continuously improve its understanding of your workflow.
- Thought Capture: Voice and text input with real-time transcription
- AI Classification: Automatic categorization (task, note, idea, reminder, event)
- Sentiment Analysis: Emotional tone detection
- Context Awareness: Location, HealthKit (sleep/activity/HRV), calendar availability, energy level
- Smart Actions: Create tasks, reminders, and calendar events directly from thoughts
- Squirrelsona Companions: AI personas (Supportive Listener, Brainstorm Partner, Socratic Questioner, Journal Guide, Devil's Advocate)
- Apple Watch: Complications, quick capture, haptic feedback
- Offline-first: Full functionality without network access
- Xcode 26.0+
- iOS 26.0+ device or simulator
- Apple Developer account (for device testing with HealthKit/Contacts)
- Clone the repository
- Open
PersonalAI.xcodeprojin Xcode - Select a simulator or connected device
- Build and run (⌘R)
You'll need a Claude API key to use the AI features. Add it in Settings after first launch.
The app requests permissions for:
- Microphone / Speech Recognition: Voice input
- Location: Context gathering (when in use)
- HealthKit: Sleep, activity, and HRV data
- Contacts: Mention detection in thoughts
- Calendars / Reminders: Read availability and create entries
All features degrade gracefully if permissions are denied.
STASH/
├── Sources/
│ ├── Models/ # Data models (Thought, Classification, Context, etc.)
│ ├── Services/ # Business logic
│ │ ├── AI/ # Claude API integration, classification, sentiment
│ │ ├── Context/ # Location, HealthKit, Calendar, Contacts services
│ │ ├── Intelligence/ # Smart resurfacing, pattern learning
│ │ ├── Monetization/ # (removed — app is free)
│ │ ├── Orchestration/ # Service coordination
│ │ ├── Speech/ # Voice transcription
│ │ └── Theme/ # ThemeEngine
│ ├── UI/
│ │ ├── Screens/ # Main app screens
│ │ ├── Components/ # Reusable UI components
│ │ └── ViewModels/ # Screen view models
│ └── STASHApp.swift # App entry point
├── STASH Watch App/ # watchOS companion
├── STASH Watch Complications/ # WidgetKit complications
├── Tests/ # Unit tests
├── docs/ # Architecture and development docs
└── web/ # Privacy policy and terms of service
docs/development/— Architecture principles and patternsdocs/planning/TECHNICAL_DEBT.md— Known issues and refactoring notesdocs/planning/TESTING_STRATEGY.md— Testing approachdocs/DECISIONS.md— Architectural decision log
Contributions are welcome. A few guidelines:
- Follow existing architecture patterns (see
docs/development/) - New Swift files for the main iOS target require manual
project.pbxprojentries — seeCLAUDE.mdfor details - Keep UI theme-aware via
ThemeEngine.shared.getCurrentTheme() - Test with VoiceOver enabled — accessibility is not optional
Bug reports and feature requests via GitHub Issues are appreciated.
STASH is free and open source. If it's useful to you, consider buying me a coffee.
MIT License — see LICENSE.