Four steps
- A Mac with Apple Silicon (64 GB RAM recommended for larger models), Tailscale, Ollama.
- Installation on the Mac: a service account and a config with passwords that stays on the Mac only (mode 600).
- Sign in to Microsoft 365 or IMAP in Settings. Every save verifies the connection straight away.
- Your first morning briefing tomorrow at 6:30.
Built for my own needs, used every day. Every feature came from one specific morning that took too long.
How it works
Machine
A Mac Studio (Apple Silicon), a service account with no login, services under launchd.
Models
Ollama (Qwen, Gemma, GLM depending on the task, bge-m3 embeddings), whisper.cpp for transcription, macOS say for voice. The model extracts and summarises; it doesn’t decide and has no tools.
Agents
Mail sorter, Watchman, Scribe, Context gatherer, Task runner, Note-taker, Diarist, Teacher, Scout, Backup, Maintenance, WhatsApp bridge. 16 services, each running at most one instance at a time.
Data
SQLite (headers, proposals, decisions, never email bodies), an Obsidian vault as readable memory, the invoicing system via GET only.
Web
FastAPI and Jinja2, one screen on desktop and phone (PWA), Web Push with its own implementation.
Access
Tailscale (HTTPS via tailscale serve, account identity), the iPhone app over the same network.
Releases
GitHub Actions (ruff, 1,240 tests), a self-hosted runner on the Mac and a release gate: backup, restore test, unit tests, live injection test, a corpus of real emails, integration checks. Rollback is an older tag. The app has a What’s new page: every item of a release has a “Try it” and the release a “Verified” mark.
Python, no subscription. The only costs are electricity and a Mac you already own.
Support
Questions about Studio Asistent or the iPhone app: write to info@podhora.eu