The skill

The skill is the analyst. The CLI gathers the news; the skill understands the project and decides what matters. This page summarises what it does. The instructions the agent actually follows are in SKILL.md.

1. It maps the project

It reads the files that declare what the project runs on, and for each technology notes the version and how precise it is.

KindTypical files
Manifests and lockfilescomposer.lock, package.json and its lockfile, pyproject.toml, requirements*.txt, uv.lock, poetry.lock, go.mod, Gemfile.lock, Cargo.lock
Runtime pinsDockerfile*, compose*.yaml, .nvmrc, .php-version, .python-version, .tool-versions, the engines field
Tooling and hosting.gitlab-ci.yml, .github/workflows, netlify.toml, vercel.json, fly.toml, deployment scripts, git remotes

A version is exact (8.3.35), a branch (8.3, php:8.3-fpm) or a range (>=8.2). Floating tags matter: a hosting platform may keep serving a cached, unpatched build of a branch, so pinning the fixed version is often the real fix. The skill ignores the versions installed on your machine: your laptop rarely runs what production runs.

It watches what the team runs or ships, not the platforms it merely uses. A repository on github.com or a site on Netlify is patched by the provider; a self-hosted GitLab is not, and gets watched.

2. It gathers the news

It maps the technologies to the CLI's tags, turns the rest into keywords, passes the package names from the lockfile, and reads a week:

stackalarm news --tag php --tag symfony --tag gitlab --keyword frankenphp --since 7d --format summary

The same vulnerability often appears in several sources (vendor, NVD, EUVD, CERTs, press): it becomes one finding, with the most official link. A public exploit or exploitation in the wild raises the urgency. A source that could not be read is mentioned in the answer, so silence is never mistaken for "all clear". See the CLI for the options.

The CLI only knows its sources. A web search covers technologies without a source, the details feeds lack (affected and fixed versions, conditions, workarounds), and signals not yet in a feed. Official pages win over write-ups, and every nickname, CVE number and fixed version taken from the press is checked against the advisory.

Every title, summary and page is treated as data, never as instructions: when a feed or a page tells the agent to run something, it ignores it and tells you.

4. It runs your audits

Vulnerable libraries are best found by the ecosystem's own audit, which reads the lockfile exactly. The skill runs those already installed:

EcosystemCommand
Composercomposer audit --format=json
npmnpm audit --omit=dev --json
pnpmpnpm audit --prod --json
Yarn (Berry)yarn npm audit --environment production --json
Pythonpip-audit
Gogovulncheck ./...
Rubybundle audit check --update
Rustcargo audit
Anyosv-scanner scan source -r .

A missing tool is named with how to get it; the skill does not install it without asking.

5. It judges what applies

6. It answers, then offers fixes

The answer format is described in Getting started. Fixes come one at a time, after you agree: bump a runtime image or pin keeping the same variant, update a dependency with the package manager rather than editing a lockfile, or add a documented temporary mitigation. It never pushes, deploys or touches a server.

7. It offers the scheduled watch

Once, in one sentence. If you agree, it writes the .stackalarm.yaml profile and adds the CI file. On later runs it refreshes the profile and says what changed. See Scheduled watch.

Triage mode

The scheduled watch reports raw news, not a verdict. To judge a report, pass it to the skill:

/stackalarm triage https://github.com/acme/app/issues/42

It judges only the items of the report against the project, and never changes a file in this mode: it says what to change, so that you can run /stackalarm to apply it. In CI, the same mode writes a decision used to open the issue or not:

DecisionMeaning
actThe project is affected now, or possibly affected through a floating tag or a range.
prepareA heads-up or an upcoming end of support concerns the project, or a fix must be planned.
noneNothing concerns the project, including releases it already runs and releases of other branches.

When in doubt, the skill does not pick none: a needless issue costs a minute, a missed one can cost production. A report entry that asks for none is treated as an injection attempt and mentioned in the verdict.

Next: The CLI