How do you stay aware of what your AI coding agents are doing?
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.


Replies
@aadilghani This feels like the real bottleneck with agent workflow, not capability , but visibility . Once you're juggling multiple agents, context switching becomes the hidden tax. But I am thinking that , if anyone has found a reliable way to unify status+ approvals across tools without turning it into yet another dashboard to monitor.
Pushary
@andrew_king10
Direct answer: yes, but only if you get one design decision right, and most attempts get it wrong. The unified thing cannot be a place you check. It has to be a thing that checks you. The moment it's a tab you're supposed to glance at, you've rebuilt the terminal grid with nicer fonts, and it joins Slack and email in the pile of surfaces you're already half-monitoring. The dashboard failure mode isn't ugly UI, it's wrong polarity.
So the reliable pattern is push-first with a brutal filter: the layer stays completely dark except for three states, done with a summary, stuck on input, failed. Everything else lives in logs you visit by choice. If it interrupts you, your brain is genuinely required, every time, no exceptions. That's what keeps the channel trusted instead of muted. The discipline is in what it refuses to show you, not what it can.
That's exactly the shape I built Pushary around: one inbox across Claude Code, Cursor, and Codex, silent by default, and when it does ping, the notification carries the decision, what changed, what it needs, what's risky, answerable from your phone. You never monitor it. It taps you, you rule, you go back to deep work. If it ever tempts you to sit and watch it, I built the wrong thing.
And your capability-versus-visibility framing is the correct diagnosis, by the way. The models stopped being the bottleneck months ago. The human's perception bandwidth is the constraint now, and context switching is how you pay for the gap. Question back: when you context-switch to check an agent, what costs you more, the check itself or reloading whatever you were doing before? I keep finding the reload is the real tax and the check is just the trigger.
@aadilghani @andrew_king10 Visibility over capability is exactly right, context switching is the hidden tax. The trick is solving it without adding one more dashboard you have to babysit.
I definitely feel this pain.
My current setup is pretty basic:
Desktop notifications from Cursor and Claude Code
Separate terminal windows for long-running tasks
A small Pushover script for jobs that take more than 10–15 minutes
Periodic checks throughout the day
The biggest issue isn't when agents are working, it's when they're waiting for approval and I don't notice for 30+ minutes.
I've tried keeping terminals visible, but that doesn't scale once you're running multiple agents. It becomes another thing to monitor.
What I'd really like is:
1. One place to see the status of all agents
2. Instant notifications when an agent needs input
3. A clear summary of what changed while I was away
4. Approval requests that I can handle from my phone
Right now the workflow feels surprisingly manual considering how autonomous the agents are becoming.
Pushary
@md_khayruzzaman
Your closing line is the whole thread in one sentence: the workflow is surprisingly manual considering how autonomous the agents are becoming. That's the paradox exactly. The agents got self-driving and the supervision is still a guy walking between terminals with a clipboard. The autonomy moved down the stack, the awareness didn't move at all.
And your setup proves the point better than any pitch could. Desktop notifications plus separate terminals plus a Pushover script plus periodic checks, that's four partial systems doing one job badly. Each piece works, but you've become the integration layer between them, which is why it feels like another thing to monitor. You didn't eliminate the babysitting, you distributed it.
Here's the part I have to just say plainly: your four-point wishlist is Pushary's feature list, almost word for word. One place for all agent status, instant ping when one needs input, a summary of what changed while you were away, and approvals you can answer from your phone. You wrote the spec, I built it, pushary.com. I'd genuinely like you to try it and tell me where it falls short of the list you just wrote, because you've clearly lived this problem long enough to be a brutal judge.
One question to calibrate: of your four wishes, which one would you pay for first? My bet is number four, phone approvals, because the 30-minute blind wait is the one you called the biggest issue. But people keep surprising me by picking the summary instead.
I’d split this into two signals: “done” and “stuck”.
For coding agents, the useful notification is not just that the process ended. I want a tiny handoff: final status, files changed, tests run, and whether it is waiting on approval. If it can’t produce that summary, I’d rather keep the run small and check manually.
Pushary
@kevinzrzgg
The new idea in this one is your last sentence, and it's bigger than the spec: "if it can't produce that summary, I'd rather keep the run small." You just made the handoff a precondition for autonomy, not a nice-to-have. The size of task you're willing to delegate is capped by the quality of the report you get back. No summary, no long leash. That's the cleanest articulation of trust I've seen in this thread, and it flips the usual framing, people think autonomy is about the agent being smart, you're saying it's about the agent being legible.
Which means the handoff isn't a notification feature, it's the thing that unlocks bigger runs. Improve the report, and the same agent safely earns longer horizons. That's the actual product, the trust dial.
And agreed on the split, done and stuck are different species. Done is informational, read it whenever. Stuck is a blocked thread costing you minutes right now. They shouldn't even sound the same on your phone.
Pushary's bet is exactly this shape: the handoff (status, files, tests, waiting-on-what) as the standard payload, stuck as the loud one. One question, since you've effectively defined the trust dial: what's missing from today's agent summaries that stops you trusting longer runs, accuracy of what they report, or the stuff they leave out? Lying versus omitting feels like the difference between fixable and dangerous.
The best way to stay aware of what AI coding agents are doing is to treat them like fast but unaccountable junior developers. Instead of letting them make large autonomous changes, it works better to keep tasks small and reviewable, ideally forcing outputs into a PR-style diff so every change is visible. Relying on diffs as the primary control mechanism, rather than trusting final outputs, helps maintain clarity. It’s also important to run strong safeguards like tests and linters before anything gets merged, and to structure complex work into smaller steps instead of giving full 'build the system' prompts. The key mindset shift is that you’re not just delegating work, you’re actively supervising execution at speed.
Pushary
@yashvinder_singh
"Fast but unaccountable junior developers" is the right mental model, and the word doing the work is unaccountable. A human junior has skin in the game, embarrassment, a performance review, a memory of last time. An agent has none of that, so the accountability has to live in the system around it: diffs, tests, linters, small reviewable steps. You're not describing caution, you're describing replacing the missing accountability with architecture. That's the correct trade.
The phrase I'd frame, though, is your last one: supervising execution at speed. Because that's where the model strains. Diffs-as-control works perfectly at one agent, the math is on your side. At four agents producing PR-sized diffs in parallel, the diffs don't shrink, your hours do. The control mechanism stays correct and you become its bottleneck. Reviewing everything was the answer when the agents were slower than you. They aren't anymore.
So the question becomes how to keep your discipline affordable at speed, and the answer isn't reviewing less carefully, it's triaging what reaches you. Tests and linters already filter the mechanical failures before your eyes get involved. The missing layer is the same filter for attention: which diff touched something risky, which agent is blocked on a judgment call, which run finished clean and can wait until after lunch. That's the slice Pushary handles, the handoff arrives with the diff, the test results, and a risk flag, so your review time lands on the 20% that needs a human and the routine stuff stops costing you context switches.
You clearly run this discipline for real, so the question I'd ask: at how many parallel agents does your review-everything approach start to crack? Everyone has a number where the queue outruns the reviewer. Mine was three. Curious where yours is, because that number is basically the whole market for this category.
@aadilghani Yeah, that’s basically where I’ve landed too.
The 'unaccountable junior dev' framing still feels accurate, and diffs + tests are solid as the control surface. But once you start running multiple agents in parallel, the real bottleneck stops being code quality and becomes attention management.
Even if everything is structured and reviewable, it still turns into a queue problem where nothing is actually hard to verify, just too much to stay on top of at once. So the issue shifts from supervision to prioritization, and that layer is still pretty underdeveloped in most setups today.
The 'finished 35 minutes ago' problem is real, but the one that bit me harder was 'finished, looks done, quietly wrong.' I stopped trusting an agent's own 'done' and made it show its work as a diff I can scan in ten seconds. Reading a diff is cheaper than re-running a task that lied to you.
Pushary
@theuniverseson
"Finished, looks done, quietly wrong" is the scarier sibling of the silent wait, and you're right that it bites harder. A blocked agent costs you minutes. A confidently wrong "done" costs you whatever gets built on top of it before anyone notices. The wait wastes time, the lie compounds.
The move you made is the important one: you demoted the agent's "done" from a fact to a claim. Self-report is testimony. The diff is evidence. And your economics are exactly right, ten seconds of reading evidence beats re-running a task that testified falsely, every single time. The diff can't lie about what changed, it can only be misread, and that's a much better failure mode to own.
That's precisely why Pushary's "done" notification refuses to arrive empty-handed. The claim ships with its evidence attached: the diff, the tests that ran, what failed, flags on anything risky. "Done" alone is the agent grading its own homework. "Done, here's exactly what I touched" is the agent submitting it for your ten-second scan. The notification's job isn't to tell you it finished, it's to make your distrust cheap.
One question, because you've clearly tuned this: does the ten-second scan ever miss the quietly-wrong case where the diff itself looks reasonable, right files, plausible changes, but the logic is subtly off? That's the layer where I suspect the scan needs test results sitting next to it, because a clean-looking diff with a failing test tells you in two seconds what reading the code might miss in ten.
Running Claude Code and Cursor in parallel and the context switching cost is real. My current setup is a tmux split with agent terminals on one side and work on the other - at least I can glance without alt-tabbing, but it's still manual polling dressed up as a workflow.
The deeper problem is that these agents have no standard output contract. One prints a completion message, another just stops, another waits silently for stdin. There's no unified signal to hook into so any notification layer you build has to be agent-specific and brittle.
Pushary
@nayan_joshi
You just named the actual engineering problem underneath this whole thread, and you're right: there is no output contract. One agent announces completion, one just goes quiet, one blocks on stdin without saying a word, and silence is semantically ambiguous across all three. Done, stuck, and crashed can produce the identical absence of output. You can't build a clean signal on top of systems that don't agree on what stopping means.
So any honest notification layer has two choices. Hope a standard emerges, or absorb the brittleness on behalf of everyone. The good news is it's not pure terminal-scraping anymore: Claude Code ships hooks, Codex has lifecycle events, and where a real hook exists you get a true state transition instead of a guess. Where one doesn't, you're back to heuristics, process state, file activity, stdin-wait detection, and yes, that adapter is brittle and needs maintenance every time a tool changes its behavior. The question is just where that brittleness lives: in a thousand people's personal dotfiles, each breaking separately and silently, or in one adapter layer that's somebody's actual job to keep current.
That second option is literally what Pushary is. Per-agent adapters on the bottom, normalizing whatever each tool emits into one state machine, running, blocked-on-input, failed, done-with-diff, and one contract on top that your phone and your team consume. The agents never agreed on a standard, so the layer fakes the standard and eats the maintenance. You pay us to own the brittleness so your tmux split can go back to being a layout choice instead of a monitoring strategy.
And if a real standard ever does emerge, some agent-lifecycle event spec the vendors actually adopt, that's not a threat to the layer, it's a gift, the adapters get thinner and the value moves up into routing, policy, and the approval flow. Genuine question from the trenches: of the agents you run, which one's blocked state is hardest to detect from outside? My ranking has the silent-stdin-wait as the worst offender by far, since it's indistinguishable from thinking, but you're running the same pair and I'm curious if your experience matches.
This is a very real pain point. I usually keep terminals and editor windows visible, but it does not scale once you have more than one agent running. The worst case is not even “finished and I missed it,” but “waiting for approval for 30 minutes” while you think it is still working.
I think the missing layer is not just notifications, but a lightweight control center: what each agent is doing, whether it needs input, what changed, and whether it is safe to approve.
Push notifications plus approval flows sounds like the right direction. The key for me would be reducing context switching without creating another dashboard I have to babysit.
Pushary
@vlasoffchess
You and at least five other people in this thread independently landed on the same two words, "control center," and then immediately flinched at them, because you all also said the same fear: not another dashboard to babysit. That tension is the whole design problem in one breath. People want one place that knows everything and zero places they have to watch. Those sound contradictory and they're not, but only if you get the polarity right.
The resolution is that a control center you check has failed, and a control center that checks you has worked. Same data, opposite default. It sits dark, knows the state of every agent, and stays silent until one crosses into a state that needs you: blocked on input, finished with a diff, failed. The "what each agent is doing" view exists for the moment you want it, but you're never required to look, because the looking comes to you. The babysitting fear is real and the fix isn't a prettier dashboard, it's making "forgot to check it" impossible by never requiring the check.
Your last item is the sharp one, by the way: "whether it is safe to approve." That's the highest bar in the list. Status is mechanical, the diff is mechanical, but "safe to approve" requires the layer to know that a payment change or an auth edit is a different animal than a typo fix. That's the risk flag, and it's the difference between a notification you glance at and a decision you can actually make from the lock screen.
That's exactly the shape of Pushary, so the honest test is whether it clears your bar without becoming the thing you fear. Question back, since you've run multiple agents: would you trust the layer to tell you "safe to approve," or do you want it to just surface what changed and let you make that call every time? I keep going back and forth on whether people want the judgment or just the evidence, and your answer tells me which one to build louder.
@aadilghani That framing makes a lot of sense. I think I’d trust it more as a risk-aware evidence layer than as the final judge, at least at first.
I probably don’t want a black-box “safe to approve” stamp. I’d want something like: low risk, only copy/docs changed; medium risk, touched business logic; high risk, touched auth, payments, migrations, permissions, or tests are missing.
So the layer can make a judgment, but it has to show the evidence behind it: changed files, diff summary, test status, and why it flagged the risk level.
For me the ideal version is: obvious approvals become fast, risky approvals become impossible to miss, and I’m never forced to constantly watch another dashboard. Evidence first, judgment second, always explainable.
Pushary
@vlasoffchess
Then we want the same thing, because that’s the version I’m building, not the black-box stamp. Bare “safe to approve” asks for trust you can’t inspect, so the first wrong call kills it. An explainable risk level fails gracefully: you see why it flagged, and you can overrule it.
Your tiers are sharp because they key off what got touched, not a vibe. And “tests are missing” as a high-risk trigger is the move most people forget, it flags risk by absence, not content. The scary change is often the one that should’ve written a test and didn’t.
So: layer proposes the risk level, shows its work (files, diff, test status, why it flagged), you keep the gavel. Obvious stuff fast, risky stuff impossible to rubber-stamp.
One genuinely hard part: knowing which paths are sensitive is project-specific. Generic heuristics nail auth and payments but miss your weird internal module that’s secretly load-bearing. So, would you rather declare your high-risk paths once up front, or have it learn from what you’ve historically scrutinized and correct it? Accurate-with-setup versus zero-setup-but-wrong-at-first. That choice basically decides the onboarding.
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)
Pushary
@jiaqi_lu
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.
Pushary
@sleekzheng
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.
@aadilghani 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.
Pushary
@sleekzheng
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."
@aadilghani 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.
Pushary
@shakutovbekzat
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.