JS Security Audit
c0x12c/ai-toolkit
Audit JS/TS projects against NPM Security Guidelines covering project setup, dependency hygiene, CI/CD pipeline, Dependabot, and incident response.
Automated triage and fixing of Dependabot security vulnerabilities (IN-1189).
$ npx skills add linuxfoundation/insights --skill fix-vulns -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install linuxfoundation/insights fix-vulns --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/linuxfoundation/insights.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/fix-vulns .claude/skills/fix-vulns && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "fix-vulns" agent skill from https://github.com/linuxfoundation/insights/tree/main/.claude/skills/fix-vulns into .claude/skills/fix-vulns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-vulns", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/linuxfoundation/insights/tree/main/.claude/skills/fix-vulnsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add linuxfoundation/insights --skill fix-vulns -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install linuxfoundation/insights fix-vulns --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linuxfoundation/insights.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/fix-vulns .agents/skills/fix-vulns && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "fix-vulns" agent skill from https://github.com/linuxfoundation/insights/tree/main/.claude/skills/fix-vulns into .agents/skills/fix-vulns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-vulns", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add linuxfoundation/insights --skill fix-vulns -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install linuxfoundation/insights fix-vulns --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linuxfoundation/insights.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/fix-vulns .cursor/skills/fix-vulns && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "fix-vulns" agent skill from https://github.com/linuxfoundation/insights/tree/main/.claude/skills/fix-vulns into .cursor/skills/fix-vulns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-vulns", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/linuxfoundation/insights.git --path .claude/skills/fix-vulns--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add linuxfoundation/insights --skill fix-vulns -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install linuxfoundation/insights fix-vulns --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linuxfoundation/insights.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/fix-vulns .gemini/skills/fix-vulns && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "fix-vulns" agent skill from https://github.com/linuxfoundation/insights/tree/main/.claude/skills/fix-vulns into .gemini/skills/fix-vulns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-vulns", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install linuxfoundation/insights fix-vulnsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add linuxfoundation/insights --skill fix-vulns -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/linuxfoundation/insights.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/fix-vulns .github/skills/fix-vulns && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "fix-vulns" agent skill from https://github.com/linuxfoundation/insights/tree/main/.claude/skills/fix-vulns into .github/skills/fix-vulns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-vulns", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add linuxfoundation/insights --skill fix-vulns -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install linuxfoundation/insights fix-vulns --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linuxfoundation/insights.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/fix-vulns .opencode/skills/fix-vulns && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "fix-vulns" agent skill from https://github.com/linuxfoundation/insights/tree/main/.claude/skills/fix-vulns into .opencode/skills/fix-vulns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-vulns", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
fix-vulnsAutomated triage and fixing of Dependabot security vulnerabilities (IN-1189).
Fix Vulns is an agent skill from linuxfoundation/insights. Automated triage and fixing of Dependabot security vulnerabilities (IN-1189). Starts by asking which scope to tackle (critical, high, medium/low, or specific advisories) with checkboxes. Fetches open alerts, dedupes them, classifies each by origin (submodule vs local, dev-only vs runtime), then fans out one break-risk agent per package that must PROVE the update is safe for this codebase before any fix is applied. Applies safe fixes one at a time with incremental validation and ends with a report of what was…
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Security, covering Dependency management and Security review. It works with Git and pnpm. The repository describes itself as: Insights into the world's most critical open source software. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3df53b5. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadEditWriteGlobGrepAgentAskUserQuestionWebFetchmcp__playwright__*From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmgitghjqFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Fix Vulns loads about 3.8k tokens when it runs. Until then it costs about 227 tokens; SKILL.md has 1,873 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
v file the dev server needs is `frontend/.env` (not a repo-root `.env`). `.claude/settings.json` denies `Read` on `.env`cannot start after confirming `frontend/.env` exists (e.g. genuinely missing Tinybird/Auth0 vars, a port conflict), doallowed-tools: Bash, Read, Edit, Write, Glob, Grep, Agent, AskUserQuestion, WebFetch, mcp__playwright__*Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from linuxfoundation/insights at commit 3df53b5, republished under its MIT licence (© linuxfoundation). 1,873 words, ~3,801 tokens.
.claude/skills/fix-vulns/SKILL.md (or your agent's skills folder).You are triaging and fixing security vulnerabilities in the Insights repo. Walk through each phase in order. Safety rule that overrides everything else: no fix ships without both a safe break-risk verdict (Phase 3) and a green validation suite (Phase 4). Uncertainty is always risky, never safe.
Before doing anything else, ask the user which scope to tackle using AskUserQuestion with multiSelect checkboxes:
If the user picked "Specific advisories", parse the identifiers they wrote. If they were passed as skill arguments (e.g. /fix-vulns critical or /fix-vulns CVE-2026-1234), skip the question and use the arguments as scope.
Primary source (exact parity with the Dependabot dashboard):
gh api 'repos/linuxfoundation/insights/dependabot/alerts?state=open&per_page=100' --paginate \
--jq '.[] | {number, severity: .security_advisory.severity, pkg: .dependency.package.name,
scope: .dependency.scope, manifest: .dependency.manifest_path,
cve: .security_advisory.cve_id, ghsa: .security_advisory.ghsa_id,
range: .security_vulnerability.vulnerable_version_range,
patched: .security_vulnerability.first_patched_version.identifier,
summary: .security_advisory.summary}'The jq filter deliberately emits a stream of objects, not an array: with --paginate, gh runs the filter once per page, so an array-wrapped filter would produce one array per page and any single-value JSON parse would silently drop every page after the first.
Fallback if the token lacks security_events scope: pnpm audit --json from the repo root (note in the final report that alert numbers/dismissal parity is unavailable). Filter to the scope chosen in Phase 0.
Dedupe by GHSA id — the same advisory appears in both pnpm-lock.yaml and frontend/pnpm-lock.yaml; collapse into one work item (keep all alert numbers for the report).
Classify each unique package by dependency origin. Do NOT use pnpm why -r — it crashes in this workspace (tree-walker bug with the submodule packages). Instead, get the full consumer chains from audit paths:
pnpm audit --json | jq -r '.advisories | to_entries[]
| select(.value.module_name=="<pkg>")
| .value.findings[].paths[]'
# e.g. frontend>nuxt>@nuxt/devtools>launch-editor>shell-quote
# e.g. submodules__crowd.dev__services__libs__integrations>axios>form-dataBackup when the package has no advisory entry: grep -n '<pkg>' pnpm-lock.yaml frontend/pnpm-lock.yaml and inspect the surrounding entries — always search both lockfiles, a package can exist in only one of them. Classification:
submodule-origin — every path starts with submodules__crowd.dev__. Do NOT fix. Emit a CM-ticket stub (package, CVEs, why it belongs in crowd.dev) and a suggested dismissal command for the user to run:
gh api -X PATCH repos/linuxfoundation/insights/dependabot/alerts/<N> -f state=dismissed -f dismissed_reason=not_used -f dismissed_comment="Fix belongs in crowd.dev (CM-XXX)"dev-only — reachable only through devDependency chains (vitest, storybook, eslint, …). Fix, but note reduced urgency in the report.runtime — reachable from production code. Fix with priority.Record for each package: current locked version(s) (pnpm list <pkg> --depth Infinity or lockfile grep), fix target (patched from the alert), and whether the target crosses a semver major boundary.
Present a short triage table to the user before proceeding: package, severity, classification, current → target, major-hop yes/no.
For every fixable package (not submodule-origin), spawn one agent per package. When there are more than 3 packages, launch them in parallel in a single message. Include in each agent's prompt: the package name, current and target versions, GHSA/CVE ids, and the consumer chains from Phase 2 (the audit paths) — the agent must not re-derive them. Each agent's task — verbatim structure:
Determine whether updating
<pkg>from<current>to<target>can break the Insights codebase. You must produce evidence, not judgment calls. Steps:
- Usage audit — search
frontend/app/,frontend/server/,frontend/nuxt.config.ts,frontend/setup/, andworkers/for every import/require of<pkg>. List each file and the specific APIs/exports used. If nothing imports it directly, say so explicitly.- Consumer-range check (critical for transitive deps) — do NOT use
pnpm why -r; it crashes in this workspace. From the consumer chains you were given (audit paths), take each direct parent of<pkg>and read the version range it declares:jq '.dependencies["<pkg>"] // .devDependencies["<pkg>"] // .optionalDependencies["<pkg>"]' node_modules/.pnpm/<parent>@<version>/node_modules/<parent>/package.json(find the exact dir withls -d node_modules/.pnpm/<parent>@*). Check whether<target>satisfies EVERY parent's range. Any violation → verdict isrisky, no exceptions.- Changelog diff — fetch the changelog/release notes between
<current>and<target>(GitHub releases, CHANGELOG.md in the repo, or npm). List every breaking change and deprecation. Cross-check each against the APIs found in step 1 and the consumers found in step 2. A breaking change in an API nobody uses is noted but not blocking.- Reachability — is the vulnerable code path from
<ghsa>reachable in our deployment (SSR server, browser bundle, workers), or is it dev-machine/build-time only?- Verdict — return exactly this structure as your final message:
verdict:safe|risky|needs-humanevidence: bullet list backing the verdictreachability: one sentence for the reportquestion: only ifneeds-human— the specific question a human must answerRules: if you cannot obtain a changelog, cannot resolve consumer ranges, or the update crosses a semver major, the verdict is
risky(orneeds-humanwith a question) — NEVERsafe.saferequires positive evidence that no used API changed AND all consumer ranges are satisfied.
Collect all verdicts. Only safe packages proceed to Phase 4. risky and needs-human packages go to the final report with their evidence attached — do not attempt to "rescue" them yourself; that's the human's call.
This skill runs no git commands — no branch, no commit, no push. All fixes are edits to the working tree; the user reviews and ships them. Because of that, require a clean working tree before applying anything (git status --porcelain must be empty) — if it isn't, stop and ask the user to commit or stash first, so every change in the tree afterwards is attributable to this run and can be cleanly reverted with git checkout -- <file>.
Lockfile note (read this before touching anything): this workspace has two pnpm-lock.yaml files — the workspace-root one (pnpm-lock.yaml) and frontend/pnpm-lock.yaml. frontend is declared as a workspace member in pnpm-workspace.yaml, so the root lockfile is the live, authoritative one for frontend's deps too — a pnpm install from the repo root updates it correctly and pnpm-workspace.yaml overrides apply to it. frontend/pnpm-lock.yaml is a leftover standalone lockfile from before frontend joined the workspace (or from someone running pnpm install directly inside frontend/); it does not get regenerated by a root install and pnpm-workspace.yaml overrides do not apply to it. Treat any alert whose manifest_path is frontend/pnpm-lock.yaml as pointing at this stale file, not a second thing you need to fix — do not add a "pending standalone update" item for it and do not try to make the override apply there. Just verify the vulnerable version is gone from the root lockfile; note the stale duplicate once in the final report as a housekeeping item (candidate for deletion) rather than a per-alert follow-up.
Apply fixes one package at a time, in this strategy order:
package.json — only if the package is a direct dependency and the fix is within the same major.pnpm-workspace.yaml override for transitive deps (existing convention — see h3, form-data already there). Use a range ('>=x.y.z') rather than an exact pin where possible. Append new entries to the existing block with a trailing comment naming the GHSA id — do not reorder the existing overrides.pnpm.patchedDependencies only when no fixed release exists — this requires human confirmation first.After each package: pnpm install from the repo root, then confirm the vulnerable version is gone by grepping the regenerated root lockfile — do NOT use pnpm why for this (non-recursive from the root it misses frontend/-only deps and reports a false "not found"; recursive crashes in this workspace):
grep -n '<pkg>@' pnpm-lock.yaml
# every remaining occurrence must resolve to a version outside the vulnerable range
# (frontend/pnpm-lock.yaml is the stale standalone file above — do not expect or require the fix to show up there)After the whole batch, run the full validation suite from frontend/:
pnpm tsc-check && pnpm lint && pnpm test && pnpm buildOn failure, bisect: revert all fixes, re-apply one at a time running the full suite each round until the offender is found. Revert the offender, downgrade its verdict to needs-human with the failure output attached, and re-validate the remaining set. Never ship a batch that isn't fully green.
Runtime smoke test (after the suite is green) — the build passing doesn't prove the app boots; dependency swaps can fail only at runtime. Start the dev server and verify the app actually loads using the Playwright MCP browser tools:
mcp__playwright__browser_navigate (or check via ToolSearch) before doing anything else in this section. If it's not connected, stop here and report the smoke test as skipped with reason "Playwright MCP not connected in this session" — do NOT let this get conflated with the env-file check below; they are independent failure modes and the report must name which one actually happened.frontend/.env (not a repo-root .env). .claude/settings.json denies Read on .env/.env.*, so don't try to Read it — you don't need its contents, only its presence. Check with ls frontend/.env (or test -f frontend/.env, an allowed Bash call) before concluding it's missing. pnpm dev loads it itself; you never need to see the values.frontend/: pnpm dev in the background; wait for the server to listen on http://localhost:3000.mcp__playwright__browser_navigate to http://localhost:3000, then mcp__playwright__browser_snapshot — confirm the page renders real content (not a blank page, error overlay, or Nuxt error screen).mcp__playwright__browser_click, don't hardcode a slug) and confirm it renders.mcp__playwright__browser_console_messages — any new error-level messages are treated like a suite failure: bisect to find the offending package, revert it, downgrade to needs-human.If the dev server still cannot start after confirming frontend/.env exists (e.g. genuinely missing Tinybird/Auth0 vars, a port conflict), do NOT silently skip — state prominently in the final report that the runtime smoke test could not run and why, and do NOT claim the env file is missing unless ls frontend/.env actually found nothing. The report must distinguish three distinct causes if the smoke test didn't run: (a) Playwright MCP unavailable, (b) frontend/.env genuinely absent, (c) dev server failed to boot for another reason (paste the actual startup error).
The fixes stay as uncommitted working-tree changes — reviewing and shipping them is the user's job, not this skill's. Do NOT run git branch, git commit, git push, or gh pr create, and do not generate commit messages or PR descriptions. End with a summary the user can act on without scrolling back:
runtime/dev-only) → reachability note (from the break-risk agent) — plus git diff --stat and the validation + smoke-test result.risky/needs-human package with its one-line reason and evidence pointer.frontend/pnpm-lock.yaml housekeeping note (only if any fixed alert's manifest_path pointed at it): one line noting it's a stale standalone lockfile not kept in sync by root installs, and that it's a candidate for deletion — not a per-alert "pending" follow-up.safe verdict and a green suite (including the runtime smoke test when the dev server can run).risky — a missing changelog is not permission, it's a blocker.submodules/**.© linuxfoundation, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/fix-vulns of linuxfoundation/insights.
Open the folder on GitHubat commit 3df53b5
Fix Vulns next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Fix Vulns this skilllinuxfoundation/insights | 280 | — | ~3.8k | Automated safety check: Notes | MIT | |
| JS Security Auditc0x12c/ai-toolkit | 106 | — | ~1.6k | Automated safety check: Warn | None | |
| Audit Threadnubjs/nub | 4.4k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Trailmark Graph Evolutiontrailofbits/skills | 7.4k | — | ~3.4k | Automated safety check: Pass | CC-BY-SA-4.0 | |
| Native Dependency Updatemono/SkiaSharp | 5.6k | — | ~4.1k | Automated safety check: Pass | MIT | |
| npm Supply Chain Securitybodadotsh/npm-security-best-practices | 859 | — | ~1k | Automated safety check: Warn | MIT |
c0x12c/ai-toolkit
Audit JS/TS projects against NPM Security Guidelines covering project setup, dependency hygiene, CI/CD pipeline, Dependabot, and incident response.
nubjs/nub
A skill your agent uses when running a compatibility/parity AUDIT — enumerating where nub diverges from a reference it claims parity with (pnpm CLI grammar, a lockfile format, a Node behavior, a…
trailofbits/skills
Compares Trailmark code graphs at two snapshots, such as commits, tags or directories, to surface attack paths, blast radius and taint changes that text diffs miss.
mono/SkiaSharp
Update native dependencies (libpng, libexpat, zlib, libwebp, harfbuzz, freetype, libjpeg-turbo, etc.) in SkiaSharp's Skia fork.
bodadotsh/npm-security-best-practices
Applies safer package manager defaults and dependency vetting to JavaScript and TypeScript projects to reduce supply-chain attack risk.
anthropics/claude-plugins-official
Scans a whole codebase or a set of changes for security issues, and turns findings into verified patch files that you apply yourself.
linuxfoundation/insights
Add event tracking calls to Vue/Nuxt components in the Insights app using the useTrackEvent composable.
linuxfoundation/insights
Review a pull request against Insights architecture standards — fetches PR diff, verifies previous comments are addressed, validates PR metadata (title, branch, JIRA, size), runs a code-standards…
linuxfoundation/insights
Record an architecture decision as an ADR in api/docs/arch/adr/.
linuxfoundation/insights
Recover from missing DCO sign-off on commits. An agent skill from linuxfoundation/insights.
linuxfoundation/insights
Full development environment setup from scratch — prerequisites, dependencies, .env file, optional local PostgreSQL database (for auth/collections/chat work), and dev server.
linuxfoundation/insights
Run the docs site, blog, or Storybook locally. An agent skill from linuxfoundation/insights.
Categories
Automated triage and fixing of Dependabot security vulnerabilities (IN-1189). Fix Vulns is an agent skill from linuxfoundation/insights. Automated triage and fixing of Dependabot security vulnerabilities (IN-1189).
Fix Vulns fits situations like: the user says fix vulns; fix vulnerabilities; dependabot alerts; security audit fix.
Run `npx skills add linuxfoundation/insights --skill fix-vulns -a claude-code`. Or copy the skill folder (.claude/skills/fix-vulns in linuxfoundation/insights) into .claude/skills/fix-vulns in your project. Claude Code loads it when a task matches its description.
Run `npx skills add linuxfoundation/insights --skill fix-vulns -a codex`. Or copy the skill folder (.claude/skills/fix-vulns in linuxfoundation/insights) into .agents/skills/fix-vulns in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add linuxfoundation/insights --skill fix-vulns -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/fix-vulns, .gemini/skills/fix-vulns, .github/skills/fix-vulns and .opencode/skills/fix-vulns in your project.
Going by SKILL.md and its folder, Fix Vulns needs the command-line tools its instructions call (pnpm, git, gh and jq). Its frontmatter pre-approves these tools: Bash, Read, Edit, Write, Glob, Grep, Agent, AskUserQuestion, WebFetch, mcp__playwright__*.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file; pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Fix Vulns is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Fix Vulns: JS Security Audit (c0x12c/ai-toolkit, 106 stars), Audit Thread (nubjs/nub, 4.4k stars), Trailmark Graph Evolution (trailofbits/skills, 7.4k stars) and Native Dependency Update (mono/SkiaSharp, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
linuxfoundation (a GitHub organization) maintains it in linuxfoundation/insights, which has 280 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 1, 2026.
Source: linuxfoundation/insights on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.