How do you stay aware of what your AI coding agents are doing?

by

I've been running Claude Code, Cursor, and Codex pretty heavily for the last few months and I keep hitting the same loop:

1. Start a task in one agent

2. Switch to something else (Slack, Twitter, another terminal)

3. Come back 30-40 minutes later

4. Agent finished 35 minutes ago. Or worse, it's been waiting for my approval the entire time.

The more agents I run, the worse it gets. There's no unified way to know what's happening across them.

Curious what other people's setups look like:

- Do you just keep terminals visible and check manually?

- Built any custom notification scripts?

- Use something like ntfy or Pushover?

- Just... accept the wasted time?

I've been building something in this space (push notifications + approval flows for AI agents) and I'm trying to understand if everyone's workflow is as janky as mine, or if some of you have figured out something clever.

Would love to hear what's working and what's not.

4.1K views

Add a comment

Replies

Best

I had the same issue, so I built a "desktop aquarium" for myself to keep me on track of what AI is doing.

It does absolutely nothing—until your AI starts cooking. It acts as a status light so you can zone out with a clear conscience:

Blue: Nothing/job done

Dynamic RGB: AI generating code. (Enjoy the view) 🟨

Amber: AI needs feedback. (Back to work)

 

A desktop aquarium as an agent status light is the most charming thing in this entire thread, and underneath the whimsy you solved the exact problem everyone else is overcomplicating. You turned monitoring into ambient peripheral vision. Nobody "checks" an aquarium, you just notice when it changes color, which means zero context-switch cost. That's the part most notification systems miss: the best status signal isn't one you read, it's one your eyes catch without focusing. You made the awareness free.

Your three states are also quietly correct. Blue for done-or-idle, the generating shimmer as pure ambient "it's alive, relax," and amber as the only one that actually pulls you back. That's the done/working/needs-you split everyone in this thread keeps reinventing, except yours doesn't make you read anything. The genius is that amber is the only color that costs you attention, and it only fires when attention is actually owed.

Here's the one ceiling, and you already know it because you said "for myself": the aquarium is on your desk. It's a beautiful local solution to a problem that follows you to lunch, to meetings, to the moment you've walked away, which is precisely when the amber matters most. Glanceable is perfect while you're in the room. The thread's whole pain is the thirty minutes you weren't.

That's the only real difference between your aquarium and what I'm building, honestly, Pushary is the amber light that travels, plus the part the aquarium can't carry, which question it's asking and what changed, so you can answer without walking back. Same philosophy, ambient until it isn't, but it reaches your pocket. Genuine question, because you clearly think about this well: does the amber alone get you back fast enough, or do you still lose time walking over to read which question it's stuck on? The "what is it even asking" gap is the thing I can't see how to solve with color, and I'm curious if it bites you too.

sometimes after I start a task in agent, then I start dive into tiktok lol, after waste 30 minutes, I seemed to realize something, and then quickly switched back.

 

Ha, the TikTok-to-panic-switch is the most honest workflow anyone's posted in this whole thread. "I seemed to realize something" is doing a lot of work there, that's your brain's background process quietly pinging you that the agent probably finished twenty minutes ago. You built a notification system out of guilt. It works, it's just powered by vibes and has a 30-minute latency.

The actual problem isn't the TikTok, by the way. Zoning out while the agent works is fine, that's the dream, the agent works so you don't have to hover. The problem is the only thing that pulls you back is a random pang instead of the agent actually telling you it's done or stuck. You're using your own restlessness as the alert, which is both unreliable and a little stressful, you can never fully relax because part of you is on guard duty.

That's the whole pitch, honestly: let the agent ping your phone when it's actually done or needs a yes, so you can scroll with a clear conscience and get pulled back exactly when it matters, not 30 minutes after. Same TikTok, zero guilt, no wasted half-hour. Question for you, since you live this: would a buzz on your phone actually pull you out of TikTok, or would you swipe it away like every other notification? I keep wondering if the agent alert needs to feel different from the noise, or people will just train themselves to ignore it too.

 yeah you are right, sometimes agent alert still can't push me back to the work, cause The more I immerse myself, the harder it is to detach. Maybe the best way to get rid of is stop watch tiktop at the beginning.

 

Honestly? That's the wisest thing in the thread, and it's me who should concede here, not you. You've spotted the real ceiling on my whole pitch: a notification fights for your attention, but TikTok is engineered by thousands of people to win that exact fight. "The more I immerse, the harder it is to detach" is the truth no buzz can solve, because the alert and the feed are competing for the same attention and the feed is built to never lose. I can make the alert better. I can't make it stronger than an algorithm designed for immersion.

So you're right: the cleanest fix isn't a better interruption, it's not opening the thing that's hard to climb out of. No tool beats not needing the tool.

But here's where I'd gently push back on giving up entirely. "Stop watching TikTok" is correct and also, let's be real, not going to happen on a Tuesday afternoon, willpower is the strategy that fails quietly every time. So the realistic version isn't "never zone out," it's "zone out into something you can actually be pulled out of." A podcast, a walk, dishes, even a worse game, all of those let an alert win. TikTok specifically is the one that defeats the alert. So maybe the rule isn't no zoning out, it's no zoning out into the one feed engineered to trap you.

That's a more honest pitch than I gave you the first time: the buzz works fine against normal distraction, it just loses to TikTok specifically, and the fix for that one is on you, not the tool. Genuine question, last one: if the alert can't reliably pull you out, would a different shape help, like the agent just refusing to sit idle, doing the next safe step on its own so there's less waiting for you to even drift away from? Sometimes the answer to "I got distracted while it waited" is "make it wait less," not "interrupt me better."

 Yes, if the agent executes tasks faster, it will become harder for me to fall into the terrible state of being immersed in TikTok. However, I still believe this is not the ultimate solution. Do you remember how we used to solve tasks before the era of AI? We relied on our own brains to think, immersing ourselves in every specific and minute detail of logic, piecing together ideas bit by bit, and finally presenting them in the form of code. Now, AI has replaced our thinking process, leaving us confused and at a loss, naturally drawn to TikTok. I believe that even in the age of AI, even when agents work on our behalf, we must reclaim our ability to think. This could mean thinking divergently about other tasks or planning future tasks in advance.

I mostly stay aware by pair-programming with the agent in a chat UI where I review its terminal commands and code changes before approving. For example, my AI assistant just helped me write, build, and deploy the launch landing page to Vercel, while I verified the screenshots. It's like having a very fast junior developer where you act as the architect.

 

You've hit a real wall, but I think it's two different problems wearing the same costume, and separating them is the whole fix.

Problem one is execution context: what the agent needs loaded to do the work right now. That's the one that gets slow and token-hungry as it grows, because every message re-sends the whole pile and you pay for it each turn. Problem two is awareness context: what you need to know about what the agent did, status, what changed, what it's waiting on. People try to solve both with one giant growing context, and that's what's killing you, you're making the agent carry your audit trail in its working memory, so the thing it needs to think and the thing you need to review are competing for the same expensive space.

The move is to stop storing awareness inside the agent's context at all. When the agent finishes a step, it emits a small structured summary, files touched, what changed, what it's blocked on, and that gets written somewhere durable outside the conversation. Then you can prune the execution context aggressively, because the record of what happened doesn't live in the chat anymore, it lives in the log. The agent stays fast and cheap because its context only holds what it needs to act, not the full history of everything it's done. You get the persistent context you want, the agent doesn't pay tokens to carry it.

That externalized summary trail is basically what Pushary is, the per-step handoff lives outside the agent, so awareness persists without bloating the thing that has to stay lean. You're right that you need context maintained locally somewhere, the key word is somewhere, just not inside the agent's working memory where it taxes every reply.

Question back, since you've felt the token pain directly: when context gets large and replies slow down, is it mostly the agent re-reading its own past work, or genuinely needing all of it to make the next decision? Because if it's the former, externalizing the history fixes the cost outright. If the agent truly needs the whole history live to decide well, that's a harder problem and a more interesting one.

i think you need to maintain context locally somewhere , i ran into similar issue but the problem is if context gets large either replies becoe too slow from agent or it eats up lot of token per message

 

"You act as the architect" is the right frame, and notice what you're really doing: not watching the agent, gating it. You stay in the loop by being the approval step, not the babysitter. That's the healthy version of this.

The catch your own example reveals is that it works because you were there. Write, build, deploy, verify screenshots, that's one continuous session where you're sitting in the chat approving inline. It holds perfectly until you step away mid-task, and on a deploy that's the worst moment to be gone: the agent hits the gate, freezes, and your approve-as-you-go flow becomes a stalled terminal waiting on a yes you're not there to give.

So the inline-approval pattern is right for synchronous work and has exactly one failure mode: it assumes you're present. The whole thread's pain is the async case, the architect walked away and the junior is politely stuck. That's the only gap I'm filling, take the same approve-before-it-acts gate you already trust and let it reach your phone when you're not in the chair.

Question, since your flow clearly works: do you ever start something and step away, or only run the agent when you can sit and approve live? If it's the latter, you've solved this by never leaving, which is valid, it just caps how much you can run at once. Curious if that's a choice or a constraint.

 stepping away genrally meant everything stops , its not running continously!

 

Right, and that's the part that turns a small annoyance into a real cost. It's not that you walked away and missed an update, it's that walking away halts the whole thing. The agent isn't running while you're gone, it's parked, waiting on you, doing nothing. So every minute you're away is a minute of zero progress, not background progress you'll catch up on later. Stepping away doesn't cost you awareness, it costs you throughput.

Which means the question underneath this is sharper than notifications: why does it stop at all? It stops because it hit something it wasn't allowed to do without you, and you weren't there to say yes. So there are really two fixes, and they're different. One is let it ask you remotely, you approve from your phone, it unparks immediately instead of waiting for you to physically come back. The other is let it not have to ask in the first place for the safe stuff, set a policy once so routine actions clear themselves and it only parks on the genuinely risky calls. The first shrinks the wait. The second removes most of the waits entirely.

That combination is the actual fix for "everything stops when I step away," approve the few things that truly need you without being at your desk, and pre-authorize the many things that don't so it keeps moving on its own. The goal is that stepping away stops meaning stepping on the brakes.

Question, since you've felt this directly: when it parks waiting on you, is it usually blocked on something genuinely risky, or on routine stuff it could safely have done if you'd told it the rules up front? Because if it's mostly routine, you don't primarily have a notification problem, you have a permissions problem, and the fix is letting it do more unattended, not catching the stops faster.

i understand your point but it honestly does not bother me , i am stepping away because either i need a mental brake or i am doing some other thing which is much important and i can tackle this later ! But ofcourse your use case is valid and i understand your premise ! Best of luck !

I'm a marketer who builds, not a deep engineer, so I run fewer agents than you. But the loop you described kills me too. Come back, it finished 35 min ago, or worse, it's been idle waiting on my approval the whole time.

What works for me is boring:

I batch the approval-heavy tasks and check them at set times instead of babysitting one live. And I front-load the spec so the agent needs fewer mid-run approvals. Most of my wasted time wasn't the agent finishing early, it was me under-briefing it, so it stopped to ask.

Beyond that, I keep terminals visible and check manually. The exact janky setup you're trying to kill. So no, you're not alone.

On your product: the "it's done" ping is nice. The one I'd pay for is "it's been blocked waiting on you for 12 minutes." The stuck-and-burning-your-time alert is the real pain. Lead with that.

 

You just gave me the sharpest piece of positioning advice in the whole thread, and you're right: lead with the stuck alert, not the done ping. "It's done" is a nice-to-have everyone's already half-solving. "It's been blocked waiting on you for 12 minutes" is the one that has a dollar attached, because that's the alert that's actively stopping the bleeding instead of just reporting a finish. Done is information. Stuck-and-counting is a refund. I've been leading with the wrong one, and a marketer who builds is exactly the person who'd catch that. Taking it.

But the more valuable thing you said is the diagnosis you almost threw away: "most of my wasted time wasn't the agent finishing early, it was me under-briefing it, so it stopped to ask." That reframes the entire problem. Half the approval interruptions aren't the agent needing a decision, they're the agent needing information you could have given up front. Which means the fix isn't only better alerts, it's fewer interruptions to alert about. Your front-loaded spec is doing the real work, you're not catching the stops faster, you're preventing them. That's a tier above what most people in this thread are doing.

So the honest version of the product is two moves, not one. Prevent the avoidable stops (good briefing, declared boundaries, so it only asks when it genuinely must), and make the unavoidable ones impossible to miss and fast to answer. You've nailed the first half by hand. The second half is the stuck-timer alert you said you'd pay for. They're complementary, the better your spec, the rarer the alerts, the more each one actually means "your brain is required."

And for the record, the "marketer who builds, not a deep engineer" framing matters to me more than you might think, because if this only works for people running six terminals it's a toy for power users. The fact that the loop kills you at two agents is the signal it's a real problem, not a hobbyist one.

Question back, since your batching approach is clearly tuned: when you batch approval-heavy tasks and check at set times, how do you decide the interval, gut feel, or have you noticed a point where waiting too long to check costs more than the babysitting would have? I'm trying to figure out whether the stuck-timer should just be a number you set, "ping me if anything's been blocked longer than X," and what X actually is for real people.

This feels like a real workflow gap. As more people run multiple coding agents in parallel, the problem becomes less about starting tasks and more about knowing when human attention is actually needed. The valuable part, in my view, is not just notifications, but context: is the agent progressing, blocked, waiting for approval, or asking for a decision?

A lightweight visibility layer across agents could be very useful, as long as it avoids becoming another noisy notification stream ;-)

 

"Knowing when human attention is actually needed" is the cleanest way anyone's stated the goal, and it quietly redefines the product. The job isn't notifying, it's gatekeeping attention, deciding which of the thousand things an agent does actually deserves a human and silently absorbing the rest. A notification layer broadcasts. An attention layer protects. Different job, and yours is the right one.

Your distinction between blocked, waiting for approval, and asking for a decision is sharper than it looks, too, because those aren't the same urgency. Blocked might be a transient error that self-resolves. Waiting for approval is the silent time-killer. Asking for a decision is the one that genuinely needs your judgment. Collapsing them into one "needs attention" ping loses exactly the information that tells you whether to drop everything or finish your coffee.

And your winking caveat is the entire design constraint, not an aside. "As long as it avoids becoming another noisy notification stream" is the line every tool in this space dies on. The fix is counterintuitive: the value isn't in what it shows you, it's in what it refuses to. A layer that pings on everything is worse than no layer, because you mute it, and then you miss the one that mattered. The discipline is aggressive silence, dark by default, and an interruption is a promise that your brain is genuinely required.

That's the bet behind Pushary, the lightweight cross-agent layer you described, built so a ping always means something. Question back, since you clearly think about the noise problem: where would you set the default, would you rather it err quiet and risk missing a borderline case, or err loud and trust you to tune it down? People split hard on this, and the default basically decides whether they trust it on day one or mute it by day two.

This loop is painfully familiar — coming back to find the agent finished 30 minutes ago or was waiting on my approval the whole time. Right now I just keep terminals visible and check manually, which clearly doesn't scale. A unified notification + approval layer across agents sounds exactly like what's missing.

 

You're describing the manual baseline almost everyone in this thread started from, keep terminals visible and check by eye, and you've already named why it fails: it doesn't scale. Worth being precise about why, though, because it's not that watching terminals is hard, it's that it's a polling loop with you as the CPU. One agent, glance occasionally, fine. Three agents, you're now a human cron job checking screens on an interval, and the interval is always either too frequent (you're babysitting) or too slow (you missed the 30-minute wait). There's no setting that works, because manual polling can't win against parallelism. The math is against you.

The flip is push instead of pull. Stop being the thing that checks, and let the agents be the thing that reports. Done, blocked, needs-a-decision, the three states worth interrupting you over, delivered when they happen instead of discovered when you remember to look. Then the number of agents stops mattering, because you're not allocating attention to each one, you're receiving an alert from whichever one actually needs you. Six silent agents cost you nothing. The one that's stuck taps your shoulder.

That's exactly the unified layer you said is missing, and you described it correctly, the value is the unification, one inbox across tools instead of one habit per terminal. Question back, since you're at the manual stage: when you check manually, what's your actual interval, every few minutes, or only when you happen to surface from something else? I'm trying to map how people poll today, because the honest pitch is "replace your polling interval with zero," and I want to know what interval I'm actually saving them from.

I'm a marketer who builds, not a deep engineer, so I run fewer agents than you. But the loop you described kills me too. Come back, it finished 35 min ago, or worse, it's been idle waiting on my approval the whole time.

What works for me is boring:

I batch the approval-heavy tasks and check them at set times instead of babysitting one live. And I front-load the spec so the agent needs fewer mid-run approvals. Most of my wasted time wasn't the agent finishing early, it was me under-briefing it, so it stopped to ask.

Beyond that, I keep terminals visible and check manually. The exact janky setup you're trying to kill. So no, you're not alone.

On your product: the "it's done" ping is nice. The one I'd pay for is "it's been blocked waiting on you for 12 minutes."

 

You just handed me the best positioning note in the thread: lead with the stuck alert, not the done ping. "Done" is a nice-to-have everyone's half-solving. "Blocked, waiting on you for 12 minutes" is the one with a dollar attached, because it's actively stopping the bleeding instead of reporting a finish. Done is information, stuck-and-counting is a refund. Taking it.

But the line you almost threw away is the more valuable one: most of your wasted time wasn't early finishes, it was under-briefing, so it stopped to ask. That reframes the whole problem. Half the interruptions aren't the agent needing a decision, they're the agent needing info you could've front-loaded. So the real fix is two moves, not one: prevent the avoidable stops with a better spec, and make the unavoidable ones impossible to miss. You've nailed the first half by hand. The stuck-timer is the second.

And the "marketer who builds, not a deep engineer" part matters more than you'd think, if this only works at six terminals it's a power-user toy. The fact that it kills you at two is the signal it's a real problem.

Question, since your batching is clearly tuned: when you check at set times, how'd you pick the interval, gut, or did you hit a point where waiting too long cost more than babysitting would have? I'm trying to figure out if the stuck alert is just a number you set, "ping me if anything's been blocked over X," and what X actually is for real people.

the thing that gets me is how much the "come back to find the agent stuck" pattern costs in context reload, not just time. you don't just lose the 35 minutes — you lose another 10 re-orienting to where you were. what I actually want isn't just a ping, it's a lightweight summary of what happened while I was gone so I can pick up without the mental scramble.

 

You've put your finger on the cost everyone undercounts. The 35 minutes is the visible loss, but the 10-minute reload is the expensive one, because it's not just time, it's the mental scramble of rebuilding what you had loaded before you left. And it's worse than linear: you have to reconstruct what the agent did and what you were thinking when you set it off, two contexts gone cold at once. The ping tells you to come back. It dumps you at a terminal with no memory of why you're standing there.

Which means a bare notification actually fails at the exact moment it succeeds. It pulls you back and then abandons you to the scramble. The alert solved "when," and left "what" entirely unsolved, and "what" is where your 10 minutes goes. A ping without a summary is just a faster way to start being confused.

So the thing you want, a lightweight summary of what happened while you were gone, isn't a nicer notification, it's a different unit. The payload is the product. "Agent's done" versus "agent changed these 3 files, tests pass, blocked on this one decision" is the difference between starting the reload and skipping it. The summary is what lets you pick up at full speed instead of cold, because the re-orientation already happened in the notification instead of in your head at the terminal.

That's exactly the bet behind Pushary, the alert carries the handoff, not just the fact that one's needed. Question, since you've clearly felt the reload tax precisely: what's the minimum that actually kills the scramble for you, just what changed, or do you also need what you'd asked it to do, the original intent, because that's the context that goes coldest fastest? I keep wondering whether the summary needs to remind you of your own plan, not just report the agent's work.

This is one of the reasons we built Memi as more of a workbench than a chat box. Once multiple agents are touching specs, research, and Figma files, visibility matters as much as output.

 

"Workbench, not a chat box" is the right instinct, and it points at something most of this thread has been circling without naming: chat is a fundamentally bad container for multi-agent work. A chat box is linear and single-threaded, one conversation, scrolling down, but the actual work is parallel and branching, multiple agents touching specs, research, and Figma at once. You're forcing a parallel reality through a serial interface, and the visibility problem is partly just that mismatch. The workbench gives the work the shape it actually has.

Your second sentence is the one I'd underline, though: visibility matters as much as output. That's the part teams discover late and painfully. When one person and one agent share a chat, visibility is free, it's all right there in the scroll. The moment you've got multiple agents touching shared artifacts, output without visibility is actively dangerous, because two agents can edit the same spec or the same Figma file and you've got conflicting truth with no one watching the seam. At that scale visibility isn't a nice view, it's how you prevent silent collisions.

Sounds like we're attacking adjacent faces of the same shape. Memi is the spatial layer, a place where the parallel work lives and stays visible because it's laid out instead of buried in a transcript. I'm on the temporal layer, the alert when one of those agents crosses into a state that needs a human, blocked, done, waiting on a decision. A workbench shows you everything at once when you look, a notification layer taps you when you're not looking. Same goal, two senses.

Genuine question, since you've built the spatial version: on a workbench with multiple agents touching shared specs and Figma files, how do you handle the moment two of them want the same artifact, surface the conflict for a human, lock it, or let them branch and merge? Because that collision is the thing I can't see how to solve with notifications alone, and I suspect the workbench is actually the better place to catch it. Curious where you landed.

First
Previous
•••
789
•••
Next
Last