<?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: Aiden Wong</title>
    <description>The latest articles on DEV Community by Aiden Wong (@aidenwong).</description>
    <link>https://dev.to/aidenwong</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%2F3888467%2F7abd88ec-6cca-4cf4-b306-f583f434e664.png</url>
      <title>DEV Community: Aiden Wong</title>
      <link>https://dev.to/aidenwong</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aidenwong"/>
    <language>en</language>
    <item>
      <title>Track Multiple AI Agents state</title>
      <dc:creator>Aiden Wong</dc:creator>
      <pubDate>Mon, 20 Apr 2026 09:38:59 +0000</pubDate>
      <link>https://dev.to/aidenwong/track-multiple-ai-agents-state-4bhj</link>
      <guid>https://dev.to/aidenwong/track-multiple-ai-agents-state-4bhj</guid>
      <description>&lt;h2&gt;
  
  
  Why multi-agent tracking is a new problem
&lt;/h2&gt;

&lt;p&gt;Tracking one long-running task is easy. You can watch the terminal, or use a shell trick:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Play a bell sound when the last command finishes&lt;/span&gt;
long-running-comman&lt;span class="sb"&gt;``&lt;/span&gt;d&lt;span class="p"&gt;;&lt;/span&gt; afplay /System/Library/Sounds/Glass.aiff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tracking &lt;strong&gt;multiple agents across different tools&lt;/strong&gt; is harder because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Each IDE has its own event model.&lt;/strong&gt; Claude Code has a hooks system. Cursor emits MCP events. VS Code has extension APIs. Codex is CLI-first. There's no standard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You don't always know which agent is the bottleneck.&lt;/strong&gt; If three are running, the one that finishes first might free you to continue — but which is it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mental context is expensive.&lt;/strong&gt; "Let me just peek at Cursor" costs you 10 seconds and 30 seconds of flow loss. Multiply by 20 peeks a day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notifications fatigue is real.&lt;/strong&gt; macOS native banners get ignored. Slack-style pings get ignored. You need a system that's &lt;em&gt;passive&lt;/em&gt; — always visible but not intrusive.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The best solution isn't necessarily one that notifies the most. It's one that makes state &lt;strong&gt;ambient&lt;/strong&gt; — visible at a glance without demanding attention.&lt;/p&gt;




&lt;h2&gt;
  
  
  Approach 1: Watch the terminal (manual)
&lt;/h2&gt;

&lt;p&gt;The default. You keep the IDE visible, and you context-switch to check it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero setup.&lt;/li&gt;
&lt;li&gt;Works for any tool.&lt;/li&gt;
&lt;li&gt;No tooling to maintain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breaks flow for every check.&lt;/li&gt;
&lt;li&gt;Doesn't scale past 2 agents.&lt;/li&gt;
&lt;li&gt;Stops working entirely if you leave your desk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When it's fine&lt;/strong&gt;: solo agent running, short tasks (&amp;lt; 2 minutes), you're actively pairing with the AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it's not&lt;/strong&gt;: anything longer than 5 minutes, any time you want to do something else while waiting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Approach 2: Terminal bells and shell hooks
&lt;/h2&gt;

&lt;p&gt;One step up. You rig your shell to beep (or trigger a macOS notification) when commands finish.&lt;/p&gt;

&lt;p&gt;For &lt;code&gt;zsh&lt;/code&gt;, you can add this to &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Beep when any command in this shell finishes&lt;/span&gt;
precmd&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt; &lt;span class="nt"&gt;-ne&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;osascript &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'display notification "Command failed" with title "Shell"'&lt;/span&gt;
  &lt;span class="k"&gt;else
    &lt;/span&gt;osascript &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'display notification "Command done" with title "Shell"'&lt;/span&gt;
  &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Claude Code specifically, you can use its &lt;a href="https://docs.claude.com/en/docs/claude-code/hooks" rel="noopener noreferrer"&gt;hooks system&lt;/a&gt; to run arbitrary scripts when the agent finishes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Stop"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"osascript -e 'display notification &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Claude done&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; with title &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;AgentBell&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real notifications (not just visual).&lt;/li&gt;
&lt;li&gt;Works in the background.&lt;/li&gt;
&lt;li&gt;Simple, customizable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different setup per tool (you need a hook for Claude Code, a shell wrapper for Codex, an extension for Cursor).&lt;/li&gt;
&lt;li&gt;Notifications are uniform ("command done") — no distinction between which tool or which task.&lt;/li&gt;
&lt;li&gt;macOS notifications silently disappear after 5 seconds. Miss it and you miss it.&lt;/li&gt;
&lt;li&gt;No unified state. If three notifications fired, you don't know which is which.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When it's fine&lt;/strong&gt;: single-IDE workflow, you only care about binary "done vs not done" signal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it's not&lt;/strong&gt;: multi-IDE setup, or when you want to see state at a glance without waiting for a notification to fire.&lt;/p&gt;




&lt;h2&gt;
  
  
  Approach 3: Polling scripts + menu bar utilities
&lt;/h2&gt;

&lt;p&gt;Some devs write cron scripts or menu bar utilities (like &lt;a href="https://getbitbar.com" rel="noopener noreferrer"&gt;BitBar&lt;/a&gt;, &lt;a href="https://swiftbar.app" rel="noopener noreferrer"&gt;SwiftBar&lt;/a&gt;, or &lt;a href="https://xbarapp.com" rel="noopener noreferrer"&gt;xbar&lt;/a&gt;) that poll the state of running processes and surface a summary.&lt;/p&gt;

&lt;p&gt;Example — a SwiftBar script that checks if Claude Code is still running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# claude-status.5s.sh — refreshes every 5 seconds&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;pgrep &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"claude"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🟢 Claude running"&lt;/span&gt;
&lt;span class="k"&gt;else
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"⚪️ Claude idle"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ambient state in the menu bar — no notification required.&lt;/li&gt;
&lt;li&gt;Fully customizable.&lt;/li&gt;
&lt;li&gt;Free.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Polling is fundamentally inaccurate. "Process running" ≠ "task running". Claude Code's process is always running; it's the agent inside that has state.&lt;/li&gt;
&lt;li&gt;You have to write and maintain scripts per IDE.&lt;/li&gt;
&lt;li&gt;No event-driven precision. If Claude finishes and starts a new task in 10 seconds, your polling window misses the transition.&lt;/li&gt;
&lt;li&gt;Error states are hard to detect from outside.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When it's fine&lt;/strong&gt;: you're comfortable writing shell scripts, you have specific workflow quirks, and you only care about coarse state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it's not&lt;/strong&gt;: you want accurate, event-driven status across multiple IDEs without writing custom code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Approach 4: Dedicated menu bar companion (AgentBell)
&lt;/h2&gt;

&lt;p&gt;This is what I ended up building after exhausting approaches 1-3.&lt;/p&gt;

&lt;p&gt;The idea: one menu bar app that receives events from each IDE natively (via MCP protocol, native hooks, or file-based IPC) and shows unified state across all of them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentbell.dev" rel="noopener noreferrer"&gt;AgentBell&lt;/a&gt; supports:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IDE / Tool&lt;/th&gt;
&lt;th&gt;How it's integrated&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Native hooks (&lt;code&gt;before_agent_start&lt;/code&gt;, &lt;code&gt;agent_end&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;MCP server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;Hook scripts + file-based IPC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windsurf&lt;/td&gt;
&lt;td&gt;MCP server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code&lt;/td&gt;
&lt;td&gt;MCP server (with extension)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenClaw&lt;/td&gt;
&lt;td&gt;Plugin (hooks)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When a task starts, completes, or errors in any of these, AgentBell:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Updates the menu bar icon (color + optional badge count).&lt;/li&gt;
&lt;li&gt;Plays a sound (configurable per event type).&lt;/li&gt;
&lt;li&gt;Fires an optional desktop notification.&lt;/li&gt;
&lt;li&gt;Optionally animates a desktop companion character.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unified state across every AI IDE you use.&lt;/li&gt;
&lt;li&gt;Event-driven, not polling. Accurate to the second.&lt;/li&gt;
&lt;li&gt;Sound + visual + ambient character (if you want it) — three redundant channels so you don't miss state changes.&lt;/li&gt;
&lt;li&gt;Per-IDE task list in the menu bar popover (click an IDE name → jump to that window).&lt;/li&gt;
&lt;li&gt;Does NOT read your code or conversations. Only reads task state signals.&lt;/li&gt;
&lt;li&gt;Free tier covers all IDE integrations; you only pay if you want the character store, voice packs, or dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS only (Apple Silicon + Intel). No Windows/Linux yet.&lt;/li&gt;
&lt;li&gt;Another app to trust (though we've tried to be transparent: &lt;a href="https://agentbell.dev/privacy" rel="noopener noreferrer"&gt;privacy policy&lt;/a&gt;, plugins open-source on &lt;a href="https://github.com/agentbell" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;If you only use one IDE, the overhead isn't worth it — use approach 2 instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When it's worth it&lt;/strong&gt;: if you run 2+ AI coding agents simultaneously, or if you frequently leave your desk while agents are running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it's not&lt;/strong&gt;: single-tool workflows, or if you're allergic to running any third-party app.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparison table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Watch terminal&lt;/th&gt;
&lt;th&gt;Shell hooks&lt;/th&gt;
&lt;th&gt;Polling menu bar&lt;/th&gt;
&lt;th&gt;AgentBell&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-IDE state unified&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️ Custom work&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Event-driven (not polling)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ambient (always visible)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Setup time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 min&lt;/td&gt;
&lt;td&gt;10-60 min&lt;/td&gt;
&lt;td&gt;1-3 hours&lt;/td&gt;
&lt;td&gt;2 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Notification fatigue risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Low-medium (configurable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free tier + Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Any&lt;/td&gt;
&lt;td&gt;Any&lt;/td&gt;
&lt;td&gt;Mostly macOS&lt;/td&gt;
&lt;td&gt;macOS only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reads your code?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You do&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Practical workflow tips (work with any approach above)
&lt;/h2&gt;

&lt;p&gt;Independent of which tool you choose, these habits help:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Name your agent sessions
&lt;/h3&gt;

&lt;p&gt;If you run multiple Claude Code sessions, name them meaningfully: &lt;code&gt;claude --session-name "payment-api-refactor"&lt;/code&gt;. Makes state tracking easier for humans and tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Batch long tasks
&lt;/h3&gt;

&lt;p&gt;If you know a task will take 15+ minutes, kick it off &lt;em&gt;before&lt;/em&gt; you start something else, not simultaneously. Running three 15-minute tasks in parallel is a context-switching nightmare.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Set expectations upfront
&lt;/h3&gt;

&lt;p&gt;Tell your agent the expected duration in the prompt: &lt;em&gt;"This should take about 10 minutes. When done, summarize what you changed."&lt;/em&gt; Helps both the agent and your tracking tool show meaningful state.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Use distinct sounds per event type
&lt;/h3&gt;

&lt;p&gt;Bug your ears into muscle memory. "Done" sound is one ping. "Error" sound is different. "Waiting for input" is a third. After a week your brain processes them without conscious thought.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Don't over-notify
&lt;/h3&gt;

&lt;p&gt;Set up your system so only &lt;em&gt;state transitions&lt;/em&gt; fire alerts, not heartbeats. "Task 25% complete" pings are noise. "Task done" is signal.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Have a dedicated "agent desk mode"
&lt;/h3&gt;

&lt;p&gt;Full-screen your IDEs, disable all social notifications, run agents in parallel. Treat the wait time as focused time for reading docs, reviewing diffs, or doing something analog.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;If you run &lt;strong&gt;one agent at a time&lt;/strong&gt;: stick with shell hooks (Approach 2). Cheap, simple.&lt;/li&gt;
&lt;li&gt;If you're &lt;strong&gt;handy with scripts and don't mind polling inaccuracy&lt;/strong&gt;: SwiftBar + custom polling (Approach 3).&lt;/li&gt;
&lt;li&gt;If you run &lt;strong&gt;multiple AI agents across multiple IDEs&lt;/strong&gt;: a dedicated tool like &lt;a href="https://agentbell.dev" rel="noopener noreferrer"&gt;AgentBell&lt;/a&gt; pays for itself in reclaimed attention. Free tier covers basic multi-IDE tracking across Claude Code, Cursor, Codex, Windsurf, VS Code, and OpenClaw.&lt;/li&gt;
&lt;li&gt;Whatever tool you pick, &lt;strong&gt;make state ambient&lt;/strong&gt; — visible without demanding attention. The goal isn't more notifications; it's fewer context switches.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is there a cross-platform tool for this?
&lt;/h3&gt;

&lt;p&gt;Not a great one yet. AgentBell is macOS-only. On Windows, you can build something with &lt;a href="https://learn.microsoft.com/en-us/windows/powertoys/" rel="noopener noreferrer"&gt;PowerToys Quick Accent&lt;/a&gt; plus custom scripts, or use a menu bar alternative like &lt;a href="https://github.com/traybar" rel="noopener noreferrer"&gt;Traybar&lt;/a&gt; — both require more manual integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does this work with agents I deploy to the cloud (e.g., via GitHub Copilot Workspace or a Codex batch job)?
&lt;/h3&gt;

&lt;p&gt;Partially. Cloud-deployed agents can POST events to AgentBell's webhook endpoint (or write to a file, or use the MCP server running locally). The state will show up in your menu bar as if it were local. Setup is a bit more involved.&lt;/p&gt;

&lt;h3&gt;
  
  
  I don't use macOS — can I contribute a Windows / Linux port?
&lt;/h3&gt;

&lt;p&gt;Currently the app is closed-source, but the plugins and MCP server are MIT-licensed on &lt;a href="https://www.npmjs.com/package/@agentbell/mcp-server" rel="noopener noreferrer"&gt;npm&lt;/a&gt;. If enough devs want a Windows port, we'll prioritize it — &lt;a href="https://agentbell.dev" rel="noopener noreferrer"&gt;let us know&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use this with a terminal multiplexer like tmux or Zellij?
&lt;/h3&gt;

&lt;p&gt;Yes. Kick off agents inside tmux panes, and point AgentBell's hooks at the shell inside the panes. Works the same way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does AgentBell read my code?
&lt;/h3&gt;

&lt;p&gt;No. It only listens for state signals: task started, task done, task errored, task waiting for input. Your source code and agent conversations never leave your machine. See our &lt;a href="https://agentbell.dev/privacy" rel="noopener noreferrer"&gt;privacy policy&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I write about AI coding tools and the craft of building developer tools. If you want to know when I publish, &lt;a href="https://x.com/agentbell_wy" rel="noopener noreferrer"&gt;follow me on Twitter&lt;/a&gt; &lt;a href="https://www.youtube.com/@ImAIAiden" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt; or subscribe to the &lt;a href="https://agentbell.dev" rel="noopener noreferrer"&gt;agentbell.dev newsletter&lt;/a&gt;.&lt;/em&gt;&lt;br&gt;
`&lt;/p&gt;

</description>
      <category>ai</category>
      <category>multiplatform</category>
      <category>claude</category>
      <category>cursor</category>
    </item>
  </channel>
</rss>
