<?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: kamin deng</title>
    <description>The latest articles on DEV Community by kamin deng (@kamindeng).</description>
    <link>https://dev.to/kamindeng</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%2F3868905%2F1c7724b3-6dd4-452e-b0f8-c47b4e719dfb.png</url>
      <title>DEV Community: kamin deng</title>
      <link>https://dev.to/kamindeng</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kamindeng"/>
    <language>en</language>
    <item>
      <title>Open Source: Control Claude Code / Codex CLI Entirely from Your Phone with Feishu (Lark) — Approve, Choose, and Send Commands on the Go</title>
      <dc:creator>kamin deng</dc:creator>
      <pubDate>Thu, 09 Apr 2026 04:10:40 +0000</pubDate>
      <link>https://dev.to/kamindeng/open-source-control-claude-code-codex-cli-entirely-from-your-phone-with-feishu-lark-approve-3opn</link>
      <guid>https://dev.to/kamindeng/open-source-control-claude-code-codex-cli-entirely-from-your-phone-with-feishu-lark-approve-3opn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Ever had this happen? Claude Code has been running for a while and finally pops up a permission prompt — but you've already walked away to grab coffee.&lt;/p&gt;

&lt;p&gt;Or Codex finishes an entire task, and you only realize it when you come back — ten minutes too late.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Today I'm open-sourcing a little tool I use daily — &lt;strong&gt;Agent Notifier&lt;/strong&gt;. It routes all interactions from Claude Code and Codex CLI to Feishu, so you can handle everything from your phone without being chained to the terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub: &lt;a href="https://github.com/KaminDeng/agent_notifier" rel="noopener noreferrer"&gt;https://github.com/KaminDeng/agent_notifier&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Problem It Solves
&lt;/h2&gt;

&lt;p&gt;When you use Claude Code or Codex CLI for coding, the biggest pain point isn't that the AI isn't smart enough — it's the &lt;strong&gt;interaction gap&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The AI needs your approval to run a command → you're away from your desk → task stalls&lt;/li&gt;
&lt;li&gt;The AI offers three approaches and asks you to pick one → you don't see it → task stalls&lt;/li&gt;
&lt;li&gt;The task finishes → you have no idea → you've been waiting for nothing for 30 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At its core, these CLI tools &lt;strong&gt;have no mobile interaction layer&lt;/strong&gt;. You have to sit in front of the terminal, watching the output in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Notifier's approach is simple: turn Feishu into your remote terminal controller.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pain Point&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stuck waiting for permission prompts at the terminal&lt;/td&gt;
&lt;td&gt;Feishu pushes interactive cards in real time — one tap on your phone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Want mobile access, but there's no official app&lt;/td&gt;
&lt;td&gt;Feishu is a full multi-platform app — iOS / Android / Mac / Windows / Web&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosted push notifications need a server, domain, and SSL&lt;/td&gt;
&lt;td&gt;Feishu's long-connection (WebSocket) mode requires no public IP — direct local connection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise app approval is a bureaucratic nightmare&lt;/td&gt;
&lt;td&gt;Feishu's custom enterprise apps get instant approval; personal accounts work too — &lt;strong&gt;completely free&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Running tasks across multiple terminals, notifications get tangled&lt;/td&gt;
&lt;td&gt;Multi-terminal parallel routing — each terminal gets its own delivery channel, no cross-talk&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  2. What It Looks Like
&lt;/h2&gt;

&lt;p&gt;Here are actual screenshots from the Feishu mobile app:&lt;/p&gt;

&lt;h3&gt;
  
  
  Permission Confirmation &amp;amp; Option Selection
&lt;/h3&gt;

&lt;p&gt;When Claude Code needs you to approve a command, or an AskUserQuestion prompt pops up with choices, Feishu sends you an interactive card:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Fpermission-confirm.jpg" 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%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Fpermission-confirm.jpg" width="800" height="1722"&gt;&lt;/a&gt;&lt;br&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%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Fpermission-options.jpg" 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%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Fpermission-options.jpg" width="800" height="1722"&gt;&lt;/a&gt;&lt;br&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%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Fask-user-question.jpg" 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%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Fask-user-question.jpg" width="800" height="1722"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Left: Permission confirmation — Allow / Deny / Allow for Session / Allow Always + text input&lt;br&gt;Center: Permission options — Tool option buttons (e.g. ExitPlanMode) + text input&lt;br&gt;Right: Option selection — AskUserQuestion with dynamic choices + Other + free-form input&lt;br&gt;Footer: project name · terminal ID (fifo:/tmp/claude-inject-ptsN) · session duration · timestamp&lt;/p&gt;

&lt;p&gt;Tap a button or type a response, and the action &lt;strong&gt;flows directly back to your local terminal&lt;/strong&gt; — as if you were typing on your keyboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Live Execution Summary
&lt;/h3&gt;

&lt;p&gt;Every time Claude invokes a tool, Feishu pushes a real-time execution summary card. Cards for the same task update in-place instead of flooding your chat:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Flive-execution.jpg" 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%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Flive-execution.jpg" width="800" height="1722"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live execution summary — tool call table · in-place patch updates for the same task&lt;br&gt;Footer: project name · timestamp&lt;/p&gt;

&lt;h3&gt;
  
  
  Task Completion Notification
&lt;/h3&gt;

&lt;p&gt;When a task finishes, you get a completion card with a change summary, token usage, and duration stats. There's a text input at the bottom so you can continue the conversation right away:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Ftask-complete.jpg" 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%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Ftask-complete.jpg" width="800" height="1722"&gt;&lt;/a&gt;&lt;br&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%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Ftask-complete-stats.jpg" 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%2Fcdn.jsdelivr.net%2Fgh%2FKaminDeng%2Fagent_notifier%40master%2Fdocs%2Fimages%2Ftask-complete-stats.jpg" width="800" height="1722"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Left: Change summary + text input to continue chatting&lt;br&gt;Right: Test results table + text input to continue chatting&lt;br&gt;Footer: project name · session duration · timestamp · token usage breakdown (input / output / cache read / cache write)&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Supported Card Types
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Card Color&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Permission confirmation&lt;/td&gt;
&lt;td&gt;Orange&lt;/td&gt;
&lt;td&gt;Allow / Allow for Session / Deny + text input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AskUserQuestion (single choice)&lt;/td&gt;
&lt;td&gt;Orange&lt;/td&gt;
&lt;td&gt;Dynamic option buttons + Other + text input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AskUserQuestion (multi-part)&lt;/td&gt;
&lt;td&gt;Orange&lt;/td&gt;
&lt;td&gt;Q1 → Q2 → Q3 sent sequentially&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task complete&lt;/td&gt;
&lt;td&gt;Green&lt;/td&gt;
&lt;td&gt;Summary, duration, tokens + text input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Abnormal exit&lt;/td&gt;
&lt;td&gt;Red&lt;/td&gt;
&lt;td&gt;Error details + text input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live execution summary&lt;/td&gt;
&lt;td&gt;Blue&lt;/td&gt;
&lt;td&gt;In-place patch updates for the same task&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  4. Why Feishu Instead of WeChat / Telegram / Slack?
&lt;/h2&gt;

&lt;p&gt;This is the question I get asked the most, so let me address it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Feishu custom apps are free&lt;/strong&gt; — you can create one with a personal account, and enterprise approval is instant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feishu supports long connections (WebSocket)&lt;/strong&gt; — no public IP or domain required. Whether you're at home, at the office, or on a VPN, it just works&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feishu's interactive card system is incredibly powerful&lt;/strong&gt; — buttons, text inputs, tables, multi-column layouts — far beyond what a basic message notification can do&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feishu syncs natively across all devices&lt;/strong&gt; — phone, desktop, tablet, and web all receive and can interact with the same card&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No need to build a separate app&lt;/strong&gt; — the Feishu client itself becomes your remote control&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That said, the architecture uses a channel abstraction layer (&lt;code&gt;src/channels/&lt;/code&gt;), so adding support for other platforms is straightforward.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Get Started in 5 Minutes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js &amp;gt;= 18&lt;/li&gt;
&lt;li&gt;Python 3 (for the PTY terminal relay)&lt;/li&gt;
&lt;li&gt;A Feishu account&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repo&lt;/span&gt;
git clone https://github.com/KaminDeng/agent_notifier.git
&lt;span class="nb"&gt;cd &lt;/span&gt;agent_notifier

&lt;span class="c"&gt;# 2. Edit .env with your Feishu app credentials (auto-created on first run)&lt;/span&gt;
&lt;span class="c"&gt;#    FEISHU_APP_ID=your_app_id&lt;/span&gt;
&lt;span class="c"&gt;#    FEISHU_APP_SECRET=your_app_secret&lt;/span&gt;

&lt;span class="c"&gt;# 3. One-command install (handles all configuration automatically)&lt;/span&gt;
bash install.sh

&lt;span class="c"&gt;# 4. Reload your shell&lt;/span&gt;
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc  &lt;span class="c"&gt;# or source ~/.bashrc&lt;/span&gt;

&lt;span class="c"&gt;# 5. Use Claude Code as usual&lt;/span&gt;
claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;install.sh&lt;/code&gt; automatically takes care of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installing npm dependencies&lt;/li&gt;
&lt;li&gt;Writing Claude Code hooks to &lt;code&gt;~/.claude/settings.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Injecting &lt;code&gt;claude&lt;/code&gt; / &lt;code&gt;codex&lt;/code&gt; shell wrapper functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starting the Feishu listener and registering it for auto-start&lt;/strong&gt; (launchd on macOS, systemd on Linux)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Running &lt;code&gt;install.sh&lt;/code&gt; again is safe — it always cleans up before reinstalling.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Feishu App Setup (3 Minutes)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Log in to the &lt;a href="https://open.feishu.cn" rel="noopener noreferrer"&gt;Feishu Open Platform&lt;/a&gt; and create a custom enterprise app&lt;/li&gt;
&lt;li&gt;Copy the App ID / App Secret into your &lt;code&gt;.env&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Enable bot capabilities&lt;/li&gt;
&lt;li&gt;Set the event subscription to &lt;strong&gt;Long Connection&lt;/strong&gt; (no public IP needed)&lt;/li&gt;
&lt;li&gt;Add the event: &lt;code&gt;card.action.trigger&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Request permissions: &lt;code&gt;im:message&lt;/code&gt;, &lt;code&gt;im:message:send_as_bot&lt;/code&gt;, &lt;code&gt;im:chat:readonly&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Publish the app and add the bot to your target group&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. No domain, no SSL certificates, no dedicated server.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Cross-Platform Support
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Service Management&lt;/th&gt;
&lt;th&gt;Auto-Start&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;launchd&lt;/td&gt;
&lt;td&gt;RunAtLoad + KeepAlive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux (systemd)&lt;/td&gt;
&lt;td&gt;systemd user service&lt;/td&gt;
&lt;td&gt;systemctl --user enable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux (SSH / no systemd)&lt;/td&gt;
&lt;td&gt;nohup + crontab &lt;a class="mentioned-user" href="https://dev.to/reboot"&gt;@reboot&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;crontab fallback&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Uninstalling is a single command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash uninstall.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This cleans up all configuration, stops services, and removes hooks and shell injections.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. How It Works (Brief Overview)
&lt;/h2&gt;

&lt;p&gt;There are two main pipelines:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code Pipeline:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Hooks fire an event → hook-handler.js parses it → generates Feishu interactive card
                                                              ↓
User taps/types in Feishu → feishu-listener.js receives callback → injects input into local terminal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Codex CLI Pipeline:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pty-relay.py creates a PTY terminal proxy → captures Codex output → generates Feishu card
                                                              ↓
User taps/types in Feishu → feishu-listener.js receives callback → injects input via FIFO into terminal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Terminal injection supports multiple methods: tmux, PTY FIFO, pty master direct write, and TIOCSTI — the best method is auto-detected.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Project Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;agent_notifier/
├── install.sh / uninstall.sh          # Install / uninstall
├── hook-handler.js / live-handler.js  # Claude Hooks entry points (thin shims)
├── bin/
│   └── pty-relay.py                   # PTY terminal relay
├── src/
│   ├── apps/                          # App entry points (claude-hook, claude-live, feishu-listener, etc.)
│   ├── adapters/                      # Claude / Codex adapters
│   ├── channels/                      # Feishu channel (card rendering, client, interaction handling)
│   ├── core/                          # Low-level primitives (session store, terminal injector)
│   └── lib/                           # App-level services (env config, session state, terminal inject)
├── tests/                             # 81 test cases
└── scripts/                           # Debug / test scripts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. Who Is This For?
&lt;/h2&gt;

&lt;p&gt;If any of the following apply to you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You use Claude Code or Codex CLI for daily coding&lt;/li&gt;
&lt;li&gt;You frequently step away from your desk and don't want tasks stalling on permission prompts&lt;/li&gt;
&lt;li&gt;You want to interact with your AI coding assistant from your phone&lt;/li&gt;
&lt;li&gt;You run multiple terminals simultaneously and need a unified notification hub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then this tool was built for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The project is fully open source under the MIT license. Stars, forks, and issues are all welcome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub: &lt;a href="https://github.com/KaminDeng/agent_notifier" rel="noopener noreferrer"&gt;https://github.com/KaminDeng/agent_notifier&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you find this tool useful, a star on the repo is the best way to show your support. Feel free to open an issue if you have questions or feedback.&lt;/p&gt;

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