Personal project
A personal AI assistant, not a coding tool — general-purpose, general-use. It's made of two things: an MCP server that holds memory, skills, and connectors, and a desktop app that runs a coordinator persona on top of it. That coordinator is running this exact conversation right now.
Active, in daily personal use — not a demo, not archived.
The MCP server — the brain. Holds memory and skill search, and exposes connectors for email, calendar, Drive, Slack, and Linear as tools a model can call.
The desktop client — the exact app this conversation is running inside. It hosts the coordinator persona that triages requests and dispatches into focused working modes.
The coordinator never does the implementation work itself — it triages, then hands off. Each working mode (plan, build, review, research) is a fresh worker with its own prompt and a narrow job. When a worker finishes, only its final handoff survives back to the coordinator; the tool calls and reasoning that got it there are discarded. This page was drafted, revised, and built through exactly that loop over the course of this conversation.
Keyword search (FTS5) merged with a vector similarity index via reciprocal-rank fusion, backed by an on-device embedding model. If the embedding step is unavailable, search fails open to keyword-only instead of failing outright. Every query is logged (mode, hit counts, timing) so the fusion weighting can be retuned from real data.
A single coordinator persona per conversation thread declares a working mode — plan, build, review, or research — at a chosen complexity. Each mode dispatches into a worker with its own prompt, versioned in code rather than configured in a database. This exact page was produced through that loop.
Chat requests route across multiple LLM providers with rate-limit-aware rotation — including telling an account-specific quota error apart from a shared upstream pool error, so one throttled account doesn't wrongly bench the rest. Embeddings and lightweight classification run locally on-device.
Only the records Sparrow actually uses: memory, skills, and connectors. An earlier, more complex "agents" entity was designed, shipped, and retired the same day once it proved unnecessary — a collapse, not an accretion.
A skill can carry a schedule. The desktop app polls for due skills and claims them with optimistic concurrency, so multiple running instances can't double-fire the same job — a daily "memory hygiene" skill runs this way.
Email, calendar, Drive, Slack, and Linear are exposed as MCP tools. Anything that sends, deletes, or otherwise changes external state requires an explicit confirmation step — reading is unrestricted, writing is not.
Three screenshots tell the story for now. Click any shot to open a larger preview and step through them with prev/next.