Skip to content
Back to skills

Dependency Advisory Watch

ASecurity

Scans root uv.lock and package-lock.json files with the pinned osv-scanner CLI and emits deterministic advisory records. Opt-in: copy this directory into <home>/skills/dependency-advisory-watch/ and install osv-scanner.

  • 6 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 1, 2026
developmentjavascriptpythongojavabashdockerdebugginggitsecurity

Works with

  • cursor
  • cli

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned September 1, 2026

npx -y skills add jasoncarreira/mimir --skill dependency-advisory-watch --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dependency Advisory Watch?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dependency Advisory Watch
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jasoncarreira-dependency-advisory-watch/badge)](https://www.skillsdirectory.com/skills/jasoncarreira-dependency-advisory-watch)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dependency-advisory-watch
description: "Scans root uv.lock and package-lock.json files with the pinned osv-scanner CLI and emits deterministic advisory records. Opt-in: copy this directory into <home>/skills/dependency-advisory-watch/ and install osv-scanner."
env:
  optional:
    - name: ROOT_DIR
      description: "Repository root to scan (default: cwd). Must contain uv.lock and/or package-lock.json at the root."
      example: "/path/to/repo"
    - name: OSV_SCANNER
      description: "osv-scanner executable (default: osv-scanner). Must be installed and in PATH or an absolute path."
      example: "/usr/local/bin/osv-scanner"
---

# Dependency Advisory Watch

<!-- desc: Scans Python and npm lockfiles for OSV vulnerabilities and emits dependency_advisory events -->

This is an **opt-in poller skill** that ships with mimir under
`mimir/optional-skills/` but is NOT auto-installed. It monitors your
project's dependencies for known vulnerabilities using OSV (Open Source
Vulnerabilities).

## Installation

1. **Install osv-scanner v2.4.0** — the poller invokes the v2-only `scan`
   subcommand. The shipped `dockerfile.fragment` is the canonical pinned
   container installation and supports `amd64` and `arm64`. For a direct
   installation on Linux:
   ```bash
   # Option A: pinned binary release (set amd64 or arm64)
   OSV_SCANNER_ARCH=amd64
   curl -fsSL \
     "https://github.com/google/osv-scanner/releases/download/v2.4.0/osv-scanner_linux_${OSV_SCANNER_ARCH}" \
     -o /usr/local/bin/osv-scanner
   chmod 0755 /usr/local/bin/osv-scanner

   # Option B: pinned Go install
   go install github.com/google/osv-scanner/v2/cmd/osv-scanner@v2.4.0
   ```

2. **Copy the skill to your agent home:**
   ```bash
   cp -r mimir/optional-skills/dependency-advisory-watch <home>/skills/
   ```

3. **Configure (optional):**
   - `ROOT_DIR` — path to the repository to scan (default: current working directory)
   - `OSV_SCANNER` — path to osv-scanner binary (default: `osv-scanner` from PATH)

4. **Bring it live:**
   ```bash
   reload_pollers
   # → "reload_pollers ok: N poller(s) registered — dependency-advisory-watch, ..."
   ```

## Cadence

Runs at **06:00 UTC daily** (`0 6 * * *`). This bounded UTC cadence provides
a daily morning scan at a consistent time regardless of agent timezone.

## State & Cursor Behavior

The poller uses a cursor file (`dependency-advisory-cursor.json`) in the
framework-injected `STATE_DIR` to track seen advisory IDs:

- **First run**: seeds the cursor with current advisories but emits NO events
  (the agent isn't woken for pre-existing vulnerabilities)
- **Subsequent runs**: emits one event per NEW advisory since last scan
- **Resolved advisories**: when an ID disappears from the scan, it's removed
  from the cursor silently
- **Reappearing advisories**: if a previously-seen ID reappears (e.g. downgrade),
  it's emitted as a new event

Cursor updates are atomic (written to temp file then renamed) and only occur
after a fully successful scan. On failure, the prior cursor is preserved.

## Clean-Scan Silence

A scan with **no new vulnerabilities** produces zero events. The poller exits 0
and logs `poller_complete{events_emitted=0}` to the events log. This provides
low-noise operation — you only hear about new problems.

If vulnerabilities ARE found, each emits one event with:
- `package`, `current_version`, `affected_range`, `severity`
- `advisory_url` (links to OSV.dev)
- `remediation_version` (if available)

## Failure Observability

| Exit Code | Meaning | Event |
|-----------|---------|-------|
| 0 | Scan completed (with or without findings) | `poller_complete` |
| 2 | Scanner executable missing, transport error, or JSON parse failure | `poller_nonzero_exit` with stderr |

Diagnostic output from the scanner (errors, warnings) goes to stderr and is
captured as `poller_stderr` events for debugging.

## OSV Coverage Boundary

This poller scans Python and npm lockfiles:
- `uv.lock` (Python/uv)
- `package-lock.json` (JavaScript/npm)

Coverage is limited to what OSV.dev supports for these lockfile formats.
The poller does NOT scan:
- Dockerfiles or container images
- Git dependencies or submodules
- System packages
- Other language ecosystems (even if present in mixed repos)

The skill normalizes osv-scanner's JSON output into deterministic,
sorted events with stable IDs for reliable cursor tracking.

## Security

- **No static secrets** — the skill has no required or optional secrets
- **No credential files** — operates entirely on public OSV data
- **`ROOT_DIR` configuration** — repository path is explicit via env var,
  not hardcoded

Files in this skill

  • SKILL.md4.5 KB
  • dockerfile.fragment466 B
  • pollers.json646 B
  • scripts/poller.py6 KB
  • scripts/scanner.py5.1 KB
  • tests/conftest.py1.7 KB
  • tests/test_dependency_advisory_poller.py11.9 KB
  • tests/test_scanner.py3.6 KB
  • tests/test_smoke.py3.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.