<?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: Dishant Gotis </title>
    <description>The latest articles on DEV Community by Dishant Gotis  (@dishantgotis).</description>
    <link>https://dev.to/dishantgotis</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%2F3624055%2F8c4f9c65-0f2a-407f-8740-bca372bec589.jpg</url>
      <title>DEV Community: Dishant Gotis </title>
      <link>https://dev.to/dishantgotis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dishantgotis"/>
    <language>en</language>
    <item>
      <title>Just CC This AI — It Will Schedule Your Meeting for You</title>
      <dc:creator>Dishant Gotis </dc:creator>
      <pubDate>Sat, 18 Apr 2026 20:38:47 +0000</pubDate>
      <link>https://dev.to/dishantgotis/just-cc-this-ai-it-will-schedule-your-meeting-for-you-4882</link>
      <guid>https://dev.to/dishantgotis/just-cc-this-ai-it-will-schedule-your-meeting-for-you-4882</guid>
      <description>&lt;h1&gt;
  
  
  MailMind: An AI Agent That Actually Handles Email Scheduling
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;Scheduling meetings over email is surprisingly painful.&lt;/p&gt;

&lt;p&gt;You send one mail, then it turns into a long thread:&lt;br&gt;&lt;br&gt;
“Are you free Tuesday?”&lt;br&gt;&lt;br&gt;
“No, what about Wednesday?”&lt;br&gt;&lt;br&gt;
“Let’s do next week.”&lt;br&gt;&lt;br&gt;
…and it just keeps going.&lt;/p&gt;

&lt;p&gt;The problem isn’t email itself — it’s that we’re using an unstructured system to solve a structured task.&lt;/p&gt;

&lt;p&gt;Most tools try to fix this, but they all require behavior change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calendly → click a link
&lt;/li&gt;
&lt;li&gt;AI assistants → draft replies, but don’t act
&lt;/li&gt;
&lt;li&gt;Bots → break in real conversations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to try something different:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;what if the system just worked inside email, without changing how people use it?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What MailMind does
&lt;/h2&gt;

&lt;p&gt;MailMind is an AI agent that joins an email thread and handles scheduling end-to-end.&lt;/p&gt;

&lt;p&gt;You just CC it once.&lt;/p&gt;

&lt;p&gt;From there, it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reads the conversation
&lt;/li&gt;
&lt;li&gt;understands availability from natural language
&lt;/li&gt;
&lt;li&gt;follows up if something is unclear
&lt;/li&gt;
&lt;li&gt;finds a common time
&lt;/li&gt;
&lt;li&gt;creates a calendar event
&lt;/li&gt;
&lt;li&gt;sends confirmations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No links. No UI. No extra steps.&lt;/p&gt;

&lt;p&gt;Everything happens inside the same email thread.&lt;/p&gt;




&lt;h2&gt;
  
  
  How it actually works
&lt;/h2&gt;

&lt;p&gt;At a high level, the system is event-driven.&lt;/p&gt;

&lt;p&gt;An incoming email triggers the entire pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gmail pushes an event
&lt;/li&gt;
&lt;li&gt;backend fetches full thread data
&lt;/li&gt;
&lt;li&gt;agent processes it
&lt;/li&gt;
&lt;li&gt;system decides what to do next
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of writing this as a linear script, I used a &lt;strong&gt;state-based agent loop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each step in the flow is a node:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;classify the email
&lt;/li&gt;
&lt;li&gt;extract availability
&lt;/li&gt;
&lt;li&gt;check if something is missing
&lt;/li&gt;
&lt;li&gt;compute overlaps
&lt;/li&gt;
&lt;li&gt;generate a response
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent moves between these states depending on what it sees in the thread.&lt;/p&gt;




&lt;h2&gt;
  
  
  LLM + deterministic logic
&lt;/h2&gt;

&lt;p&gt;The LLM is not running the whole system.&lt;/p&gt;

&lt;p&gt;It’s only used where natural language is involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understanding emails
&lt;/li&gt;
&lt;li&gt;detecting ambiguity
&lt;/li&gt;
&lt;li&gt;rewriting responses
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else is deterministic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;time parsing
&lt;/li&gt;
&lt;li&gt;overlap calculation
&lt;/li&gt;
&lt;li&gt;slot ranking
&lt;/li&gt;
&lt;li&gt;calendar operations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This separation makes the system more reliable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Maintaining context
&lt;/h2&gt;

&lt;p&gt;Each email thread is treated as a persistent session:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;who has replied
&lt;/li&gt;
&lt;li&gt;what time slots they gave
&lt;/li&gt;
&lt;li&gt;who is pending
&lt;/li&gt;
&lt;li&gt;preferences (like “no Fridays”)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This state is stored in SQLite and updated after every email.&lt;/p&gt;




&lt;h2&gt;
  
  
  Choosing the best time
&lt;/h2&gt;

&lt;p&gt;A scoring function ranks slots based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;attendance
&lt;/li&gt;
&lt;li&gt;preferences
&lt;/li&gt;
&lt;li&gt;priority participants
&lt;/li&gt;
&lt;li&gt;time optimization
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system selects the most practical option, not just the first valid one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Safety layer
&lt;/h2&gt;

&lt;p&gt;Before sending any email:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;draft goes to Telegram
&lt;/li&gt;
&lt;li&gt;approve / reject / edit
&lt;/li&gt;
&lt;li&gt;auto-send fallback
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Python
&lt;/li&gt;
&lt;li&gt;FastAPI
&lt;/li&gt;
&lt;li&gt;LangGraph
&lt;/li&gt;
&lt;li&gt;Gemini 2.0 Flash
&lt;/li&gt;
&lt;li&gt;SQLite
&lt;/li&gt;
&lt;li&gt;React
&lt;/li&gt;
&lt;li&gt;Gmail API
&lt;/li&gt;
&lt;li&gt;Google Calendar API
&lt;/li&gt;
&lt;li&gt;Telegram Bot API
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;Most AI tools assist.&lt;/p&gt;

&lt;p&gt;This one acts.&lt;/p&gt;

&lt;p&gt;It takes something messy (email threads) and turns it into a structured, executable workflow.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0pnlihvkpkvau3pzk57r.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0pnlihvkpkvau3pzk57r.jpeg" alt=" " width="716" height="1600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fap9gtp9m5j5kz27cv9rp.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fap9gtp9m5j5kz27cv9rp.jpeg" alt=" " width="716" height="1600"&gt;&lt;/a&gt;&lt;br&gt;
That’s where AI becomes actually useful.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
