Skip to content
Riadh Mnasri
← Back to blog
3 min read

A monthly ops report instead of three separate agents

A monthly ops report instead of three separate agents

domain-expiry-check, check-deps and project-health all work well on their own. The problem was never how reliable they were, it was remembering to run all three, regularly, across every project. In practice, I'd run check-deps whenever it crossed my mind, domain-expiry-check even more rarely, and project-health mostly right before a demo. Three reliable agents, zero habit.

Merging without duplicating the logic#

The easy temptation would have been to write an agent that calls the three existing skills one after another. That works, but it has a real cost: domain-expiry-check and project-health each query list_projects on the Vercel API, capped at 50 results with no exposed pagination cursor. Chaining them without a second thought doubles an already limited call, just to fetch the same response twice.

monthly-ops-report makes that call once and reuses the response for both needs: custom domains on one side, deployment status on the other. The rest, the npm audit and the git activity check, keeps exactly the same logic as the source skills, just gathered into a single pass instead of three separate invocations.

One ranking, not three lists side by side#

The real design choice isn't technical, it's editorial. Three separate reports each answer their own question: which domains are expiring, which dependencies are vulnerable, which deployment is broken. But before showing a project, the question I ask myself is never split by axis, it's a single question: what's the most urgent thing wrong, across everything?

monthly-ops-report answers that one. A domain expiring in 40 days, a critical npm vulnerability, and a broken production deployment all land in the same "critical" bucket, regardless of which axis they came from. What follows, "to watch", "quiet", "healthy", "unverifiable", mixes the three sources the same way. The report never says "here's the state of domains, here's the state of dependencies": it says "here's what matters most, in order".

What it doesn't replace#

This report gives a fast overview, not the exhaustive detail of each source skill. If check-deps flags critical vulnerabilities on a project, the move is still to rerun check-deps on that specific project to see the CVE-by-CVE breakdown. The monthly report exists to flag that something needs digging into, not to replace the tool that does the digging.

Cadence comes after, not before#

Same rule I've followed since the scheduled agents article: no scheduled agent starts out scheduled. monthly-ops-report will first run manually, invoked on demand, long enough to confirm the priority ranking actually matches what I'd judge urgent myself reading it. The switch to an unsupervised monthly run, via a loop or a scheduled agent, only happens once that trust is earned, never before.

What this generalizes to#

The problem this agent solves was never a capability problem, each source skill already did its job correctly. It was a friction problem: three commands to remember, three different moments to think of them, and in practice, a systematic drop of at least one of the three. Merging changed nothing about the checks themselves, it changed how often I actually chose to run them.

The general lesson turns against itself easily if applied too early: merging three tools into one only makes sense once each of the three has already proven itself separately. Building a single do-everything agent from the start would have mixed bugs from three different sources into one place impossible to debug cleanly.