<?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: David Daniel</title>
    <description>The latest articles on DEV Community by David Daniel (@daviddanielng).</description>
    <link>https://dev.to/daviddanielng</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1094393%2F4d2232ff-122b-4c2c-8ac8-bd2388b26bb4.jpg</url>
      <title>DEV Community: David Daniel</title>
      <link>https://dev.to/daviddanielng</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/daviddanielng"/>
    <language>en</language>
    <item>
      <title>Midway: go make coffee while your build runs, and get pinged when it's done</title>
      <dc:creator>David Daniel</dc:creator>
      <pubDate>Sat, 17 Oct 2026 15:46:03 +0000</pubDate>
      <link>https://dev.to/daviddanielng/midway-go-make-coffee-while-your-build-runs-and-get-pinged-when-its-done-517e</link>
      <guid>https://dev.to/daviddanielng/midway-go-make-coffee-while-your-build-runs-and-get-pinged-when-its-done-517e</guid>
      <description>&lt;p&gt;I kept doing the same thing: start a long build, switch to something else, then either check the terminal every minute or forget about it for half an hour. The same thing happened with AI coding agents, which spend a lot of time working or waiting for approval while I'm in another window.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Midway&lt;/strong&gt;, an open-source CLI written in Rust. Start your command, go make a coffee, and Midway tells you when it needs you.&lt;/p&gt;

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

&lt;p&gt;Run your command through Midway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;midway run cargo build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While it runs, Midway sends periodic "still running" notifications (every 15 seconds by default). When it finishes, you get a completion notification, as long as the command ran for at least 10 seconds, so quick commands don't spam you. Both behaviors are configurable under &lt;code&gt;command_notifications&lt;/code&gt; in &lt;code&gt;midway.yaml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can also send a notification directly, which is useful at the end of scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;midway send-text &lt;span class="nt"&gt;--message&lt;/span&gt; &lt;span class="s2"&gt;"Deploy finished"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Where notifications go
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Local desktop notifications&lt;/li&gt;
&lt;li&gt;Email&lt;/li&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;Ntfy&lt;/li&gt;
&lt;li&gt;Discord&lt;/li&gt;
&lt;li&gt;Telegram&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That means the ping can follow you to your phone while you're away from your desk. Setup for each is in the &lt;a href="https://midway.hazyio.com/notifications/local" rel="noopener noreferrer"&gt;notification docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install &lt;/span&gt;midway-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prebuilt releases are available for Linux x86_64, Windows x86_64 and Apple Silicon macOS. On other platforms (ARM64 Windows or Linux, Intel macOS), &lt;code&gt;cargo install&lt;/code&gt; builds it for your machine.&lt;/p&gt;

&lt;p&gt;Then create a config and try it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;midway init
midway run cargo build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Notifications for AI coding agents
&lt;/h2&gt;

&lt;p&gt;This is the part I use most. Most coding agents support lifecycle hooks, which are commands that run when the agent finishes or needs your approval. Point those hooks at &lt;code&gt;midway send-text&lt;/code&gt; and you can walk away from the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;midway send-text &lt;span class="nt"&gt;--message&lt;/span&gt; &lt;span class="s2"&gt;"Agent finished"&lt;/span&gt; &lt;span class="nt"&gt;--background&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;--background&lt;/code&gt; flag detaches the send into its own process and returns immediately, so the notification still goes out if the agent or the hook process is interrupted. A detached process is not invincible: it can still die on system shutdown, an explicit kill, or teardown of an ephemeral environment.&lt;/p&gt;

&lt;p&gt;There are setup guides for Claude Code, Codex CLI, GitHub Copilot, Gemini CLI, Antigravity CLI, OpenCode and Cursor in the &lt;a href="https://midway.hazyio.com/agents/index" rel="noopener noreferrer"&gt;docs&lt;/a&gt;. Hook formats change often between agent versions, so if a snippet doesn't work, check your agent's current hook documentation and open an issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chained command support (&lt;code&gt;a &amp;amp;&amp;amp; b&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Including log lines in notifications&lt;/li&gt;
&lt;li&gt;More services: Microsoft Teams, Google Chat, Mattermost and Rocket.Chat, Zulip, Matrix, and a generic webhook&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it and tell me what's missing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/hazyio/midway" rel="noopener noreferrer"&gt;https://github.com/hazyio/midway&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://midway.hazyio.com/" rel="noopener noreferrer"&gt;https://midway.hazyio.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If there's a service you want supported, or a workflow where the notification timing doesn't fit, open an issue. I'm especially interested in feedback on the config format.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>rust</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
