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

haha i can relate

 

one hundred percent

You named the real tax, which is not the waiting itself but the constant context switching just to check whether the wait is even necessary. The two states are worth treating very differently. "Done and idle" is a notification problem, but "stuck waiting on approval" is closer to an interrupt, since every minute there is pure dead time. I would make those two feel different the moment they reach you: a soft nudge for completion, and something much harder to ignore for a blocked approval, so you can triage without opening a terminal. The parallel part is where it gets hard. Past two or three agents, people stop wanting per agent pings and start wanting one glanceable place that answers who needs me right now. Sounds like you are already headed there. How are you thinking about which approvals can be safely auto granted versus the ones that always need a human?

 

Direct answer: the gate keys on recoverable cost of error, roughly blast radius × (1 − recoverability), not on reversibility alone. Reversibility is the cheap first approximation and it fails both ways. It over-fires on irreversible-but-trivial (the agent logs a timestamp, can't undo it, nobody cares) and under-fires on reversible-but-catastrophic (mass email to 50k users, you can send a correction, the damage already landed). So what earns a human is unrecoverable damage, not whether an undo technically exists.

The wrinkle is that the agent can't compute its own blast radius. It doesn't know 50k people are on that list. Reach is the one variable it's structurally worst at estimating about itself, so in Pushary reach gets annotated at the tool and resource layer rather than inferred by the agent, and human judgment stays reserved for genuinely novel reach. Cheap, reversible, low-reach auto-clears, and that's most of the volume.

The part I care most about getting right: auto-grant should only ever loosen with evidence, never because you clicked yes quickly a few times. Fast approval on a trivial action means trust. Fast approval on a risky one might just mean you weren't looking. Conflate those and the system quietly learns to rubber-stamp on your behalf, which is worse than no automation at all.

And yes on your interrupt distinction, that's exactly how it's built: blocked is loud and answerable from your phone, done drops into the glanceable list. You put it better than my landing page does, done is a receipt, blocked is a bill that's still running.

The fix that worked for me was structural, not more discipline. Agents write to a branch, every run ends with a short summary of what changed and which files it touched, and I review that like any other diff instead of tailing logs. Real-time supervision does not scale past one agent, and you are running three. Make them report to you asynchronously and the anxiety mostly goes away.

 

"Structural, not more discipline" is the right diagnosis, because discipline is a strategy that fails quietly at exactly the moment you're busy, which is always. You didn't try harder to watch, you changed the shape of the problem so watching wasn't required. That's the difference between a fix and a resolution.

And the specific structural move is the good one: branch plus an end-of-run summary of what changed and which files it touched means you review a diff instead of tailing a log. Those are wildly different costs. A log is the agent's stream of thought, so reading it means re-deriving what happened. A diff plus summary is effects-first, so you're reading conclusions. Same information, a fraction of the attention, which is why the anxiety drops, you're not holding six live sessions in your head, you're reviewing artifacts on your schedule.

The one gap async-reporting leaves, and it's the thing I'm building around: it handles done beautifully and can't help with blocked. If an agent stalls mid-run waiting on an approval, the end-of-run summary never fires, because there's no end of run. So the failure mode isn't the finish you'll review calmly later, it's the agent that's been frozen for 20 minutes while you assume it's still working. Async reporting fixes the review cost; it doesn't surface the silent wait.

Curious, with agents on their own branches, do you hit approval stalls often, or have you pre-authorized enough that they mostly run clean to the summary? Because if they rarely stop to ask, you've genuinely solved this and a notification layer would just be noise on top.

Most of us are not staying aware, we are reading diffs after the fact and hoping. Watching three agents in three terminals does not scale past a week. What works for my team is treating agents like junior engineers who need a paper trail. Every agent run writes to one log with what it touched, what it ran, and what it changed, and anything that hits infra needs an approval gate. The dashboard-per-tool approach is a dead end because the agents do not share state. One activity feed across all of them beats another sidebar inside one IDE.

 

"We are reading diffs after the fact and hoping" is the honest version of what most people call a workflow, and the giveaway is your second line: three terminals doesn't scale past a week, not past three agents. It fails on a timescale, not a count, because it's not the watching that breaks, it's you sustaining the watching. Discipline decays; structure doesn't.

The move you made is the right one, and it's the same conclusion a few sharp people in this thread landed on independently: one log across all runs, what it touched, what it ran, what it changed, plus an approval gate on anything that hits infra. That's not monitoring, that's a paper trail, and the difference matters, monitoring assumes someone's watching, a trail assumes nobody is and makes the work legible after the fact anyway. Junior engineers with a paper trail is the correct frame, with the one wrinkle that a junior accrues context and an agent shows up new every session, so the trail isn't training wheels you eventually remove, it's the permanent substitute for tenure it'll never build.

The line I'd underline for everyone else: dashboard-per-tool is a dead end because the agents don't share state. That's the structural reason per-tool notifications can't finish the job no matter how good they get, each tool can only ever tell you about itself, so N tools gives you N islands and no answer to "who needs me right now." A feed inside one IDE is a nicer sidebar. One feed across all of them is a different category of thing.

Which is precisely why Pushary sits above the tools rather than inside one, thin adapter per runtime, one shared state model, one inbox. You described the architecture before I got to pitch it.

The one gap I'd flag in your setup, and it's the seam I'm building in: the log is written at the end of a run, so it covers done beautifully and can't surface blocked. An agent frozen 20 minutes on an approval never reaches the write, so the silent stall is the one thing the trail can't catch, it looks identical to still-working. Curious whether that bites your team, or whether the infra approval gates are structured enough that stalls get caught fast?

The“agent finished 30 minutes ago” problem is very real. I’ve tried terminal tabs, notifications, dashboards… but the main issue is still that I have to remember to check. Agents should surface important events themselves.

 

"I have to remember to check" is the whole diagnosis, and it explains why every fix you tried failed the same way: terminal tabs, notifications, dashboards, they're all still pull, they just made the checking prettier. A dashboard you have to remember to open is a terminal grid with better fonts. The failure isn't the interface, it's the polarity, anything that requires you to initiate loses the moment your attention is legitimately somewhere else, which is the entire reason you handed the work to an agent.

And you landed on the fix in your last line: the agent should surface important events itself. That's the flip from pull to push, and once you make it, the number of agents stops mattering, because you're not allocating attention per terminal, you're receiving from whichever one actually needs you. Six silent agents cost nothing. The stuck one taps you.

The one thing that makes it work rather than become noise: only three events should ever earn an interrupt, blocked, done, failed. Push every step and you train yourself to ignore the channel, and then the one alert that mattered dies muted. The discipline is in what it refuses to surface.

That's exactly what Pushary is, so if you want to point it at your setup it's free to try, . Curious though, when you tried notifications before, was the problem that they didn't fire on the right things, or that they only covered one tool and you still had to check the others?

Not coding agents specifically, but I have a version of this problem across three businesses instead of tools. My fix ended up being a layer that only interrupts me when something's actually confident enough to matter, everything else waits in a queue I check on my own schedule instead of pinging me live. That's basically why I built FounderFlow (I'm the founder), but the idea should work for your case too: the fix isn't more visibility, it's a confidence filter so you're only pulled back for stuff that's actually decided something worth seeing.

 

"The fix isn't more visibility, it's a filter" is the same conclusion from a completely different direction, and I think you've landed on the more general principle. Everyone in this thread has been arriving at it in one domain (agents, terminals), but you're describing it across three businesses, which suggests the real problem isn't tooling at all, it's that visibility scales linearly and attention doesn't. Show a person everything and you've just moved the sorting job onto them. More visibility is often just a nicer-looking version of the original problem.

And the two-tier split you built, interrupt for the stuff that matters, queue for everything else on your own schedule, is exactly the shape. The queue is the part people underrate: it's not a downgrade from a notification, it's a different job. Interrupts are for things where the cost of not-knowing is still growing. The queue is for things where the cost is already settled and finding out later doesn't make it worse. Collapse those two into one channel and you get a firehose you learn to ignore, which is worse than silence.

The thing I'd poke at, because it's where I keep hitting the wall on my side: "confident enough to matter" is doing a lot of work. Confidence is the hardest number to make honest, because whatever's generating it will tend to overrate itself, and if the filter is confidently wrong about what matters, you don't notice, you just silently stop getting the thing you needed. A filter that's 95% right feels amazing until the 5% is the one that mattered, and by construction you'll never see it. So the question I'd ask of any confidence filter, mine included: where does the number come from, and can the thing being filtered influence it? If it can, it'll learn to sound important.

Curious how you handle that in FounderFlow, when the filter decides something doesn't clear the bar and it turns out it should have, do you find out? That's the failure I can't see a clean answer to, because a bad interrupt is obvious and a bad suppression is invisible.

Launch is live guys - would love some support

The "waiting for approval" loop is the absolute silent killer of AI productivity! 🛑 Right now, it's mostly manual terminal-watching or messy custom scripts. A unified notification layer for agent execution is a brilliant move—definitely a tool the space needs.

 

"Silent killer" is the perfect phrase for it 🎯 — the agent finishes its actual work in 5 minutes and then just... sits there waiting, and you don't find out for half an hour. The work was fast; the waiting on you to notice is what's slow.

Appreciate the read on it being a unified layer rather than another one-off script. That's the bet exactly — everyone's already solved this badly with their own custom ntfy/Pushover hacks, but nobody wants to maintain that glue across Claude Code, Cursor, and Codex. Are you currently running any custom notification scripts yourself, or still in the manual terminal-watching phase? Trying to gauge how many people have already duct-taped a solution vs. just living with it.

 Couldn't agree more—maintaining that custom glue code across different AI tools is a massive hidden time-sink for engineering teams.

We've built some of our own notification workarounds for our dev workflows to dodge the terminal-watching trap, so I completely validate the pain point you're solving here. Centralizing this into a single, reliable layer is a game-changer for team efficiency. Really looking forward to seeing how Pushary handles the multi-tool ecosystem!

This is a real problem, especially once you’re running more than one coding agent at the same time.

What has helped me is treating AI coding agents less like autocomplete and more like junior engineers that need task boundaries, check-ins, and review points.

My workflow is usually:

  1. I break tasks into very small tickets before sending anything to Claude Code/Cursor/Codex.

  2. I define the expected output upfront: files to touch, files not to touch, acceptance criteria, and what “done” means.

  3. For any critical change, I ask the agent to update the project .md file with what changed, why it changed, files touched, assumptions made, and any follow-up risks.

  4. I ask for a summary before implementation when the task is risky.

  5. I review diffs before accepting changes.

  6. For longer tasks, I use checkpoints: “stop after planning,” “stop after backend changes,” “stop before modifying auth/payment/database logic.”

That .md file has been surprisingly important because it becomes a running memory and audit trail for the project. When something breaks later, I’m not trying to reverse-engineer what the agent did from vibes.

For me, the bigger issue is not just notification visibility. It’s workflow observability.

I don’t only want to know “the agent is done.” I want to know what changed, why it changed, what assumptions it made, what files were touched, and what needs human approval before moving forward.

That’s where I think the real opportunity is: status, approvals, logs, summaries, risk flags, and handoff points across agentic coding tools.

Because once you’re building production software, the real question becomes: how do I stay in control while AI moves faster than I can manually monitor?

 

You basically wrote my product spec, so I'm either flattered or out of a job.

You're right: "done" is the shallow version. What changed, why, what it touched, what needs sign-off, that's the actual signal. The notification is just the courier. The .md-as-audit-trail move is the smart part, because future-you debugging at 2am does not accept "vibes" as a commit message.

That control-while-it-moves-faster-than-you-can-watch problem is the whole reason exists. Think of it as a control panel for your agents: status, approvals, and risk flags across Claude Code, Cursor, and Codex, so you stay in the loop without babysitting six terminals.

Quick one back at you: do you prompt for that .md update every time, or have you wired it into a skill so it's automatic? That reliability is load-bearing for the whole thing.

 Glad to hear that, I will be reviewing the product link. Initially I do prompt for that everytime. Which can be a token killer. I switched to automating it on skill

There's hundreds way to handle this I believe.
In my case, the most efficient way was letting my agent access to my Slack and format the AI to let know any of the team member related to the question so they can answer in slack and the agent can read the response.
You can also let the agent to wait X minutes and check back if got any answer.
That has been quite smooth with my co founder. They went to sleep, the agent was running/building stuff, when it got stuck, the agent just ping me on Slack, I gave him the solution or fix the problem it was facing, then it get back to work confirmed me and back and fourth this way.

Of course, there's still the first step of planning the work which need attention and you can't really get off the computer. But when it's building, anyone from a company should be able to help it make the works done.

 

This is genuinely one of the better setups in the thread, and the insight buried in it is the real gold: "anyone from a company should be able to help it get the work done." That's the part most people miss. Once the agent can route a question to whoever can actually answer it, you've turned a solo bottleneck into a team that happens to be asleep half the time.

The Slack relay is smart, and it's basically Pushary's thesis built by hand. The two places it gets fragile: you had to wire it up per agent, give it Slack access, and format the prompts just so, and the "wait X minutes and check back" loop is polling sneaking back in through the side door. Works great with a cofounder who knows the dance. Gets messy across six agents and a bigger team where you also want to know what it changed, not just answer its question.

Pushary is that pattern as a product instead of a custom integration: structured handoffs with risk flags routed to the right person, no per-agent plumbing, and the relay handles the wait so the agent isn't burning cycles checking back.

You nailed the one honest limitation too. Planning still chains you to the desk. Agreed, and I think that's correct for now. You should be in the room for the plan. It's the babysitting after the plan that shouldn't require a human at all. Curious, does your agent ever ping the wrong person, or have you got the routing dialed in?

 You're right about the two fragile places but we've easy solution to counter that.
Let me give you more context about our team workflow.

We train each of our team member to Opencode from sales, customer support, delivery, developper, finance, what ever. We've 30+ MCP connected (built-in MCP server that is used as a gateway) that our team can use in Opencode accross all the company services and connect their own company account to it.
It has been the best productivity tool we found and by far the most performing one.
Easy script setup that can run on any device and configure everything properly without any technical knowledge required. Just a one line command to run (could become an executable).

So to answer the two fragile places:
- No need to format the prompt, global instructions are setup in a way that it know what to do.
- The time it wait, we don't really care and can be incremental. At the end, we just want the work to be done what ever time it takes. If it waited too long, it will ping the concerned person again to follow up. I wish there's some way to wake up an agent on specific event (slack messages received and so on, that could be the perfect improvement/solution long term).

For the wrong person, we of course use agent memory. It is not yet shared accross the team, but we may have ASAP. Right now, everyone have his own personal memory and the Agent can remember who to talk with according to the task we're dealing with at the moment.

I think the problem most people face is big at the beginning and they all need to find a way it match with the team mindset.
We are evolving our ecosystem with our discovery and rely more and more with agents, with this setup we have already automated most of it:
- Development
- New workflows
- Create/Update documentation
- & much more.

The most underrated winning MCP has been Playwright MCP. There's no more limits with this one and way more efficient than any built-in Claude/GPT/Perplexity browsing agent system.

I feel your platform is interesting, but if I have to keep being on my phone confirming the notification, this will drive me crazy.
We need to provide the agent the capability of having a dedicated environment for it to fail, so the basic question/authorization is nbot required anymore.

 

You just argued me into a better version of my own product, so thank you for that.

You're right, and I'll go further than you expect: if Pushary is pinging your phone for "can I create a file," it has already failed. That class of approval shouldn't exist. A sandboxed environment where the agent is free to fail and self-correct kills 90% of interruptions, and I'm fully on board with that being the goal. Anyone building approval flows for reversible actions is just adding friction with extra steps.

But there's a second class that no sandbox removes, because it's not "did it fail," it's "which way did you want this." Touch the payment logic or not. Ship to prod now or wait. The spec was ambiguous and there are two reasonable interpretations. In those, the human isn't a safety net, the human is the missing input. The agent can't fail its way to your intent. That irreducible slice is the only thing Pushary should ever surface, and if it surfaces more than that, I'm doing it wrong.

And here's the fun part: you already designed the rest of it. "I wish there was some way to wake up an agent on a specific event, Slack message received" is exactly the return path Pushary is built around. The agent sleeps, the event fires, it wakes and keeps going. You're not arguing against the platform, you're spec'ing its core loop. We just disagree on whether you want to be the device that confirms, and I think the answer is "only for the handful that actually need your brain."

Separately, your Opencode plus 30+ MCP gateway setup with non-technical teammates running one-line installs is one of the more impressive org-wide agent rollouts I've heard described, and the shared-memory routing is the obvious next unlock. Big co-sign on Playwright MCP too, the built-in browsing agents aren't close. Quick one: when the agent hits a genuine judgment call, not a failure, who in that 30-person setup ends up being the input, and how does it know?

 we believe more in agent than god itself 😂

Mostly when the agent designed everything, human mostly guide it the wrong way.
If the agent came with a blocker, then we just need to let him investigate and came with choices that match what we want. The human is just here to give insights or information he doesn't have, but never to make a decision.

I remember Jensen saying: "I'm not asking it to think for me. I'm asking it to teach me things that I don't know."

This happen during the plan mode, that's why the focus and waiting (reading actually) during this phase is important, you learn every minute.
We know what we want but we don't know how to achieve it in a proper & quickest way.