Private AI that remembers your life. Locally. Forever.
Local-first Β Β·Β Privacy-first Β Β·Β Zero cloud Β Β·Β Zero subscriptions Β Β·Β Open source
AetherMind is a personal cognitive infrastructure: it collects data from your life (git commits, notes, calendar, location history), creates semantic memories using local AI, reflects on your days, and answers natural language questions about your past.
- Automatic data collection - git commits, notes, Google Calendar, Google Takeout Timeline
- Incremental sync - only imports new data; full deduplication via content hashing
- Semantic memory search - ask "when was I most productive?" and get answers from your actual history
- Daily AI reflection - local LLM generates daily summaries, wins, risks, and pattern detection
- 100% local - runs on your machine; no data leaves your computer
- CUDA-accelerated - embeddings run on your GPU for speed
- Streamlit UI - Timeline, Ask Memory, Reflections, Stats views
- One-command setup -
python setup.pyhandles everything
Data Sources Pipeline Storage
ββββββββββββ ββββββββ βββββββ
π Notes (.md/.txt) ββ collect.py SQLite (events)
π» Git commits ββ€ β normalize.py β embed β Qdrant (vectors)
π
Google Calendar ββ€ index.py JSONL (log)
πΊ Google Timeline ββ reflect.py JSON (reflections)
β
βΌ
Ollama (local LLM)
BAAI/bge-small embeddings
β
βΌ
ask.py / app.py (Streamlit UI)
- Python 3.11+
- Ollama installed
- NVIDIA GPU recommended (RTX series with CUDA 12.x)
git clone https://github.com/YOUR_USERNAME/aethermind.git
cd aethermind
python setup.pyThe setup wizard will:
- Check system requirements
- Install all Python dependencies
- Optionally connect your Google account
- Configure daily automation
- Run the first import
ollama pull qwen2.5:7binput/
βββ notes/ β Drop .txt or .md files here
βββ calendar.csv β Export from Google/Outlook/Apple Calendar
βββ Semantic_Location_History/ β Google Takeout β Location History β JSON files
python run_pipeline.pystreamlit run app.pypython ask.py "When was I most productive?"
python ask.py "What projects did I work on in March?"
python ask.py "How many times did I go to the gym this month?" --type health
python ask.py --interactiveAetherMind can automatically sync your Google Calendar events.
- Go to Google Cloud Console
- Create a new project: AetherMind
- Enable the Google Calendar API:
APIs & Services β Library β Search "Calendar API" β Enable - Create OAuth credentials:
APIs & Services β Credentials β Create Credentials β OAuth client ID- Application type: Desktop app
- Name:
AetherMind
- Click Download JSON
- Save as:
credentials/google_client_secret.json
python setup.py # Step 4 runs OAuth (opens browser)or directly:
python -c "from collect.google_calendar import get_credentials; get_credentials()"- First sync: fetches all events from the past year
- Subsequent syncs: uses Google's
syncToken- only fetches changes since last sync (fast) - Token storage: saved in
credentials/google_token.json(auto-refreshes, never expires) - All calendars: syncs every calendar on your account (configurable in
config.yaml)
Note:
credentials/is gitignored. Your tokens never leave your machine.
Google does not provide an API for Maps Timeline. Options:
Option A - Google Takeout (recommended)
- Go to takeout.google.com
- Select only "Location History (Timeline)"
- Export as JSON
- Extract the ZIP β copy
Semantic_Location_History/toinput/ - Run
python run_pipeline.py
AetherMind handles both old format (timelineObjects) and new format (semanticSegments).
Option B - OwnTracks (continuous tracking) Set up OwnTracks on your phone β export GPX β import as notes.
After running python setup.py, two Windows Task Scheduler tasks are created:
| Task | Time | Action |
|---|---|---|
AetherMind-Pipeline |
20:00 | Collect + normalize + index |
AetherMind-Reflect |
21:00 | AI daily reflection |
Manual management:
# View tasks
schtasks /query /tn "AetherMind-Pipeline"
# Delete tasks
schtasks /delete /tn "AetherMind-Pipeline" /f
schtasks /delete /tn "AetherMind-Reflect" /f
# Re-run setup
python setup.py# Setup
python setup.py # Full setup wizard
# Pipeline
python run_pipeline.py # Full pipeline (collect+normalize+index)
python run_pipeline.py --stages collect,normalize # Specific stages
python run_pipeline.py --reflect # Reflection only
python run_pipeline.py --source git # One source only
# Individual modules
python normalize.py --dry-run # Preview events without saving
python index.py --stats # Show vector index stats
python index.py --rebuild # Rebuild Qdrant from scratch
python reflect.py --date 2026-04-14 # Reflect on specific date
python reflect.py --force # Overwrite existing reflection
# Q&A
python ask.py "question" # One-shot question
python ask.py "question" --type health # Filter by event type
python ask.py "question" --since 2026-01-01 # Only events after date
python ask.py --interactive # REPL mode
# UI
streamlit run app.py # Web interface (localhost:8501)All settings in config.yaml:
embedding:
model_name: "BAAI/bge-small-en-v1.5" # 384-dim, MIT license
device: "cuda" # "cuda" or "cpu"
batch_size: 128 # Higher = faster on good GPU
ollama:
model: "qwen2.5:7b" # Any Ollama model
temperature: 0.3 # Lower = more factual
collect:
google_calendar:
lookback_days: 365 # How far back on first sync
calendars: [] # [] = all calendars
git:
max_days_back: 365
google_timeline:
min_duration_minutes: 5 # Skip very short visits
ask:
top_k: 8 # Events to retrieve per query
rerank: true # Hybrid semantic+importance reranking| Source | Format | Collection |
|---|---|---|
| Notes | .txt, .md |
Drop in input/notes/ |
| Git commits | Auto-detected | Automatic (all local repos) |
| Google Calendar | API (OAuth) | Automatic (incremental sync) |
| Calendar CSV | .csv |
Drop input/calendar.csv |
| Google Timeline | JSON (Takeout) | Drop in input/Semantic_Location_History/ |
aethermind/
βββ setup.py β First-run wizard
βββ run_pipeline.py β Daily orchestrator
βββ config.yaml β All configuration
βββ storage.py β SQLite + Qdrant layer (immutable core)
βββ normalize.py β Raw data β canonical events
βββ index.py β GPU embedding β Qdrant
βββ reflect.py β Daily AI reflection
βββ ask.py β CLI RAG Q&A
βββ app.py β Streamlit web UI
βββ collect/
β βββ notes.py β .txt/.md collector
β βββ git_collector.py β Git commit collector
β βββ google_calendar.py β Google Calendar API (OAuth + incremental)
β βββ calendar_collector.py β CSV calendar fallback
β βββ google_timeline.py β Google Takeout JSON parser
βββ credentials/ β OAuth tokens (gitignored)
βββ input/ β Drop your data files here (gitignored)
βββ data/ β Canonical events + reflections (gitignored)
βββ db/ β SQLite + Qdrant storage (gitignored)
βββ logs/ β Pipeline logs (gitignored)
- All data stays local - nothing is sent to external servers
- No API keys required - LLM runs via Ollama on your machine
- Embeddings run locally -
BAAI/bge-small-en-v1.5runs on your GPU - Google OAuth tokens are stored in
credentials/which is gitignored - Personal data directories (
input/,data/,db/) are gitignored
If something breaks:
# Rebuild vector index (SQLite is source of truth)
python index.py --rebuild
# Re-run normalization only
python normalize.py
# Check what's in the database
python index.py --stats
# View pipeline logs
cat logs/pipeline.log- OwnTracks/GPX location import
- Voice notes via Whisper (local)
- GitHub API integration (PRs, issues)
- Weekly summary report (PDF/email)
- Pattern detection engine ("you abandon projects after 12 days")
- Mobile companion app (Flutter)
MIT - use freely, keep private, share improvements.
Built for people who want AI to know them better than Google does - but only on their own terms.

