<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: msaule</title>
    <description>The latest articles on DEV Community by msaule (@msaule).</description>
    <link>https://dev.to/msaule</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3839135%2F0286a0b0-a313-46be-b7ef-d234eeb223c0.jpeg</url>
      <title>DEV Community: msaule</title>
      <link>https://dev.to/msaule</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/msaule"/>
    <language>en</language>
    <item>
      <title>I built an AI that watches my email, calendar, GitHub, Slack and tells me what I missed</title>
      <dc:creator>msaule</dc:creator>
      <pubDate>Mon, 23 Mar 2026 02:36:52 +0000</pubDate>
      <link>https://dev.to/msaule/i-built-an-ai-that-watches-my-email-calendar-github-slack-and-tells-me-what-i-missed-4775</link>
      <guid>https://dev.to/msaule/i-built-an-ai-that-watches-my-email-calendar-github-slack-and-tells-me-what-i-missed-4775</guid>
      <description>&lt;p&gt;I kept missing things. Not because I wasn't paying attention, but because the signal was spread across too many tools. A Slack message here, a GitHub issue there, an email I skimmed and forgot about. By the time I connected the dots it was too late.&lt;/p&gt;

&lt;p&gt;So I built OWL. It watches your data sources, builds a knowledge graph locally, and runs LLM analysis on a schedule to find things you wouldn't have caught yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works&lt;/strong&gt;&lt;br&gt;
You connect your sources. Gmail, Google Calendar, GitHub, Slack, Shopify, local files. OWL pulls events from all of them into a SQLite database and maps out entities and relationships.&lt;/p&gt;

&lt;p&gt;Then on a schedule it runs discovery passes through your LLM. Not summaries. It looks for cross-source correlations, anomalies, patterns, and connections.&lt;/p&gt;

&lt;p&gt;For example: one company showed up in a GitHub issue, 3 Shopify orders, and an urgent onboarding email all in the same day. Normally they generate maybe 1 event a week. No single app would have flagged that. OWL did.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it looks like&lt;/strong&gt;&lt;br&gt;
The web dashboard has a D3 force-directed knowledge graph showing all your entities and how they connect. Discoveries show up in a feed with urgency levels and confidence scores traced back to source signals.&lt;/p&gt;

&lt;p&gt;There's also an Electron desktop app with a system tray, native notifications when new discoveries come in, and a global hotkey (Ctrl+Shift+O) to pull it up from anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 5 ways to run it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLI - npm install -g owl-ai &amp;amp;&amp;amp; owl setup &amp;amp;&amp;amp; owl start&lt;/li&gt;
&lt;li&gt;Desktop app - Electron with knowledge graph, notifications, system tray&lt;/li&gt;
&lt;li&gt;Web dashboard - owl dashboard, opens localhost with the full UI&lt;/li&gt;
&lt;li&gt;Docker - docker compose up -d, done&lt;/li&gt;
&lt;li&gt;MCP server - Add it to Claude Desktop, Cursor, or Windsurf and they can query your world model directly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;It's fully local&lt;/strong&gt;&lt;br&gt;
This was non-negotiable for me. Everything runs on your machine. The SQLite database, the daemon, the dashboard. The only external calls are to your data source APIs and whatever LLM you configure.&lt;/p&gt;

&lt;p&gt;Works with Ollama if you want zero cloud. Works with OpenAI or Anthropic if you prefer that. No accounts, no telemetry, no data leaving your machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The discovery engine&lt;/strong&gt;&lt;br&gt;
OWL doesn't just store data. It has three scan types that run on cron:&lt;/p&gt;

&lt;p&gt;Quick scans every 30 minutes for urgent stuff&lt;br&gt;
Deep scans every 6 hours for cross-source analysis&lt;br&gt;
Daily reviews every morning for patterns and situations&lt;br&gt;
It also learns from your feedback. If you dismiss a discovery it dampens that type. If you engage with one it boosts similar signals. Over time the noise drops and the signal gets sharper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delivery channels&lt;/strong&gt;&lt;br&gt;
Discoveries go wherever you already are:&lt;/p&gt;

&lt;p&gt;Terminal (CLI)&lt;br&gt;
Telegram (with conversational follow-up by replying)&lt;br&gt;
Slack (Block Kit formatting, thread-based follow-up)&lt;br&gt;
Discord (rich embeds with urgency colors)&lt;br&gt;
Email digest (batched HTML, grouped by entity/theme)&lt;br&gt;
Webhooks (POST JSON to n8n, Zapier, whatever)&lt;br&gt;
RSS/Atom feed&lt;br&gt;
WhatsApp&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The plugin system&lt;/strong&gt;&lt;br&gt;
Each data source is a plugin with a simple contract: setup, watch, query, plus a metadata file. There are 7 built-in ones but the goal is that someone could write a new plugin in a day. If you have a data source you want connected I'm happy to help or take a PR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some numbers&lt;/strong&gt;&lt;br&gt;
98 passing tests&lt;br&gt;
7 data source plugins&lt;br&gt;
8 delivery channels&lt;br&gt;
5 deployment modes&lt;br&gt;
~8,000 lines of code&lt;br&gt;
MIT license&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it&lt;/strong&gt;&lt;br&gt;
npm install -g owl-ai&lt;br&gt;
owl demo&lt;br&gt;
owl dashboard&lt;br&gt;
The demo seeds fake data so you can see the full dashboard and knowledge graph without connecting anything real.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://dev.tourl"&gt;github.com/msaule/owl&lt;/a&gt;&lt;br&gt;
Docs: &lt;a href="https://dev.tourl"&gt;msaule.github.io/owl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have questions about the architecture or want to contribute a plugin, I'm around!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>node</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
