01 / ContextThe question
behind the work.
Important signals are scattered across email, calendars, code, commerce, chat, and local files. A normal chatbot waits to be asked and rarely maintains enough cross-source memory to notice a developing situation on its own.
My role
I architected and implemented the full system from scratch in Node.js, including the daemon, plugin contract, discovery engine, SQLite world model, delivery channels, Electron app, dashboard, MCP server, Docker deployment, documentation, and automated tests.
03 / In detailBuild a model of the work around you
OWL is built around a local SQLite world model of entities, relationships, events, patterns, situations, discoveries, and user feedback. Gmail, Calendar, GitHub, Slack, Shopify, local files, and mock data flow through one plugin contract, which keeps the core independent from any single source.
I implemented two-tier entity extraction, fuzzy resolution, relationship traversal, and a graph that can surface paths, clusters, bridges, and hubs across the information a person already has.
Find the signal before the prompt
The daemon runs quick, deep, and daily scans across connected sources. It correlates events, detects anomalies, filters low-value findings, chains discoveries together, and learns from reactions to avoid sending noise back to the user.
Each discovery carries type, urgency, confidence, and source context. That gives the user a path from a surfaced pattern back to the events and entities that produced it.
Deliver the same insight where it is useful
I built the system to run as a CLI, an Electron desktop app, a web dashboard, a Docker service, and an MCP server. The same world model can also deliver discoveries through email, Slack, Discord, Telegram, webhook, RSS, and WhatsApp channels.
More than 8,000 lines of production code and 98 passing tests support 10 entity types, four discovery types, graph traversal, eight delivery channels, and five deployment modes.
04 / Engineering judgmentThe decisions
that shaped it.
- Kept the system local-first so users retain control of the world model and can use local models through Ollama.
- Separated source plugins, discovery logic, and delivery channels so integrations can change without rewriting the core.
- Filtered aggressively instead of maximizing notification volume; the product is only useful if it stays quiet when nothing matters.
- Fed user reactions back into preference scoring so useful discovery types are reinforced and dismissed patterns are dampened.
Evaluation & results
The codebase contains more than 8,000 lines of production code and 98 passing tests. It supports 10 entity types, four discovery types, graph traversal, eight delivery channels, and five deployment modes: CLI, desktop, dashboard, Docker, and MCP.