Automate a weekly dependency and vulnerability watch
Vulnerable packages sit unnoticed because alerts pile up in a tab nobody opens. A scheduled agent reads them weekly, ranks them by severity, and drafts a fix list its department head reviews and you approve.
What you’ll set up
Connections
GitHub repository · Required
The owner grants read access to the repository's security alerts; nothing is changed.
Inputs
Lowest severity to list · Optional
Choice of critical, high, medium, or low, default medium
Accepted risks to ignore · Optional
Text, no default
Ready by · Required
Time, default 08:00
Brief · Required
Text, prefilled and editable during setup.
Runs
Runs every Monday at 08:00
Done by Research analyst
Email to new contacts, and follow-ups nobody has answered, waits for your approval by default. Replies in threads a contact has answered, and email to your own team, can send automatically depending on your settings.
You approve every report · Free to start
How it runs
One agent does the work. Its department head reviews it, then you approve.
- 1Research analyst
Runs every Monday at 08:00 and prepares the report from your connected sources.
- 2CTO · Review
The department head reviews the report before it reaches you.
- 3You
Email to new contacts, and follow-ups nobody has answered, waits for your approval by default. Replies in threads a contact has answered, and email to your own team, can send automatically depending on your settings.
What you get
Sample, not live data. Repository and packages are invented.
Open dependency alerts, week of 9 Nov (sample)
| Severity | Open | Oldest |
|---|---|---|
| Critical | 1 | 12 days |
| High | 3 | 31 days |
| Medium | 6 | 54 days |
Bump next: example-parser 2.1.0 to 2.1.4 (critical, patched version available).
Needs your approval before it is sent.
Why alerts go stale
GitHub raises a Dependabot alert for a vulnerable dependency. The alert waits in the repository's security tab. Nobody is asked to look, so the list grows and the severe ones hide among the minor ones. A weekly ranked list turns that tab into a short agenda: what is critical, what has a fix available, and what has been open longest.
How the scheduled job works
You add the job and the repository owner grants read access to its alerts. Each week the scheduled agent lists the open Dependabot alerts through the GitHub REST API, which can filter by severity and ecosystem. It groups them as critical, high, medium and low, and for each shows the package, the vulnerable range, the patched version if one exists, and the age of the alert. For a package without a patched version it queries the public OSV database for other advisories and notes them. It reads and reports; it never opens a pull request, merges or dismisses an alert.
Review and approval
Before the list reaches you, the department head agent checks it: does every count match the lines, is a dismissed or fixed alert still listed, and is a patched version marked as available when the advisory names one. Then you approve, edit or skip it, and nothing is delivered until you do. Ignore rules in the notes field keep known, accepted risks off the list.
What to do with it
Work the list top down. Start with the critical and high packages that have a patched version, since those are the quickest wins. For alerts with no fix, decide whether to pin, replace the package or accept the risk and write that down. Compare the counts week to week: a falling critical count means the habit is working.
Questions
Related jobs
Works from public sources: GitHub releases of the repositories you list
Automate a weekly digest of new releases of the tools you depend on
A weekly digest of new releases from the open source projects you depend on, with breaking changes flagged.
Connects to: GitHub repository (read Actions) (required)
Automate a daily CI failure digest from GitHub Actions
One daily digest of yesterday's failed Actions runs, grouped by workflow and failing step.
Works from files you share
Automate monthly API key and secret rotation reminders
A monthly list of keys past your rotation limit, with owner and age. It holds names and dates; no secret values are shared.